Difference between revisions of "Textures:Shaders"
(→Common Mistakes: i will kill the person who put in the five million html tags here) |
|||
Line 15: | Line 15: | ||
<pre> | <pre> | ||
textures/ut_subway/plant_bush01 | textures/ut_subway/plant_bush01 | ||
− | |||
{ | { | ||
− | + | qer_editorimage textures/ut_subway/w2k_bush1.tga | |
− | + | surfaceparm trans | |
− | + | surfaceparm nonsolid | |
− | + | //deformVertexes autosprite2 | |
− | + | cull none | |
− | + | nopicmip | |
− | + | { | |
− | + | map textures/ut_subway/w2k_bush1.tga | |
− | + | blendFunc GL_ONE GL_ZERO | |
− | + | alphaFunc GE128 | |
− | + | depthWrite | |
− | + | rgbGen identity | |
− | + | } | |
− | + | { | |
− | + | map $lightmap | |
− | + | rgbGen identity | |
− | + | blendFunc GL_DST_COLOR GL_ZERO | |
− | + | depthFunc equal | |
− | + | } | |
} | } | ||
Line 41: | Line 40: | ||
textures/ut_subway/chain_link | textures/ut_subway/chain_link | ||
{ | { | ||
− | + | qer_editorimage textures/ut_subway/fence.tga | |
− | + | surfaceparm trans | |
− | + | //surfaceparm nonsolid | |
− | + | //deformVertexes autosprite2 | |
− | + | cull none | |
− | + | nopicmip | |
− | + | { | |
− | + | map textures/ut_subway/fence.tga | |
− | + | blendFunc GL_ONE GL_ZERO | |
− | + | alphaFunc GE128 | |
− | + | depthWrite | |
− | + | rgbGen identity | |
− | + | } | |
− | + | { | |
− | + | map $lightmap | |
− | + | rgbGen identity | |
− | + | blendFunc GL_DST_COLOR GL_ZERO | |
− | + | depthFunc equal | |
− | + | } | |
} | } | ||
</pre> | </pre> | ||
Line 71: | Line 70: | ||
== Understanding == | == Understanding == | ||
+ | It's crucial you understand the syntax of shaders. | ||
− | + | First you write the line how the shader should be called. You can use folder names, that's how it will appear in Radiant also. | |
− | |||
− | First you write the line how the shader | ||
− | |||
<pre> | <pre> | ||
textures/ut_subway/plant_bush01 | textures/ut_subway/plant_bush01 | ||
+ | { | ||
+ | } | ||
</pre> | </pre> | ||
− | + | This shader can be found in the ut_subway folder in the Radiant texture browser. | |
− | |||
− | |||
− | + | Your shaders should always be put in a folder with the same or similar name of your map. A common way is to replace the ut4_ prefix of your map with aaa so it shows up right at the beginning of the list. | |
+ | You shouldn't give shaders the same name as image files in the same directory. | ||
− | + | (Some restrictions: Maximum of 4096 individual shader files, 8 shader stages, 8 animMap images, 3 deformations and 64 chars for the shader name) | |
− | |||
− | |||
== Conclusion == | == Conclusion == |
Revision as of 17:48, 21 August 2011
This page is work in progress! |
Contents
Shaders
Basics
A shader is a short text string, that defines the properties of a texture. Using texture in Radiant on solid brush which has to be a simple wall doesn't require to write a shader for it. Every other surface with special attribute - it does. Shaders tells Q3 engine what kind of surface it has to deal with. Wall, water, sky, mirror, etc. You can have sky texture, but it wont act as a 'real' sky in game until you write a shader for it.
Your main shader file should always be named as your map: ut4_mymap.shader. You should keep it in your /scripts folder and also make sure, it's in your shaderlist.txt file, which is also in /scripts folder. You can call shaderlist.txt 'the main list of shaders'. If it is not on the main list, it will not be on the list in the GTK Radiant Level Editor.
You must understand the difference between shader file and shader. ut4_yourmap.shader file consists shaders - it might sound complicated, but mappers use term "shader" for every single one texture with special attributes. So when someone speaks about 'shader', he speaks about a particular fragment of your shader file.
Let's use example:
textures/ut_subway/plant_bush01 { qer_editorimage textures/ut_subway/w2k_bush1.tga surfaceparm trans surfaceparm nonsolid //deformVertexes autosprite2 cull none nopicmip { map textures/ut_subway/w2k_bush1.tga blendFunc GL_ONE GL_ZERO alphaFunc GE128 depthWrite rgbGen identity } { map $lightmap rgbGen identity blendFunc GL_DST_COLOR GL_ZERO depthFunc equal } } textures/ut_subway/chain_link { qer_editorimage textures/ut_subway/fence.tga surfaceparm trans //surfaceparm nonsolid //deformVertexes autosprite2 cull none nopicmip { map textures/ut_subway/fence.tga blendFunc GL_ONE GL_ZERO alphaFunc GE128 depthWrite rgbGen identity } { map $lightmap rgbGen identity blendFunc GL_DST_COLOR GL_ZERO depthFunc equal } }
This is fragment of shader file for "ut4_subway" map. I pasted 2 shaders from it - for plant_bush01 and chain_link. Your shader file will also consists several shaders written by you.
The most basic shader will consist at least one texture and one script for it. By the time You will learn to create complicated ones, to achieve special and unique effects for your map.
Complete manual explaining all the parameters, strings and variables is here: here
Understanding
It's crucial you understand the syntax of shaders.
First you write the line how the shader should be called. You can use folder names, that's how it will appear in Radiant also.
textures/ut_subway/plant_bush01 { }
This shader can be found in the ut_subway folder in the Radiant texture browser.
Your shaders should always be put in a folder with the same or similar name of your map. A common way is to replace the ut4_ prefix of your map with aaa so it shows up right at the beginning of the list. You shouldn't give shaders the same name as image files in the same directory.
(Some restrictions: Maximum of 4096 individual shader files, 8 shader stages, 8 animMap images, 3 deformations and 64 chars for the shader name)
Conclusion
Like famous Rayne said once: 'It's all in the shaders'.
Good Free Shaders
Common Mistakes
Wrong syntax
textures/sky/box374 { surfaceparm noimpact surfaceparm nomarks surfaceparm nolightmap surfaceparm sky q3map_lightimage textures/sky/box374.tga qer_editorimage textures/sky/box374.tga //q3map_lightsubdivide 1024 //q3map_globaltexture q3map_sun 1.0 0.55 0.1 725 180 30 //0.85 0.55 0.65 //0.005 0.0 0.0 25 350 20 mobb2 skyparms env/box374/box374 - -
This is an especially nasty case. The missing closing bracket at the end won't be recognized by the game and totally screws up the whole game.
Wrong paths
textures/sky/box374 { surfaceparm noimpact surfaceparm nomarks surfaceparm nolightmap surfaceparm sky q3map_lightimage textures/WOOOOOOOOT????/box374.tga qer_editorimage textures/sky/box374.tga q3map_surfacelight 250 //80 mobb2 //q3map_lightsubdivide 1024 //q3map_globaltexture q3map_sun 1.0 0.55 0.1 725 180 30 //0.85 0.55 0.65 //0.005 0.0 0.0 25 350 20 mobb2 skyparms env/box374/box374 - - }
In this case the skybox will show up as a missing texture because the path is wrong.