Neues Problem(vergässt das andere Zeug, Vertex-Wellen will ich nichtmehr und nach einer neuen Normalmap hat sich das andere Problem auch verflüchtigt. laugh ), eine Lichtreflexion kriege ich nicht allzu schön bzw. nur total hässlich hin.

diese weißen teile sind lichtquellen und das Terrain hat einen normalmapping shader laugh
hier der shader-code
Code:
float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecViewPos;
float4 vecTime;
float4 vecLightColor[8];
float4 vecLightPos[8];
float3x3 matTangent;

texture entSkin1;
texture b_reflection_bmap;
texture b_refraction_bmap;

sampler2D smpNormal = sampler_state
{
	Texture = <entSkin1>;
	
	MinFilter	= linear;
	MagFilter	= linear;
	MipFilter	= linear;
	
	AddressU		= Wrap;
	AddressV		= Wrap;
};

sampler2D smpRefl = sampler_state
{
	Texture = <b_reflection_bmap>;
	
	MinFilter	= linear;
	MagFilter	= linear;
	MipFilter	= linear;
	
	AddressU		= Mirror;
	AddressV		= Mirror;
};

sampler2D smpRefr = sampler_state
{
	Texture = <b_refraction_bmap>;
	
	MinFilter	= linear;
	MagFilter	= linear;
	MipFilter	= linear;
	
	AddressU		= Clamp;
	AddressV		= Clamp;
};

struct VS_OUT
{
	float4 Pos : POSITION;
	float2 Tex : TEXCOORD0;
	float3 ProjTex : TEXCOORD1;
	float3 ViewDir : TEXCOORD2;
	
	float3 WorldPos : TEXCOORD3;
	float3 tangent0 : TEXCOORD4;
	float3 tangent1 : TEXCOORD5;
	float3 tangent2 : TEXCOORD6;
};

VS_OUT Shader_VS(float4 inPos : POSITION, float2 inTex : TEXCOORD0, float3 inTangent : TEXCOORD2, float3 inNormal : NORMAL)
{
	VS_OUT Out = (VS_OUT)0;
	
	Out.Tex = float2(vecTime.w*125, 0)*0.01+inTex*1000;
	float4 Pos = inPos;
	
	Out.Pos = mul(Pos, matWorldViewProj);
	Out.ProjTex = Out.Pos.xyw;
	Out.ViewDir = vecViewPos.xyz-mul(inPos,matWorld).xyz;
	
	inNormal = -inNormal;
	
	Out.tangent0 = mul(inTangent, matWorld);
	Out.tangent1 = mul(cross(inTangent, inNormal), matWorld);
	Out.tangent2 = mul(inNormal, matWorld);
	
	Out.WorldPos = mul(inPos, matWorld);
	
	return Out;
}

float fastFresnel(float3 I, float3 N, float R0, float power)
{
	return R0+(1.0-R0)*pow(1.0-dot(I,N),power);
}

float4 Shader_PS(float2 inTex : TEXCOORD0, float3 ProjTex : TEXCOORD1, float3 ViewDir : TEXCOORD2, float3 inPos : TEXCOORD3, float3 tangent0 : TEXCOORD4, float3 tangent1 : TEXCOORD5, float3 tangent2 : TEXCOORD6) : COLOR
{
	ProjTex.xy = ProjTex.xy/ProjTex.z;
	ProjTex.xy = ProjTex.xy*0.5+0.5;
	
	float4 Bump = tex2D(smpNormal, inTex/500)*2.0-1.0;
	
	matTangent[0] = tangent0;
	matTangent[1] = tangent1;
	matTangent[2] = tangent2;
	float4 SpecNormal = Bump;
	float3 Normal = SpecNormal.rgb*5.0-2.50;
	Normal = mul(Normal, matTangent);
	Normal = normalize(Normal);

	
	float4 Reflect = tex2D(smpRefl, ProjTex.xy+Bump.rg*0.2);
	float4 Refract = tex2D(smpRefr, ProjTex.xy+Bump.rg*0.2);
	Refract = lerp(Refract,float4(0,0.1,0.2,0.5),0.3);
	
	float i;
	for(i=0;i<=7;i++)
	{
		float3 lightdir = normalize(inPos-vecLightPos[i].xyz);
		float3 viewdir2 = normalize(inPos-vecViewPos);
		float3 halfvec = normalize(viewdir2+lightdir);
		float specularity = saturate(dot(halfvec, Normal));
	}
	
	float fresnel = fastFresnel(normalize(ViewDir), Bump.rbg, 0.0204,5);
	float4 Color = lerp(Refract,Reflect,fresnel);
	Color.a = 1.0;
	return Color;
}

technique tech_00
{
	pass pass_00
	{
		CullMode = None;
		
		VertexShader = compile vs_2_0 Shader_VS();
		PixelShader = compile ps_3_0 Shader_PS();
	}
}

Ich habe versucht Spectularty Light dem ganzen hinzuzufügen um einen solchen effect hinzukriegen. nur das es kein skycube sein soll! tongue brachte leider nicht viel.

xxxxxxx

Last edited by xxxxxxx; 05/19/11 17:00.

Es ist immer wieder erstaunlich, dass Leute die riesen Scripte schreiben die einfachsten sachen nicht können zb. mich mit SIEBEN x zu schreiben! tongue