Gamestudio Links
Zorro Links
Newest Posts
loading historical data 1st time
by AndrewAMD. 04/14/23 12:54
Trade at bar open
by juanex. 04/13/23 19:43
Bug in Highpass2 filter
by rki. 04/13/23 09:54
Adding Limit Orders For IB
by scatters. 04/11/23 16:16
FisherN
by rki. 04/11/23 08:38
AUM Magazine
Latest Screens
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Hecknex World
Who's Online Now
3 registered members (AndrewAMD, juanex, Grant), 1,018 guests, and 8 spiders.
Key: Admin, Global Mod, Mod
Newest Members
rki, FranzIII, indonesiae, The_Judge, storrealba
18919 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Waving tree/grass shader #59359
11/19/05 20:32
11/19/05 20:32
Joined: Oct 2003
Posts: 4,131
M
Matt_Aufderheide Offline OP
Expert
Matt_Aufderheide  Offline OP
Expert
M

Joined: Oct 2003
Posts: 4,131
Does anyone have a simple HLSL waving tree/grass type vertex shader?


Sphere Engine--the premier A6 graphics plugin.
Re: Waving tree/grass shader [Re: Matt_Aufderheide] #59360
11/19/05 21:35
11/19/05 21:35
Joined: Jul 2003
Posts: 893
Melbourne, Australia
Matt_Coles Offline

User
Matt_Coles  Offline

User

Joined: Jul 2003
Posts: 893
Melbourne, Australia
This is all I've got:






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]={2.5f,1.0f,0.5f,0.1f}; // wave distort x
vertexShaderConstant[41]={5.0f,0.5f,0.25f,0.1f}; // wave distort y
vertexShaderConstant[42]={-1.0f,-0.01f,-0.04f,-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[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
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: Waving tree/grass shader [Re: Matt_Coles] #59361
11/19/05 22:35
11/19/05 22:35
Joined: Sep 2004
Posts: 1,214
Austin, Texas
Josh_Arldt Offline
Senior Developer
Josh_Arldt  Offline
Senior Developer

Joined: Sep 2004
Posts: 1,214
Austin, Texas
Check out the OGRE demos. I am sure the have one in there.

Re: Waving tree/grass shader [Re: Josh_Arldt] #59362
11/19/05 22:46
11/19/05 22:46
Joined: Oct 2003
Posts: 4,131
M
Matt_Aufderheide Offline OP
Expert
Matt_Aufderheide  Offline OP
Expert
M

Joined: Oct 2003
Posts: 4,131
cool thanks..


Sphere Engine--the premier A6 graphics plugin.
Re: Waving tree/grass shader [Re: Matt_Aufderheide] #59363
11/19/05 22:56
11/19/05 22:56
Joined: Sep 2004
Posts: 1,214
Austin, Texas
Josh_Arldt Offline
Senior Developer
Josh_Arldt  Offline
Senior Developer

Joined: Sep 2004
Posts: 1,214
Austin, Texas
No problem.
It should be in one of the demo folders.


Moderated by  Blink, Hummel, Superku 

Gamestudio download | chip programmers | 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