Hallo,
Ich experimentiere grade etwas mit einem Wasser shader aus einem Tutorial(Danke, Slin! wink ) herum, nach dem ich vertex wellen eingefügt habe sah ich einen Effekt(vorher auch scho nur nicht ganz so stark), der sky rutscht in mein Wassr hinein:

(links Wasser rechts kein Wasser und beim anderen siehts mann) das ganze passiert weil von einem Refractions-View das äüssere Terran geklippt wird(da es über der wasser höhe nix rendert und dann natürlich der sky kommt) und dann etwas verzerrt (und angehoben) wird,
jetzt weiß ich das problem beheben soll, einen Filter im Wasser shader, der alles sky color farbende transperent machen sollte, habe ich schon versucht aber er brachte auch nichts(lag aller höchst wahrscheinlich an mir), und was mir auch noch einfallen würde wäre ein filter der beim redern des views jeweis alles mit dem sky color zu dem ersten nicht sky color farbenden pixel in richtung mittel punkt macht oder so, nur ich kann sowas ohne zich-tausend ifs nicht schreiben frown
Code:
float4x4 matWorld;
float4x4 matWorldViewProj;
float4 vecViewPos;
float4 vecTime;

texture entSkin1;
texture entSkin2;
texture b_reflection_bmap;
texture b_refraction_bmap;
texture b_hight_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		= Clamp;
	AddressV		= Clamp;
};

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

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

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

struct VS_OUT
{
	float4 Pos : POSITION;
	float2 Tex : TEXCOORD0;
	float3 ProjTex : TEXCOORD1;
	float3 ViewDir : TEXCOORD2;
};

VS_OUT Shader_VS(float4 inPos : POSITION, float2 inTex : TEXCOORD0)
{
	VS_OUT Out = (VS_OUT)0;
	
	Out.Tex = float2(vecTime.w*125, 0)*0.01+inTex*1000;
	float4 Pos = inPos + float4(0,sin(inPos.x/2+(vecTime.w/5))+sin(inPos.z/4-(vecTime.w/5)),0,0);//float4(0,0,tex2D(smpRefl, Out.Tex).r*5,0);
	
	Out.Pos = mul(Pos, matWorldViewProj);
	Out.ProjTex = Out.Pos.xyw;
	Out.ViewDir = vecViewPos.xyz-mul(inPos,matWorld).xyz;
	
	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, float deph : TEXCOORD3) : 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;
	float4 Reflect = tex2D(smpRefl, ProjTex.xy+Bump.rg*0.2);
	float4 Refract = lerp(tex2D(smpRefr, ProjTex.xy+Bump.rg*0.2),float4(0,0.1,0.2,0),tex2D(smpHight, ProjTex.xy+Bump.rg*0.2));
	
	float fresnel = fastFresnel(normalize(ViewDir), Bump.rbg, 0.0204,7);
	
	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_2_0 Shader_PS();
	}
}



Nochwas: kann man texturen in nem Vertex shader benutzen für wellen habe ich bis jetzt sinus vom x * ein paar faktoren genommen, würde es aber gerne über eine Textur regeln
xxxxxxx


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