Flag shader


(nAb.Death) #1

how do i make a shader for a flag texture so it will wave like a flag?


(Mateos) #2

Open Oasis and look at the tents behind the first Allied spawn, these patches are waving :slight_smile:

Then look into its shader to see the instruction :slight_smile:

Edit:
http://robotrenegade.com/q3map2/docs/shader_manual/general-directives.html#deformVertexes


(RayBan) #3

you can find what your looking for in this…
//
// ctf flags for enemy territory
// raybanb@gmail.com

//models/miltiplayer/ctf_flags/allied
//{
// cull disable
// deformVertexes wave 194 sin 0 3 0 .4
// {
// map models/multiplayer/flagpole/american.tga
// rgbGen lightingDiffuse
// }
//}

models/miltiplayer/ctf_flags/axis
{
cull disable
deformVertexes wave 194 sin 0 3 0 .4
{
map models/multiplayer/flagpole/german.tga
rgbGen lightingDiffuse
}
}

models/mapobjects/rayban/ctf/allied_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/mapobjects/rayban/ctf/allied_flag_rb.tga
	rgbGen identity
}
{
	map models/mapobjects/rayban/ctf/blue_fx.tga
	tcGen environment
	//tcmod scale 9 3
	//tcmod scroll .1 .7
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/mapobjects/rayban/ctf/allied_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/mapobjects/rayban/ctf/shadow.tga
	tcGen environment 
	//blendFunc GL_ONE GL_ONE            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

models/multiplayer/rayban/ctf/decoration
{
cull disable
nomipmaps
nopicmip
surfaceparm alphashadow
surfaceparm pointlight
surfaceparm trans
implicitMask -
}

models/multiplayer/rayban/ctf/allied_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/allied_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/blue_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/allied_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

models/multiplayer/rayban/ctf/axis_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/axis_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/red_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/axis_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

///////////// neutral flags
models/multiplayer/rayban/ctf/neutral1_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/grey_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

models/multiplayer/rayban/ctf/neutral2_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/grey_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

models/multiplayer/rayban/ctf/neutral3_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/grey_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

models/multiplayer/rayban/ctf/neutral4_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/grey_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

models/multiplayer/rayban/ctf/neutral5_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/grey_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}

models/multiplayer/rayban/ctf/neutral6_flag_rb
{

deformVertexes wave 100 sin 4 3 0 0.3
deformVertexes wave 30 sin 0 3 0 .8
deformVertexes normal .3 .2
cull none
    
  {
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/grey_fx.tga
	tcGen environment
	blendFunc GL_ONE GL_ONE
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/neutral_flag_rb.tga
	blendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
	rgbGen identity
}
{
	map models/multiplayer/rayban/ctf/shadow.tga
	tcGen environment            
	blendFunc GL_DST_COLOR GL_ZERO
	rgbGen identity
}

}


(RayBan) #4

Somewhere in there… hope it helps…


(stealth6) #5

Shader manual: http://www.thewolfteam.org/shadermanual/

cull none is required so you can see the flag from both sides.
deformVertexes is what makes the flag move. In RayBan’s example I think he applies multiple different waves so the effect looks more random.

You can use

 tags to cut down on post size and keep the formatting right when posting shaders.

(RayBan) #6

yeah… i can’t remember what i did there… multiple examples from some long shader script, basicly take a shader chunk from it, alter it, go wild with the deform, make it yur own…

//models/miltiplayer/ctf_flags/allied
//{
// cull disable
// deformVertexes wave 194 sin 0 3 0 .4
// {
// map models/multiplayer/flagpole/american.tga
// rgbGen lightingDiffuse
// }
//}

i commented that out in the beginning, but thats the basis of what you need.


(Loffy) #7

Ah, RayBan’s flags, yes. I use them in all my CTF-style maps. Top quality and design. :stroggbanana:


(RayBan) #8

Loffy!!! I thought you retired :wink:


(RayBan) #9

Would be quite a loss to the community if u did retire… btw… =)


(Loffy) #10

Oh, I’m hanging around. You know what they say… you do not stop play/map when you get old; you get old if you stop playing/mapping.
:stroggtapir: