Gamestudio Links
Zorro Links
Newest Posts
Zorro version 3.0 prerelease!
by TipmyPip. 02/25/26 16:38
ZorroGPT
by TipmyPip. 02/25/26 12:15
WFO Training with parallel cores Zorro64
by Martin_HH. 02/24/26 19:51
Camera always moves upwards?
by clonman. 02/21/26 09:29
Sam Foster Sound | Experienced Game Composer for Hire
by titanicpiano14. 02/19/26 13:22
AUM Magazine
Latest Screens
Dorifto samurai
Shadow 2
Rocker`s Revenge
Stug 3 Stormartillery
Who's Online Now
5 registered members (TipmyPip, Grant, AndrewAMD, alibaba, Martin_HH), 5,525 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
alx, ApprenticeInMuc, PatrickH90, USER0328, Sfrdragon
19199 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Wiki Grass Wave Effect #132905
05/31/07 20:58
05/31/07 20:58
Joined: Oct 2005
Posts: 131
C
CBSection31 Offline OP
Member
CBSection31  Offline OP
Member
C

Joined: Oct 2005
Posts: 131
Hi everyone,

I'm using the grass wave 2 effect from the GS Wiki page (code follows). The effect works wonderfully, except for a small problem: it lights up all the grass like it's daytime, but my level takes place at night. The grass looks fine until I apply the material; then it lights up. I'm hoping that someone who is savy at programming can tell me how to adjust the code so that it doesn't brighten the models at all. Thanks!

Code:
texture entSkin1;

matrix matWorldViewProj;
matrix matWorldView;

vector vecFog;
vector vecTime;

technique Grass
{
pass p0
{
texture[0]=<entSkin1>;
zWriteEnable=true;
alphaTestEnable=true;
cullMode=none;

vertexShaderConstant[0]=<matWorldViewProj>;
vertexShaderConstant[8]=<matWorldView>;
vertexShaderConstant[16]=<vecFog>;
vertexShaderConstant[32]=<vecTime>;
vertexShaderConstant[33]={0.0f,0.5f,1.0f,2.0f}; // common constants
vertexShaderConstant[34]={-0.16161616f,0.0083333f,-0.00019841f,0.000002755731f}; // {-1/3!,1/5!,-1/7!,1/9!}
vertexShaderConstant[35]={4.0f,1.57079632f,3.14159265f,6.28318530f}; // {4.0,pi/2,pi,pi*2}
vertexShaderConstant[36]={1.07f,0.0f,0.0f,0.0f}; // fixup factor

vertexShaderConstant[40]={3.5f,1.2f,0.8f,0.1f}; // wave distort x
vertexShaderConstant[41]={1.0f,2.0f,1.6f,0.1f}; // wave distort y
vertexShaderConstant[42]={-0.4f,-0.9f,-0.9f,-0.01f}; // wave distort z
vertexShaderConstant[43]={-0.1f,-0.2f,0.1f,0.05f}; // wave dir x
vertexShaderConstant[44]={-0.005f,-0.01f,-0.005f,-0.0025f}; // wave dir y
//vertexShaderConstant[45]={0.02f,0.04f,0.05f,0.1f}; // wave speed
vertexShaderConstant[45]={0.005f,0.01f,0.01f,0.1f}; // wave speed
vertexShaderConstant[46]={0.35f,0.1f,0.1f,0.04f}; // lighting wave scale
vertexShaderConstant[47]={0.6f,0.8f,0.3f,0.0f}; // lighting scale bias

vertexShader=
asm
{
vs.1.1

dcl_position v0
dcl_normal v3
dcl_texcoord0 v7
dcl_texcoord1 v8

mov r1.w,c16.w // r1.w=1
dp4 r0,v0,c10 // distance to camera position (v0 is the position without sinusodial warping!)
add r0,r0,-c16.x // distance-fog_start
mad r0.x,-r0.x,c16.z,r1.w // 1-(distance-fog_start)*(1/(fog_end-fog_start))
max oFog,r0.x,c33.x // clamp with custom max value

mul r0,c43,v0.x // use vertex pos x as inputs to sinusoidal warp
mad r0,c44,v0.y,r0 // use vertex pos y as inputs to sinusoidal warp

mov r1,c32.w // get current time
mad r0,r1,c45,r0 // add scaled time
frc r0.xy,r0 // take fraction of all 4 components
frc r1.xy,r0.zwzw
mov r0.zw,r1.xyxy

mul r0,r0,c36.x // multiply by fixup factor (due to inaccuracy of taylor series)
sub r0,r0,c33.y // subtract 0.5
mul r1,r0,c35.w // range -pi to pi

mul r2,r1,r1 // wave_vec^2
mul r3,r2,r1 // wave_vec^3
mul r5,r3,r2 // wave_vec^5
mul r7,r5,r2 // wave_vec^7
mul r9,r7,r2 // wave_vec^9

mad r0,r3,c34.x,r1 // wave_vec-(wave_vec^3)/3!
mad r0,r5,c34.y,r0 // +(wave_vec^5)/5!
mad r0,r7,c34.z,r0 // -(wave_vec^7)/7!
mad r0,r9,c34.w,r0 // +(wave_vec^9)/9!

dp4 r3.x,r0,c40
dp4 r3.y,r0,c41
dp4 r3.zw,r0,c42

sub r4,c33.z,v7.y // attenuate sinusoidal warping by (1-uv.y)^2
mul r4,r4,r4
mul r3,r3,r4

mov r2.w,v0
add r2.xyz,r3,v0 // add sinusoidal warping to grass position
m4x4 oPos,r2,c0 // transform position to clip space

dp4 r1.x,r0,c46 // scale and add sin waves together
mad oD0,c47.xzxz,-r1.x,c47.y // scale and bias color values (green is scaled more than red and blue)
mov oT0.xy,v7.xy // output uvs
};

pixelShader=
asm
{
ps.1.3
def c0,1,1,1,1
def c1,0,0,0,0
tex t0 // sample t0
mov r0,t0
cnd r0.a,r0.a,c0,c1 // if(r0.a>0.5){r0.a=1;}else{r0.a=0;}
//mul_x2 r0.rgb,r0,v0 // modulate with lighting
};
}
}



Re: Wiki Grass Wave Effect [Re: CBSection31] #132906
06/01/07 01:41
06/01/07 01:41
Joined: Sep 2002
Posts: 8,177
Netherlands
PHeMoX Offline
Senior Expert
PHeMoX  Offline
Senior Expert

Joined: Sep 2002
Posts: 8,177
Netherlands
I'm a bit of a noob with assembly shader language, but perhaps try uncommenting this line in the pixel shader;

Code:
//mul_x2 r0.rgb,r0,v0 



At least that would be the first thing I'd try out. Otherwise check the other assembly shaders to find out what lines include sunlight into the shader,

Cheers


PHeMoX, Innervision Software (c) 1995-2008

For more info visit: Innervision Software
Re: Wiki Grass Wave Effect [Re: PHeMoX] #132907
06/01/07 16:37
06/01/07 16:37
Joined: Oct 2005
Posts: 131
C
CBSection31 Offline OP
Member
CBSection31  Offline OP
Member
C

Joined: Oct 2005
Posts: 131
Tried it, but unfortunately it didn't help. Thanks for the help, though.

I've tried commenting out numerous lines, and so far no luck. I'll keep trying, though.


Moderated by  Blink, Hummel, Superku 

Gamestudio download | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1