Textures:Shaders
This page is work in progress! |
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
Shaders are written in a syntax that is really important.
First you write the line how the shader is named - at which "shader" you call it in Radiant. For Example plant_brush01
textures/ut_subway/plant_bush01
The Following we can conclude out of the Shader: It's in the folder 'textures' in the map-specific folder 'ut_subway' - If you have your own textures and your own shader it should be in that folder. The Path only accepts forward slashes and single slashes - also I heard something like it should always be shorter than 64 signs... so complete sentences as shadername are a no-go :)
(Also some restrictions: Max of 4096 Shader Files, 16384 "shaders" in the Whole Game, 8 Stages, 8 Texture Animations, 4 Texture Modifiers, 3 Deformations and 64 chars for the whole "shader-name-line". Big Shoutout to [User:Rylius] for looking it up in the Quake 3 Arena Source. - some Values might have changed but that's basically it what you have to care for.)
You should always name your shaders like your textures, however not _exactly_ the same as I got personally into some bugs with the Images. Also you should have an own shader name - don't simply copy another shader 1:1 and just change some options. That breaks the Compatibility to one of the two. So 'textures/<map-specific-folder>/<unique-shader-name>'.
Conclusion
Like famous Rayne said once: 'It's all in the shaders'.