how do i make a shader for a flag texture so it will wave like a flag?
Flag shader
Open Oasis and look at the tents behind the first Allied spawn, these patches are waving
Then look into its shader to see the instruction
Edit:
http://robotrenegade.com/q3map2/docs/shader_manual/general-directives.html#deformVertexes
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
}
}
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.
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.
Ah, RayBan’s flags, yes. I use them in all my CTF-style maps. Top quality and design. :stroggbanana:
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: