0 registered members (),
1,209
guests, and 0
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Spotlight vs. Dynamic light
[Re: Random]
#412153
11/23/12 13:28
11/23/12 13:28
|
Joined: May 2009
Posts: 5,370 Caucasus
3run
OP
Senior Expert
|
OP
Senior Expert
Joined: May 2009
Posts: 5,370
Caucasus
|
I tried to you point lights, but I got some problems.. Here are the screens: One: Two: Looks like point lights are too weak or something?? I used large lightrange, as you can see on debug screen.
|
|
|
Re: Spotlight vs. Dynamic light
[Re: 3dgs_snake]
#412155
11/23/12 13:40
11/23/12 13:40
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
#define SpotlightArc 10.0f // Spotlight-Cone-Arc, ~(180 / Angle)^2 || 4 = 90°; 16 = 45°
#define SpotlightArc2 9.0f // == SpotlightArc - 1
//Variables
float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecFog;
float4 vecTime;
float4 vecColor;
float4 vecViewDir;
float4 vecViewPos;
float4 vecSunDir;
float4 vecSunColor;
float4 vecLight;
float4 vecLightPos[8];
float4 vecLightDir[8];
float4 vecLightColor[8];
float fAlpha;
float fAmbient;
//Textures
texture entSkin1;
//Sampler
sampler colorMap = sampler_state
{
Texture = (entSkin1);
AddressU = Wrap;
AddressV = Wrap;
MagFilter = Linear;
MinFilter = Linear;
MipFilter = Linear;
};
//Structs
struct VS_TO_PS // Output to the pixelshader
{
float4 Pos : POSITION;
float Fog : FOG;
float2 Tex0 : TEXCOORD0;
float3 WPos : TEXCOORD1;
float3 Norm : TEXCOORD2;
};
//Vertexshader
VS_TO_PS VS_v0( float4 inPos : POSITION,
float3 inNormal : NORMAL,
float2 inTex0 : TEXCOORD0 )
{
VS_TO_PS Out;
//Do transformations
Out.Pos = mul(inPos,matWorldViewProj);
//Pass the Texcoords
Out.Tex0 = inTex0;
//Vertexposition in worldspace
Out.WPos = mul(inPos,matWorld);
//Vertexnormal
Out.Norm = normalize(mul(inNormal,matWorld));
//Fog
Out.Fog = 1 - (distance(Out.WPos,vecViewPos)-vecFog.x) * vecFog.z;
return Out;
}
//Pixelshader
float4 PS_p0( VS_TO_PS In ) : COLOR
{
float3 LightDir;
float3 Diffuse = fAmbient+saturate(dot(-vecSunDir,In.Norm))*vecSunColor;
float attenuation = 0;
for(int i = 0; i < 8; i++)
{
LightDir = normalize(vecLightPos[i] - In.WPos);
attenuation = saturate(1.0f - length(LightDir/vecLightPos[i].w));
if(vecLightDir[i].w > 0) // Spotlight?
attenuation = saturate(attenuation * dot(-normalize(vecLightDir[i].xyz), LightDir) * SpotlightArc - SpotlightArc2);
Diffuse += saturate(dot(normalize(LightDir),In.Norm))*vecLightColor[i]*attenuation;
}
float4 Color = tex2D(colorMap,In.Tex0);
Color.rgb *= Diffuse;
Color.a = step(0.5,Color.a);
return Color;
}
//////////////////////////////////////////////////////////////////
technique Lighting
{
pass one
{
AlphaTestEnable = True;
zWriteEnable = true;
VertexShader = compile vs_3_0 VS_v0();
PixelShader = compile ps_3_0 PS_p0();
}
}
technique fallback { pass one { } }
This version of the shader uses entity.ambient as ambient brightness only (and supports now 8 lights). This should work for making things darker @3run did you set the *entity.red green and blue high enough? This controlls the light color and brightness. EDIT: * I mean the entity which you're using as pointlight. EDIT#2: I've tested it, the pointlight works fine, I guess you left the entity.red / green / blue at default.
Last edited by Kartoffel; 11/23/12 13:49.
POTATO-MAN saves the day! - Random
|
|
|
Re: Spotlight vs. Dynamic light
[Re: 3run]
#412167
11/23/12 15:12
11/23/12 15:12
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
well if it isn't the light color, then the light is too near to the surface.
POTATO-MAN saves the day! - Random
|
|
|
Re: Spotlight vs. Dynamic light
[Re: 3run]
#412170
11/23/12 15:25
11/23/12 15:25
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
no problem let me know if theres somthing else I can help you with.
POTATO-MAN saves the day! - Random
|
|
|
Re: Spotlight vs. Dynamic light
[Re: Random]
#412197
11/23/12 20:03
11/23/12 20:03
|
Joined: Jun 2009
Posts: 2,210 Bavaria, Germany
Kartoffel
Expert
|
Expert
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
|
Potato-man saves the day! haha, I've got to use that as my new signature
POTATO-MAN saves the day! - Random
|
|
|
Re: Spotlight vs. Dynamic light
[Re: Random]
#412315
11/25/12 17:17
11/25/12 17:17
|
Joined: Feb 2010
Posts: 886
Random
User
|
User
Joined: Feb 2010
Posts: 886
|
Kartoffel, this is a little code pice by "grafton" from aum 71:
BMAP* projectiontex = "Spotlight1.jpg";
VECTOR temp_vec;
function mtlProjection_event()
{
float pTexAdj[16] = { 0.5, 0.0, 0.0, 0.0, 0.0,-0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 };
pTexAdj[12] = 0.5 + (0.5/(float)bmap_width(projectiontex));
pTexAdj[13] = 0.5 + (0.5/(float)bmap_height(projectiontex));
mat_set(Levelgeometrie_bump.matrix,matViewProj);
mat_multiply(Levelgeometrie_bump.matrix,pTexAdj);
}
MATERIAL* mtlProjView =
{
effect = " technique DepthTechnique { pass p0 { }}";
event = mtlProjection_event;
flags = ENABLE_VIEW;
}
VIEW* ProjectionView =
{
material = mtlProjView;
flags = VISIBLE;
}
function initstages_startup()
{
ProjectionView.stage = camera;
}
I was wondering if I could attach an projection texture (from the spotlight) to your shader with this. But it didn`t work. Do you know why it didn`t work?
|
|
|
|