|
Sky rutscht mit ins Wasser
#369932
05/09/11 14:48
05/09/11 14:48
|
Joined: Jan 2011
Posts: 797 Da wo du nicht bist! Muhahaha!
xxxxxxx
OP
User
|
OP
User
Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
|
Hallo, Ich experimentiere grade etwas mit einem Wasser shader aus einem Tutorial(Danke, Slin! ) 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
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!
|
|
|
Re: Sky rutscht mit ins Wasser
[Re: xxxxxxx]
#371265
05/19/11 16:59
05/19/11 16:59
|
Joined: Jan 2011
Posts: 797 Da wo du nicht bist! Muhahaha!
xxxxxxx
OP
User
|
OP
User
Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
|
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. ), 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 hier der shader-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! 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!
|
|
|
Re: Sky rutscht mit ins Wasser
[Re: Rondidon]
#371573
05/22/11 17:11
05/22/11 17:11
|
Joined: Apr 2007
Posts: 3,751 Canada
WretchedSid
Expert
|
Expert
Joined: Apr 2007
Posts: 3,751
Canada
|
Frag doch mal Hummel. Bei Shadern ist er wohl Adresse Nr. 1 Vor zwei Jahren hätte man noch "Frag doch mal Slin" geschrieben ^^
Shitlord by trade and passion. Graphics programmer at Laminar Research. I write blog posts at feresignum.com
|
|
|
Re: Sky rutscht mit ins Wasser
[Re: WretchedSid]
#371599
05/23/11 07:03
05/23/11 07:03
|
Joined: Dec 2003
Posts: 1,225 germany
gri
Serious User
|
Serious User
Joined: Dec 2003
Posts: 1,225
germany
|
Vor 5 Jahren hätte man noch "Frag doch Ello" geschrieben.
"Make a great game or kill it early" (Bruce Shelley, Ensemble Studios)
|
|
|
Re: Sky rutscht mit ins Wasser
[Re: gri]
#371661
05/23/11 23:30
05/23/11 23:30
|
Joined: Feb 2010
Posts: 482 in deinem Kopf
Otter
Senior Member
|
Senior Member
Joined: Feb 2010
Posts: 482
in deinem Kopf
|
Frag doch mal Hummel. Bei Shadern ist er wohl Adresse Nr. 1 Jap, Hummel kann ich wirklich empfehlen,... er ist ne echte granate! .... Oh! Und seine Shader sind auch fantastisch.
Be my UBB-Buddy, without any reason!
|
|
|
Re: Sky rutscht mit ins Wasser
[Re: Otter]
#371681
05/24/11 10:04
05/24/11 10:04
|
Joined: Mar 2006
Posts: 2,252
Hummel
Expert
|
Expert
Joined: Mar 2006
Posts: 2,252
|
Jap, Hummel kann ich wirklich empfehlen,... er ist ne echte granate! Wieder eine bei der ich mich nicht dran erinnern kann...verdammter Alkohol-.- @3.5xx: Du musst deine Glanzpunkte natürlich noch iwo mit dazu addieren, versuchs mal damit:
[...]
float i;
float specularity = 0;
for(i=0;i<=7;i++)
{
float3 lightdir = normalize(vecLightPos[i].xyz-inPos);
float3 viewdir2 = normalize(vecViewPos-inPos);
float3 halfvec = normalize(viewdir2+lightdir);
specularity += pow(saturate(dot(halfvec, Normal)),20.f);
}
Reflect += specularity ;
[...]
|
|
|
Re: Sky rutscht mit ins Wasser
[Re: Hummel]
#371686
05/24/11 10:40
05/24/11 10:40
|
Joined: Apr 2007
Posts: 3,751 Canada
WretchedSid
Expert
|
Expert
Joined: Apr 2007
Posts: 3,751
Canada
|
Jap, Hummel kann ich wirklich empfehlen,... er ist ne echte granate! Wieder eine bei der ich mich nicht dran erinnern kann...verdammter Alkohol-.- Kommt davon wenn man den ganzen Tag nur Met trinkt =/
Shitlord by trade and passion. Graphics programmer at Laminar Research. I write blog posts at feresignum.com
|
|
|
Re: Sky rutscht mit ins Wasser
[Re: WretchedSid]
#371718
05/24/11 16:16
05/24/11 16:16
|
Joined: Jan 2011
Posts: 797 Da wo du nicht bist! Muhahaha!
xxxxxxx
OP
User
|
OP
User
Joined: Jan 2011
Posts: 797
Da wo du nicht bist! Muhahaha!
|
Danke Hummel, ich habe es bereits getan, nur hab warum auch immer die eine Zeile nicht geposted^^ Bingt genau das gleiche nur wie das andere nur in wieß(weil spectularity ja ein float ist). so jetzt meine Probleme: 1. Die Licht reflexion findet irgend wie nicht in richtung kamera statt, es sollte so wie in dem Stück sky ausehen was ich gepostet habe. 2. Punkt die "Normalentoleranz"(ich meine dem Bereich in dem Licht reflectiert wird) ist zu groß. 3. Ich weiß nicht ob es durch Punkt 2 schon behoben wird, aber der sichtbare Lichtkegel(also der beleuchtete Teil auf dem Wasser) ist zu breit.
Ich hoffe ihr(oder Hummel) könnt mir helfen! xxxxxxx
Last edited by xxxxxxx; 05/24/11 16:17.
Es ist immer wieder erstaunlich, dass Leute die riesen Scripte schreiben die einfachsten sachen nicht können zb. mich mit SIEBEN x zu schreiben!
|
|
|
|