<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.splashdamage.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=192.168.0.129&amp;*</id>
	<title>Mod Wiki - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.splashdamage.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=192.168.0.129&amp;*"/>
	<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php/Special:Contributions/192.168.0.129"/>
	<updated>2026-06-10T15:17:17Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=3237</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=3237"/>
		<updated>2007-11-16T14:01:52Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: Added declarations section with material/template/surfacetype info to the Script &amp;amp; Code section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__= '''Tutorials''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Basics ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Taking A Screenshot]]''' - Settings and options for making a great screenshot!&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Terrain ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Making a Terrain Model]]''' - Create a terrain mesh for your map.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Vehicles ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Vehicle Tutorial]]''' - The whole thing! Click below for smaller segments.&lt;br /&gt;
** '''[[Vehicle Tutorial Part 1|Step 1]]''' - Design considerations, before you do anything else!&lt;br /&gt;
** '''[[Vehicle Tutorial Part 2|Step 2]]''' - Initial rough model, rig and basic script.&lt;br /&gt;
** '''[[Vehicle Tutorial Part 3|Step 3]]''' - More advanced rig and scripting.&lt;br /&gt;
** '''[[Vehicle Tutorial Part 4|Step 4]]''' - Further technical setup ideas.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Models &amp;amp; Textures ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Making A Normal Map]]''' - Using Renderbump to generate a bump-map from a high-poly model.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= '''Script &amp;amp; Code''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Declarations ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Materials]]''' - All you need to know about material declarations.&lt;br /&gt;
* '''[[Templates]]''' - Setting up templates to save time and effort.&lt;br /&gt;
* '''[[Surface Types]]''' - Available surface types for particle &amp;amp; sound effects.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Vehicle Scripting ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Vehicle Scripting: Basic_Overview|Basic Overview]]''' - Introduction to vehicle setup.&lt;br /&gt;
* '''[[Vehicle Scripting: Entity_Definition|Entity Definition]]''' - One definition to rule them all!&lt;br /&gt;
* '''[[Vehicle Scripting: Vehicle_Definition|Vehicle Definition]]''' - Introduction to the ''.vscript'' file.&lt;br /&gt;
* '''[[Vehicle Scripting: Positions_&amp;amp;_Views|Positions &amp;amp; Views]]''' - Configuring player positions &amp;amp; camera views.&lt;br /&gt;
* '''[[Vehicle Scripting: Components|Components]]''' - Details of various vehicle components.&lt;br /&gt;
* '''[[Vehicle Scripting: Weapons|Weapons]]''' - Things that go boom!&lt;br /&gt;
* '''[[Vehicle Scripting: IK|IK]]''' - Inverse Kinematics &amp;amp; you...&lt;br /&gt;
* '''[[Vehicle Scripting: Cockpits|Cockpits]]''' - Cockpit setup.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Entity Scripting ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[EntityClass:Overview|Classes]]''' - Tree of entity types.&lt;br /&gt;
* '''[[ScriptEvent:List|Events]]''' - List of all script events.&lt;br /&gt;
* '''[[Scripting:Examples|Examples]]''' - Some example walkthoughs of building up a scripted entity.&lt;br /&gt;
* '''[[Script:Files|Script Files]]''' - List of the script files used by the game.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== GUIs ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[GUIs|GUI Overview]]''' - Overview of the GUI system.&lt;br /&gt;
* '''[[GUIs: Event Based Scripting|Event Based Scripting]]''' - GUIs are event-based.&lt;br /&gt;
* '''[[GUIs: Materials|Materials]]''' - Using materials in GUIs.&lt;br /&gt;
* '''[[GUIs: Transitions|Transitions]]''' - Transitions.&lt;br /&gt;
* '''[[GUIs: Templates|Templates]]''' - Using templates in GUIs.&lt;br /&gt;
* '''[[GUIs: List Enumeration|List Enumeration]]''' - List enumerations.&lt;br /&gt;
* '''[[GUIs: Properties|Properties]]''' - Player/Global properties and more.&lt;br /&gt;
* '''[[GUIs: Timelines|Timelines]]''' - GUI timelines.&lt;br /&gt;
* '''[[GUIs: Layouts|Layouts]]''' - Window layouts.&lt;br /&gt;
* '''[[Reference (GUIs)|Reference]]''' - GUI reference.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Design''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Design: New In ETQW|What's new in ETQW]]'''&lt;br /&gt;
* '''[[Design: ETQW from WET|Notes for W:ET mappers]]''' - for Wolfenstein: Enemy Territory mappers&lt;br /&gt;
* '''[[Design: editWorld from Radiant|Notes for Radiant users]]''' - for experienced Radiant users&lt;br /&gt;
* '''[[Design: editWorld from Worldcraft|Notes for Worldcraft users]]''' - for experienced Worldcraft users&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== The Basics ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Design: editWorld Basics|Editor Basics]]''' - start here&lt;br /&gt;
* '''[[Design: Brush Basics|Brush Basics]]''' - make your map&lt;br /&gt;
* '''[[Design: Entity Basics|Entity Basics]]''' - populate your map&lt;br /&gt;
* '''[[Design: Lighting Basics|Lighting Basics]]''' - light your map&lt;br /&gt;
* '''[[Design: Portal Basics|Portal Basics]]''' - portalise your map&lt;br /&gt;
* '''[[Design: References|Reference Basics]]''' - modularise your map&lt;br /&gt;
* '''[[Design: Map files|Map files]]'''&lt;br /&gt;
----&lt;br /&gt;
* '''[[Design: How do I|How do I ...?]]''' - Common and useful tasks&lt;br /&gt;
* '''[[Design: Troubleshooting|Troubleshooting]]''' - Common problems and fixes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Advanced Stuff ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Design:List of Entities|List of Entities]]''' - Descriptions for all entities&lt;br /&gt;
* '''[[Design: Geometry Optimisation|Optimising Geometry]]''' - How to increase performance&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== Everything Else ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Design: editWorld Bugs and Fixes|Bugs and Fixes]]''' - Known and new bugs or issues&lt;br /&gt;
* '''[[Design: editWorld Customisation|Customising editWorld]]'''&lt;br /&gt;
* '''[[Design: Biscuits|Biscuits]]''' - Biscuits that enhance ETQW mapping&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Art''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Models ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[In-Game Models]]''' - Making models for use in the engine.&lt;br /&gt;
* '''[[High-Poly Models]]''' - Making source models for baking normal maps.&lt;br /&gt;
* '''[[Renderbump]]''' - Create normal maps from high-poly geometry.&lt;br /&gt;
* '''[[Imposters]]''' - Sprites used for rendering complex models cheaply at a distance.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Animation ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[MD5 Export Process]]''' - How to export an animated MD5.&lt;br /&gt;
* '''[[Vehicle Setup]]''' - How to set up a vehicle.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Textures ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Basic Texture Overview]]''' - Supported texture types and implementations.&lt;br /&gt;
* '''[[Texturesheets]]''' - Overview of what texturesheets are, and when to use them.&lt;br /&gt;
* '''[[The Atlas Editor]]''' - Create environment texture sheets to improve performance.&lt;br /&gt;
* '''[[RenderBumpFlat]]''' - Create normal-maps from high-poly geometry.&lt;br /&gt;
* '''[[Detail Textures]]''' - Add high-frequency detail to your textures.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Terrain Editing ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Making a Terrain Model]]''' - Create a terrain mesh for your map.&lt;br /&gt;
* '''[[Terrain Editor|EditWorld's Terrain Editor]]''' - Set up a Surface Tree for your MegaTexture.&lt;br /&gt;
* '''[[MegaBuild]]''' - Render and compile your MegaTexture.&lt;br /&gt;
* '''[[Water Surfaces#Water Models|Water Surfaces]]''' - Create water to go with your landscape.&lt;br /&gt;
* '''[[STUFF System]]''' - Procedurally distribute models over your terrain mesh.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; |&lt;br /&gt;
=== Atmospheres and Effects ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Atmosphere Editor|The Atmosphere Editor]]''' - Create and edit atmospheres for your map.&lt;br /&gt;
* '''[[Ambient Light Editor|The Ambient Light Editor]]''' - Create and edit ambient light setups.&lt;br /&gt;
* '''[[Environment Maps]]''' - Used for reflection effects.&lt;br /&gt;
* '''[[Water Surfaces]]''' - Creating water effects.&lt;br /&gt;
* '''[[Effects Editor|The Effects Editor]]''' - Create and edit particle effects.&lt;br /&gt;
* '''[[Cheap Decals]]''' - Bulletholes and other collision decals.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Materials&amp;diff=3236</id>
		<title>Materials</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Materials&amp;diff=3236"/>
		<updated>2007-11-16T13:59:46Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: Tabulated everything&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Material decls are similar to shader files from Quake3, but they are a lot more powerful. Materials have a lot of power, especially when combined with scripts and GL programs. &lt;br /&gt;
&lt;br /&gt;
== Tables ==&lt;br /&gt;
&lt;br /&gt;
In Quake3, you could do all kinds of neat things with sin waves, saw tooth waves, square waves and other types of waves, but you were pretty much screwed if you wanted any kind of non standard wave form. In Doom 3, you can define arbitrary data lookup tables, then reference them in your materials. &lt;br /&gt;
The format of a table definiton is: &lt;br /&gt;
&lt;br /&gt;
    table &amp;lt;tablename&amp;gt; { [snap] [clamp] { &amp;lt;data&amp;gt;, &amp;lt;data&amp;gt;, ... } }&lt;br /&gt;
Where [snap] is an optional key word which means &amp;quot;jump directly from one value to the other (don't blend between values)&amp;quot; and [clamp] is an optional key word which means &amp;quot;don't wrap around if the index is outside the range of table elements, (return the first value if less or the last value if it's more)&amp;quot;. Both keywords are optional, and can be used together. &lt;br /&gt;
Now, armed with this knowledge, we can easily construct a square wave lookup table: &lt;br /&gt;
&lt;br /&gt;
    table squarewave { snap { 0, 1 } }&lt;br /&gt;
The sin table is a bit harder, but lucky for you, it's already defined shaderDemo.mtr &lt;br /&gt;
&lt;br /&gt;
== Materials ==&lt;br /&gt;
&lt;br /&gt;
Every material file has a global section, followed by one or more stages. The global section, as the name implies, sets properties that affect all the stages. In Quake3 the stages were pretty easy to understand because the engine rendered them in order: stage 1, then stage 2, then stage 3, etc.. In Doom 3 the order is not quite as simple because of the way the lighting system works, but for the most part, they are still rendered in order. &lt;br /&gt;
Let's look at a simple material (some random wall in the alpha labs): &lt;br /&gt;
&lt;br /&gt;
    material textures/alphalabs/a_lfwall21b&lt;br /&gt;
    {&lt;br /&gt;
        qer_editorimage textures/alphalabs/a_lfwall21b&lt;br /&gt;
        bumpmap         textures/base_wall/lfwall21_local&lt;br /&gt;
        diffusemap      textures/alphalabs/a_lfwall21b&lt;br /&gt;
        specularmap     textures/alphalabs/a_lfwall21b_s&lt;br /&gt;
    }&lt;br /&gt;
The first line is the name of the material (which in this case also happens to be the name of the diffuse map). Notice the use of the 'material' keyword. This is required for all materials, unlike Doom3.&lt;br /&gt;
&lt;br /&gt;
The global section begins right after the open curly brace. The first key word we see is qer_editorimage, which tells Radiant which image to use in the editor. This is the image used in the texture window, as well as in the 3D view. Next we define the bump map (normal map), the diffuse map (colors), and the specular map (gloss). This is about as basic of a material file you can get, while still using the advanced lighting features. Technically all you need is 'diffusemap', in which case the specular map is black, the bump map is blue, and the editorimage is the diffusemap. Creating an entire map with those types of materials will look roughly like Quake 3.&lt;br /&gt;
In most cases you won't need to specify the qer_editorimage unless you specifically need something which looks different to the diffusemap.&lt;br /&gt;
&lt;br /&gt;
This material looks like it doesn't have any stages, but in fact it has 3 stages. The 'bumpmap' 'diffusemap' and 'specularmap' keywords are simply shortcuts for stages as we will see later.&lt;br /&gt;
&lt;br /&gt;
== Shaders in Materials ==&lt;br /&gt;
&lt;br /&gt;
ETQW has the ability to use custom GL vertex and fragment programs when rendering a stage of a material. This is mostly seen in the 'heat haze' effects around fire, in the warping effects on glass, and in the warping effects on various projectiles (like the BFG). For documentation on how to write your own renderprograms programs, see the separate [[Render program documentation]] &lt;br /&gt;
&lt;br /&gt;
There is nothing stopping an artist from writing those, but I would really let a programmer handle writing the renderprogram. The main thing an artist or level designer needs to know is how to use the renderprogram in their materials. &lt;br /&gt;
This is the material file for the hornet smoke which uses one of the heathaze effects. Using other renderprograms works in a similar way:&lt;br /&gt;
&lt;br /&gt;
    material particles/penta/hornetheathaze {&lt;br /&gt;
        noshadows&lt;br /&gt;
        translucent&lt;br /&gt;
        nonsolid&lt;br /&gt;
        {&lt;br /&gt;
            program heatHazeWithVertex&lt;br /&gt;
            deformScroll 0, 0&lt;br /&gt;
            deformMagnitude 1&lt;br /&gt;
            bumpMap textures/particles/smoke/smokenormal.tga   &lt;br /&gt;
            maskAlpha&lt;br /&gt;
        }	&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
There is a single stage in this material. It uses a special program, this means it will not render like any other material but that it will use that program to do some special effect. It also means that certain parameters are surrendly read by the engine.&lt;br /&gt;
So the heatHazeWithVertex causes the engine to render the stage as a heathaze surface, it also looks at the values of deformScroll and deformMagnitude to define the specific strength of the heathaze effect (how much warping is going on). The engine automatically knows at which parameters to read when you use a certain program, so while you can set these parameters on any material only programs that actually use them will care about their value. Also note how the texture is specified using the bumpMap [bleh] command, altough you use the bumpmap command here it won't render like any other bumpmapped surface since the &amp;quot;program heatHazeWithVertex&amp;quot; told the engine to do special rendering for this surface.&lt;br /&gt;
&lt;br /&gt;
The list of new &amp;quot;commands&amp;quot; that are available when you use a certain program is not fixed, so every new program may define new variables you can set. Most programs tend to use the default values like &amp;quot;map&amp;quot;, &amp;quot;bumpMap&amp;quot;, &amp;quot;diffuseMap&amp;quot;, ... so most of the time you don't need to know about any special variables to use the program.&lt;br /&gt;
&lt;br /&gt;
== Maths and Logic ==&lt;br /&gt;
&lt;br /&gt;
Materials in Doom 3 can contain mathematical and logical expressions. These expressions are evaluated for each material every frame, and are what cause normally boring surfaces to come alive. This is a replacement for the rather limited shader commands in Quake 3 such as tcMod scroll, rgbGen, etc. &lt;br /&gt;
Let's take a look at a material to see these features in use: &lt;br /&gt;
&lt;br /&gt;
    material models/weapons/soulcube/soulcube3fx&lt;br /&gt;
    {&lt;br /&gt;
        noSelfShadow&lt;br /&gt;
        translucent&lt;br /&gt;
        noShadows&lt;br /&gt;
        {&lt;br /&gt;
            if ( parm7 &amp;gt; 3 )&lt;br /&gt;
            blend add&lt;br /&gt;
            map models/weapons/soulcube/soulcube3fx&lt;br /&gt;
            rgb scTable[ time * .5 ] &lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
In Doom 3, certain stages of the material can be selectively turned on and off. The 'if' command in this example means &amp;quot;only draw this material if parm7 is greater than 3.&amp;quot; There are a few places where parm7 can get set, one of them is in the editor with the 'shaderParm0' to 'shaderParm11' keys. Another place is in the script file (such as with weapons). Of course, it can also get set in the code. &lt;br /&gt;
&lt;br /&gt;
Notice the use of a lookup table in this material. Here we are using 'time' (which is a floating point number that increases forever) to look up a value in 'scTable' (which was defined using a 'table' decl earlier). &lt;br /&gt;
&lt;br /&gt;
The mathematical operators you can use in a material are %, /, *, -, and +. You can also use the boolean operators &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=, ==, !=, &amp;amp;&amp;amp;, and ||. The meaning of the symbols is the same as in C/C++, Java, PHP, etc. Mathematical expressions should be enclosed in parenthesis (there are cases where they don't have to be, such as when they are used as an index to a lookup table, but it never hurts to have too many. For the operands, you can use a lookup table, any numerical constant, and any of the following variables: &lt;br /&gt;
&lt;br /&gt;
time: Forever increasing floating point value that returns the current time in seconds &lt;br /&gt;
parm0-parm11: Parameters that can be set a number of ways (discussed above) &lt;br /&gt;
global0-global7: Not used right now &lt;br /&gt;
fragmentPrograms: Constant that is 1 if ARB fragment programs are available. This is mostly used for disabling a stage by specifying &amp;quot;if ( fragmentPrograms == 1 )&amp;quot; &lt;br /&gt;
sound: The current sound amplitude of the entity using this material. This is used to create light materials that pulse with the sound.&lt;br /&gt;
&lt;br /&gt;
== New backend ==&lt;br /&gt;
&lt;br /&gt;
The new backend slightly changes the way how shaders work, altough internally the system is very different we tried to keep external changes as small as possible. The next few topics are mainly &amp;quot;copy pastable&amp;quot; cases.&lt;br /&gt;
&lt;br /&gt;
=== Alphatested surfaces ===&lt;br /&gt;
&lt;br /&gt;
Unlike doom3 bump/specular/diffuse maps are not treated as separate material stages anymore, so instead of having three stages with one map each you now have one stage with the three maps specified at once. This makes for less stages and a generally more intuitive way of creating shaders.&lt;br /&gt;
The biggest change because of this is the alpha testing. While you specified the bump and specular stages like normal stages and specified added the alphatest on the diffuse stage before, now you need one stage with has diffuse+bump+specular maps with alpha testing enabled.&lt;br /&gt;
An alpha tested stage now looks like this:&lt;br /&gt;
&lt;br /&gt;
    material textures/alphademo {    &lt;br /&gt;
        {&lt;br /&gt;
            diffusemap  textures/decals/fgrill2_d.tga&lt;br /&gt;
            specularmap textures/decals/fgrill2_s.tga&lt;br /&gt;
            bumpmap     addnormals( textures/decals/fgrill_local.tga , heightmap ( textures/decals/fgrill2_b.tga, 1 ) )	 	&lt;br /&gt;
            &lt;br /&gt;
            alphaTest 0.5&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Clamped textures ===&lt;br /&gt;
&lt;br /&gt;
Clamping was specified in the shader/stage body before, this is not very logical as it is actually an image parameter. Therefore clamping now has to be specified before image names.&lt;br /&gt;
&lt;br /&gt;
    material textures/clampdemo {    &lt;br /&gt;
        {&lt;br /&gt;
            blend add&lt;br /&gt;
            map clamp textures/decals/blast.tga&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
=== Animated texture coordinates ===&lt;br /&gt;
&lt;br /&gt;
Since bump/normal/specular are now part of a single stage( see alphatest information ) the texture matrices can't be specified per stage anymore, therefore there is a new &amp;quot;texturematrix&amp;quot; command you can use to specify the texture matrix of a specific texture.&lt;br /&gt;
&lt;br /&gt;
    material textures/matrixdemo { &lt;br /&gt;
        {&lt;br /&gt;
            bumpmap textures/base_wall/wire_fence2_local.tga&lt;br /&gt;
            specularmap textures/base_wall/a_wire_fence2_s.tga&lt;br /&gt;
            diffusemap textures/base_wall/a_wire_fence2_d.tga&lt;br /&gt;
            alphaTest 0.5&lt;br /&gt;
            &lt;br /&gt;
            textureMatrix bumpMatrix {&lt;br /&gt;
                translate 2, 2&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            textureMatrix specularMatrix {&lt;br /&gt;
                translate 4, 4&lt;br /&gt;
            }		&lt;br /&gt;
            &lt;br /&gt;
            textureMatrix diffuseMatrix {&lt;br /&gt;
                translate 2, 2&lt;br /&gt;
            }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
You can still use the old texture matrix system, but this means it will only affect the diffuse map and NOT the specular/normal map. If you are writing a non bumpmapped material you should also use the old way of specifying texture matrices.&lt;br /&gt;
&lt;br /&gt;
= Reference =&lt;br /&gt;
&lt;br /&gt;
== Parameters Key ==&lt;br /&gt;
These are all the parameters which can be passed to material functions and values.&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot; &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | &amp;lt;float&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Any number.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | &amp;lt;int&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | An integer - any number without a fractional part.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | &amp;lt;string&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Any value enclosed in quotes.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | &amp;lt;index&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | An integer number that is an index into an array.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | An image map, which may include image programs (below).&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | &amp;lt;prog&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | A vertex / frament program. Written using the GL ARB shader language. These files are stored in the ''glprogs'' directory.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F0F0F0;&amp;quot; | &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | An expression that is evaluated every frame.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Keywords for Regular Materials ==&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | qer_editorimage &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Image to display in the editor&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | description &amp;lt;string&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Just a simple description for people using this material&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | polygonOffset&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | [float] offset the depth buffer to combat z-fighting&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noShadows&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Don't cast shadows&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noSelfShadow&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This material doesn't cast shadows on the model it's on (but it does on other models)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | forceShadows&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Allows nodraw surfaces to cast shadows&lt;br /&gt;
|-  &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noOverlays&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Overlay / Decal suppression&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | forceOverlays&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Force decal overlays for alpha tested or translucent surfaces&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | translucent&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | The engine thinks this is a translucent material (which means no ambient/zfill pass will be done for this material)&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | forceOpaque&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Opposite forces the engine to think this is a nontranslucent material.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | twoSided&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Draw the front and back. Implies no-shadows, because the shadow volume would be coplanar with the surface, giving depth fighting.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | backSided&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Draw only the back. This also implies no-shadows.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | mirror&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Use to make mirrors&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noFog&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Don't fog this surface&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | guisurf &amp;lt;guifile&amp;gt;&lt;br /&gt;
guisurf entity[2|3]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This surface has a gui on it. Use &amp;quot;somegui.gui&amp;quot; to specify the gui, or entity, entity2, entity3, etc for the level designer to set it in Radiant.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | sort &amp;lt;type&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Type is one of: subview, opaque, decal, far, medium, close, almostNearest, nearest, postProcess&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | spectrum &amp;lt;int&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Spectrums are used for &amp;quot;invisible writing&amp;quot; that can only be illuminated by a light of matching spectrum &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | deform &amp;lt;type&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Type is one of: sprite, tube, flare, expand, move, turbulent, eyeBall, particle, particle2&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | decalInfo &amp;lt;staySeconds&amp;gt;&lt;br /&gt;
&amp;lt;fadeSeconds&amp;gt; [start rgb] [end rgb]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Used in decal materials to set how long the decal stays, and how it fades out.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | renderbump &amp;lt;args...&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | [[RenderBump]] command options, without &amp;quot;renderbump&amp;quot; at the start&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | diffusemap &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | shortcut for&lt;br /&gt;
 {  &lt;br /&gt;
    blend diffusemap&lt;br /&gt;
    map &amp;lt;map&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | specularmap &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | shortcut for &lt;br /&gt;
 {  &lt;br /&gt;
    blend specularmap  &lt;br /&gt;
    map &amp;lt;map&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | bumpmap &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | shortcut for &lt;br /&gt;
 {&lt;br /&gt;
    blend bumpmap&lt;br /&gt;
    map &amp;lt;map&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F0F0F0;&amp;quot; | DECAL_MACRO&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | shortcut for &lt;br /&gt;
 polygonOffset 1&lt;br /&gt;
 discrete&lt;br /&gt;
 sort decal&lt;br /&gt;
 noShadows&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Keywords for Light Materials ==&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot; &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noShadows&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This light doesn't cast shadows.&lt;br /&gt;
|- &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | forceShadows&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | fog, blend, and ambient lights don't cast shadows by default. This forces them to cast shadows.&lt;br /&gt;
|- &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noPortalFog&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This fog volume won't ever consider a portal fogged out.&lt;br /&gt;
|- &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | fogLight&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Option to fill with fog from viewer instead of light from center.&lt;br /&gt;
|-  &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | blendLight&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Perform simple blending of the projection, instead of interacting with bumps and textures.&lt;br /&gt;
|- &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | ambientLight&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | An ambient light has non-directional bump mapping and no specular.&lt;br /&gt;
|-  &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F0F0F0;&amp;quot; | lightFalloffImage &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | specifies the image to use for the third axis of projected light volumes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Surface Parameters ==&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot; &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | surfacetype &amp;quot;&amp;lt;stp&amp;gt;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Sets a surface type for particles and sound effects, where &amp;lt;stp&amp;gt; is one of the [[Surface Types|valid surface types]].&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | solid&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | may need to override a clearSolid &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | water&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | used for water&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | playerclip&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | solid to players&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | monsterclip&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | solid to monsters&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | moveableclip&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | solid to moveable entities&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | ikclip&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | solid to IK&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | blood&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | used to detect blood decals&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | trigger&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | used for triggers&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | aassolid&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | solid for AAS&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | aasobstacle&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | used to compile an obstacle into AAS that can be enabled/disabled&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | flashlight_trigger&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | used for triggers that are activated by the flashlight&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | nonsolid&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | clears the solid flag&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | nullNormal&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | renderbump will draw as 0x80 0x80 0x80, which won't collect light from any angle&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | areaportal&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | divides areas&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | qer_nocarve&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | don't cut brushes in editor&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | discrete&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | surfaces should not be automatically merged together or clipped to the world, because they represent discrete objects like gui shaders mirrors, or autosprites&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noFragment&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | dmap won't cut surface at each bsp boundary&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | collision&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | collision surface. if a model has no collision surfaces, then all surfaces are considered collision surfaces&lt;br /&gt;
|- &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noimpact&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | don't make impact explosions or marks&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | nodamage&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | no falling damage when hitting&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | ladder&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | player can climb up this surface&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F0F0F0;&amp;quot; | nosteps&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | No footstep sounds.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Stage Keywords =&lt;br /&gt;
blend &amp;lt;type&amp;gt;&lt;br /&gt;
blend &amp;lt;src&amp;gt;, &amp;lt;dst&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Blend types: Type Src Dst &lt;br /&gt;
 blend gl_src_alpha gl_one_minus_src_alpha &lt;br /&gt;
 add gl_one gl_one &lt;br /&gt;
 filter gl_dst_color gl_zero &lt;br /&gt;
 modulate gl_dst_color gl_zero &lt;br /&gt;
 none gl_zero gl_one &lt;br /&gt;
 bumpmap Normal map &lt;br /&gt;
 diffusemap Diffuse map &lt;br /&gt;
 specularmap Specular map &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Source blend modes: gl_one Constant 1 &lt;br /&gt;
 gl_zero Constant 0 &lt;br /&gt;
 gl_dst_color The color currently on the screen &lt;br /&gt;
 gl_one_minus_dst_color One minus the color currently on the screen &lt;br /&gt;
 gl_src_alpha The alpha channel of the source image &lt;br /&gt;
 gl_one_minus_src_alpha One minus the alpha channel of the source image &lt;br /&gt;
 gl_dst_alpha The alpha channel of the screen image &lt;br /&gt;
 gl_one_minus_dst_alpha One minus the alpha channel of the screen image &lt;br /&gt;
 gl_src_alpha_saturate Minimum of the source alpha and one minus screen alpha &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Destination blend modes: gl_one Constant 1 &lt;br /&gt;
 gl_zero Constant 0 &lt;br /&gt;
 gl_src_color The color of the source image &lt;br /&gt;
 gl_one_minus_src_color One minus the color of the source image &lt;br /&gt;
 gl_src_alpha The alpha channel of the source image &lt;br /&gt;
 gl_one_minus_src_alpha One minus the alpha channel of the source image &lt;br /&gt;
 gl_dst_alpha The alpha channel of the screen image &lt;br /&gt;
 gl_one_minus_dst_alpha One minus the alpha channel of the screen image &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot; &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | map &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | The image program to use for this stage.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | remoteRenderMap &amp;lt;int&amp;gt; &amp;lt;int&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Width and Height of the buffer to render a remote image in to (for cameras). The entity this material is applied to has to support remote render views.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | mirrorRenderMap &amp;lt;int&amp;gt; &amp;lt;int&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Width and Height of the buffer to render a mirror in to. This of course makes this stage a mirror stage, which is different from using the 'mirror' global keyword because that makes the entire material a mirror, rather than just one stage.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | videomap [loop] &amp;lt;file&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This stage uses a video stream as an image map.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | soundmap [waveform]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This stage uses a sound meter from the sound system as an image map. Specify 'waveform' to get a scope rather than bars.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | cubeMap &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This stage uses a cube map as the image map. Looks for _px, _py, _pz, _nx, _ny, _nz for the positive x, y, z, and negative x, y, z sides.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | cameraCubeMap &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | This stage uses a cube map in camera space. Looks for _forward, _back, _left, _right, _up, and _down.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | ignoreAlphaTest&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Always use DEPTHFUNC_LEQUAL rather than DEPTHFUNC_EQUAL which is normally used for opaque and alpha tested surfaces.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | nearest&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Use nearest texture filtering.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | linear&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Use linear texture filtering.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | clamp&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Same as the global keywords. Use to override a global clamp for a specific stage.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | zeroclamp&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | &lt;br /&gt;
|- &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | alphazeroclamp&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | noclamp&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Use to set texture repeat for a stage when global clamp is set.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | uncompressed&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Do not compress this image in medium quality mode.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | highquality &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | forceHighQuality&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Do not compress this image in low quality mode.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | nopicmip&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Ignore the image_downSize cvar.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | vertexColor&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Multiply the pixel color by the vertex color.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | inverseVertexColor&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Multiply the pixel color by one minus the vertex color.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | privatePolygonOffset &amp;lt;float&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Explicit larger (or negative) polygon offset for this stage.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | texGen &amp;lt;type&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Type is one of: normal, reflect, skybox, wobbleSky &amp;lt;exp&amp;gt; &amp;lt;exp&amp;gt; &amp;lt;exp&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | scroll &amp;lt;exp&amp;gt;, &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Scroll the texture coordinates.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | translate &amp;lt;exp&amp;gt;, &amp;lt;exp&amp;gt; &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | scale &amp;lt;exp&amp;gt;, &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Just scales without a centering.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | centerScale &amp;lt;exp&amp;gt;, &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Subtracts 0.5, then scales, then adds 0.5.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | shear &amp;lt;exp&amp;gt;, &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Subtracts 0.5, then shears, then adds 0.5.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | rotate &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Subtracts 0.5, then rotates, then adds 0.5.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | maskRed&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Don't write to the red channel.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | maskGreen&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Don't write to the blue channel.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | maskBlue&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Don't write to the green channel.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | maskAlpha&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Don't write to the alpha channel.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | maskColor&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Shortcut for&lt;br /&gt;
 maskRed&lt;br /&gt;
 maskGreen&lt;br /&gt;
 maskBlue &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | maskDepth&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Don't write to the depth buffer.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | alphaTest &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Only write if the alpha value is greater than &amp;lt;exp&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | red &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Set the red vertex color.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | green &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Set the green vertex color.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | blue &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Set the blue vertex color.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | alpha &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Set the alpha vertex value.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | rgb &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Shortcut for&lt;br /&gt;
 red &amp;lt;exp&amp;gt;&lt;br /&gt;
 green &amp;lt;exp&amp;gt;&lt;br /&gt;
 blue &amp;lt;exp&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | rgba &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Shortcut for&lt;br /&gt;
 red &amp;lt;exp&amp;gt;&lt;br /&gt;
 green &amp;lt;exp&amp;gt;&lt;br /&gt;
 blue &amp;lt;exp&amp;gt;&lt;br /&gt;
 alpha &amp;lt;exp&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | color &amp;lt;exp0&amp;gt;, &amp;lt;exp1&amp;gt;, &amp;lt;exp2&amp;gt;, &amp;lt;exp3&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Shortcut for &lt;br /&gt;
 red exp0&lt;br /&gt;
 green exp1&lt;br /&gt;
 blue exp2&lt;br /&gt;
 alpha exp3 &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | colored&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Shortcut for &lt;br /&gt;
 color parm0, parm1, parm2, parm3 &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | if &amp;lt;exp&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Conditionally disable stages.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | fragmentProgram &amp;lt;prog&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Use an ARB fragment program with this stage.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | vertexProgram &amp;lt;prog&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Use an ARB vertex program with this stage.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | program &amp;lt;prog&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Shortcut for &lt;br /&gt;
 fragmentProgram &amp;lt;prog&amp;gt;&lt;br /&gt;
 vertexProgram &amp;lt;prog&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | vertexParm &amp;lt;index&amp;gt; &amp;lt;exp0&amp;gt; [,exp1] [,exp2] [,exp3]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Values to pass to the vertex program. One expression gets repeated across all 4 values. Two expressions put 0, 1 in z, w. Three expressions put 1 in w. &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | fragmentMap &amp;lt;index&amp;gt; [options] &amp;lt;map&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | The image map to use for texture unit &amp;lt;index&amp;gt;. [options] can be cubeMap, cameraCubeMap, nearest, linear, clamp, noclamp, zeroclamp, alphazeroclamp, forceHighQuality, uncompressed, highquality, or nopicmip.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F0F0F0;&amp;quot; | megaTexture &amp;lt;mega&amp;gt;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | This stage uses a MegaTexture.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Image Program Functions ==&lt;br /&gt;
These can be used anywhere that accepts &amp;lt;map&amp;gt;, and can be nested.&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot; &lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | heightmap(&amp;lt;map&amp;gt;, &amp;lt;float&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Turns a grayscale height map into a normal map. &amp;lt;float&amp;gt; determines how &amp;quot;deep&amp;quot; the bump map appears.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | addnormals(&amp;lt;map&amp;gt;, &amp;lt;map&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Adds two normal maps together. Result is normalized. &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | smoothnormals(&amp;lt;map&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Does a box filter on the normal map, and normalizes the result.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | add(&amp;lt;map&amp;gt;, &amp;lt;map&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Adds two images without normalizing the result.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | scale(&amp;lt;map&amp;gt;, &amp;lt;float&amp;gt; [,float] [,float] [,float])&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Scales the RGBA by the specified factors. Defaults to 0. &lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | invertAlpha(&amp;lt;map&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Inverts the alpha channel (0 becomes 1, 1 becomes 0).&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | invertColor(&amp;lt;map&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Inverts the R, G, and B channels.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F0F0F0;&amp;quot; | makeIntensity(&amp;lt;map&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;border-bottom: 1px solid #AAAAAA;&amp;quot; | Copies the red channel to the G, B, and A channels.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; style=&amp;quot;background: #F0F0F0;&amp;quot; | makeAlpha(&amp;lt;map&amp;gt;)&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | Sets the alpha channel to an average of the RGB channels. Sets the RGB channels to white.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripting]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Category:Vehicles&amp;diff=1482</id>
		<title>Category:Vehicles</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Category:Vehicles&amp;diff=1482"/>
		<updated>2007-10-16T09:42:04Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Articles relating to vehicle modding.&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Models&amp;diff=1481</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Models&amp;diff=1481"/>
		<updated>2007-10-15T17:14:49Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: Removed old article link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== In-Game Models ==&lt;br /&gt;
{{:In-Game Models}}&lt;br /&gt;
&lt;br /&gt;
== High-Poly Models ==&lt;br /&gt;
{{:High-Poly Models}}&lt;br /&gt;
&lt;br /&gt;
== Renderbump ==&lt;br /&gt;
{{:Renderbump}}&lt;br /&gt;
&lt;br /&gt;
== MD5 LOD ==&lt;br /&gt;
{{:MD5 LOD}}&lt;br /&gt;
&lt;br /&gt;
== Imposters ==&lt;br /&gt;
{{:Imposters}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Category:Animation&amp;diff=1480</id>
		<title>Category:Animation</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Category:Animation&amp;diff=1480"/>
		<updated>2007-10-15T17:14:21Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Articles related to animation.&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=MD5_LOD&amp;diff=1479</id>
		<title>MD5 LOD</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=MD5_LOD&amp;diff=1479"/>
		<updated>2007-10-15T17:14:03Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MD5 LOD can be used to add lower-poly models which get swapped in as view distance from the object increases.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|MD5 LOD}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Static LOD for MD5 models has been implemented. The code automatically scans for X - 1 LOD files for each .md5mesh file loaded. X is defined by the ''r_MD5MaxLodStages'' cvar, which defaults to 4 at the moment. The code will look for the following files:&lt;br /&gt;
&lt;br /&gt;
 mymd5mesh.md5mesh (main model)&lt;br /&gt;
 mymd5mesh_lod1.md5mesh (1st lod)&lt;br /&gt;
 mymd5mesh_lod2.md5mesh (2st lod)&lt;br /&gt;
 mymd5mesh_lod3.md5mesh (3st lod)&lt;br /&gt;
&lt;br /&gt;
To create a MD5 mesh file to be used as a LOD stage, you have to make sure it has the same bone setup as the main mesh. During exporting, ensure to use the same commandline as well, but add -noJoints. Joint are only read from the main mesh file, so there is no need to have them stored in the LODstages as well.&lt;br /&gt;
&lt;br /&gt;
''r_MD5LodScale'' can be used to scale LOD faloff.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Animation]] [[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Models&amp;diff=1478</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Models&amp;diff=1478"/>
		<updated>2007-10-15T17:13:26Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== In-Game Models ==&lt;br /&gt;
{{:In-Game Models}}&lt;br /&gt;
&lt;br /&gt;
== High-Poly Models ==&lt;br /&gt;
{{:High-Poly Models}}&lt;br /&gt;
&lt;br /&gt;
== Renderbump ==&lt;br /&gt;
{{:Renderbump}}&lt;br /&gt;
&lt;br /&gt;
== Collision Model Exporting ==&lt;br /&gt;
{{:Collision Model Exporting}}&lt;br /&gt;
&lt;br /&gt;
== MD5 LOD ==&lt;br /&gt;
{{:MD5 LOD}}&lt;br /&gt;
&lt;br /&gt;
== Imposters ==&lt;br /&gt;
{{:Imposters}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Vertex_Colouring&amp;diff=1477</id>
		<title>Vertex Colouring</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Vertex_Colouring&amp;diff=1477"/>
		<updated>2007-10-15T17:13:04Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Vertex Texture Blending in Lightwave ===&lt;br /&gt;
&lt;br /&gt;
* First you need to make a vertex color map. Click the '''Map''' tab at the top, then '''New Color Map''' on the left of your screen, and press '''Ok'''. &lt;br /&gt;
* Using the surface editor ('''F3''') click the Advanced tab for each of your blends and set the vertex color map to the color map you just created.&lt;br /&gt;
* Using '''W''', select your polys with the blend and the polys that they blend to, for example &amp;quot;textures/sand/sand01torock01&amp;quot; and &amp;quot;textures/rock/rock01&amp;quot;.&lt;br /&gt;
* Cut and paste these 2 sets of polys into a second layer (press '''x''' to cut and '''v''' to paste, or '''CTRL-x''' and '''CTRL-v''' in Lightwave 8).&lt;br /&gt;
* Make sure the points of these 2 sets are merged (press '''m''', then '''Ok''')&lt;br /&gt;
* Now select the blend polys and hide them by pressing '''-'''.&lt;br /&gt;
* Now in point mode select all the remaining points and press Shift+| .&lt;br /&gt;
* You should now have all the points of the blend polys selected, click the map tab at the top, then point colour on the left of your screen. In the drop down menu select Vertex Color. Change alpha to 1 and make sure the color is black (should be by default).&lt;br /&gt;
* Now unhide everything by pressing '''\'''.&lt;br /&gt;
* Cut and paste the second layer back into your first layer.&lt;br /&gt;
'''All done! Now repeat steps 3 to 10 for your other blends'''&lt;br /&gt;
&lt;br /&gt;
=== Simple Vertex Colouring in Lightwave (for [[STUFF System|STUFF models]])===&lt;br /&gt;
&lt;br /&gt;
* First you need to make a vertex color map. Click the '''Map''' tab at the top, then '''New Color Map''' on the left of your screen, and press '''Ok'''. &lt;br /&gt;
* Using the surface editor ('''F3''') click the Advanced tab for each of your blends and set the vertex color map to the color map you just created.&lt;br /&gt;
* Select the points you want to have vertex coloured, click the '''Map''' tab at the top, then '''Point Color''' on the left of your screen. In the drop down menu select Vertex Color. Make sure you set Alpha to 1.0, then set your desired vertex RGB colour:&lt;br /&gt;
** Note: With STUFF models, black means it will not animate at all while white will animate as much as possible.&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Shadow_Hulls&amp;diff=1476</id>
		<title>Shadow Hulls</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Shadow_Hulls&amp;diff=1476"/>
		<updated>2007-10-15T17:12:43Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Overview ===&lt;br /&gt;
Shadow hulls are used to improve in-game graphics performance. They should be used on more complex meshes, to keep the shadow count down. This is especially valuable in areas with many shadow-casting lights.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Shadow hulls should be &amp;quot;watertight&amp;quot; meshes wherever possible - open edges will result in lower performance.&lt;br /&gt;
* Shadow hulls should always be inside the main visible mesh. Any parts which clip through the visible mesh may produce odd-looking shadow artifacts.&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Collision_Meshes&amp;diff=1475</id>
		<title>Collision Meshes</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Collision_Meshes&amp;diff=1475"/>
		<updated>2007-10-15T17:12:19Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Overview ===&lt;br /&gt;
Collision meshes are used to improve in-game physics performance. They can also be used to stop players or vehicles catching on small protrusions from meshes, and generally smoothing out player movement over complex shapes.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Unlike shadow hulls, collision meshes do not have to be &amp;quot;watertight&amp;quot;, open edges are allowed. However, bear in mind that things in the game will only collide with front-facing polys, so a single flat plane would only have collision on one side of it.&lt;br /&gt;
* Collision meshes are automatically optimised by the game to use polygons rather than triangles. Therefore, co-planar triangles will be optimised down into a single ''n''-sided polygon, for efficiency and performance.&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=UV_Unwrap_Conventions&amp;diff=1474</id>
		<title>UV Unwrap Conventions</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=UV_Unwrap_Conventions&amp;diff=1474"/>
		<updated>2007-10-15T17:12:00Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Use a checker pattern image while unwrapping to check for texture stretching.&lt;br /&gt;
* Trade off texture stretching with having more continuous UV's between adjoining faces; this will help prevent ugly specular seams.&lt;br /&gt;
* Try to keep UV edge breaks along an intended hard edge; again, this helps prevent obvious seams.&lt;br /&gt;
* Try to cluster adjacent model components in similar areas in UV space; it makes the texture easier to work with.&lt;br /&gt;
* If you can't see both sides of an identical set of faces at the same time, mirror the UVs!&lt;br /&gt;
* Try to maintain consistent UV space usage on all '''important''' areas of the model, so that texture scale is consistent.&lt;br /&gt;
** With special-case models such as first person weapons or cockpits, if part of the model is always particularly close to the screen then more UV space should be used.&lt;br /&gt;
* Where UV space is limited, try tiling textures as much as is possible. In most cases this will mean subdividing the mesh but generally texture space is more precious than polygon count.&lt;br /&gt;
* Pack UVs as tightly as possible (while still leaving a 4 or 5 pixel gap around each part, to prevent seams showing up due to mip-mapping).&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=In-Game_Models&amp;diff=1473</id>
		<title>In-Game Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=In-Game_Models&amp;diff=1473"/>
		<updated>2007-10-15T17:11:34Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are the models that are displayed by the engine.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|In-Game Models}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
== Low-Poly Modelling Conventions ==&lt;br /&gt;
Tips and techniques for low-poly modelling.&lt;br /&gt;
&lt;br /&gt;
== UVW Unwrapping Conventions ==&lt;br /&gt;
{{:UV Unwrap Conventions}}&lt;br /&gt;
&lt;br /&gt;
== Making Collision Models ==&lt;br /&gt;
{{:Collision Meshes}}&lt;br /&gt;
&lt;br /&gt;
== Making Shadow Hulls ==&lt;br /&gt;
{{:Shadow Hulls}}&lt;br /&gt;
&lt;br /&gt;
== Vertex Colouring ==&lt;br /&gt;
{{:Vertex Colouring}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Animation&amp;diff=1472</id>
		<title>Animation</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Animation&amp;diff=1472"/>
		<updated>2007-10-15T17:11:20Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Animation overview to go here.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Category:Models&amp;diff=1471</id>
		<title>Category:Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Category:Models&amp;diff=1471"/>
		<updated>2007-10-15T17:10:44Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Articles related to modeling.&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=High-Poly_Models&amp;diff=1470</id>
		<title>High-Poly Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=High-Poly_Models&amp;diff=1470"/>
		<updated>2007-10-15T17:10:30Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Source models for creating normal maps.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|High-Poly Models}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== High-Poly Modelling Conventions ===&lt;br /&gt;
Subdivision modelling, sculpting etc.&lt;br /&gt;
&lt;br /&gt;
=== Workflow Tips ===&lt;br /&gt;
#Float detail, as the trace for the normal map only cares about the normal of the high poly polygon it hits it doesn't matter if the surface is layered. This works for detailing indents as well protruding geometry.&lt;br /&gt;
#Test the model in game/detail visible peices, it's easy to get carried away detailing high poly models. Testing the model in game as soon as possible allows you to run around it and decide where more detail needs to be added and where detail can be very basic. This is mostly dependant on what the player can see, having a solid test model all the way though the asset creation also means if something more important comes up you can easily and quickly finish work on this asset. It will also help you meet deadlines and allow more useful feedback.&lt;br /&gt;
#Pixel density defines poly detail, make sure that you have a realistic idea about how your high poly detail will translate to the normal map. Theres no use using more than one high poly polygon per normal map pixel&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Vehicle_Setup&amp;diff=1469</id>
		<title>Vehicle Setup</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Vehicle_Setup&amp;diff=1469"/>
		<updated>2007-10-15T17:09:16Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You can set up breakable vehicles by defining models to be detached when they damaged or destroyed.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Vehicle Setup}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Detachable Components =&lt;br /&gt;
&lt;br /&gt;
== Maya Setup ==&lt;br /&gt;
The model in Maya needs every detachable component as a separate object with a unique name. &lt;br /&gt;
&lt;br /&gt;
== Detachable Model ==&lt;br /&gt;
The detachable model should be exported to a static model (''lwo/obj/ase'') with relative orientation to the closest relevant joint. If the model is far away, problems may arise in game with the parts jittering around, to fix them try adding a closer joint.&lt;br /&gt;
&lt;br /&gt;
This model now needs a collision model, as an easy rule we can use a extruded pentagon deformed to roughly match the render model. If it gets too complicated the game will refuse to load it, if this happens try simplifying it.&lt;br /&gt;
&lt;br /&gt;
== Setup in Vehicle Script ==&lt;br /&gt;
&lt;br /&gt;
=== SimplePart Setup ===&lt;br /&gt;
A simple part needs to be set up in the vehicle script (''.vscript''). In ETQW, these scripts are kept in the ''base/vehicles'' folder. Here is an example, this is the right wing-mirror for the Armadillo:&lt;br /&gt;
&lt;br /&gt;
 simplePart {&lt;br /&gt;
 	&amp;quot;name&amp;quot;				&amp;quot;Right Mirror&amp;quot;&lt;br /&gt;
 	&amp;quot;surface1&amp;quot;			&amp;quot;m_right_mirror&amp;quot;&lt;br /&gt;
 	&amp;quot;surface2&amp;quot;			&amp;quot;s_right_mirror&amp;quot;&lt;br /&gt;
 	&amp;quot;joint&amp;quot;				&amp;quot;base&amp;quot;&lt;br /&gt;
 	&amp;quot;def_brokenPart&amp;quot;		&amp;quot;part_vehicle_badger_right_mirror&amp;quot;&lt;br /&gt;
 	&amp;quot;health&amp;quot; 			&amp;quot;10&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This definition should be placed within the main vehicle definition.&lt;br /&gt;
&lt;br /&gt;
* '''name''' is for your own reference.&lt;br /&gt;
* '''surface1''' is the first surface of the detachable model which the game detects being hit and hides, in this case it is a render model.&lt;br /&gt;
* '''surface2''' is the second surface the game hides. This is a simplified shadow model which has a different material to the render model and so has to be a separate object in maya. This section is unnecessary if there is no separate shadow model.&lt;br /&gt;
* '''joint''' is the joint the static model has been exported relative to.&lt;br /&gt;
* '''def_brokenPart''' is referencing the part setup shown below in the '''Part entityDef''' section.&lt;br /&gt;
* '''health''' is how much health the detachable component has (how much damage it can take before detaching). If this value is set to 0 the component will not detach until the vehicle's total health falls to zero and everything comes off in one go.&lt;br /&gt;
&lt;br /&gt;
=== Part entityDef ===&lt;br /&gt;
&lt;br /&gt;
The part entity defines more parameters of the detachable component, including the most important one, the static model it references.&lt;br /&gt;
&lt;br /&gt;
 entityDef part_vehicle_badger_right_mirror {&lt;br /&gt;
 	useTemplate templates/vehicles/destroyedParts &amp;lt;&lt;br /&gt;
 			&amp;quot;models/vehicles/edf_badger/parts/right_mirror.lwo&amp;quot;,&lt;br /&gt;
 			&amp;quot;0 -200 700&amp;quot;,&lt;br /&gt;
 			&amp;quot;0 0 2&amp;quot;,&lt;br /&gt;
 			&amp;quot;vehicles/misc/debris/glass_small&amp;quot;,&lt;br /&gt;
 			&amp;quot;0.1&amp;quot;&lt;br /&gt;
 		&amp;gt;&lt;br /&gt;
 	&amp;quot;climate_skin_key&amp;quot;				&amp;quot;badger&amp;quot;&lt;br /&gt;
 	&amp;quot;priority&amp;quot;					&amp;quot;0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This is placed straight into the ''.vscript'', it is not enclosed in any other definitions.&lt;br /&gt;
&lt;br /&gt;
The first section of this is referencing a template. This template has the parameters, however the defaults are usually ok. &lt;br /&gt;
&lt;br /&gt;
 ModelParm,&lt;br /&gt;
 VelocityParm 		= &amp;quot;500 0 0&amp;quot;,&lt;br /&gt;
 AngularVelParm 		= &amp;quot;2 4 10&amp;quot;,&lt;br /&gt;
 SoundBounceParm		= &amp;quot;vehicles/misc/debris/metal_medium&amp;quot;,&lt;br /&gt;
 BouncynessParm 		= &amp;quot;0.25&amp;quot;,&lt;br /&gt;
 FrictionParm 		= &amp;quot;0.5&amp;quot;,&lt;br /&gt;
 DensityParm		= &amp;quot;0.01&amp;quot;,&lt;br /&gt;
 TrailParm 		= &amp;quot;effects/vehicles/generic_debris&amp;quot;,&lt;br /&gt;
 LifeTimeParm 		= &amp;quot;10&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
The ones you will want to change are the &amp;quot;ModelParm&amp;quot; (to be the static model you exported from Maya) and possibly the &amp;quot;SoundBounceParm&amp;quot; and the &amp;quot;TrailParm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== General Tips ==&lt;br /&gt;
* Try to avoid making long, thin detachable components as the game has trouble handling them.&lt;br /&gt;
* Physics calculations are very expensive, try and keep the detachable components as simple and few as possible, particularly when (like in ETQW) there is the possibility of a sudden mass death where multiple vehicles could be instantly destroyed!&lt;br /&gt;
* If there are too many detachable components at once the game will remove them! You may end up with the game removing the larger ones.&lt;br /&gt;
* Collision models can cope with polygons with more than 3 sides. The game automatically treats co-planar triangles as one polygon. Less polygons in the collision models is much better!&lt;br /&gt;
* Components with 0 health will appear when the vehicle is totally destroyed, e.g. the vehicle's main hull or parts that cannot be shot off.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]][[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Imposters&amp;diff=1468</id>
		<title>Imposters</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Imposters&amp;diff=1468"/>
		<updated>2007-10-15T17:08:58Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Imposters are a way of more cheaply rendering complex models in the distance. Distant models are replaced by a special sprite, this sprite is rendered using a bump and diffuse map so it can be lit like the real thing. These maps can be automatically generated using the imposter tool. In ETQW, imposters are generally used for rendering trees, bushes and other foliage cheaply in the distance.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Imposters}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
As the imposter has a bumpmap it is independent of the lighting in your map; changing the lighting will also cause the imposters to change. As the bump &amp;amp; diffuse maps are precalculated based on the model you will have to regenerate the imposter if your model or the model's textures change.&lt;br /&gt;
&lt;br /&gt;
= Creating an Imposter =&lt;br /&gt;
To create an imposter you first have to make an &amp;quot;imposterGenerator&amp;quot; declaration. This specifies what models to use, the names of the output textures and materials and some extra options. The structure is as follows:&lt;br /&gt;
 imposterGenerator imposters/myfolder/mymodel {&lt;br /&gt;
 	sourceModel	models/myfolder/mymodel.lwo&lt;br /&gt;
 	outputTexture	models/myfolder/mymodel.tga&lt;br /&gt;
 	numAngles	8&lt;br /&gt;
 	tileSize	64 128&lt;br /&gt;
 	vertexColored&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The options are:&lt;br /&gt;
* '''sourceModel''' - The model you want to render to the sprites from.&lt;br /&gt;
* '''outputTexture''' - The TGA file you want to save the sprites in. Generally keeping this in the same folder as the model makes sense, since it's easy to find.&lt;br /&gt;
* '''numAngles''' - The number of angles to generate &amp;quot;sprites&amp;quot; for. More angles will look better, but take more texture memory. Generally, radially similar models need less angles than asymmetrical objects.&lt;br /&gt;
* '''tileSize''' - Optional. Specifies the X and Y size in pixels that each sprite rotation should occupy in the destination TGA.&lt;br /&gt;
* '''vertexColored''' - Optional. Use this if your source model is rendered in the game using vertex colors.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
All declarations like this should be saved as '''.imp''' files in the ''base/imposters'' folder. You can have as many &amp;quot;imposterGenerator&amp;quot; declarations in a single .imp file as you want, for example you could keep all imposterGenerator declarations for palm tree models in ''base/imposters/generate_palm.imp''.&lt;br /&gt;
&lt;br /&gt;
= Generating an Imposter =&lt;br /&gt;
&lt;br /&gt;
Run the console command &amp;quot;'''imposter [imposterGenerator name]'''&amp;quot; to (re)create the necessary imposter textures (for the above example, you would type '''imposter imposters/myfolder/mymodel''' in the console). This will do the following:&lt;br /&gt;
* Render the model sprites and save them in the specified tga&lt;br /&gt;
* Create a new &amp;quot;imposter&amp;quot; declaration in imposters.imp&lt;br /&gt;
* Create a new material in imposters.mtr&lt;br /&gt;
In theory none of these things should be modified by hand, just re-run the &amp;quot;imposter&amp;quot; command. You can also regenerate all imposters in the game by typing &amp;quot;imposter all&amp;quot; in the console.&lt;br /&gt;
&lt;br /&gt;
= Using Imposters in Your Map =&lt;br /&gt;
Any entity can have an &amp;quot;imposter&amp;quot; key, the value of this key should be set to match the ''imposterGenerator'' name. The model of that entity will then be replaced by the imposter based on distance (Note that MaxVisDist is ignored for imposters).&lt;br /&gt;
You can also place an imposter in you map using &amp;quot;misc_imposter&amp;quot;, in this case the imposter will '''always''' be rendered, never the model. These are more efficient for out of bounds objects than just placing a func_static with an imposter on it (you may still give them a model key so they look similar in Radiant, but the game will only render the imposter).&lt;br /&gt;
&lt;br /&gt;
= Considerations for Imposters =&lt;br /&gt;
* They take some texture memory, so don't start doing imposters for every small pebble.&lt;br /&gt;
* The &amp;quot;symmetry&amp;quot; of the base model should be along the z-axis, so say you wanted a pillar that has fallen over, it may be better to model it standing upright and then rotate it using the angles key of the entity. That will ensure the least visual distortion is caused by the imposter.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Models]] [[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Category:Tutorials&amp;diff=1467</id>
		<title>Category:Tutorials</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Category:Tutorials&amp;diff=1467"/>
		<updated>2007-10-15T17:08:21Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tutorial Articles.&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Taking_A_Screenshot&amp;diff=1466</id>
		<title>Taking A Screenshot</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Taking_A_Screenshot&amp;diff=1466"/>
		<updated>2007-10-15T17:08:07Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the settings we use when taking promotional screenshots for ETQW:&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
== Before Loading Map ==&lt;br /&gt;
Firstly, make sure you are running the game in a 16:9 widescreen resolution and aspect ratio.&lt;br /&gt;
To make sure you are using the highest-resolution textures, set this cvar in the console ''then restart the game'':&lt;br /&gt;
* '''image_picmipEnable 0''' - This turns off any &amp;quot;picmip&amp;quot; settings individual materials may use.&lt;br /&gt;
&lt;br /&gt;
When back in the game, set this value in the console:&lt;br /&gt;
* '''r_md5usehardwareskinning 0'''&lt;br /&gt;
&lt;br /&gt;
== After Loading Map ==&lt;br /&gt;
Set these values in the console (or put them all in a ''.cfg'' file and exec that):&lt;br /&gt;
* '''image_anisotropy 8''' - Uses best texture filtering.&lt;br /&gt;
* '''r_md5LodBias -9999''' - Draw models at best detail to further distance.&lt;br /&gt;
* '''r_stuffFadeEnd 10000''' - STUFF draw distance end (makes grass draw to a further range).&lt;br /&gt;
* '''r_stuffFadeStart 9000''' - STUFF draw distance start (makes grass draw to a further range).&lt;br /&gt;
* '''r_useMaxVisDist 0''' - Turn off distance culling. ''Beware, this may cause &amp;quot;minVisDist&amp;quot; models to be drawn all the time, which is bad!''&lt;br /&gt;
* '''r_visDistMult 1.2''' - Push detail distance back a bit.&lt;br /&gt;
* '''r_skipImposters 1''' - Turns off billboard sprite LODs.&lt;br /&gt;
* '''g_skipPostProcess 0''' - Make sure post-processing is on.&lt;br /&gt;
* '''ui_showGun 0''' - Don’t draw the firstperson weapon models.&lt;br /&gt;
* '''g_showHUD 0''' - Don’t draw the HUD.&lt;br /&gt;
* '''com_showFPS 0''' - Don’t show frame-rate counter.&lt;br /&gt;
* '''con_noPrint 1''' - Don’t show console output on screen.&lt;br /&gt;
* '''r_aspectRatio 1''' - Make sure we are in 16:9 aspect ratio.&lt;br /&gt;
* '''bind F11 &amp;quot;screenshot 2560 1440 8&amp;quot;''' - Set F11 to take a high-resolution, 8x antialiased screenshot.&lt;br /&gt;
&lt;br /&gt;
== Field of View ==&lt;br /&gt;
&lt;br /&gt;
Lowering the Field of View ('''g_Fov &amp;lt;angle&amp;gt;''' in the console) will help fight camera distortion, but lowering the FOV too far from the default 90 will cause the MegaTexture to look lower resolution. This can be countered to some extent by freezing the MegaTexture tile loading at the point of focus of the shot by entering '''r_skipMegaTexture 1''' into the console and then tracking back to the appropriate camera position.&lt;br /&gt;
&lt;br /&gt;
== Lighting ==&lt;br /&gt;
&lt;br /&gt;
For tweaking the atmosphere settings of the scene you can type '''editAtmos''' while the game is running windowed to launch the [[Atmosphere Editor]]. Here you can select from a predefined list of atmospheres, or tweak an existing one. It is not recommended that you move the sun angle too much from its original location as the predefined lighting on the MegaTexture will start to look wrong. For a specific shot you can play quite a lot with the ambient light tab, to improve the lighting on the intended screenshot subject(s).&lt;br /&gt;
&lt;br /&gt;
== NoClipping ==&lt;br /&gt;
&lt;br /&gt;
To move around the scene it's best to use the free fly mode. Type '''noclip''' in the console. To adjust your movement speed use '''pm_noclipspeed &amp;lt;speed&amp;gt;''' (200 is the default, 100 is slower 300 is faster, etc). You should also be able to hold down the Shift key to temporarily move at a faster speed (which itself can be changed with the '''pm_noclipspeedsprint''' cvar).&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=1465</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=1465"/>
		<updated>2007-10-15T17:07:34Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: /* Making a Terrain Model */ Placeholder link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__= '''Tutorials''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Taking A Screenshot]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Taking A Screenshot]]''' - Settings and options for making a great screenshot!&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Making a Terrain Model]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Making a Terrain Model|Step 1]]''' - Create a terrain mesh for your map.&lt;br /&gt;
* More to go here, temp for now.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== [[Vehicle Tutorial]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Vehicle Tutorial Part 1|Step 1]]''' - Design considerations, before you do anything else!&lt;br /&gt;
* '''[[Vehicle Tutorial Part 2|Step 2]]''' - Initial rough model, rig and basic script.&lt;br /&gt;
* '''[[Vehicle Tutorial Part 3|Step 3]]''' - More advanced rig and scripting.&lt;br /&gt;
* '''[[Vehicle Tutorial Part 4|Step 4]]''' - Further technical setup ideas.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= '''Code''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Vehicle Scripting]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Vehicle Scripting: Basic_Overview|Basic Overview]]''' - Introduction to vehicle setup.&lt;br /&gt;
* '''[[Vehicle Scripting: Entity_Definition|Entity Definition]]''' - One definition to rule them all!&lt;br /&gt;
* '''[[Vehicle Scripting: Vehicle_Definition|Vehicle Definition]]''' - Introduction to the ''.vscript'' file.&lt;br /&gt;
* '''[[Vehicle Scripting: Positions_&amp;amp;_Views|Positions &amp;amp; Views]]''' - Configuring player positions &amp;amp; camera views.&lt;br /&gt;
* '''[[Vehicle Scripting: Components|Components]]''' - Details of various vehicle components.&lt;br /&gt;
* '''[[Vehicle Scripting: Weapons|Weapons]]''' - Things that go boom!&lt;br /&gt;
* '''[[Vehicle Scripting: IK|IK]]''' - Inverse Kinematics &amp;amp; you...&lt;br /&gt;
* '''[[Vehicle Scripting: Cockpits|Cockpits]]''' - Cockpit setup.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Entity Scripting]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[EntityClass:Overview|Classes]]''' - Tree of entity types.&lt;br /&gt;
* '''[[ScriptEvent:List|Events]]''' - List of all script events.&lt;br /&gt;
* '''[[Scripting:Examples|Examples]]''' - Some example walkthoughs of building up a scripted entity.&lt;br /&gt;
* '''[[Script:Files|Script Files]]''' - List of the script files used by the game.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[GUIs]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[GUIs: Event Based Scripting|Event Based Scripting]]''' - GUIs are event-based.&lt;br /&gt;
* '''[[GUIs: Materials|Materials]]''' - Using materials in GUIs.&lt;br /&gt;
* '''[[GUIs: Transitions|Transitions]]''' - Transitions.&lt;br /&gt;
* '''[[GUIs: Templates|Templates]]''' - Using templates in GUIs.&lt;br /&gt;
* '''[[GUIs: List Enumeration|List Enumeration]]''' - List enumerations.&lt;br /&gt;
* '''[[GUIs: Properties|Properties]]''' - Player/Global properties and more.&lt;br /&gt;
* '''[[GUIs: Timelines|Timelines]]''' - GUI timelines.&lt;br /&gt;
* '''[[GUIs: Layouts|Layouts]]''' - Window layouts.&lt;br /&gt;
* '''[[Reference (GUIs)|Reference]]''' - GUI reference.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Design''' =&lt;br /&gt;
&lt;br /&gt;
= '''Art''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Models]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[In-Game Models]]''' - Making models for use in the engine.&lt;br /&gt;
* '''[[High-Poly Models]]''' - Making source models for baking normal maps.&lt;br /&gt;
* '''[[Renderbump]]''' - Create normal maps from high-poly geometry.&lt;br /&gt;
* '''[[Imposters]]''' - Sprites used for rendering complex models cheaply at a distance.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Animation]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[MD5 Export Process]]''' - How to export an animated MD5.&lt;br /&gt;
* '''[[Vehicle Setup]]''' - How to set up a vehicle.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Textures]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Basic Texture Overview]]''' - Supported texture types and implementations.&lt;br /&gt;
* '''[[Texturesheets]]''' - Overview of what texturesheets are, and when to use them.&lt;br /&gt;
* '''[[The Atlas Editor]]''' - Create environment texture sheets to improve performance.&lt;br /&gt;
* '''[[RenderBumpFlat]]''' - Create normal-maps from high-poly geometry.&lt;br /&gt;
* '''[[Detail Textures]]''' - Add high-frequency detail to your textures.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Terrain Editing]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Making a Terrain Model]]''' - Create a terrain mesh for your map.&lt;br /&gt;
* '''[[Terrain Editor|EditWorld's Terrain Editor]]''' - Set up a Surface Tree for your MegaTexture.&lt;br /&gt;
* '''[[MegaBuild]]''' - Render and compile your MegaTexture.&lt;br /&gt;
* '''[[Water Surfaces#Water Models|Water Surfaces]]''' - Create water to go with your landscape.&lt;br /&gt;
* '''[[STUFF System]]''' - Procedurally distribute models over your terrain mesh.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Atmospheres and Effects]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Atmosphere Editor|The Atmosphere Editor]]''' - Create and edit atmospheres for your map.&lt;br /&gt;
* '''[[Ambient Light Editor|The Ambient Light Editor]]''' - Create and edit ambient light setups.&lt;br /&gt;
* '''[[Environment Maps]]''' - Used for reflection effects.&lt;br /&gt;
* '''[[Water Surfaces]]''' - Creating water effects.&lt;br /&gt;
* '''[[Effects Editor|The Effects Editor]]''' - Create and edit particle effects.&lt;br /&gt;
* '''[[Cheap Decals]]''' - Bulletholes and other collision decals.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=1464</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=1464"/>
		<updated>2007-10-15T17:07:12Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: /* Vehicle Tutorial */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__= '''Tutorials''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Taking A Screenshot]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Taking A Screenshot]]''' - Settings and options for making a great screenshot!&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Making a Terrain Model]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Step 1]]''' - Create a terrain mesh for your map.&lt;br /&gt;
* More to go here, temp for now.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== [[Vehicle Tutorial]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Vehicle Tutorial Part 1|Step 1]]''' - Design considerations, before you do anything else!&lt;br /&gt;
* '''[[Vehicle Tutorial Part 2|Step 2]]''' - Initial rough model, rig and basic script.&lt;br /&gt;
* '''[[Vehicle Tutorial Part 3|Step 3]]''' - More advanced rig and scripting.&lt;br /&gt;
* '''[[Vehicle Tutorial Part 4|Step 4]]''' - Further technical setup ideas.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= '''Code''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Vehicle Scripting]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Vehicle Scripting: Basic_Overview|Basic Overview]]''' - Introduction to vehicle setup.&lt;br /&gt;
* '''[[Vehicle Scripting: Entity_Definition|Entity Definition]]''' - One definition to rule them all!&lt;br /&gt;
* '''[[Vehicle Scripting: Vehicle_Definition|Vehicle Definition]]''' - Introduction to the ''.vscript'' file.&lt;br /&gt;
* '''[[Vehicle Scripting: Positions_&amp;amp;_Views|Positions &amp;amp; Views]]''' - Configuring player positions &amp;amp; camera views.&lt;br /&gt;
* '''[[Vehicle Scripting: Components|Components]]''' - Details of various vehicle components.&lt;br /&gt;
* '''[[Vehicle Scripting: Weapons|Weapons]]''' - Things that go boom!&lt;br /&gt;
* '''[[Vehicle Scripting: IK|IK]]''' - Inverse Kinematics &amp;amp; you...&lt;br /&gt;
* '''[[Vehicle Scripting: Cockpits|Cockpits]]''' - Cockpit setup.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Entity Scripting]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[EntityClass:Overview|Classes]]''' - Tree of entity types.&lt;br /&gt;
* '''[[ScriptEvent:List|Events]]''' - List of all script events.&lt;br /&gt;
* '''[[Scripting:Examples|Examples]]''' - Some example walkthoughs of building up a scripted entity.&lt;br /&gt;
* '''[[Script:Files|Script Files]]''' - List of the script files used by the game.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[GUIs]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[GUIs: Event Based Scripting|Event Based Scripting]]''' - GUIs are event-based.&lt;br /&gt;
* '''[[GUIs: Materials|Materials]]''' - Using materials in GUIs.&lt;br /&gt;
* '''[[GUIs: Transitions|Transitions]]''' - Transitions.&lt;br /&gt;
* '''[[GUIs: Templates|Templates]]''' - Using templates in GUIs.&lt;br /&gt;
* '''[[GUIs: List Enumeration|List Enumeration]]''' - List enumerations.&lt;br /&gt;
* '''[[GUIs: Properties|Properties]]''' - Player/Global properties and more.&lt;br /&gt;
* '''[[GUIs: Timelines|Timelines]]''' - GUI timelines.&lt;br /&gt;
* '''[[GUIs: Layouts|Layouts]]''' - Window layouts.&lt;br /&gt;
* '''[[Reference (GUIs)|Reference]]''' - GUI reference.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Design''' =&lt;br /&gt;
&lt;br /&gt;
= '''Art''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Models]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[In-Game Models]]''' - Making models for use in the engine.&lt;br /&gt;
* '''[[High-Poly Models]]''' - Making source models for baking normal maps.&lt;br /&gt;
* '''[[Renderbump]]''' - Create normal maps from high-poly geometry.&lt;br /&gt;
* '''[[Imposters]]''' - Sprites used for rendering complex models cheaply at a distance.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Animation]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[MD5 Export Process]]''' - How to export an animated MD5.&lt;br /&gt;
* '''[[Vehicle Setup]]''' - How to set up a vehicle.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Textures]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Basic Texture Overview]]''' - Supported texture types and implementations.&lt;br /&gt;
* '''[[Texturesheets]]''' - Overview of what texturesheets are, and when to use them.&lt;br /&gt;
* '''[[The Atlas Editor]]''' - Create environment texture sheets to improve performance.&lt;br /&gt;
* '''[[RenderBumpFlat]]''' - Create normal-maps from high-poly geometry.&lt;br /&gt;
* '''[[Detail Textures]]''' - Add high-frequency detail to your textures.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Terrain Editing]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Making a Terrain Model]]''' - Create a terrain mesh for your map.&lt;br /&gt;
* '''[[Terrain Editor|EditWorld's Terrain Editor]]''' - Set up a Surface Tree for your MegaTexture.&lt;br /&gt;
* '''[[MegaBuild]]''' - Render and compile your MegaTexture.&lt;br /&gt;
* '''[[Water Surfaces#Water Models|Water Surfaces]]''' - Create water to go with your landscape.&lt;br /&gt;
* '''[[STUFF System]]''' - Procedurally distribute models over your terrain mesh.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Atmospheres and Effects]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Atmosphere Editor|The Atmosphere Editor]]''' - Create and edit atmospheres for your map.&lt;br /&gt;
* '''[[Ambient Light Editor|The Ambient Light Editor]]''' - Create and edit ambient light setups.&lt;br /&gt;
* '''[[Environment Maps]]''' - Used for reflection effects.&lt;br /&gt;
* '''[[Water Surfaces]]''' - Creating water effects.&lt;br /&gt;
* '''[[Effects Editor|The Effects Editor]]''' - Create and edit particle effects.&lt;br /&gt;
* '''[[Cheap Decals]]''' - Bulletholes and other collision decals.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_4&amp;diff=1463</id>
		<title>Vehicle Tutorial Part 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_4&amp;diff=1463"/>
		<updated>2007-10-15T17:06:44Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Advanced Scripting ==&lt;br /&gt;
&lt;br /&gt;
There are a plethora of other things you can do with your vehicle to set it up. I'm going to go into some of them here.&lt;br /&gt;
&lt;br /&gt;
=== Vehicle HUD ===&lt;br /&gt;
&lt;br /&gt;
When you are in a vehicle in ETQW a HUD section is added in the bottom left showing details about the vehicle - health, passengers, etc. These are quite simple to create, as they are all done through templates. The only new asset you need to create is an icon for it - it should be pretty easy from looking at the existing icons. They're made up from a border and a fill image, a couple of examples are &amp;lt;tt&amp;gt;guis/assets/icons/vehicles/gdf_top_husky_border.tga&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;guis/assets/icons/vehicles/gdf_top_husky_fill.tga&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
To make the material you'll need to create a new &amp;lt;tt&amp;gt;.mtr&amp;lt;/tt&amp;gt; file and place it in a &amp;lt;tt&amp;gt;materials&amp;lt;/tt&amp;gt; directory in your mod directory. I'm calling mine &amp;lt;tt&amp;gt;buggy_tute.mtr&amp;lt;/tt&amp;gt;. The material is created using a template, so we'll need to include the template file before we can create the material. Here is the result for mine. Note that I'm reusing the Husky's icon:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 #include &amp;lt;materials/guis/hud/gdf.include&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 material guis/assets/hud/vehicles/buggy_tute&lt;br /&gt;
 {		&lt;br /&gt;
     _vehicle_icon( &amp;quot;guis/assets/icons/vehicles/gdf_top_husky&amp;quot; )&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now you can make the GUI. You'll need to make a &amp;lt;tt&amp;gt;.gui&amp;lt;/tt&amp;gt; file and place this in a &amp;lt;tt&amp;gt;guis&amp;lt;/tt&amp;gt; directory in your mod directory. I'm calling mine &amp;lt;tt&amp;gt;buggy_tute.gui&amp;lt;/tt&amp;gt;. Again, we'll need to include a template file first:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 #include &amp;lt;guis/game/vehicles/gdf/cockpits.include&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 gui guis/vehicles/buggy_tute {&lt;br /&gt;
     properties {&lt;br /&gt;
         float flags = immediate( flags ) | GUI_FULLSCREEN;&lt;br /&gt;
     }&lt;br /&gt;
     materials {&lt;br /&gt;
         &amp;quot;icon&amp;quot;		&amp;quot;guis/assets/hud/vehicles/buggy_tute&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     _class_icons&lt;br /&gt;
     _base_icon&lt;br /&gt;
     _hud_materials&lt;br /&gt;
     _position( 0, 1.5, 10 )&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next add the following key to the &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;gui_vehicle&amp;quot;                   &amp;quot;guis/vehicles/buggy_tute&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Vehicles]]&lt;br /&gt;
[[Category:Tutorials]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_3&amp;diff=1462</id>
		<title>Vehicle Tutorial Part 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_3&amp;diff=1462"/>
		<updated>2007-10-15T17:06:16Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''More Advanced Joints''' ==&lt;br /&gt;
[[Image:buggy_rough_rig2.jpg|frame|right|More advanced vehicle rig showing the joint positions and names.]]&lt;br /&gt;
You can now add extra joints as needed for more passengers, gunners, suspension, effects locations and exit points.&lt;br /&gt;
* '''Passengers''' - For each passenger you want to add, you will need a joint for the player location, and a joint for their first-person camera view.&lt;br /&gt;
* '''Gunners''' - This can be set up like a passenger, but with more scripting needed, as described in the Scripting section below.&lt;br /&gt;
* '''Suspension''' - These joints should be parented to the origin joint, and have the related wheel joint as a child.&lt;br /&gt;
* '''Exit points''' - These joints define more places that players may appear when they exit the vehicle.&lt;br /&gt;
* '''Effects locations''' - Used as an attachment location for effects such as smoke and fire when the vehicle is damaged.&lt;br /&gt;
&lt;br /&gt;
=== '''Related Files''' ===&lt;br /&gt;
----&lt;br /&gt;
* [[Media:buggy_tute_step2.max|More advanced rig example (3ds max 8 format)]]&lt;br /&gt;
* [[Media:buggy_tute_step2.mb|More advanced rig example (Maya 7 format)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''More Scripting''' ==&lt;br /&gt;
&lt;br /&gt;
In Part 2 you learnt how to get your vehicle into the game in a very rough state. Here we are going to expand on what we developed last time to improve it&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Suspension ===&lt;br /&gt;
----&lt;br /&gt;
Now that we have suspension joints we can hook them up so that we can see the wheels moving up and down, following the ground. To the &amp;lt;tt&amp;gt;text&amp;lt;/tt&amp;gt; part of the wheel template add the following line:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;suspension&amp;quot;                    &amp;quot;vehicle_buggy_tute_FrontBackParm_LeftRightParm_suspension&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This makes the wheel look for a &amp;lt;tt&amp;gt;stringMap&amp;lt;/tt&amp;gt; to describe the suspension. The simplest type is &amp;lt;tt&amp;gt;vertical&amp;lt;/tt&amp;gt;, which is the one we are going to use here:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 stringMap vehicle_buggy_tute_front_right_suspension {&lt;br /&gt;
     &amp;quot;type&amp;quot;                          &amp;quot;vertical&amp;quot;&lt;br /&gt;
     &amp;quot;joint&amp;quot;                         &amp;quot;front_right_suspension&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 stringMap vehicle_buggy_tute_front_left_suspension {&lt;br /&gt;
     &amp;quot;type&amp;quot;                          &amp;quot;vertical&amp;quot;&lt;br /&gt;
     &amp;quot;joint&amp;quot;                         &amp;quot;front_left_suspension&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 stringMap vehicle_buggy_tute_rear_right_suspension {&lt;br /&gt;
     &amp;quot;type&amp;quot;                          &amp;quot;vertical&amp;quot;&lt;br /&gt;
     &amp;quot;joint&amp;quot;                         &amp;quot;rear_right_suspension&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 stringMap vehicle_buggy_tute_rear_left_suspension {&lt;br /&gt;
     &amp;quot;type&amp;quot;                          &amp;quot;vertical&amp;quot;&lt;br /&gt;
     &amp;quot;joint&amp;quot;                         &amp;quot;rear_left_suspension&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These can go in the vscript file, outside the &amp;lt;tt&amp;gt;vehicleDef&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Shooting it ===&lt;br /&gt;
----&lt;br /&gt;
At the moment your vehicle will not take damage when people shoot it - this is because it does not fit in any of the target lists used by the bullet damage definitions. To put it into these target lists we need to add the vehicle to some &amp;quot;collections&amp;quot;. You'll need to add it to the following collections by adding these keys to the &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;collection_antivehicle&amp;quot;       &amp;quot;antivehicle&amp;quot;&lt;br /&gt;
     &amp;quot;collection_vehicles_light&amp;quot;    &amp;quot;vehicles_light&amp;quot;&lt;br /&gt;
     &amp;quot;collection_vehicles_gdf&amp;quot;      &amp;quot;vehicles_gdf&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first of these allows it to be targeted by anti-vehicle turrets. The second marks it as being a light vehicle - this means it will take more damage from bullets than if it were markes as a heavy vehicle. The last one allows it to be damaged by various map entities, for example Strogg energy walls.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Damage Effects ===&lt;br /&gt;
----&lt;br /&gt;
You'll probably now notice that your vehicle will have flames/smoke coming from the origin of the model when it gets significantly damaged. This is where your damage effect joint comes in - again, these keys go in the &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;joint_damage_smoke&amp;quot;           &amp;quot;effects&amp;quot;&lt;br /&gt;
     &amp;quot;joint_damage_fire&amp;quot;            &amp;quot;effects&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will make the damage effects play at the joint named &amp;lt;tt&amp;gt;effects&amp;lt;/tt&amp;gt;. You can adjust the effects that play, and when they play, with the following keys:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
    &amp;quot;damage_smoke&amp;quot;                  &amp;quot;70&amp;quot;&lt;br /&gt;
    &amp;quot;damage_level1&amp;quot;                 &amp;quot;50&amp;quot;&lt;br /&gt;
    &amp;quot;damage_level2&amp;quot;                 &amp;quot;30&amp;quot;&lt;br /&gt;
    &amp;quot;damage_level3&amp;quot;                 &amp;quot;10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;fx_damage_level_smoke&amp;quot;         &amp;quot;effects/vehicles/generic_smoke&amp;quot;&lt;br /&gt;
    &amp;quot;fx_damage_level1&amp;quot;              &amp;quot;effects/vehicles/vehicle_flames_small&amp;quot;&lt;br /&gt;
    &amp;quot;fx_damage_level2&amp;quot;              &amp;quot;effects/vehicles/vehicle_flames_medium&amp;quot;&lt;br /&gt;
    &amp;quot;fx_damage_level3&amp;quot;              &amp;quot;effects/vehicles/vehicle_flames_large&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The smoke effect will play at the same time as the damage level 1, 2, or 3 effects. When the vehicle's health drops below the value specified by &amp;lt;tt&amp;gt;&amp;quot;damage_smoke&amp;quot;&amp;lt;/tt&amp;gt; etc the corresponding effect will be played. I have given the default values here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Collision Damage ===&lt;br /&gt;
----&lt;br /&gt;
Your vehicle will not currently do any damage to anything else in a collision. For this you'll need to make a new damage type for the collision:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 damageDef damage_buggy_tute_collide {&lt;br /&gt;
     damage                          &amp;quot;damage_buggy_tute_collide&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     team_kill_cvar                  &amp;quot;g_allowComplaint_vehicles&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     tt_obituary                     &amp;quot;tooltips/killmsgs/vehicles/buggy_tute&amp;quot;&lt;br /&gt;
     tt_obituary_unknown             &amp;quot;tooltips/killmsgs/vehicles/buggy_tute/empty&amp;quot;&lt;br /&gt;
     tt_obituary_team_kill           &amp;quot;tooltips/killmsgs/vehicles/buggy_tute/teamkill&amp;quot;&lt;br /&gt;
     tt_obituary_self                &amp;quot;tooltips/killmsgs/vehicles/driving&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 damageFilter damage_buggy_tute_collide {&lt;br /&gt;
     type {&lt;br /&gt;
         target  &amp;quot;target_player_all&amp;quot;&lt;br /&gt;
         damage  100&lt;br /&gt;
     }&lt;br /&gt;
     type {&lt;br /&gt;
         target  &amp;quot;target_veh_all&amp;quot;&lt;br /&gt;
         damage  100&lt;br /&gt;
     }&lt;br /&gt;
     type {&lt;br /&gt;
         target  &amp;quot;target_supply_crate&amp;quot;&lt;br /&gt;
         damage  200&lt;br /&gt;
     }&lt;br /&gt;
     type {&lt;br /&gt;
         target  &amp;quot;target_deployables_all&amp;quot;&lt;br /&gt;
         damage  100&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I put these in the &amp;lt;tt&amp;gt;buggy_tute.def&amp;lt;/tt&amp;gt; file, below the vehicle's &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt;. This sets up a damage filter listing the target sets that are damaged by the vehicle, and values that scale the damage caused - the damage caused varies with the speed of the collision. The damage definition also specifies a cvar that can be used to enable and disable complaints for team kills by this damage type, and obituary names. I'll describe how to set the obituaries up below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Name ===&lt;br /&gt;
----&lt;br /&gt;
Anything to be displayed on the HUD needs to be a localized string. Its pretty easy to create new strings, but there are a few files involved. First of all you'll want to create a few directories under your mod directory: &amp;lt;tt&amp;gt;localization&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;localization/locstr&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;localization/english&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;localization/english/strings&amp;lt;/tt&amp;gt;. Now create a couple of files to put your new strings in: &amp;lt;tt&amp;gt;localization/locstr/buggy_tute.locstr&amp;lt;/tt&amp;gt;, and &amp;lt;tt&amp;gt;localization/english/strings/buggy_tute.lang&amp;lt;/tt&amp;gt;. Into the &amp;lt;tt&amp;gt;locstr&amp;lt;/tt&amp;gt; files go &amp;lt;tt&amp;gt;locString&amp;lt;/tt&amp;gt; definitions, which are named strings that can have arguments. Into &amp;lt;tt&amp;gt;lang&amp;lt;/tt&amp;gt; files go tables of string values. This allows there to be &amp;lt;tt&amp;gt;lang&amp;lt;/tt&amp;gt; files for each language, having different strings for each language but with them all looking the same from the rest of the game's code &amp;amp; data.&lt;br /&gt;
&lt;br /&gt;
Into the &amp;lt;tt&amp;gt;locstr&amp;lt;/tt&amp;gt; file add:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 locString game/vec/buggy_tute {&lt;br /&gt;
     text &amp;quot;#str_10000100&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The number in the string is used to identify the number of the localized string in the &amp;lt;tt&amp;gt;lang&amp;lt;/tt&amp;gt; file. All strings in retail ETQW are numbered less than 10000000, so values over that are safe. I like to set aside a range of values for a category of strings - in this case I'm setting aside the range 10000100 -&amp;gt; 10000200 for this vehicle. This helps prevent the situation where you have to search through all the files to find an unused number.&lt;br /&gt;
* '''Note:''' You do not have to use this exact numbering scheme, for example to prevent conflicts you could call your string ''&amp;quot;#str_buggy_001&amp;quot;'' etc. This is slightly easier to remember and less potential string conflicts to worry about.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the &amp;lt;tt&amp;gt;lang&amp;lt;/tt&amp;gt; file all the strings must be between a pair of braces, so add:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;#str_10000100&amp;quot; &amp;quot;Buggy!&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Any further strings I add for this car I'll be adding in between the two braces.&lt;br /&gt;
You can now hook this up to the vehicle entity by changing the value of its &amp;lt;tt&amp;gt;&amp;quot;info_name&amp;quot;&amp;lt;/tt&amp;gt; key to &amp;lt;tt&amp;gt;&amp;quot;game/vec/buggy_tute&amp;quot;&amp;lt;/tt&amp;gt;. When you look at the vehicle in the game you should now see &amp;quot;Buggy!&amp;quot; :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Obituaries ===&lt;br /&gt;
----&lt;br /&gt;
There are three obituaries we need to fill in (we referenced them above when we made a collision damage definition). The strings for these are referenced via a tooltip definition, so we need to make those:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 tooltip tooltips/killmsgs/vehicles/buggy_tute {&lt;br /&gt;
     text &amp;quot;game/obit/buggy_tute&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 tooltip tooltips/killmsgs/vehicles/buggy_tute/empty {&lt;br /&gt;
     text &amp;quot;game/obit/buggy_tute_empty&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 tooltip tooltips/killmsgs/vehicles/buggy_tute/teamkill {&lt;br /&gt;
     text &amp;quot;game/obit/buggy_tute_team&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I added these at the end of the &amp;lt;tt&amp;gt;buggy_tute.def&amp;lt;/tt&amp;gt; file. Next we need to set up the localized string definitions for these:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 locString game/obit/buggy_tute {&lt;br /&gt;
     text &amp;quot;#str_10000101&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 locString game/obit/buggy_tute_empty {&lt;br /&gt;
     text &amp;quot;#str_10000102&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 locString game/obit/buggy_tute_team {&lt;br /&gt;
     text &amp;quot;#str_10000103&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And finally the actual localized strings:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;#str_10000101&amp;quot; &amp;quot;%b^0 &amp;amp;lbrBuggy&amp;amp;rbr %a&amp;quot;&lt;br /&gt;
     &amp;quot;#str_10000102&amp;quot; &amp;quot;&amp;amp;lbrBuggy&amp;amp;rbr %a&amp;quot;&lt;br /&gt;
     &amp;quot;#str_10000103&amp;quot; &amp;quot;%b^1 &amp;amp;lbrBuggy&amp;amp;rbr ^0%a&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These strings have some interesting escape sequences in them. &amp;lt;tt&amp;gt;%a&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;%b&amp;lt;/tt&amp;gt; are replaced with the names of the name of the killer and the killed respectively, &amp;lt;tt&amp;gt;&amp;amp;lbr&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;&amp;amp;rbr&amp;lt;/tt&amp;gt; are replaced by left square brackets and right square brackets respectively, and the caret ( &amp;lt;tt&amp;gt;^&amp;lt;/tt&amp;gt; ) symbol allows the text colour to be changed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Command Map ===&lt;br /&gt;
----&lt;br /&gt;
At the moment your vehicle won't be visible on the command map. This is easy fixed:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
    &amp;quot;icon_size_cm&amp;quot;                  &amp;quot;16&amp;quot;&lt;br /&gt;
    &amp;quot;mtr_commandmap&amp;quot;                &amp;quot;guis/assets/commandmap/icon_vehicle&amp;quot;&lt;br /&gt;
    &amp;quot;mtr_commandmap_unknown&amp;quot;        &amp;quot;guis/assets/commandmap/icon_vehicle&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first key sets the size of the icon and the other two set the material to be used for the icon. The unkown material isn't really important in this case, you should just set it to the same as the normal material as I have done here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Control Binding Context ===&lt;br /&gt;
----&lt;br /&gt;
In ETQW bindings can be context sensitive, and by using a series of cvars (one for each vehicle type) you can customize the control layout for each vehicle. To set the name of the context cvar your vehicle uses you can add the following key to your vehicle's &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;control_context&amp;quot;              &amp;quot;g_bind_context_buggy&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that you can call the cvar whatever you like. To create the cvar you will need to pull the console down and set it by typing something like &amp;lt;tt&amp;gt;set g_bind_context_buggy vehicle&amp;lt;/tt&amp;gt;. This can be included in config files with your mod to ensure people have the cvars created.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tuning the Steering ===&lt;br /&gt;
----&lt;br /&gt;
The default values for the steering tend to be pretty good for most cases. The steering works on the principle that there is a direction in which the player wants to go - by pressing left and right they alter the direction they want to go in. The game then tries to steer towards that direction. When driving a real car you automatically adjust the steering wheel as you go over bumps etc by feel - you do not get any of this feeling from a keyboard, normally by the time you see your car veering to one side from hitting a bump its already too late to correct it neatly. Keyboards are also an on/off input device, so making subtle corrections is very difficult. The game is essentially trying to compensate for your lack of this feeling of the road surface and make all the subtle adjustments you aren't able to make.&lt;br /&gt;
&lt;br /&gt;
There are a number of keys that can be set on the vehicle's &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt; to adjust the behaviour of the steering:&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| style=&amp;quot;background:#dfdfdf&amp;quot; | '''Key''' || style=&amp;quot;background:#dfdfdf&amp;quot; | '''Default Value''' || style=&amp;quot;background:#dfdfdf&amp;quot; | '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;steering_angle&amp;lt;/tt&amp;gt; || n/a || The maximum steering angle.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;simplesteer_forward_speed&amp;lt;/tt&amp;gt; || 2 || The speed at which the desired direction of movement will change due to player input while moving forward.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;simplesteer_reverse_speed&amp;lt;/tt&amp;gt; || -4 || The speed at which the desired direction of movement will change due to player input while moving in reverse.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;simplesteer_centering_speed_min&amp;lt;/tt&amp;gt; || 2 || The minimum speed at which the steering will tend to center back towards the current movement direction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;simplesteer_centering_speed_max&amp;lt;/tt&amp;gt; || 15 || The maximum speed at which the steering will tend to center back towards the current movement direction.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;simplesteer_centering_ramp_threshold&amp;lt;/tt&amp;gt; || 20 || The vehicle speed at which the centering speed will drop to the minimum value (as the vehicle speeds up the steering becomes less twitchy).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;simplesteer_centering_speed_air&amp;lt;/tt&amp;gt; || 0.5 || The speed at which the steering will tend to center back towards the current movement direction while the vehicle is airborne (so it doesn't lose the direction of movement too fast when jumping).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;simplesteer_reverse_angle_scale&amp;lt;/tt&amp;gt; || -0.5 || Scales the amount/direction of steering when moving in reverse.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For example if you wish the player's input to result in the vehicle turning faster you can increase &amp;lt;tt&amp;gt;simplesteer_forward_speed&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Engine Sounds ===&lt;br /&gt;
----&lt;br /&gt;
One thing thats our vehicle lacks so far is sound. ETQW wheeled vehicles use three looping samples that are cross-faded and pitched with varying speeds and accelerator input values. In addition to this there is an engine start sound and an engine stop sound for when the driver gets in or out. All of these things are defined in the &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Firstly you'll need to set the sound control method:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;sound_control&amp;quot;                 &amp;quot;wheeled&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to specify the samples to be used. We use an idle sample &amp;amp; a drive sample, where idle is cross-faded with the drive as speed increases, and a &amp;quot;hard acceleration&amp;quot; sample which is faded in and out with speed and input. This is meant to emulate the ferocious exhaust note you hear on a vehicle that is accelerating hard.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;snd_engine_start&amp;quot;              &amp;quot;sounds/vehicles/badger/engine/start&amp;quot;&lt;br /&gt;
     &amp;quot;snd_engine_stop&amp;quot;               &amp;quot;sounds/vehicles/badger/engine/stop&amp;quot;&lt;br /&gt;
     &amp;quot;snd_engine_idle&amp;quot;               &amp;quot;sounds/vehicles/badger/engine/idle&amp;quot;&lt;br /&gt;
     &amp;quot;snd_engine_drive&amp;quot;              &amp;quot;sounds/vehicles/badger/engine/drive&amp;quot;&lt;br /&gt;
     &amp;quot;snd_engine_hardaccel&amp;quot;          &amp;quot;sounds/vehicles/husky/engine/hardaccel&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In my case I'm reusing most of the sounds of the badger, but mixing in the husky acceleration sound to hopefully make it sound a bit more raw. &lt;br /&gt;
&lt;br /&gt;
The first few parameters control the change in pitch of the samples as the vehicle changes pitch:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;engine_pitch_low&amp;quot;              &amp;quot;1.5&amp;quot;&lt;br /&gt;
     &amp;quot;engine_pitch_high&amp;quot;             &amp;quot;2&amp;quot;&lt;br /&gt;
     &amp;quot;engine_speed_low&amp;quot;              &amp;quot;10&amp;quot;&lt;br /&gt;
     &amp;quot;engine_speed_high&amp;quot;             &amp;quot;150&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This sets the high &amp;amp; low levels of the pitch and the speeds at which they occur. At &amp;lt;tt&amp;gt;engine_speed_low&amp;lt;/tt&amp;gt; the pitch will be &amp;lt;tt&amp;gt;engine_pitch_low&amp;lt;/tt&amp;gt; and similarly for high speed. The pitch is linearly ramped between those two. The original pitch in the sample is 1, so 1.5 is 50% faster, and 0.5% is 50% slower.&lt;br /&gt;
&lt;br /&gt;
The next few parameters control engine &amp;quot;spooling&amp;quot; - this is meant to emulate the fact that an engine does not speed up or slow down instantly:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;engine_accel_spool_time&amp;quot;       &amp;quot;0.033&amp;quot;&lt;br /&gt;
     &amp;quot;engine_decel_spool_time&amp;quot;       &amp;quot;0.033&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is how long it takes for the &amp;quot;engine speed&amp;quot; to reach the actual speed of movement, in seconds. 0.033 is instant (1 / 30 -  ie, one 30fps game frame).&lt;br /&gt;
&lt;br /&gt;
Next are the volume settings for the idle and drive samples:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;engine_idle_min_speed&amp;quot;         &amp;quot;5.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_idle_max_speed&amp;quot;         &amp;quot;50.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_idle_min_vol&amp;quot;           &amp;quot;0.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_idle_max_vol&amp;quot;           &amp;quot;-50.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_idle_power&amp;quot;             &amp;quot;1.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_idle_fade_time&amp;quot;         &amp;quot;0.066&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     &amp;quot;engine_drive_min_speed&amp;quot;        &amp;quot;20.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_drive_max_speed&amp;quot;        &amp;quot;80.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_drive_min_vol&amp;quot;          &amp;quot;-20.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_drive_max_vol&amp;quot;          &amp;quot;-5.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_drive_power&amp;quot;            &amp;quot;0.3&amp;quot;&lt;br /&gt;
     &amp;quot;engine_drive_fade_time&amp;quot;        &amp;quot;0.066&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At the min speed the sample will be at min volume - at max speed the sample will be at max volume. The sample will change between the two depending on the power value. This adjusts the linearity of the curve - 1 is linear, greater than 1 is exponential (slow change at first, fast change later), and less than 1 (but greater than zero) changes fast at first and slowly later. The fade time governs how long it takes the sound to fade away when the engine is shut off. All volume settings are measured in decibels, with zero being the original sample volume.&lt;br /&gt;
&lt;br /&gt;
Next are the acceleration sound tuning parameters - these are much more complicated. First of all there are parameters to allow the pitch to be adjusted semi-independently of the idle and drive samples:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;engine_accel_pitch_mult&amp;quot;       &amp;quot;1.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_pitch_offset&amp;quot;     &amp;quot;0.5&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The pitch used for the other samples is subtracted from the minimum pitch, multiplied by the pitch multiplier and added to the offset. This effectively allows the pitch to change over a different range of values, given the same speed range, with the offset value giving the minimum. The pitch and the volume can also be adjusted based on the yaw speed of the vehicle (see the Titan/MCP for examples).&lt;br /&gt;
&lt;br /&gt;
The volume of the acceleration sound has three key points - a min, mid and a max value. Each has a speed and a corresponding volume, and the transition between min &amp;amp; mid and mid &amp;amp; max each have their own power values to adjust the linearity of the transition. It is also increased when going up steep slopes and when the player is accelerating, to emulate the engine straining.&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;engine_accel_min_speed&amp;quot;        &amp;quot;1.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_mid_speed&amp;quot;        &amp;quot;20.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_max_speed&amp;quot;        &amp;quot;80.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_min_vol&amp;quot;          &amp;quot;-5.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_mid_vol&amp;quot;          &amp;quot;5.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_max_vol&amp;quot;          &amp;quot;-3.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_power_low&amp;quot;        &amp;quot;0.1&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_power_high&amp;quot;       &amp;quot;5.0&amp;quot;&lt;br /&gt;
     &amp;quot;engine_accel_fade_time&amp;quot;        &amp;quot;0.0&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Overdrive Sounds ====&lt;br /&gt;
&lt;br /&gt;
There are default overdrive sound settings, but you may want to tweak those. They support pitch shifting much like the engine sounds:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;snd_overdrive&amp;quot;                 &amp;quot;sounds/vehicles/husky/overdrive&amp;quot;&lt;br /&gt;
     &amp;quot;snd_overdrive_stop&amp;quot;            &amp;quot;sounds/vehicles/husky/overdrive/stop&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;overdrive_pitch_low&amp;quot;           &amp;quot;0.9&amp;quot;&lt;br /&gt;
     &amp;quot;overdrive_pitch_high&amp;quot;          &amp;quot;1.5&amp;quot;&lt;br /&gt;
     &amp;quot;overdrive_speed_low&amp;quot;           &amp;quot;20&amp;quot;&lt;br /&gt;
     &amp;quot;overdrive_speed_high&amp;quot;          &amp;quot;90&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Sounds ===&lt;br /&gt;
----&lt;br /&gt;
There are a couple of other sounds used by vehicles - the horn, and the low health warning. These are dead easy to configure:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;snd_horn_loop&amp;quot;                 &amp;quot;sounds/vehicles/husky/horn&amp;quot;&lt;br /&gt;
     &amp;quot;snd_horn_stop&amp;quot;                 &amp;quot;sounds/vehicles/husky/horn/stop&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;snd_health_warn&amp;quot;               &amp;quot;sounds/vehicles/misc/warning/ground/gdf&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The keys used should be pretty self-explanatory for these!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;'''[[Vehicle Tutorial Part 4|Click here to continue on to Part 4 of the Vehicle Tutorial.]]'''&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
[[Category:Vehicles]]&lt;br /&gt;
[[Category:Tutorials]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_2&amp;diff=1461</id>
		<title>Vehicle Tutorial Part 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_2&amp;diff=1461"/>
		<updated>2007-10-15T17:06:01Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm going to assume you already know how to make a model in LightWave, Maya, or 3D Studio Max. The following tutorial contains specific things to be aware of when modelling vehicles for ET:QW.&lt;br /&gt;
&lt;br /&gt;
== '''Roughing Out The Model''' ==&lt;br /&gt;
[[Image:buggy_rough.jpg|frame|right|A rough vehicle model with GDF players for scale.]]&lt;br /&gt;
Firstly, and most importantly, don't rush into anything! Modelling a vehicle is a big project, and you need to consider a number of things before you get busy modelling.&lt;br /&gt;
The last thing you want is to get your model all detailed out in high-poly, then realise that you've forgotten to allow the wheels space to move, or the player doesn't fit inside. This will result in wasted time and effort.&lt;br /&gt;
&lt;br /&gt;
Instead, it makes sense to &amp;quot;rough out&amp;quot; your whole vehicle quickly, using basic shapes and without worrying about texturing or optimisation. Just model enough to make sure that your vehicle will drive well in-game, and be able to be used correctly by players. You can worry about fine details and texturing once it's sure that the design of the vehicle will cause no problems in-game.&lt;br /&gt;
&lt;br /&gt;
=== '''Scaling''' ===&lt;br /&gt;
* Import an existing ET:QW vehicle and player mesh into your scene to make sure your vehicle is scaled appropriately relative to them.&lt;br /&gt;
* Choose a player animation that will suit your vehicle (eg. set up the Badger driver player animation in [[EditWorld]] and export it as an .OBJ file). You can use this to get the size of your seats and position of the steering wheel correct.&lt;br /&gt;
&lt;br /&gt;
=== '''Texturing''' ===&lt;br /&gt;
* For the time being your vehicle doesn't need a &amp;quot;proper&amp;quot; texture ... you just need a placeholder [[Materials|material]] to make sure the model will show up in game. Either create your own material and placeholder texture, or use something like ''textures/concrete/concrete10'' for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''A Basic Vehicle Rig''' ==&lt;br /&gt;
Once your model is roughed out, you will be ready to add bones (referred to in ETQW as &amp;quot;joints&amp;quot;) and rig up your model to work in the game.&lt;br /&gt;
&lt;br /&gt;
=== '''Joints''' ===&lt;br /&gt;
[[Image:buggy_rough_rig.jpg|frame|right|Initial vehicle rig showing the joint positions and names.]]&lt;br /&gt;
Here is a list of the major joints you will need, and what they do. This is the absolute minimum needed to get a 4-wheeled vehicle with no suspension working in game. Further info on adding suspension or a second passenger/gunner can be found in Part 3 of this tutorial.&lt;br /&gt;
The joint names can be whatever you want, but bear in mind that you will have to refer to them by name in the VScript later, so naming them sensibly can save you a lot of time and avoids confusion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''With this setup, all joints should be parented to the ''origin'' joint.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| style=&amp;quot;background:#dfdfdf&amp;quot; | '''Joint Name''' ||style=&amp;quot;background:#dfdfdf&amp;quot;| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| ''origin'' || The root joint of the vehicle, it should be at 0,0,0 in the scene.&lt;br /&gt;
|-&lt;br /&gt;
| ''cam1'' || Used to position the player's first-person view when sitting inside the vehicle.&lt;br /&gt;
|-&lt;br /&gt;
| ''driver'' || Used to position the 3D player model within the vehicle. &lt;br /&gt;
|-&lt;br /&gt;
| ''exit1'' || The location where the player will try to get out of the vehicle.&lt;br /&gt;
|-&lt;br /&gt;
| ''front_left_wheel'' || The point that the front left wheel will rotate around. &lt;br /&gt;
|-&lt;br /&gt;
| ''front_right_wheel'' || The point that the front right wheel will rotate around.&lt;br /&gt;
|-&lt;br /&gt;
| ''rear_left_wheel'' || The point that the rear left wheel will rotate around.&lt;br /&gt;
|-&lt;br /&gt;
| ''rear_right_wheel'' || The point that the rear right wheel will rotate around.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Important note:''' all joints should be aligned so that they face forward along the world's X axis, and their local Z axis should point upwards. If not, you may find that your wheels or player view are rotated incorrectly in the game.&lt;br /&gt;
** In 3DS Max, you can make sure that this is correct by creating Bones in the ''Top'' viewport and dragging them out to the right. Turn on ''Grid Snap'' to make sure the joints are perfectly straight.&lt;br /&gt;
** Related tips for Maya, Chris?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Skinning''' ===&lt;br /&gt;
----&lt;br /&gt;
Skinning (also known as weighting, or binding) is the process of linking your model to the relevant joints.&lt;br /&gt;
In the case of vehicles it is very straightforward, since nearly all parts of the model are only ever influenced by a single joint.&lt;br /&gt;
So for example, you would need to bind the whole wheel mesh to the appropriate wheel joint.&lt;br /&gt;
How you do this will depend on what modelling package you are using.&lt;br /&gt;
&lt;br /&gt;
==== 3ds max ====&lt;br /&gt;
* Apply a ''Skin'' modifier to each of the meshes you want to export (the main body and each of the 4 wheels, for example).&lt;br /&gt;
* In the &amp;quot;Bones&amp;quot; list, click ''Add'', and choose the joint you want the selected mesh to be linked to.&lt;br /&gt;
** In this way, the main body of the vehicle should be linked to the ''origin'' joint.&lt;br /&gt;
** Additionally, each wheel should only be linked to its related wheel joint, not anything else.&lt;br /&gt;
&lt;br /&gt;
==== Maya ====&lt;br /&gt;
* Bind your meshes to the relevant joints using the ''Smooth Bind'' option in the ''Skin'' menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Exporting''' ===&lt;br /&gt;
----&lt;br /&gt;
How you export your model and rig to ''.md5mesh'' and ''.md5anim'' files depends on what modelling package you are using.&lt;br /&gt;
&lt;br /&gt;
==== 3ds max ====&lt;br /&gt;
* First of all you will need to get Jonathan &amp;quot;BeRSeRKeR&amp;quot; Garcia's maxscript MD5 Exporter, [http://www.modwiki.net/wiki/MD5_%28file_format%29#Tools which can be found here].&lt;br /&gt;
* Go to the ''Maxscript'' menu and select ''Run Script...'' then browse to the location you installed the MD5Exporter.mzp file.&lt;br /&gt;
* A new window should pop up, from here you should set these options:&lt;br /&gt;
** '''Base frame:''' 0&lt;br /&gt;
** '''Start frame:''' 1&lt;br /&gt;
** '''End frame:''' 1&lt;br /&gt;
** '''Nodes to export:''' Select all of the mesh parts you want to export. You don't need to select the joints, just the meshes (the main body and 4 wheels, for example).&lt;br /&gt;
** '''Export options''' should be set to ''Export both'' for now.&lt;br /&gt;
** Ignore the '''Camera''' rollout, this is not needed for a vehicle.&lt;br /&gt;
* Now click the '''Export''' button and choose a folder to save your MD5 files in - ''models/vehicles/gdf_buggy/buggy.md5mesh'' is where I'll put this file.&lt;br /&gt;
* Let the exporter work and save the file (this can take several seconds), soon it will prompt you for a path to save the ''.md5anim'' file - just use the same folder and name as before.&lt;br /&gt;
&lt;br /&gt;
That's it, you should now have a working MD5 file that can be read by ETQW!&lt;br /&gt;
&lt;br /&gt;
==== Maya ====&lt;br /&gt;
* See [[MD5 Export Process#The Export File|MD5 Export Process article]].&lt;br /&gt;
&lt;br /&gt;
That's it, you should now have a working MD5 file that can be read by ETQW!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Related Files''' ===&lt;br /&gt;
----&lt;br /&gt;
* [[Media:buggy_tute_step1.max|Vehicle tutorial model and rig example (3ds max 8 format)]]&lt;br /&gt;
* [[Media:buggy_tute_step1.mb|Vehicle tutorial model and rig example (Maya 7 format)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Getting It Into The Game''' ==&lt;br /&gt;
Now that you have a rough model and a simple rig you are ready to get the vehicle into the game.&lt;br /&gt;
&lt;br /&gt;
=== Entity Definition ===&lt;br /&gt;
For your new vehicle to be spawned in the game it needs an &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt; describing it. Start out by creating a new file in the &amp;lt;tt&amp;gt;def/vehicles&amp;lt;/tt&amp;gt; subdirectory of your mod. Create the directories if you don't have them already. For this tutorial I am calling the file &amp;lt;tt&amp;gt;buggy_tute.def&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The first thing needed is a model definition. This links together the model and any animations it may have into one named model to be referenced by the entity:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 model vehicle_buggy_tute {&lt;br /&gt;
     mesh                       models/vehicles/gdf_buggy/buggy.md5mesh&lt;br /&gt;
 &lt;br /&gt;
     anim base                  models/vehicles/gdf_buggy/buggy.md5anim&lt;br /&gt;
     anim ik_pose               models/vehicles/gdf_buggy/buggy.md5anim&lt;br /&gt;
     anim initial               models/vehicles/gdf_buggy/buggy.md5anim&lt;br /&gt;
     anim idle                  models/vehicles/gdf_buggy/buggy.md5anim&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now onto the &amp;lt;tt&amp;gt;entityDef&amp;lt;/tt&amp;gt;. The name you choose for this is the name you will use to spawn the entity. I am using &amp;lt;tt&amp;gt;vehicle_buggy_tute&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 entityDef vehicle_buggy_tute {&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are base definitions set up for vehicles in &amp;lt;tt&amp;gt;base/def/vehicles/base.def&amp;lt;/tt&amp;gt;, so rather than re-defining all the parameters you might as well just inherit from them. I'm going to use &amp;lt;tt&amp;gt;vehicle_base_gdf&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;inherit&amp;quot;               &amp;quot;vehicle_base_gdf&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a large number of key/value pairs that can be set to adjust vehicle behaviour, so for starters I'll describe the bare minimums.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
| style=&amp;quot;background:#dfdfdf&amp;quot; | '''Key''' ||style=&amp;quot;background:#dfdfdf&amp;quot;| '''Description'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;spawnclass&amp;lt;/tt&amp;gt; || The code class to use - for most vehicles this should be set to &amp;lt;tt&amp;gt;sdVehicle_RigidBody&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;scriptObject&amp;lt;/tt&amp;gt; || The script to use. The essentials are all defined in &amp;lt;tt&amp;gt;vehicle_base&amp;lt;/tt&amp;gt;, so we don't need to make a new script just yet.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;vs_vehicleScript&amp;lt;/tt&amp;gt; || The vscript to point to. I'll make one of these later, called &amp;lt;tt&amp;gt;buggy_tute&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;model&amp;lt;/tt&amp;gt; || The model definition to use. This should be the one we created above.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;health&amp;lt;/tt&amp;gt; || The amount of health the vehicle has. I'm using 400 to start with.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;input_mode&amp;lt;/tt&amp;gt; || The joystick input mode to use. This selects which set of input CVARs are used to used to translate joystick input to vehicle actions. In this case it should be &amp;lt;tt&amp;gt;car&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;vehicle_control&amp;lt;/tt&amp;gt; || Selects the mode of vehicle control used - in this case it should be &amp;lt;tt&amp;gt;wheeled&amp;lt;/tt&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;info_name&amp;lt;/tt&amp;gt; || This points to a localized string to present to the player to name the vehicle. We can create one of these later, so for now I'll just use &amp;lt;tt&amp;gt;game/vec/husky&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;steering_angle&amp;lt;/tt&amp;gt; || The maximum angle of steering. I'm using 40 to start with.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;table_gearforces&amp;lt;/tt&amp;gt; || This points to a table defining the amount of force applied at the wheels at each &amp;quot;gear&amp;quot; speed. I'll be making one of these later, called &amp;lt;tt&amp;gt;bugg_tute_gear_forcetable&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;table_gearspeeds&amp;lt;/tt&amp;gt; || This points to a table defining the speeds at which &amp;quot;gear&amp;quot; forces are applied. I'll be making one of these later, called &amp;lt;tt&amp;gt;buggy_tute_gear_speedtable&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;overdrive_factor&amp;lt;/tt&amp;gt; || The multiplier applied to the wheel speed &amp;amp; force when overdrive (boost) is being used. I'm using 1.5 to start with.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;tt&amp;gt;power_curve_scale&amp;lt;/tt&amp;gt; || Adjusts the gear force between gears to act kind of like an engine's torque curve, to help the vehicle go up slopes or maintain speed when hitting a ramp. I'm using 2 to start with.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A few other keys are needed to select some options:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     &amp;quot;option_combat_model&amp;quot;           &amp;quot;1&amp;quot;&lt;br /&gt;
     &amp;quot;option_selection_combat_model&amp;quot; &amp;quot;1&amp;quot;&lt;br /&gt;
     &amp;quot;option_task_interface&amp;quot;         &amp;quot;1&amp;quot;&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The first option sets up a combat model, which is used by bullets so they can hit the actual visible model. The second option sets it so it can be &amp;quot;selected&amp;quot; - this allows it to be locked onto by rockets etc. The final option allows the entity to have missions generated due to it being &amp;quot;spotted&amp;quot; by a radar. '''TODO: GORDON PLEASE CHECK THIS IS ACCURATE'''&lt;br /&gt;
&lt;br /&gt;
This leaves us with a very simple, minimal vehicle entityDef. This does not use a lot of features, for example:&lt;br /&gt;
* Command map icon&lt;br /&gt;
* Collision damage&lt;br /&gt;
* Control context CVARs&lt;br /&gt;
* Vehicle HUD elements&lt;br /&gt;
* Engine sounds&lt;br /&gt;
* Climate-based skins&lt;br /&gt;
* Horn sounds&lt;br /&gt;
* Low health warning sounds&lt;br /&gt;
* Tooltip on entering vehicle&lt;br /&gt;
* Decoys&lt;br /&gt;
&lt;br /&gt;
Many things (eg effects) will use the default values, which may not be the most suitable. Some other things won't function properly - for example bullets won't damage it yet. However, there is enough information in the entityDef to get us started.&lt;br /&gt;
&lt;br /&gt;
The completed entityDef:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 entityDef vehicle_buggy_tute {&lt;br /&gt;
     &amp;quot;inherit&amp;quot;                       &amp;quot;vehicle_base_gdf&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;option_combat_model&amp;quot;           &amp;quot;1&amp;quot;&lt;br /&gt;
     &amp;quot;option_selection_combat_model&amp;quot; &amp;quot;1&amp;quot;&lt;br /&gt;
     &amp;quot;option_task_interface&amp;quot;         &amp;quot;1&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;spawnclass&amp;quot;                    &amp;quot;sdVehicle_RigidBody&amp;quot;&lt;br /&gt;
     &amp;quot;scriptObject&amp;quot;                  &amp;quot;vehicle_base&amp;quot;&lt;br /&gt;
     &amp;quot;vs_vehicleScript&amp;quot;              &amp;quot;buggy_tute&amp;quot;&lt;br /&gt;
     &amp;quot;model&amp;quot;                         &amp;quot;vehicle_buggy_tute&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;input_mode&amp;quot;                    &amp;quot;car&amp;quot;&lt;br /&gt;
     &amp;quot;vehicle_control&amp;quot;               &amp;quot;wheeled&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;info_name&amp;quot;                     &amp;quot;game/vec/husky&amp;quot;&lt;br /&gt;
     &amp;quot;health&amp;quot;                        &amp;quot;400&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;steering_angle&amp;quot;                &amp;quot;40&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;table_gearforces&amp;quot;              &amp;quot;buggy_tute_gear_forcetable&amp;quot;&lt;br /&gt;
     &amp;quot;table_gearspeeds&amp;quot;              &amp;quot;buggy_tute_gear_speedtable&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     &amp;quot;overdrive_factor&amp;quot;              &amp;quot;1.5&amp;quot;&lt;br /&gt;
     &amp;quot;power_curve_scale&amp;quot;             &amp;quot;2&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Vehicle Script''' ===&lt;br /&gt;
----&lt;br /&gt;
The vehicle script file generally contains most of the information to define the behaviour of the vehicle.&lt;br /&gt;
Start out by making a directory in your mod's directory called &amp;lt;tt&amp;gt;vehicles&amp;lt;/tt&amp;gt; and create a text file in there with the &amp;lt;tt&amp;gt;.vscript&amp;lt;/tt&amp;gt; extension. I named mine &amp;lt;tt&amp;gt;buggy_tute.vscript&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Start out by making the definitions we pointed to in the entityDef. The gear speed table and the gear force table are simple and don't take too much explaining so I'll start with those. While ETQW does not use gears in the true sense of the word, it roughly represents the amount of force that the vehicle can apply at the wheels for various speeds, and the speed the vehicle will aim for. In a real-world vehicle the force the vehicle can drive with reduces with each gear, so we generally set up these tables to ramp down the force as the speed ramps up, but you can mess with these to achieve various effects (eg lots of torque at high speed). Here are the tables I'll start out with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 table buggy_tute_gear_speedtable {&lt;br /&gt;
     clamp &lt;br /&gt;
  &lt;br /&gt;
     {&lt;br /&gt;
         20, 30, 50, 80&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 table buggy_tute_gear_forcetable {&lt;br /&gt;
     clamp&lt;br /&gt;
 &lt;br /&gt;
     {&lt;br /&gt;
         300000, 200000, 100000, 100000&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;clamp&amp;lt;/tt&amp;gt; parameter means that it won't try to extrapolate beyond the range of the table when looking up values.&lt;br /&gt;
&lt;br /&gt;
Now onto the &amp;lt;tt&amp;gt;vehicleDef&amp;lt;/tt&amp;gt;. This does the bulk of the definition. First of all it needs to be named:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 vehicleDef &amp;quot;buggy_tute&amp;quot; {&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Collision Model ====&lt;br /&gt;
----&lt;br /&gt;
The vehicle needs some sort of physical representation in the world. I've decided that for my model it should weigh somewhere in between the Husky and the Armadillo, so I've chosen 2000kg. Give the vehicle a &amp;lt;tt&amp;gt;part&amp;lt;/tt&amp;gt; to define the shape of it - you can measure your model in your modelling package to try to get the bounds perfect straight away, but I just added a part with a random size (&amp;lt;tt&amp;gt;&amp;quot;-100 -100 -100&amp;quot;&amp;lt;/tt&amp;gt; &amp;amp; &amp;lt;tt&amp;gt;&amp;quot;100 100 100&amp;quot;&amp;lt;/tt&amp;gt;) and then tuned the size in-game. To do this you can use the console to turn on &amp;lt;tt&amp;gt;g_showCollisionModels&amp;lt;/tt&amp;gt; and to extend &amp;lt;tt&amp;gt;g_maxShowDistance&amp;lt;/tt&amp;gt; - 1024 should be far enough. You can then spawn your vehicle by typing &amp;lt;tt&amp;gt;spawn vehicle_buggy_tute&amp;lt;/tt&amp;gt; at the console (or whatever you named the entityDef). Enter &amp;lt;tt&amp;gt;killTransports&amp;lt;/tt&amp;gt; to remove all the vehicles in the map, and &amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt; to load the changes you've made to the definitions. By putting ETQW into windowed mode you can have the vehicle script open in another window, edit the sizing, pop back to ETQW, &amp;lt;tt&amp;gt;reloadDecls&amp;lt;/tt&amp;gt; and spawn a new vehicle. This way you can rapidly tweak the size of the collision. Make the bottom of the collision end at the underside of the body - this gives it some clearance over the ground. A simple box collision model will be enough to start with, you can experiment with compound collision models later to get the size and shape to your liking.&lt;br /&gt;
This is what I ended up with:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     part {&lt;br /&gt;
         &amp;quot;mins&amp;quot;                      &amp;quot;-96 -55 24&amp;quot;&lt;br /&gt;
         &amp;quot;maxs&amp;quot;                      &amp;quot;78 55 94&amp;quot;&lt;br /&gt;
         &amp;quot;mass&amp;quot;                      &amp;quot;2000&amp;quot;&lt;br /&gt;
         &amp;quot;friction&amp;quot;                  &amp;quot;0.4 0.4 0.4&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I also added some friction, so that if the vehicle flips over it doesn't slide forever.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Positions, Views, and Exits ====&lt;br /&gt;
----&lt;br /&gt;
If you spawn this vehicle in the game you'll notice that you can't get into it! This would be a bit of a problem even if it had wheels, so we had better set up a seat for our would-be-drivers. For this you'll need a &amp;lt;tt&amp;gt;positionDef&amp;lt;/tt&amp;gt;. Here is the minimal &amp;lt;tt&amp;gt;positionDef&amp;lt;/tt&amp;gt; I started with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     positionDef {&lt;br /&gt;
         data {&lt;br /&gt;
             &amp;quot;joint_attach&amp;quot;  &amp;quot;driver&amp;quot;&lt;br /&gt;
             &amp;quot;show_player&amp;quot;   &amp;quot;1&amp;quot;&lt;br /&gt;
             &amp;quot;player_anim&amp;quot;   &amp;quot;VehicleBadgerDriver&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         view {&lt;br /&gt;
             eyeJoint        &amp;quot;cam1&amp;quot;&lt;br /&gt;
             autoCenter&lt;br /&gt;
 &lt;br /&gt;
             clamp pitch {&lt;br /&gt;
                 min         -70&lt;br /&gt;
                 max         20&lt;br /&gt;
             }&lt;br /&gt;
 &lt;br /&gt;
             clamp yaw {&lt;br /&gt;
                 min         -80&lt;br /&gt;
                 max         80&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         view {&lt;br /&gt;
             eyeJoint        &amp;quot;cam1&amp;quot;&lt;br /&gt;
             type            &amp;quot;smooth_locked&amp;quot;&lt;br /&gt;
             thirdPerson&lt;br /&gt;
             cameraDistance  240&lt;br /&gt;
             cameraHeight    50&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This provides a very simple position. It attaches the player at the &amp;lt;tt&amp;gt;driver&amp;lt;/tt&amp;gt; joint, shows the player, and uses the &amp;lt;tt&amp;gt;VehicleBadgerDriver&amp;lt;/tt&amp;gt; animation state machine. It has two views - one is a first person view based on the &amp;lt;tt&amp;gt;cam1&amp;lt;/tt&amp;gt; joint, which auto-centers. It has pitch and yaw clamps to keep the view within a reasonable range. The other view is a third person view based around the same joint, set back and up from the joint.&lt;br /&gt;
I haven't named the position or given it a stats name - these won't cause any problems just now, although a warning will be printed on the console. This is not a problem, as the stats only do anything in ranked matches. '''TODO: REMOVE THE WARNING?'''&lt;br /&gt;
&lt;br /&gt;
If you spawn your vehicle now you will find that you can get in and look around, but you can't get out - we now need to add an &amp;lt;tt&amp;gt;exitDef&amp;lt;/tt&amp;gt; (or multiple &amp;lt;tt&amp;gt;exitDef&amp;lt;/tt&amp;gt;s) to give the player somewhere to get out of the vehicle. It will not allow the player to get out if there are no valid (unblocked) exits, so it is always a good idea to have several exits. In this case I have only one exit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     exitDef {&lt;br /&gt;
         joint               &amp;quot;exit1&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Wheels ====&lt;br /&gt;
----&lt;br /&gt;
Ok so now we have a vehicle that has physics, and you can get in and out of. Now we need to make it actually go places. In the case of a wheeled vehicle like this we'd obviously want, well, wheels! To start with I'm going to make all the wheels the same, with identical suspension parameters. Maintaining four copies of near-identical settings when tweaking is very error-prone, so I'm going to write a template to define all the common keys between all the four wheels, one for keys common between the front two wheels, and one for keys common between the rear two wheels. Using the parameters to the first template we can make it include the front/rear template too, and set up the names of the joints and surfaces to use. This makes it as simple as just using the template with appropriate front/rear &amp;amp; left/right parameters to define any one wheel.&lt;br /&gt;
Now, suspension tuning is tricky and can take a lot of fiddling to get it just right. I'll outline some of the methods I use when tuning a new vehicle's suspension, but you'll largely have to experiment to get things the way you like them.&lt;br /&gt;
&lt;br /&gt;
Here is my starting point:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 template templates/vehicles/buggy_tute/wheel_behavior {&lt;br /&gt;
     parameters&amp;lt; FrontBackParm, LeftRightParm &amp;gt;&lt;br /&gt;
     text {&lt;br /&gt;
         &amp;quot;name&amp;quot;                         &amp;quot;FrontBackParm LeftRightParm Wheel&amp;quot;&lt;br /&gt;
         &amp;quot;surface1&amp;quot;                     &amp;quot;FrontBackParm_LeftRightParm_wheels&amp;quot;&lt;br /&gt;
         &amp;quot;joint&amp;quot;                        &amp;quot;FrontBackParm_LeftRightParm_wheel&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         &amp;quot;slowonLeftRightParm&amp;quot;          &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
         &amp;quot;wheelSpinForceThreshhold&amp;quot;     &amp;quot;75000&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         &amp;quot;brakingForce&amp;quot;                 &amp;quot;250000&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         &amp;quot;drive&amp;quot;                        &amp;quot;1&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         &amp;quot;alternateSuspensionModel&amp;quot;     &amp;quot;1&amp;quot;&lt;br /&gt;
         &amp;quot;suspensionUpTrace&amp;quot;            &amp;quot;8&amp;quot;&lt;br /&gt;
         &amp;quot;suspensionDownTrace&amp;quot;          &amp;quot;20&amp;quot;&lt;br /&gt;
         &amp;quot;suspensionRange&amp;quot;              &amp;quot;28&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         &amp;quot;suspensionKCompress&amp;quot;          &amp;quot;100000&amp;quot;&lt;br /&gt;
         &amp;quot;suspensionDamping&amp;quot;            &amp;quot;0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         &amp;quot;suspensionMaxRestVelocity&amp;quot;    &amp;quot;3.5&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         &amp;quot;maxSlip&amp;quot;                      &amp;quot;400&amp;quot;&lt;br /&gt;
         &amp;quot;contactFriction&amp;quot;              &amp;quot;0 0.7 0&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
         useTemplate templates/vehicles/buggy_tute/wheel_FrontBackParm&amp;lt; &amp;quot;LeftRightParm&amp;quot; &amp;gt;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 template templates/vehicles/buggy_tute/wheel_front {&lt;br /&gt;
     parameters&amp;lt; LeftRightParm &amp;gt;&lt;br /&gt;
     text {&lt;br /&gt;
         &amp;quot;turn&amp;quot;                         &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
         &amp;quot;radius&amp;quot;                       &amp;quot;18&amp;quot;&lt;br /&gt;
         &amp;quot;footprint&amp;quot;                    &amp;quot;15&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 template templates/vehicles/buggy_tute/wheel_rear {&lt;br /&gt;
     parameters&amp;lt; LeftRightParm &amp;gt;&lt;br /&gt;
     text {&lt;br /&gt;
         &amp;quot;hasHandbrake&amp;quot;                 &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
         &amp;quot;radius&amp;quot;                       &amp;quot;20&amp;quot;&lt;br /&gt;
         &amp;quot;footprint&amp;quot;                    &amp;quot;15&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These templates must be defined outside of the &amp;lt;tt&amp;gt;vehicleDef&amp;lt;/tt&amp;gt; - I placed them at the top of the file. Note how it uses the template parameters to construct the joint, surface, and part names. I've set this one up to use the alternate suspension model, which behaves like a simple linear spring &amp;amp; dampener system, as it is somewhat easier to tune and can provide very entertaining results. Its set up for four wheel drive, with the front wheels steering and the rear wheels handbraking. To use the template to create wheels add the following into the &amp;lt;tt&amp;gt;vehicleDef&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 wheel {&lt;br /&gt;
     useTemplate templates/vehicles/buggy_tute/wheel_behavior&amp;lt; &amp;quot;front&amp;quot;, &amp;quot;left&amp;quot; &amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 wheel {&lt;br /&gt;
     useTemplate templates/vehicles/buggy_tute/wheel_behavior&amp;lt; &amp;quot;front&amp;quot;, &amp;quot;right&amp;quot; &amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 wheel {&lt;br /&gt;
     useTemplate templates/vehicles/buggy_tute/wheel_behavior&amp;lt; &amp;quot;rear&amp;quot;, &amp;quot;left&amp;quot; &amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 wheel {&lt;br /&gt;
     useTemplate templates/vehicles/buggy_tute/wheel_behavior&amp;lt; &amp;quot;rear&amp;quot;, &amp;quot;right&amp;quot; &amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you now spawn your vehicle it should be drive-able! No doubt it will bounce up and down chronically and drive strangely, but its a start.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Wheel Geometry =====&lt;br /&gt;
----&lt;br /&gt;
Firstly you'll want to adjust the amount of suspension travel there is. Start by deciding how far up from the wheel joint you want the bottom of wheel to be able to move, and set &amp;lt;tt&amp;gt;suspensionUpTrace&amp;lt;/tt&amp;gt; to this. It is OK for this to be negative, if you modelled your vehicle with the wheels a long way down. This is basically the vertical offset from the joint's original position that the wheel can go up. Similarly, &amp;lt;tt&amp;gt;suspensionDownTrace&amp;lt;/tt&amp;gt; is the vertical offset from the joint's original position that the wheel can go down. &amp;lt;tt&amp;gt;suspensionRange&amp;lt;/tt&amp;gt; is the distance from the bottom of the movement range over which the suspension will operate - this allows the wheel to still move beyond its range, but the equations used to generate the forces will act as if it had reached the end of its &amp;lt;tt&amp;gt;suspensionRange&amp;lt;/tt&amp;gt;. It is fine to start by setting this to &amp;lt;tt&amp;gt;suspensionUpTrace + suspensionDownTrace&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Next you should out the wheel's size - the &amp;lt;tt&amp;gt;radius&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;footprint&amp;lt;/tt&amp;gt; values set this. &amp;lt;tt&amp;gt;radius&amp;lt;/tt&amp;gt; is pretty self explanatory - its best to measure this one in your modelling package. &amp;lt;tt&amp;gt;footprint&amp;lt;/tt&amp;gt; is the width of the wheel, which should again be measured in your modelling package. In the model I am using the front &amp;amp; rear wheels are different sizes, so I have configured mine to reflect this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Suspension Tuning =====&lt;br /&gt;
----&lt;br /&gt;
We're almost ready to roughly tune the suspension's spring and dampening constants, but first I'll give a brief explanation of what effect these two have on the vehicle.&lt;br /&gt;
&lt;br /&gt;
The spring compression coefficient, &amp;lt;tt&amp;gt;suspensionKCompress&amp;lt;/tt&amp;gt;, causes a force to be applied that opposes the compression/extension of the suspension. The force is proportional to the amount of compression on the spring. Setting a small value for this will result in &amp;quot;squishy&amp;quot; suspension that allows a lot of vertical movement. Setting a large value will result in &amp;quot;stiff&amp;quot; suspension where only a small amount of movement is possible before large forces are applied.&lt;br /&gt;
&lt;br /&gt;
The damping coefficient, &amp;lt;tt&amp;gt;suspensionDamping&amp;lt;/tt&amp;gt;, causes a force to be applied that opposes the change in compression/extension of the suspension - ie the velocity of the suspension. The force is proportional to the rate of change of the spring's compression. Setting a small value for this will result in bouncy suspension that only slowly resists suspension movement, allowing oscillation to occur. Setting a large value will result in very static feeling suspension that rapidly resists suspension movement, quickly absorbing bumps. Too large a value can result in an &amp;quot;over-damped&amp;quot; situation where it will tend to drastically overcompensate - an example is a vehicle being dropped to the ground and it bouncing up higher than the height it fell from.&lt;br /&gt;
&lt;br /&gt;
Low coefficient values will typically result in a very bouncy, &amp;quot;squishy&amp;quot; ride. This will tend to handle rough terrain well, without bumping and jostling the vehicle too much, but handle smooth terrain badly - bouncing and wobbling too much. High coefficient values will typically result in a very stiff ride, handling smooth terrain well but having a hard time over rough terrain, giving a bumpy and nasty ride.&lt;br /&gt;
Note that these are very general tips - there is no hard-and-fast rule, and you will need to experiment a lot to find values that satisfy you.&lt;br /&gt;
&lt;br /&gt;
Given the above, I tend to start by making it handle the standing still case. I lower the damping coefficient to zero and spawn a vehicle on flat terrain to see how it sits. I adjust the compression coefficient until the vehicle's body tends to sit at about the height I had imagined. With the damping coefficient at zero it will tend to wobble indefinitely, so now I adjust the damping coefficient until it tends to stabilize after a few oscillations. I normally start with a small value, eg 100, and multiply by 10 until the oscillation disappears. Then I look for values in between that and the previous value until I'm satisfied. For my vehicle this ended up with &amp;lt;tt&amp;gt;suspensionKCompress&amp;lt;/tt&amp;gt; being 300000, and &amp;lt;tt&amp;gt;suspensionKCompress&amp;lt;/tt&amp;gt; being 15000.&lt;br /&gt;
&lt;br /&gt;
I normally find that at this point the vehicle handles pretty decently. Not perfect, but good enough for this stage of development. Depending on the mass of your vehicle you will probably have to adjust the drive force in the force table to get a decent degree of acceleration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Preventing it from rolling ====&lt;br /&gt;
----&lt;br /&gt;
If your vehicle is anything like mine, you'll probably find that it is all too easy to roll your shiny new car. If you turn on &amp;lt;tt&amp;gt;rb_showMass&amp;lt;/tt&amp;gt; using the console you will see a yellow wireframe sphere somewhere in the middle of your vehicle - this shows where its center of mass (some call it the center of gravity) is. This is quite high, which makes it easier for the vehicle to roll over. There are a few ways to deal with this:&lt;br /&gt;
* Use a point mass to lower the center of mass to a more reasonable place&lt;br /&gt;
* Use several collision parts instead of just one, making the upper one lighter than the lower one - this represents the bulk of the mass of the vehicle being in the lower part of the vehicle (eg the engine, suspension, wheels, the driver, etc)&lt;br /&gt;
* Use an antiroll constraint&lt;br /&gt;
&lt;br /&gt;
I like to use a combination of these methods. The disadvantage of lowering the center of gravity is that it allows less dynamic behaviour, like body rolling and pitching. This behaviour looks really cool, so its a shame to lose it. Antiroll constraints make the vehicle tend to resist rolling over too much. These are very easy to use, but they can look a bit artificial if they are made too obvious. With a bit of tweaking a good combination of the methods can usually be achieved.&lt;br /&gt;
&lt;br /&gt;
This is the combination I settled on:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
 part {&lt;br /&gt;
     &amp;quot;mins&amp;quot;                      &amp;quot;-96 -55 60&amp;quot;&lt;br /&gt;
     &amp;quot;maxs&amp;quot;                      &amp;quot;78 55 94&amp;quot;&lt;br /&gt;
     &amp;quot;mass&amp;quot;                      &amp;quot;500&amp;quot;&lt;br /&gt;
     &amp;quot;friction&amp;quot;                  &amp;quot;0.4 0.4 0.4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 part {&lt;br /&gt;
     &amp;quot;mins&amp;quot;                      &amp;quot;-96 -55 24&amp;quot;&lt;br /&gt;
     &amp;quot;maxs&amp;quot;                      &amp;quot;78 55 60&amp;quot;&lt;br /&gt;
     &amp;quot;mass&amp;quot;                      &amp;quot;1500&amp;quot;&lt;br /&gt;
     &amp;quot;friction&amp;quot;                  &amp;quot;0.4 0.4 0.4&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 antiroll {&lt;br /&gt;
     &amp;quot;angle_start&amp;quot;               &amp;quot;5&amp;quot;&lt;br /&gt;
     &amp;quot;angle_end&amp;quot;                 &amp;quot;30&amp;quot;&lt;br /&gt;
     &amp;quot;strength&amp;quot;                  &amp;quot;2&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Running people over ====&lt;br /&gt;
----&lt;br /&gt;
At the moment you can probably go prone and crawl under your vehicle, and running prone people over will not kill them. To solve this there is a part called a &amp;lt;tt&amp;gt;hurtZone&amp;lt;/tt&amp;gt;. These are made much the same as a &amp;lt;tt&amp;gt;part&amp;lt;/tt&amp;gt;, but they don't have a mass or friction - they just have a shape. They prevent players from moving through them, and they will cause collision damage to players in their way. Make this big enough to cover the underside of the vehicle.&lt;br /&gt;
&lt;br /&gt;
Here is mine:&lt;br /&gt;
&amp;lt;tt&amp;gt;&lt;br /&gt;
     hurtZone {&lt;br /&gt;
         &amp;quot;mins&amp;quot;                  &amp;quot;-96 -55 0&amp;quot;&lt;br /&gt;
         &amp;quot;maxs&amp;quot;                  &amp;quot;78 55 24&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
'''[[Vehicle Tutorial Part 3|Click here to continue on to Part 3 of the Vehicle Tutorial]]'''&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
[[Category:Vehicles]]&lt;br /&gt;
[[Category:Tutorials]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_1&amp;diff=1460</id>
		<title>Vehicle Tutorial Part 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial_Part_1&amp;diff=1460"/>
		<updated>2007-10-15T17:05:49Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;First off you need a good design. Find some reference photos or drawings that feature elements of what you'd like to include in your vehicle. Then you can create a quick series of sketches and thumbnail drawings to get a decent idea of what overall shape and size your vehicle will be. You don't have to be an amazing artist, just draw a variety of small sketches which explore the design direction you want to go in.&lt;br /&gt;
&lt;br /&gt;
[[Image:buggy_thumbnails.jpg|center|Vehicle design thumbnail sketches]]&lt;br /&gt;
&lt;br /&gt;
=== Driving Considerations ===&lt;br /&gt;
It is important to design your vehicle so that it will function well. A vehicle may look really cool, but if it doesn't work well in-game then it's as good as not having a vehicle at all!&lt;br /&gt;
Here we'll discuss the things you should take into account when designing a wheeled vehicle. These vehicles are the most difficult to get to function well.&lt;br /&gt;
&lt;br /&gt;
ETQW has a rather exaggerated vertical scale. Whilst this makes for some spectacular scenery and epic feeling, it also means that bumps and potholes in the roads can be enormous - let alone the bumps to tackle when you go offroad! There are often steep slopes that players may wish to traverse, or sharp corners they want to skid through at extremely high G. For these reasons your vehicle should have:&lt;br /&gt;
* As much ground clearance as possible (distance between the ground surface and the bottom of the vehicle). This helps prevent the vehicle &amp;quot;bottoming out&amp;quot; on the terrain and losing speed.&lt;br /&gt;
* Large suspension travel (distance the suspension can move from top to bottom). This will allow the suspension tuning to be softer, providing a less jarring and bouncy ride, as it has more distance to absorb the bumps in the surface.&lt;br /&gt;
* A wide track (distance between the two wheels of an axle). This will provide stability and help prevent the vehicle from tipping over.&lt;br /&gt;
* Short front overhang, or upward-slanted front end (for example, see the Trojan). This helps prevent the front end of the vehicle &amp;quot;digging in&amp;quot; to a sudden slope, sapping all of your speed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
'''[[Vehicle Tutorial Part 2|Click here to continue on to Part 2 of the Vehicle Tutorial]]'''&lt;br /&gt;
[[Category:Vehicles]]&lt;br /&gt;
[[Category:Tutorials]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial&amp;diff=1459</id>
		<title>Vehicle Tutorial</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Vehicle_Tutorial&amp;diff=1459"/>
		<updated>2007-10-15T17:05:36Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a step-by-step tutorial on how to model, rig, export and script a custom vehicle. It should cover absolutely everything you need to do to get most types of wheeled vehicle working in Enemy Territory: QUAKE Wars.&lt;br /&gt;
We will start out with the simplest form of vehicle and work from there to implement more complicated scripting and vehicle setup.&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
= Part 1: Design=&lt;br /&gt;
{{:Vehicle Tutorial Part 1}}&lt;br /&gt;
&lt;br /&gt;
= Part 2: Rough Model and Basic Vehicle Setup =&lt;br /&gt;
{{:Vehicle Tutorial Part 2}}&lt;br /&gt;
&lt;br /&gt;
= Part 3: More Advanced Scripting and Setup =&lt;br /&gt;
{{:Vehicle Tutorial Part 3}}&lt;br /&gt;
&lt;br /&gt;
= Part 4: Advanced Scripting and Setup =&lt;br /&gt;
{{:Vehicle Tutorial Part 4}}&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
You should now have a good understanding of all the steps required to make a new vehicle for ET:QW from scratch.&lt;br /&gt;
&lt;br /&gt;
[[Category:Animation]]&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Vehicles]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=1458</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Main_Page&amp;diff=1458"/>
		<updated>2007-10-15T17:05:05Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: /* Making A Terrain Model */ fixed link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__= '''Tutorials''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Taking A Screenshot]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Taking A Screenshot]]''' - Settings and options for making a great screenshot!&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Making a Terrain Model]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Step 1]]''' - Create a terrain mesh for your map.&lt;br /&gt;
* More to go here, temp for now.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=== [[Vehicle Tutorial]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Step 1]]''' - Design considerations, before you do anything else!&lt;br /&gt;
* '''[[Step 2]]''' - Initial rough model, rig and basic script.&lt;br /&gt;
* '''[[Step 3]]''' - More advanced rig and scripting.&lt;br /&gt;
* '''[[Step 4]]''' - Further technical setup ideas.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Code''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Vehicle Scripting]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Vehicle Scripting: Basic_Overview|Basic Overview]]''' - Introduction to vehicle setup.&lt;br /&gt;
* '''[[Vehicle Scripting: Entity_Definition|Entity Definition]]''' - One definition to rule them all!&lt;br /&gt;
* '''[[Vehicle Scripting: Vehicle_Definition|Vehicle Definition]]''' - Introduction to the ''.vscript'' file.&lt;br /&gt;
* '''[[Vehicle Scripting: Positions_&amp;amp;_Views|Positions &amp;amp; Views]]''' - Configuring player positions &amp;amp; camera views.&lt;br /&gt;
* '''[[Vehicle Scripting: Components|Components]]''' - Details of various vehicle components.&lt;br /&gt;
* '''[[Vehicle Scripting: Weapons|Weapons]]''' - Things that go boom!&lt;br /&gt;
* '''[[Vehicle Scripting: IK|IK]]''' - Inverse Kinematics &amp;amp; you...&lt;br /&gt;
* '''[[Vehicle Scripting: Cockpits|Cockpits]]''' - Cockpit setup.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Entity Scripting]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[EntityClass:Overview|Classes]]''' - Tree of entity types.&lt;br /&gt;
* '''[[ScriptEvent:List|Events]]''' - List of all script events.&lt;br /&gt;
* '''[[Scripting:Examples|Examples]]''' - Some example walkthoughs of building up a scripted entity.&lt;br /&gt;
* '''[[Script:Files|Script Files]]''' - List of the script files used by the game.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[GUIs]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[GUIs: Event Based Scripting|Event Based Scripting]]''' - GUIs are event-based.&lt;br /&gt;
* '''[[GUIs: Materials|Materials]]''' - Using materials in GUIs.&lt;br /&gt;
* '''[[GUIs: Transitions|Transitions]]''' - Transitions.&lt;br /&gt;
* '''[[GUIs: Templates|Templates]]''' - Using templates in GUIs.&lt;br /&gt;
* '''[[GUIs: List Enumeration|List Enumeration]]''' - List enumerations.&lt;br /&gt;
* '''[[GUIs: Properties|Properties]]''' - Player/Global properties and more.&lt;br /&gt;
* '''[[GUIs: Timelines|Timelines]]''' - GUI timelines.&lt;br /&gt;
* '''[[GUIs: Layouts|Layouts]]''' - Window layouts.&lt;br /&gt;
* '''[[Reference (GUIs)|Reference]]''' - GUI reference.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= '''Design''' =&lt;br /&gt;
&lt;br /&gt;
= '''Art''' =&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Models]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[In-Game Models]]''' - Making models for use in the engine.&lt;br /&gt;
* '''[[High-Poly Models]]''' - Making source models for baking normal maps.&lt;br /&gt;
* '''[[Renderbump]]''' - Create normal maps from high-poly geometry.&lt;br /&gt;
* '''[[Imposters]]''' - Sprites used for rendering complex models cheaply at a distance.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Animation]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[MD5 Export Process]]''' - How to export an animated MD5.&lt;br /&gt;
* '''[[Vehicle Setup]]''' - How to set up a vehicle.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Textures]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Basic Texture Overview]]''' - Supported texture types and implementations.&lt;br /&gt;
* '''[[Texturesheets]]''' - Overview of what texturesheets are, and when to use them.&lt;br /&gt;
* '''[[The Atlas Editor]]''' - Create environment texture sheets to improve performance.&lt;br /&gt;
* '''[[RenderBumpFlat]]''' - Create normal-maps from high-poly geometry.&lt;br /&gt;
* '''[[Detail Textures]]''' - Add high-frequency detail to your textures.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
| width=&amp;quot;50%&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{| style=&amp;quot;border: 1px solid #AAAAAA;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Terrain Editing]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Making a Terrain Model]]''' - Create a terrain mesh for your map.&lt;br /&gt;
* '''[[Terrain Editor|EditWorld's Terrain Editor]]''' - Set up a Surface Tree for your MegaTexture.&lt;br /&gt;
* '''[[MegaBuild]]''' - Render and compile your MegaTexture.&lt;br /&gt;
* '''[[Water Surfaces#Water Models|Water Surfaces]]''' - Create water to go with your landscape.&lt;br /&gt;
* '''[[STUFF System]]''' - Procedurally distribute models over your terrain mesh.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border-bottom: 1px solid #AAAAAA; background: #F9F9F9;&amp;quot; |&lt;br /&gt;
=== [[Atmospheres and Effects]] ===&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* '''[[Atmosphere Editor|The Atmosphere Editor]]''' - Create and edit atmospheres for your map.&lt;br /&gt;
* '''[[Ambient Light Editor|The Ambient Light Editor]]''' - Create and edit ambient light setups.&lt;br /&gt;
* '''[[Environment Maps]]''' - Used for reflection effects.&lt;br /&gt;
* '''[[Water Surfaces]]''' - Creating water effects.&lt;br /&gt;
* '''[[Effects Editor|The Effects Editor]]''' - Create and edit particle effects.&lt;br /&gt;
* '''[[Cheap Decals]]''' - Bulletholes and other collision decals.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=MD5_Export_Process&amp;diff=1457</id>
		<title>MD5 Export Process</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=MD5_Export_Process&amp;diff=1457"/>
		<updated>2007-10-15T17:04:35Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exporting animated models into the game is relatively pain free process but is easy to get wrong if not making sure it is done right.  So, lets go through right from the start the most common eventualities you'll come across...&lt;br /&gt;
&lt;br /&gt;
= Where To Start? =&lt;br /&gt;
=== Model Prepping in Maya ===&lt;br /&gt;
Start by taking the freshly made model into Maya.  Once there, usually the best place to start is to 'separate' it into all the parts you think should be their own piece (eg. wheels, detachable components) or if you just think it will be easier to skin as a seperate piece of mesh.&lt;br /&gt;
Next you will want to assign your materials to the relevant pieces. The material is linked with a diffuse texture of the same name in the same path as the material name, for example the material for the GPMG is ''models/weapons/gdf_gpmg/gpmg_roler'', in Maya you would link the diffuse texture to a file in your ETQW folder, eg. ''/base/models/weapons/gdf_gpmg/gpmg_roler.tga''. This file doesn't have to be referenced in the game.&lt;br /&gt;
&lt;br /&gt;
=== Begin the Rigging Process ===&lt;br /&gt;
Now you are ready to begin the rigging process.  Add joints to all parts of the mesh you think will needed to deform the mesh nicely and also that you think might be needed to make the model functional in game, and that might be needed for scripting purposes.&lt;br /&gt;
These might include:&lt;br /&gt;
* An origin joint&lt;br /&gt;
* Exit points for vehicles&lt;br /&gt;
* Muzzle flash points for weapons&lt;br /&gt;
It is a good idea to name your joints (as with anything) at this point, so you or anyone else who has to deal with the model later knows what they are all for.&lt;br /&gt;
&lt;br /&gt;
=== Joint Considerations ===&lt;br /&gt;
The main orientation you want for joints is the same as Maya. X = forwards, Z = right, Y = up This is important for joints that will be controlled by the gamecode, ie not just keyframe animated.&lt;br /&gt;
&lt;br /&gt;
Also, for large models, make sure that any joint is never any more than 256 units away from its parent joint, as this can cause problems (If you have unkowingly done so you will get a warning anyway telling you which joint/s need fixing).&lt;br /&gt;
&lt;br /&gt;
=== Bind Meshes to Joints ===&lt;br /&gt;
When you have your rig and the joints are all parented the way you want, you should now be ready to bind the mesh/es to the joints (use 'smooth bind' option).  Once you have all the meshes weighted to your liking you are ready save the file and move on.  ''Note: If any of the meshes or the groups they are in have any history (translations, mesh tweaks etc) make sure to freeze them then delete history.&lt;br /&gt;
&lt;br /&gt;
=== Setting Up a Reference File ===&lt;br /&gt;
You won't want to animate in this file, it will be used as a reference file.  Create a new Maya file and select File &amp;gt; Create Reference (click the options box for this menu).  Under the section name 'Name Clash Options' make sure Use Namespaces is unchecked, and resolve 'all nodes'  with 'this string' and in the box type a name that will be a prefix for everything in the reference file.  For this example I would type GPMG and then click the reference box at bottom left of this window.  This will bring up a file selection window where you select the reference file you made a moment ago.  If this has worked, your reference file should be loaded into your new file, but now you will notice everything has the name you just set prefixing everything.  Save this as a separate file (think of it as a child of the parent file).  You can now animate in this and any subsequent files made from it safe in the knowledge you are not changing anything in your master reference file.&lt;br /&gt;
&lt;br /&gt;
Also, should you need to make any core changes to the master file, such as adding new joints, reskinning or applying different materials for example, these changes will all be present in you child files.  So, at this point, you should be ready to start animating the model. Well, go on then... :)  &lt;br /&gt;
&lt;br /&gt;
=== Animate! ===&lt;br /&gt;
Animate the model as usual in Maya. For those who are new to animation, The Animator’s Survival Kit by Richard Williams is a good place to start. There are also scores of tutorials on the Internet for Maya-specific animation techniques (eg. http://www.highend3d.com).&lt;br /&gt;
&lt;br /&gt;
It is good practice, however, not to spend too long perfecting animations until you know they are working in game, so let's look at the export process that you should now be ready for and get the model into the game!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Export File =&lt;br /&gt;
Here's a quick example taken from the GPMG first person weapon export file (gpmg.def found in base/def/weapons):&lt;br /&gt;
&lt;br /&gt;
 export hauser {&lt;br /&gt;
        options -prefix GPMG_ -sourcedir models/weapons/gdf_gpmg/dev_sd &lt;br /&gt;
        -destdir models/weapons/gdf_gpmg/ &lt;br /&gt;
        -keep joint1 joint2  -keepmesh gpmg ammo_cover_lock gpmg_charge_handle&lt;br /&gt;
 &lt;br /&gt;
        mesh	gpmg_base_file.mb	-dest view.md5mesh&lt;br /&gt;
        anim	gpmg_idle.mb		-dest idle.md5anim -xyzprecision 0.001&lt;br /&gt;
        anim	gpmg_raise.mb	        -dest raise.md5anim&lt;br /&gt;
        anim	gpmg_lower.mb		-dest lower.md5anim&lt;br /&gt;
        anim	gpmg_fire.mb		-dest fire.md5anim&lt;br /&gt;
        anim	gpmg_reload.mb		-dest reload.md5anim&lt;br /&gt;
        anim	gpmg_idle_zoom.mb	-dest idle_zoom.md5anim&lt;br /&gt;
        anim	gpmg_fire_zoom.mb	-dest fire_zoom.md5anim&lt;br /&gt;
        anim	gpmg_zoom_out.mb	-dest zoom_out.md5anim&lt;br /&gt;
        anim	gpmg_zoom_in.mb		-dest zoom_in.md5anim&lt;br /&gt;
        anim 	gpmg_start_sprint.mb	-dest start_sprint.md5anim&lt;br /&gt;
        anim 	gpmg_leave_sprint.mb	-dest leave_sprint.md5anim&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above example contains options most frequently used when exporting .md5’s:&lt;br /&gt;
&lt;br /&gt;
* '''-prefix''' - When referencing the master file, Maya will ask for a prefix that will be added to the joint names. Specify that prefix here.&lt;br /&gt;
* '''-scale''' - You can tweak the scale of the model on export.  This can be very handy if a designer decides they want something bigger but it has already been rigged and animated.  It is of course better to rescale/rig/animate it in Maya if it is not much work, as it can end up being confusing otherwise.&lt;br /&gt;
* '''-align''' - This will align the specified Maya node and all of its children to face the proper direction.&lt;br /&gt;
* '''-keep''' - The engine will prune joints that have little or no skin weights attached to them. If such joints are necessary to keep in the .MD5, they must be specified here. &lt;br /&gt;
* '''-dest''' - Destination filename. Usage: ''-dest [filename]''&lt;br /&gt;
&lt;br /&gt;
Some additional commands that may be useful:&lt;br /&gt;
* '''-rename''' - Renames joints. Usage: ''-rename [joint name] [new name]''&lt;br /&gt;
* '''-parent''' - Re-parents a joint. Usage: ''-parent [joint name] [new parent]''&lt;br /&gt;
* '''-range''' - Sets a frame range. Usage: ''-range [start frame] [end frame]''&lt;br /&gt;
* '''-cycleStart''' - Usage: ''-cycleStart [first frame of cycle]''&lt;br /&gt;
* '''-rotate''' - Usage: ''-rotate [yaw]''&lt;br /&gt;
* '''-nomesh'''&lt;br /&gt;
* '''-clearorigin'''&lt;br /&gt;
* '''-clearoriginaxis'''&lt;br /&gt;
* '''-ignorescale'''&lt;br /&gt;
* '''-xyzprecision''' - Usage: ''-xyzprecision [precision]''&lt;br /&gt;
* '''-quatprecision''' - Usage: ''-quatprecision [precision]''&lt;br /&gt;
* '''-jointthreshold''' - Usage: ''-jointthreshold [minimum joint weight]''&lt;br /&gt;
* '''-skipmesh''' - Usage: ''-skipmesh [name of mesh to skip]''&lt;br /&gt;
* '''-keepmesh''' - Usage: ''-keepmesh [name of mesh to keep]''&lt;br /&gt;
* '''-keepmeshprefix''' - Usage: ''-keepmeshprefix [prefix of mesh(es) to keep]''&lt;br /&gt;
* '''-jointgroup''' - Usage: ''-jointgroup [group name] [joint1] [joint2]...[joint n]''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Time To Export =&lt;br /&gt;
Now you have your Maya files and ''.def'' file ready you can open up the game.  For this example you would type the following into the console: '''exportmodels weapons/gpmg.def'''&lt;br /&gt;
* '''&amp;quot;exportmodels&amp;quot;''' can be used alone if you wish to export every single ''.def''.&lt;br /&gt;
* '''&amp;quot;reexportmodels&amp;quot;''' can be used to force a full export.&lt;br /&gt;
&lt;br /&gt;
If everything has been set up properly you should see the engine run through executing all the export lines.  If it shows up with any warnings you will need to assess whether it is something to do with the Maya files or the export file.&lt;br /&gt;
&lt;br /&gt;
If you do get warnings or errors, the most common mistakes/things to check are:&lt;br /&gt;
&lt;br /&gt;
* Spelling mistakes in the .def file.&lt;br /&gt;
* Too many, missing or inappropriate double braces.&lt;br /&gt;
* Wrong path indicated for where the files are.&lt;br /&gt;
* The Maya files' time stamps are checked against the the MD5 files. Maybe your date is incorrectly set, or you have only changed the reference file so the game dosen't check it and realise anything is worth exporting (in this case you should use '''reexportmodels''').&lt;br /&gt;
* Export name masks can be used, in this case we have set it to 'export hauser' as shown at the top of the export section above. In game if the 'g_exportmask' is set to anything other than &amp;quot;hauser&amp;quot; or &amp;quot;&amp;quot; (no mask exports all ''.def''s)then the export won't work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Viewing The Model In ETQW =&lt;br /&gt;
The game can't read an ''MD5mesh'' file without a matching ''MD5anim'' file. The only way for the game to know which ''MD5anim''s go with the ''MD5mesh'' is for us to define them in the ''.def'' file. Lets take a look at the GPMG model definition section.&lt;br /&gt;
&lt;br /&gt;
 model viewmodel_gpmg {&lt;br /&gt;
 	mesh 					models/weapons/gdf_gpmg/view.md5mesh&lt;br /&gt;
 &lt;br /&gt;
 	anim idle 				models/weapons/gdf_gpmg/idle.md5anim {&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	anim fire				models/weapons/gdf_gpmg/fire.md5anim {&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	anim reload				models/weapons/gdf_gpmg/reload.md5anim {&lt;br /&gt;
 		frame 1					sound_channel snd_weapon_reload snd_reload&lt;br /&gt;
 	}&lt;br /&gt;
 	anim raise				models/weapons/gdf_gpmg/raise.md5anim {&lt;br /&gt;
 		frame 1					sound_channel snd_weapon_raise snd_raise&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
 	anim putaway				models/weapons/gdf_gpmg/lower.md5anim {&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* '''model &amp;lt;modelname&amp;gt;''' - the model name of the combined md5mesh and md5anims. This can be tested in the game using the '''testmodel''' console command, or can be referenced from other ''.def'' files.&lt;br /&gt;
* '''mesh &amp;lt;md5mesh path&amp;gt;''' - the path of the md5mesh you want to use (most likely you have just exported it).&lt;br /&gt;
* '''anim &amp;lt;animation name&amp;gt; &amp;lt;md5anim path&amp;gt;''' - once the model has been loaded, the animations can be played using the '''testanim''' console command.&lt;br /&gt;
** After each anim name definition there is a section for frame commands. In this example the reload and raise animations will play sound effects.&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
The MD5 files are in plain text, so if anything is going wrong you can open them in a text editor to try and see what's happening more clearly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example of a camera export def;&lt;br /&gt;
 export frankie{&lt;br /&gt;
 	camera models/newcams/democam.mb -dest models/newcams/demovalley&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Animation]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Category:Textures&amp;diff=1456</id>
		<title>Category:Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Category:Textures&amp;diff=1456"/>
		<updated>2007-10-15T17:04:00Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Articles relating to texturing.&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Texturesheets&amp;diff=1455</id>
		<title>Texturesheets</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Texturesheets&amp;diff=1455"/>
		<updated>2007-10-15T17:03:42Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: Fixed atlas editor links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Texturesheets are larger sheets of separate textures combined into a single image to reduce draw calls and improve performance. Texturesheets can easily be created and controlled using [[the Atlas Editor]].&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Texturesheets}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
= Texturesheet Example =&lt;br /&gt;
[[image:texturesheet_example_d.jpg|right|thumb|An example of a texturesheet (Click for full-size)]]&lt;br /&gt;
On the right you can see an example of a 256x1024 pixel texturesheet. Note that the borders of each texture fall on 32-pixel grid lines, for ease of applying to brushwork in a level.&lt;br /&gt;
&lt;br /&gt;
= Texturesheet Considerations =&lt;br /&gt;
The aim of using texturesheets is to improve performance by reducing batches. If you have a single building textured with 4 regular tiling textures, the building will be drawn using at least 4 batches (one per material used). Therefore it makes sense to try and compile all of those textures onto a single sheet, which should mean the whole building will be drawn with 1 batch, leading to faster rendering.&lt;br /&gt;
&lt;br /&gt;
One of the downsides of texturesheets is that you can only tile the textures on a single axis. A regular tiling concrete texture could be tiled indefinitely across a brush or model, while the same texture included in a texturesheet could only be tiled on one axis. The solution then is to split up geometry and apply the same texture to each set of faces. This will still result in a single batch.&lt;br /&gt;
&lt;br /&gt;
To this end, it is worth considering before you texture a level, which textures it's better to use in a texturesheet, and which it is better to leave as a tiling texture. If you have areas of the level which require textures tiling a lot in both X and Y direction, it's probably better to leave these as square tiling textures (for example, floors and ceilings, or large expanses of concrete and stone), but for more specific detail like the walls of houses, pavements and brushwork with lots of trims, it's definitely advantageous to set up a good texturesheet before you texture the level.&lt;br /&gt;
&lt;br /&gt;
= Creating Texturesheets =&lt;br /&gt;
The easiest way to create a texture sheet is to piece together existing tiling textures in [[the Atlas Editor]].&lt;br /&gt;
&lt;br /&gt;
However, if you plan it well, you could create one large texture which contains several different surface types (wood, concrete, brick, metal) in a manner that makes sense, so that the texturesheet can be used as efficiently as possible. This way, the textures would all &amp;quot;make sense&amp;quot; when viewed as a whole, yet still be able to be used as trims or surfaces on their own.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]] [[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Texturesheets&amp;diff=1454</id>
		<title>Texturesheets</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Texturesheets&amp;diff=1454"/>
		<updated>2007-10-15T17:03:25Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Texturesheets are larger sheets of separate textures combined into a single image to reduce draw calls and improve performance. Texturesheets can easily be created and controlled using [[the Atlas Editor]].&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Texturesheets}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
= Texturesheet Example =&lt;br /&gt;
[[image:texturesheet_example_d.jpg|right|thumb|An example of a texturesheet (Click for full-size)]]&lt;br /&gt;
On the right you can see an example of a 256x1024 pixel texturesheet. Note that the borders of each texture fall on 32-pixel grid lines, for ease of applying to brushwork in a level.&lt;br /&gt;
&lt;br /&gt;
= Texturesheet Considerations =&lt;br /&gt;
The aim of using texturesheets is to improve performance by reducing batches. If you have a single building textured with 4 regular tiling textures, the building will be drawn using at least 4 batches (one per material used). Therefore it makes sense to try and compile all of those textures onto a single sheet, which should mean the whole building will be drawn with 1 batch, leading to faster rendering.&lt;br /&gt;
&lt;br /&gt;
One of the downsides of texturesheets is that you can only tile the textures on a single axis. A regular tiling concrete texture could be tiled indefinitely across a brush or model, while the same texture included in a texturesheet could only be tiled on one axis. The solution then is to split up geometry and apply the same texture to each set of faces. This will still result in a single batch.&lt;br /&gt;
&lt;br /&gt;
To this end, it is worth considering before you texture a level, which textures it's better to use in a texturesheet, and which it is better to leave as a tiling texture. If you have areas of the level which require textures tiling a lot in both X and Y direction, it's probably better to leave these as square tiling textures (for example, floors and ceilings, or large expanses of concrete and stone), but for more specific detail like the walls of houses, pavements and brushwork with lots of trims, it's definitely advantageous to set up a good texturesheet before you texture the level.&lt;br /&gt;
&lt;br /&gt;
= Creating Texturesheets =&lt;br /&gt;
The easiest way to create a texture sheet is to piece together existing tiling textures in the [[Atlas Editor]].&lt;br /&gt;
&lt;br /&gt;
However, if you plan it well, you could create one large texture which contains several different surface types (wood, concrete, brick, metal) in a manner that makes sense, so that the texturesheet can be used as efficiently as possible. This way, the textures would all &amp;quot;make sense&amp;quot; when viewed as a whole, yet still be able to be used as trims or surfaces on their own.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]] [[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Textures&amp;diff=1453</id>
		<title>Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Textures&amp;diff=1453"/>
		<updated>2007-10-15T17:02:58Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basic Texture Overview ==&lt;br /&gt;
{{:Basic Texture Overview}}&lt;br /&gt;
&lt;br /&gt;
== Texturesheets ==&lt;br /&gt;
{{:Texturesheets}}&lt;br /&gt;
&lt;br /&gt;
== The Atlas Editor (editSheets) ==&lt;br /&gt;
{{:The Atlas Editor}}&lt;br /&gt;
&lt;br /&gt;
== RenderBumpFlat ==&lt;br /&gt;
RenderBumpFlat is a console command that generates normal maps from generally flat 3D models, and is usually used to create normal maps for tiling environment textures.&lt;br /&gt;
&lt;br /&gt;
{{main|RenderBumpFlat}}&lt;br /&gt;
&lt;br /&gt;
== Detail Textures ==&lt;br /&gt;
{{:Detail Textures}}&lt;br /&gt;
&lt;br /&gt;
== Picmip &amp;amp; Related Issues ==&lt;br /&gt;
Picmip is a method of loading only lower mip-map levels, to save memory at runtime.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Textures&amp;diff=1452</id>
		<title>Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Textures&amp;diff=1452"/>
		<updated>2007-10-15T17:02:15Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Basic Texture Overview ==&lt;br /&gt;
{{:Basic Texture Overview}}&lt;br /&gt;
&lt;br /&gt;
== Texturesheets ==&lt;br /&gt;
{{:Texturesheets}}&lt;br /&gt;
&lt;br /&gt;
== The Atlas Editor (editSheets) ==&lt;br /&gt;
{{:Atlas Editor}}&lt;br /&gt;
&lt;br /&gt;
== RenderBumpFlat ==&lt;br /&gt;
RenderBumpFlat is a console command that generates normal maps from generally flat 3D models, and is usually used to create normal maps for tiling environment textures.&lt;br /&gt;
&lt;br /&gt;
{{main|RenderBumpFlat}}&lt;br /&gt;
&lt;br /&gt;
== Detail Textures ==&lt;br /&gt;
{{:Detail Textures}}&lt;br /&gt;
&lt;br /&gt;
== Picmip &amp;amp; Related Issues ==&lt;br /&gt;
Picmip is a method of loading only lower mip-map levels, to save memory at runtime.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Special_Map_Types&amp;diff=1451</id>
		<title>Special Map Types</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Special_Map_Types&amp;diff=1451"/>
		<updated>2007-10-15T17:01:11Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOEDITSECTION__&lt;br /&gt;
=== Glow Maps ===&lt;br /&gt;
[[Image:glow_map.jpg|right|frame|An example of a glow map.]]&lt;br /&gt;
Glow maps, also known as self-illumination maps, are used to make surfaces appear like they are emitting light.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Special Map Types}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Specular_Maps&amp;diff=1450</id>
		<title>Specular Maps</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Specular_Maps&amp;diff=1450"/>
		<updated>2007-10-15T17:00:49Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:door_spec.jpg|right|frame|A specular map of a door.]]&lt;br /&gt;
Specular maps are the maps you use to define a surface's shininess and highlight colour.&lt;br /&gt;
&lt;br /&gt;
The higher the value of a pixel (from black to white), the shinier the surface will appear in-game. Therefore, surfaces such as dry stone or cotton fabric would tend to have a very dark specular map, while surfaces like polished chrome or plastic would tend to have lighter specular maps.&lt;br /&gt;
&lt;br /&gt;
The colour of a pixel is also used, to calculate the resulting colour of the surface. A very saturated specular map will have a very different visual effect than a grey specular map. If you need a more &amp;quot;neutral&amp;quot; highlight on a surface, your specular map should use the inverse of the diffuse map's colour. Using the same colour on the specular as on the diffuse will result in a more saturated highlight when viewed in the game.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Specular Maps}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use contrasts in specular to make a surface appear more visually interesting in the game - for example, this door has a very dark specular for the wood while the metal parts are much lighter, which will make the metal stand out more as a shinier surface when light hits it. This sort of contrast can help make surfaces in the game appear more realistic too.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Bump_Maps&amp;diff=1449</id>
		<title>Bump Maps</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Bump_Maps&amp;diff=1449"/>
		<updated>2007-10-15T17:00:03Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:door_local.jpg|right|frame|A local map of a door.]]&lt;br /&gt;
Virtually all geometric surface detail should be represented in bump maps instead of drawn into the diffuse maps in the conventional style. This allows a single texture to take on different characteristics based on its interaction with lights.&lt;br /&gt;
&lt;br /&gt;
Ideally, local (or tangent-space) normal maps should be generated from high-poly geometry for the best consistency and surface detail. However, it is often necessary to create normal maps from source photography and textures. This can be done in Photoshop by using the [http://developer.nvidia.com/object/photoshop_dds_plugins.html NVidia Tools NormalMap Filter], or using a 3rd-party application such as [http://www.crazybump.com/ Crazybump].&lt;br /&gt;
&lt;br /&gt;
Two types of images can be used for bump mapping in ETQW; height maps and normal maps.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Bump Maps}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
== Height Maps ==&lt;br /&gt;
[[Image:rock_01_h.jpg|right|thumb|A greyscale height map for a tiling rock texture.]]&lt;br /&gt;
A height map is a gray scale image, with black being the farthest distance away and white being the closest. An addition scale parameter is required when using height maps to determine how deep the image is supposed to be. You can’t properly cut and paste image fragments between height maps with different scale values without distorting the shading. You can add, subtract, airbrush, or smooth gray values by hand on a height map with predictable results. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Local Normal Maps ==&lt;br /&gt;
[[Image:rock_01_local.jpg|right|thumb|An RGB local normal-map for a tiling rock texture.]]&lt;br /&gt;
A local normal map encodes the actual perturbation angle of the surface at each point in the RGB color, so it is complete by itself without any scaling parameters. You can cut and paste between any normal maps without problems, but you can’t reasonably modify the angles of normal map surfaces by hand, or create one from scratch. Smoothing a normal map works reasonably well in practice, although it does result in denormalized pixel values. &lt;br /&gt;
&lt;br /&gt;
The normal vector is encoded as ( ( R-128 ) / 128, ( G-128 ) / 128, ( B-128 ) / 128 ), so a normal pointing straight up ( 0, 0, 1 ) would be encoded as ( 128, 128, 255 ) in the image. Most local normal maps will be primarily bluish, because most of the vectors will be pointing up more strongly than any other direction. &lt;br /&gt;
&lt;br /&gt;
[[Renderbump]] is also capable of generating &amp;quot;global normal maps&amp;quot;, which encode an absolute direction in object space, instead of in local surface space, but global maps cannot be deformed or used on different wall orientations in the same object. They have some minor quality and performance benefits.&lt;br /&gt;
&lt;br /&gt;
Height maps must be converted to normal maps at load time, so it is usually superior to use normal maps unless you need to manually create or manipulate the image in a way that is easier with height maps. &lt;br /&gt;
&lt;br /&gt;
You can’t make a perfectly smooth slope in a height map because of the limited precision in the gray scale image. This results in shaded streaks along the slope, especially with higher resolution height maps. You may be able to hide that by adding some waviness to the surface manually.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Using Bump Maps ==&lt;br /&gt;
&lt;br /&gt;
Every surface that interacts with light will have a normal map.If one isn’t specified, it will default to &amp;quot;_flat&amp;quot;, an internally generated normal map with no changes. There is currently no speed benefit to not having a normal map, although it might be possible to add a fast path for that in the future. &lt;br /&gt;
&lt;br /&gt;
Most materials can be specified in the &amp;quot;shortcut&amp;quot; form, where you specify the diffusemap, specularmap, and bumpmap, and let the engine generate the full stages for it. &lt;br /&gt;
&lt;br /&gt;
    material textures/cc/techpanel&lt;br /&gt;
    {&lt;br /&gt;
        diffusemap       textures/cc/techpanel_d.tga&lt;br /&gt;
        specularmap      textures/cc/techpanel_s.tga&lt;br /&gt;
        bumpmap          textures/cc/techpanel_local.tga&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If diffusemap is not specified, it defaults to a solid white image.  If specularmap is not specified, specular lighting will be disabled for that surface, giving a speedup. &lt;br /&gt;
&lt;br /&gt;
You can modify the lighting calculations to examine the bump mapping under different conditions: &lt;br /&gt;
&lt;br /&gt;
'''r_skipSpecular &amp;lt;0/1&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
'''r_skipDiffuse &amp;lt;0/1/2&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
== Renderbump ==&lt;br /&gt;
{{:Renderbump}}&lt;br /&gt;
&lt;br /&gt;
== Editing Normal Maps ==&lt;br /&gt;
{{:Editing Normal Maps}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Diffuse_Maps&amp;diff=1448</id>
		<title>Diffuse Maps</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Diffuse_Maps&amp;diff=1448"/>
		<updated>2007-10-15T16:59:41Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:door_diff.jpg|right|frame|A diffuse map of a door.]]&lt;br /&gt;
A diffuse map is a texture you use to define a surface's main colour.&lt;br /&gt;
&lt;br /&gt;
In order to work well with a normal map and a specular map, a good diffuse texture should not have any directional lighting included, it should only have generic &amp;quot;ambient occlusion&amp;quot; - ie. the surface gets darker in deep cracks and around embossed details. If you are generating your normal maps from high-poly geometry, you should bake a matching ambient occlusion pass from the geometry and multiply this on top of your diffuse texture to make sure that the lighting matches the normal map.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Diffuse Maps}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Basic_Texture_Overview&amp;diff=1447</id>
		<title>Basic Texture Overview</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Basic_Texture_Overview&amp;diff=1447"/>
		<updated>2007-10-15T16:59:30Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Generic texture info here.&lt;br /&gt;
&lt;br /&gt;
== Diffuse Maps ==&lt;br /&gt;
{{:Diffuse Maps}}&lt;br /&gt;
&lt;br /&gt;
== Local Normal Maps ==&lt;br /&gt;
{{:Bump Maps}}&lt;br /&gt;
&lt;br /&gt;
== Specular Maps ==&lt;br /&gt;
{{:Specular Maps}}&lt;br /&gt;
&lt;br /&gt;
== Special Map Types ==&lt;br /&gt;
{{:Special Map Types}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Art]][[Category:Textures]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Texturesheets&amp;diff=1446</id>
		<title>Texturesheets</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Texturesheets&amp;diff=1446"/>
		<updated>2007-10-15T16:58:55Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Texturesheets are larger sheets of separate textures combined into a single image to reduce draw calls and improve performance. Texturesheets can easily be created and controlled using the [[Atlas Editor]].&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Texturesheets}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
= Texturesheet Example =&lt;br /&gt;
[[image:texturesheet_example_d.jpg|right|thumb|An example of a texturesheet (Click for full-size)]]&lt;br /&gt;
On the right you can see an example of a 256x1024 pixel texturesheet. Note that the borders of each texture fall on 32-pixel grid lines, for ease of applying to brushwork in a level.&lt;br /&gt;
&lt;br /&gt;
= Texturesheet Considerations =&lt;br /&gt;
The aim of using texturesheets is to improve performance by reducing batches. If you have a single building textured with 4 regular tiling textures, the building will be drawn using at least 4 batches (one per material used). Therefore it makes sense to try and compile all of those textures onto a single sheet, which should mean the whole building will be drawn with 1 batch, leading to faster rendering.&lt;br /&gt;
&lt;br /&gt;
One of the downsides of texturesheets is that you can only tile the textures on a single axis. A regular tiling concrete texture could be tiled indefinitely across a brush or model, while the same texture included in a texturesheet could only be tiled on one axis. The solution then is to split up geometry and apply the same texture to each set of faces. This will still result in a single batch.&lt;br /&gt;
&lt;br /&gt;
To this end, it is worth considering before you texture a level, which textures it's better to use in a texturesheet, and which it is better to leave as a tiling texture. If you have areas of the level which require textures tiling a lot in both X and Y direction, it's probably better to leave these as square tiling textures (for example, floors and ceilings, or large expanses of concrete and stone), but for more specific detail like the walls of houses, pavements and brushwork with lots of trims, it's definitely advantageous to set up a good texturesheet before you texture the level.&lt;br /&gt;
&lt;br /&gt;
= Creating Texturesheets =&lt;br /&gt;
The easiest way to create a texture sheet is to piece together existing tiling textures in the [[Atlas Editor]].&lt;br /&gt;
&lt;br /&gt;
However, if you plan it well, you could create one large texture which contains several different surface types (wood, concrete, brick, metal) in a manner that makes sense, so that the texturesheet can be used as efficiently as possible. This way, the textures would all &amp;quot;make sense&amp;quot; when viewed as a whole, yet still be able to be used as trims or surfaces on their own.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]] [[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=The_Atlas_Editor&amp;diff=1445</id>
		<title>The Atlas Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=The_Atlas_Editor&amp;diff=1445"/>
		<updated>2007-10-15T16:58:45Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Atlas Editor (editSheets) is used to group multiple source textures together into one larger texture, known as a [[Texturesheets|texture sheet]]. This texture sheet can then be used for multiple models, allowing them to share a single large texture and reducing the overall number of batches sent to the graphics card.&lt;br /&gt;
&lt;br /&gt;
The Atlas Editor solves the problem of having to manually update the atlas map whenever one of its source maps is changed. A recompile of the atlas map is all that is necessary to incorporate any source map changes. It also lets you draw out areas of specific surface types, and automatically outputs these areas for the game to load.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Atlas Editor}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
= Overview =&lt;br /&gt;
The Atlas Editor can be started from the console with the '''editSheets''' command.&lt;br /&gt;
The atlas source used to compile the atlas map is stored as a ''.atlas'' file in the folder ''base/atlas''.&lt;br /&gt;
&lt;br /&gt;
= Terms =&lt;br /&gt;
* '''Atlas Map''' - This is the large texture sheet that is a combination of several smaller textures, known as&lt;br /&gt;
* '''Source Maps''' - Tiling textures that are generally used on brush-based world geometry.&lt;br /&gt;
* '''SurfaceType Map''' - This is a way to specify material types within a texture. These allow for more accurate vehicle physics, sound and particle effects.&lt;br /&gt;
&lt;br /&gt;
= Using The Atlas Editor =&lt;br /&gt;
Most of the commands are available in the menu along with shortcut keys. The mouse interface is as follows:&lt;br /&gt;
&lt;br /&gt;
==Editing==&lt;br /&gt;
* '''Left-click/drag''' - Move the current selection around the grid.&lt;br /&gt;
* '''Shift-left click''' - Select the item currently under the cursor.&lt;br /&gt;
* '''Alt-left click/drag''' - Marquee-select points.&lt;br /&gt;
* '''Ctrl-left click/drag''' - Slice any shapes that the slice line crosses. This only affects Surface Type areas; images will not be affected.&lt;br /&gt;
* '''Enter''' - Creates a new image source. Also available by pressing the [[Image:editsheets_icon_new_image.png|New Image]] icon.&lt;br /&gt;
* '''Ctrl+Enter''' - Creates a new Surface Type area. Also available by pressing the [[Image:editsheets_icon_new_surfacetype.png|New Surface Type]] icon.&lt;br /&gt;
&lt;br /&gt;
===The Grid===&lt;br /&gt;
The Atlas Editor uses a grid system for snapping the edges of textures and surfacetype areas. You can change the grid density by choosing one of the ''Units'' values in the ''Grid'' menu of the Atlas Editor, or by pressing the hotkeys '''1 - 6''' (smallest to largest grid sizes). The default grid size is 4 units; setting this value higher will result in more obvious and easy snapping of large components. Setting this value lower will allow more precise editing, if needed.&lt;br /&gt;
&lt;br /&gt;
==Viewing==&lt;br /&gt;
* '''Right click/drag''' - Pan the image around within the viewport.&lt;br /&gt;
* '''Mouse wheel up/down''' - Zoom in and out.&lt;br /&gt;
&lt;br /&gt;
==Preferences==&lt;br /&gt;
* Selecting ''Edit -&amp;gt; Preferences'' will bring up the option to Close Engine on Exit. If left un-checked, this can be useful to go back to the game once you have finished editing your texture sheets.&lt;br /&gt;
&lt;br /&gt;
==Document Properties==&lt;br /&gt;
Pressing '''ALT+Enter''' or clicking the [[Image:editsheets_icon_document_properties.png|Document]] icon will open the Document Properties in the Property Editor.&lt;br /&gt;
&lt;br /&gt;
[[Image:editsheets_document_properties.png|right|editSheets' Document Properties window]]&lt;br /&gt;
&lt;br /&gt;
===Display===&lt;br /&gt;
* '''Grid Background''' - The background colour of the texturesheet preview window.&lt;br /&gt;
* '''Grid Major''' - The colour of major grid lines in the preview window.&lt;br /&gt;
* '''Grid Minor''' - The colour of minor grid lines in the preview window.&lt;br /&gt;
* '''Grid Text''' - The colour of text displayed in the preview window.&lt;br /&gt;
&lt;br /&gt;
===Document===&lt;br /&gt;
* '''Output Dimension''' - The horizontal and vertical size in pixels of the texturesheet (defaults to 1024x1024).&lt;br /&gt;
* '''Output File''' - The base name of the texturesheet and surfaceType map.&lt;br /&gt;
&lt;br /&gt;
===Image Output===&lt;br /&gt;
* '''Alpha''' - Outputs an alpha channel with your texturesheet's diffuse map. This is on by default, remember to disable it if your texturesheet doesn't require any transparency, otherwise your texturesheet will use more memory in game than necessary.&lt;br /&gt;
* '''Diffuse''' - Outputs a diffuse map to the path specified in the Output File field, with appended ''_d.tga''.&lt;br /&gt;
* '''Heightmap''' - Outputs a height map to the path specified in the Output File field, with appended ''_h.tga''.&lt;br /&gt;
* '''Local''' - Outputs a local normal map to the path specified in the Output File field, with appended ''_local.tga''.&lt;br /&gt;
* '''Specular''' - Outputs a specular map to the path specified in the Output File field, with appended ''_s.tga''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Image Properties==&lt;br /&gt;
Selecting an Image rectangle in the preview window will bring up the Image Properties for the selected texture.&lt;br /&gt;
&lt;br /&gt;
[[Image:editsheets_image_properties.png|right|editSheets' Image Properties window]]&lt;br /&gt;
&lt;br /&gt;
===Object===&lt;br /&gt;
* '''Diffuse Image''' - Path to the diffuse source texture, relative to the game's base path. Alpha channels in the diffuse texture will be honoured if the &amp;quot;Alpha&amp;quot; image output type is enabled in Document Properties (see above).&lt;br /&gt;
* '''Heightmap Image''' - Path to a heightmap source texture, relative to the game's base path.&lt;br /&gt;
* '''Local Image''' - Path to a local normal-map source texture, relative to the game's base path.&lt;br /&gt;
* '''Specular Image''' - Path to a specular source texture, relative to the game's base path.&lt;br /&gt;
* '''Surface Type''' - This determines the particles, sound and physics effects produced when things in the game collide with this surface. You can find a [[Surface Types|full list of valid Surface Types here]].&lt;br /&gt;
* '''Surface Type Color''' - The colour tint of particles produced when colliding with this surface. This will only be used if the particle effects are set up in such a way that allows tinting.&lt;br /&gt;
&lt;br /&gt;
=====Notes=====&lt;br /&gt;
* File type extensions can be specified, but are not required. References to ''textures/concrete01_d'' and ''textures/concrete01_d.tga'' will both produce the same effect.&lt;br /&gt;
* The Atlas Editor will automatically look for heightmap, local and specular images that match the path provided in the '''Diffuse Image''' section. For example, if ''textures/concrete_d'' is specified, ''textures/concrete_h.tga'', ''textures/concrete_local.tga'' and ''textures/concrete_s.tga'' will automatically be used if they exist, unless different textures are explicitly specified in each field.&lt;br /&gt;
&lt;br /&gt;
===View===&lt;br /&gt;
* '''Sort''' - This value is used to determine where the selected item will draw. A texture with a sort of &amp;quot;1&amp;quot; will always draw on top of a texture with a sort of &amp;quot;0&amp;quot;, if the textures overlap.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Surface Type Properties==&lt;br /&gt;
Selecting a Surface Type area in the preview window will bring up the Surface Type Properties for the selected area.&lt;br /&gt;
&lt;br /&gt;
[[Image:editsheets_surfacetype_properties.png|right|editSheets' Surface Type Properties window]]&lt;br /&gt;
&lt;br /&gt;
===Object===&lt;br /&gt;
* '''Surface Type''' - This denotes the type of physics, sounds and particle effects produced when interacting with the surface in-game. You can find a [[Surface Types|full list of valid Surface Types here]].&lt;br /&gt;
* '''Surface Type Color''' - The colour tint of particles produced when colliding with this surface. This will only be used if the particle effects are set up in such a way that allows tinting.&lt;br /&gt;
&lt;br /&gt;
===View===&lt;br /&gt;
* '''Sort''' - This value is used to determine where the selected item will draw. A Surface Type with a sort of &amp;quot;1&amp;quot; will override a Surface Type with a sort of &amp;quot;0&amp;quot;, if their areas overlap.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Compiling==&lt;br /&gt;
When you want to bake your source maps down to a texturesheet, either choose ''Tools -&amp;gt; Compile'', press '''F5''', or press the [[Image:editsheets_icon_compile_all.png|Compile]] icon. This will generate a full set of atlas textures and a matching surface type map, or remind you to choose a base name for your map if one is not already defined.&lt;br /&gt;
&lt;br /&gt;
If you want to regenerate the surface types without overwriting the textures themselves, either choose ''Tools -&amp;gt; Compile SurfaceTypes'', press '''CTRL+F5''', or press the [[Image:editsheets_icon_compile_surfacetypes.png|Compile SurfaceTypes]] icon.&lt;br /&gt;
&lt;br /&gt;
If your atlas map's base name is &amp;quot;texturesheets/example&amp;quot;, a compile with default settings will produce the following files:&lt;br /&gt;
&lt;br /&gt;
 base/texturesheets/example_d.tga&lt;br /&gt;
 base/texturesheets/example_local.tga&lt;br /&gt;
 base/texturesheets/example_s.tga&lt;br /&gt;
 base/surfacetypes/texturesheets/example.stm&lt;br /&gt;
&lt;br /&gt;
To use this sample atlas map you would create the following material:&lt;br /&gt;
&lt;br /&gt;
 material textures/example&lt;br /&gt;
 {&lt;br /&gt;
 	surfaceTypeMap &amp;quot;texturesheets/example&amp;quot;&lt;br /&gt;
 	diffusemap	texturesheets/example_d.tga&lt;br /&gt;
 	bumpmap		texturesheets/example_local.tga&lt;br /&gt;
 	specularmap	texturesheets/example_s.tga&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Textures]]&lt;br /&gt;
[[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=RenderBumpFlat&amp;diff=1444</id>
		<title>RenderBumpFlat</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=RenderBumpFlat&amp;diff=1444"/>
		<updated>2007-10-15T16:58:20Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This version of [[renderBump]] generates normal maps suitable for mapping on surfaces like standard textures. The model file should contain geometry which forms a generally 2D surface. The model file does not need to have texture coordinates, but you should save it with normals if you don’t want the entire thing to be smooth shaded.&lt;br /&gt;
The generated normal map will be saved to &amp;quot;&amp;lt;modelFile&amp;gt;_local.tga&amp;quot;. To use the following command should be run in the console:&lt;br /&gt;
&lt;br /&gt;
 RenderBumpFlat [OPTION] modelFile&lt;br /&gt;
 &lt;br /&gt;
 Options&lt;br /&gt;
  -size &amp;lt;width&amp;gt; &amp;lt;height&amp;gt;&lt;br /&gt;
  -heightmap&lt;br /&gt;
  -floatHeightmap&lt;br /&gt;
&lt;br /&gt;
* '''-size''' sets output resolution, (defaults to 256 by 256 if not specified).&lt;br /&gt;
* '''-heightmap''' writes out a grayscale heightmap TGA.&lt;br /&gt;
* '''-floatHeightmap''' writes out a 32-bit floating point RAW heightmap file (more accurate than a TGA).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, to render a 1024x1024 normal map, you would use this command:&lt;br /&gt;
 '''renderbumpFlat -size 1024 1024 models/mymodel.lwo'''&lt;br /&gt;
This would output to ''ETQW base folder/models/mymodel_local.tga''&lt;br /&gt;
&lt;br /&gt;
=====Notes===== &lt;br /&gt;
* In Lightwave the Back viewport (XY) is the direction of the renderbump traces.&lt;br /&gt;
* In Max it is the Front viewport (pointing in negative Y)&lt;br /&gt;
* RenderBumpFlat supports the ability to render at higher resolutions then you would normally be limited to through your screen resolution, so 2048x2048 or 4096x4096 are now possible (depending on video card).&lt;br /&gt;
* RenderBumpFlat automatically performs 16x oversampling, so the resulting image should be sufficiently anti-aliased, it also generates a color map by default.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Art]] [[Category:Textures]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Renderbump&amp;diff=1443</id>
		<title>Renderbump</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Renderbump&amp;diff=1443"/>
		<updated>2007-10-15T16:57:57Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The RenderBump tools generate normal maps directly from detailed polygonal geometry.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Renderbump}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are two forms, both integrated into the main ETQW executable. These are RenderBump, used for baking high-poly geometry to low-poly UVW-mapped models, and RenderBumpFlat, used for creating normal maps from high-poly geometry with an overall flat surface (such as a tiling environment texture).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== RenderBump ==&lt;br /&gt;
&lt;br /&gt;
This command generates normal maps for arbitrary geometry such as characters or vehicles, not just flat surfaces. &lt;br /&gt;
&lt;br /&gt;
=== Console Commands ===&lt;br /&gt;
Renderbump command line parameters typed in at the console:&lt;br /&gt;
&lt;br /&gt;
 renderBump [OPTION] &amp;lt;lowPolyModel&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Options&lt;br /&gt;
  -threads &amp;lt;1-10&amp;gt;&lt;br /&gt;
  -drawNormals&lt;br /&gt;
  -overDrawMap&lt;br /&gt;
  -hashBinsPerAxis &amp;lt;8,16,32,64,128&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;renderBump&amp;quot; console command is used to generate a normal map for a non-flat surface like the surface of a character model in the game.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;lowPolyModel&amp;gt;''' should be the path to the low-detail polygonal model for which the normal maps should be generated.&lt;br /&gt;
&lt;br /&gt;
Optionally the number of threads used by for generating the normal map(s) can be specified after the low detail model. The default number of threads is 2 for use on a dual processor or Hyper Threaded system. Generally the number of threads can be set to the number of logical processors in the system. For instance if the system has two Hyper Threaded processors the number of threads can be set to 4.&lt;br /&gt;
&lt;br /&gt;
'''-drawNormals''' can be used to draw the normal mapped triangles as they are calculated during the renderbump process instead of the simple progress bar. Note however that drawing the normal mapped triangles is slower and increases the total renderbump time.&lt;br /&gt;
&lt;br /&gt;
'''-overDrawMap''' can be used to output an overdraw map, see below for a more detailed description.&lt;br /&gt;
&lt;br /&gt;
A uniform hash grid is used to speed up the renderbump process. For models with many millions of triangles this hash grid may consume a significant amount of memory causing renderbump to run out of memory at load time. The size of the hash grid may be reduced by specifying the number of hash bins per 3D axis with the -hashBinsPerAxis option. The number of hash bins per axis must be a power of two and can be set to 8, 16, 32, 64, 128 or 256. The number of hash bins per axis defaults to 128. Using less hash bins per axis may reduce performance. However, if the smaller hash grid consumes significantly less memory performance may actually improve.&lt;br /&gt;
&lt;br /&gt;
=== Material Options ===&lt;br /&gt;
&lt;br /&gt;
The parameters for renderBump are specified on a per-material basis. When the &amp;quot;renderBump&amp;quot; command is launched, renderBump will analyse the specified low-poly model and take parameters from the materials applied to the surfaces of the low-poly model.&lt;br /&gt;
 &lt;br /&gt;
 RenderBump [OPTION] &amp;lt;outputLocalMap&amp;gt; &amp;lt;highPolyModel&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 Options&lt;br /&gt;
  -size &amp;lt;width&amp;gt; &amp;lt;height&amp;gt;&lt;br /&gt;
  -aa &amp;lt;0/1/2&amp;gt;&lt;br /&gt;
  -trace &amp;lt;0.01 - 1.00&amp;gt;&lt;br /&gt;
  -renderTriNormals&lt;br /&gt;
  -perfectMirror&lt;br /&gt;
  -clampTextureSpace&lt;br /&gt;
  -drawNormals&lt;br /&gt;
  -outline &amp;lt;width&amp;gt;&lt;br /&gt;
  -globalMap&lt;br /&gt;
  -colorMap&lt;br /&gt;
  -overdrawMap&lt;br /&gt;
  -clampOutput &amp;lt;xmin&amp;gt; &amp;lt;ymin&amp;gt; &amp;lt;xmax&amp;gt; &amp;lt;ymax&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''-size''' The '-size' option followed by a width and height specifies the size of the normal map. The default size is 512 x 512.&lt;br /&gt;
&lt;br /&gt;
'''-aa''' The '-aa' option specifies the level of anti-aliasing to be used on the normal map. 0 = 1x, 1 = 4x, 2 = 16x. The default setting is 4x anti-aliasing.&lt;br /&gt;
&lt;br /&gt;
'''-trace''' The trace setting determines how far off of the low poly surface a ray cast will look for triangles in the high poly surface. It is expressed in fractions of the largest bounding axis of the high poly model. The default setting is 0.05&lt;br /&gt;
&lt;br /&gt;
'''-renderTriNormals''' LWO models without smoothed vertex normals across the triangle surface consume a lot of memory because all vertices will be unique (they have a unique combination of position and normal vector). Models without smoothed vertex normals use unique vertices for each triangle where the vertex normals for one triangle are the same as the triangle normal. As such renderbump really renders triangle normals and not interpolated vertex normals. The '-renderTriNormals' option forces renderbump to render high poly surface triangle normals to the normal map instead of interpolated vertex normals. This allows loading an LWO '''with''' smoothed vertex normals, which consumes significantly less memory, while still rendering the LWO as if it does '''not''' have smoothed vertex normals.&lt;br /&gt;
&lt;br /&gt;
'''-perfectMirror''' Some models have 2X triangles and the second X triangles are the exact mirror of the first X triangles. If the texture is also mirrored onto the model the -perfectMirror option can be used to only render the first X triangles to the normal map. This does not only save time but it also makes sure that the normal map is rendered from only one side of the model. Most noticeable is that the global map will be properly rendered for one side of the model.&lt;br /&gt;
&lt;br /&gt;
'''-clampTextureSpace''' If the option '-clampTextureSpace' is used only low polygonal model triangles that map to the [0,1] texture space are sampled to calculate the normal map.&lt;br /&gt;
&lt;br /&gt;
'''-drawNormals''' Draw the normal mapped triangles onscreen as they are calculated during the renderbump process.&lt;br /&gt;
&lt;br /&gt;
'''-outline'''  The normals at the edges of areas in the normal map that map to geometry are duplicated outwards to areas that do not directly map to geometry. The '-outline' option followed by a number specifies the number of normals that are duplicated outwards. The default setting is 8.&lt;br /&gt;
&lt;br /&gt;
'''-globalMap''' If the '-globalMap' option is used a &amp;lt;outputLocalMap&amp;gt;_global.tga is written with normals in global model space (not surface space)&lt;br /&gt;
&lt;br /&gt;
'''-colorMap''' If the '-colorMap' option is used a &amp;lt;outputLocalMap&amp;gt;_color.tga is written with sampled vertex colors.&lt;br /&gt;
&lt;br /&gt;
'''-overdrawMap''' When multiple triangles of the low polygonal model map to the same texture space, these triangles may be rendered in any order by renderbump. Based on the order in which these triangles are rendered the normal map may be different. To get a consistent result from renderbump it is important to avoid such overdraw. When the model is mirrored the -perfectMirror option may be used to avoid overdraw. If individual triangles cause overdraw these triangles should be mapped to outside the [0,1] texture space by adding 1 to the texture coordinates and the option '-clampTextureSpace' should be used. If the '-overdrawMap' option is used a &amp;lt;outputLocalMap&amp;gt;_overdraw.tga is written which shows the renderbump overdraw. In this image the texture space used by triangles is drawn in white and all overdraw is drawn in red.&lt;br /&gt;
&lt;br /&gt;
'''-clampOutput''' Stops renderbump from wrapping texture coordinates around back into the 0 - 1 range. For example, if you have a model that has a texture coordinate max at ( 1.5, 1.50 ) and you specify &amp;quot;-clampOutput 0 0 1 1&amp;quot; (ie, a normal range) anything past ( 1, 1 ) will be thrown away and won't be seen on the final output. This can be handy for renderbumping only a certain part of a terrain mesh, for example.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* As a result of the multithreading, renderbump is really sensitive to UV re-use. Make sure there only ever is one UV triangle stacked on a single pixel in the 0,0 to 1,1 space. Anything that re-uses data, move it outside of the region by an offset of 1 (let's standardise by an offset of 1 to the right). Then when renderbumping, use clamped output.&lt;br /&gt;
* The tangent space during renderbumping has to be identical to the one in game, do not split meshes in case of mirroring and remove half of the data. This will cause smoothing to be different during renderbumping and give visual artifacts.&lt;br /&gt;
* Use the shortest trace distance you can away with without getting renderbump errors. The trace setting determines how far off of the low poly surface that a ray cast will look for triangles in the high poly surface. It is expressed in fractions of the largest bounding axis. Tracing speed goes down rapidly as this is increased, but if your high poly geometry isn’t showing up in the normal map, you may need to increase this to 0.1 or more.  The best solution is to try very hard to have the low poly version be a very close match to the high poly version. &lt;br /&gt;
* The lowPolyModel must have texture coordinates on it, and care should be taken to make sure the mapping is as good as possible. Before doing a RenderBump, test the model in the game with '''r_showTexturePolarity 1''' and '''r_showEdges 1'''. Make sure that there aren’t any texture seams that aren’t absolutely necessary, and that there are no overlapped texture projections.&lt;br /&gt;
* The alpha channel of the normal map will contain a mask if there were areas in the map that did not directly map to geometry. This can be copied to a diffuse map to use with the alphatest material option for per-pixel opacity.&lt;br /&gt;
* If you use the normal map as a template for the specular map, you should explicitly clear or remove the alpha channel, because it will prevent more efficient texture compression from being used. &lt;br /&gt;
* The generated image will be saved relative to the game's base path. &lt;br /&gt;
&lt;br /&gt;
== RenderBumpFlat ==&lt;br /&gt;
{{:RenderBumpFlat}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Detail_Textures&amp;diff=1442</id>
		<title>Detail Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Detail_Textures&amp;diff=1442"/>
		<updated>2007-10-15T16:57:23Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Any texture can have a detail map added to it. This creates an extra layer of detail blended on top of the existing texture and normal map - a pass which is only drawn when the player is very close to the object. It can help to disguise lower-resolution textures (for example when picmips are enabled).&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|Detail Textures}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
== Adding Detail Textures to a Material ==&lt;br /&gt;
Detail textures are controlled on a per-material basis. Example below:&lt;br /&gt;
&lt;br /&gt;
 material test/detailmetal&lt;br /&gt;
 {&lt;br /&gt;
 	surfaceType &amp;quot;metal&amp;quot;&lt;br /&gt;
 	{&lt;br /&gt;
 		diffusemap 	textures/metal_d.tga&lt;br /&gt;
 		specularmap	textures/metal_s.tga&lt;br /&gt;
 		bumpmap		textures/metal_local.tga&lt;br /&gt;
 		 	&lt;br /&gt;
 		'''diffuseDetailMap	textures/detail/bump/metal_detail_d.tga'''&lt;br /&gt;
 		'''specDetailMap		textures/detail/bump/metal_detail_s.tga'''&lt;br /&gt;
 		'''bumpDetailMap		textures/detail/bump/metal_detail_local.tga'''&lt;br /&gt;
 		'''detailMult	4,4,0,0'''&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
[[Image:detail_texture_example.jpg|right|An example of the visual difference detail textures can make]]&lt;br /&gt;
* The ''bumpDetailMap'' section should point to a tiling normal map.&lt;br /&gt;
* The ''diffuseDetailMap'' section should point to a tiling diffuse map.&lt;br /&gt;
* The ''specDetailMap'' section should point to a tiling specular map.&lt;br /&gt;
* The first two numbers of the ''detailMult'' section are used to specify the X and Y tiling amount of the detail normals. Higher numbers make the detail normals tile more, resulting in finer details.&lt;br /&gt;
** '''Note:''' For non-square textures (such as texturesheets), the ''detailMult'' values should be the same aspect ratio as the texture. For example, for a 512x2048 texture sheet, use numbers like &amp;quot;2,8,0,0&amp;quot;. If you use a different aspect ratio, the detail normals will appear stretched.&lt;br /&gt;
* The last two numbers denote the offset of the detail textures. Most of the time this probably won't have much visual impact, but can be used for tweaking the positioning of the details. A value of 1 offsets by a whole UV unit, so only decimal values between 0 and 1 are necessary.&lt;br /&gt;
&lt;br /&gt;
=== Different Renderprograms ===&lt;br /&gt;
Sometimes you may have materials that need different render programs in order for detail textures to work properly. Here are some common special cases:&lt;br /&gt;
* If you want a material with the &amp;quot;alphatest&amp;quot; keyword to use detail textures, you must add &amp;lt;tt&amp;gt;''program	interaction/basic_detail_alphatest''&amp;lt;/tt&amp;gt; at the top of the stage.&lt;br /&gt;
* If you want a self-illuminated material with a glow map to use detail textures, you must add &amp;lt;tt&amp;gt;''program	interaction/selfillum_detail''&amp;lt;/tt&amp;gt; at the top of the stage.&lt;br /&gt;
* If you want a material with the Strogg &amp;quot;beetle-shell&amp;quot; effect to use detail textures, you must add &amp;lt;tt&amp;gt;''program	interaction/strogg_detail''&amp;lt;/tt&amp;gt; at the top of the stage.&lt;br /&gt;
** Note: The Strogg detail renderprogram looks for a self-illumination map by default, if you are not using a glow map then you must specify &amp;lt;tt&amp;gt;''selfillummap			_black''&amp;lt;/tt&amp;gt; after the regular diffuse, bump and specular texture declarations.&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
* Every material does not need to have diffuse, specular and bump detail maps - for example, in some cases just using a bump detail map alone can look better than using all three passes.&lt;br /&gt;
* To save texture memory, you could use a single texture for both the diffuse and specular detail textures, since in most cases they tend to match up anyway.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Masking Detail Textures with an Image ==&lt;br /&gt;
* In some cases, it can greatly improve visual quality if the detail maps are not applied evenly over a surface. For example, blending a detail normal into very dark shadows looks odd, since it flattens out the overall texture.&lt;br /&gt;
* If a texture would benefit from masking the detail textures out in certain areas, a good way of controlling this is by making a greyscale image, preferably as low-resolution as possible (for memory-saving reasons). 1/8 of the base texture size should be more than enough to make a decent mask.&lt;br /&gt;
** A quick method of making a mask to remove the detail textures from the shadows is just to open the texture's diffuse image, greyscale it, and tweak the levels (CTRL-L) in Photoshop to make most areas white, and the darkest areas black.&lt;br /&gt;
** In the mask texture, pure black will result in no detail textures being shown, pure white will apply the detail textures at full strength.&lt;br /&gt;
* Currently, in order to implement this, these lines (in bold) will need to be added to the material:&lt;br /&gt;
&lt;br /&gt;
 material test/detailmetal&lt;br /&gt;
 {&lt;br /&gt;
 	surfaceType &amp;quot;metal&amp;quot;&lt;br /&gt;
 	{&lt;br /&gt;
 		'''program		interaction/basic_detailwm'''&lt;br /&gt;
 		diffusemap 	textures/metal_d.tga&lt;br /&gt;
 		specularmap	textures/metal_s.tga&lt;br /&gt;
 		bumpmap		textures/metal_local.tga&lt;br /&gt;
 		 	&lt;br /&gt;
 		bumpDetailMap	textures/detail/bump/metal_detail_local.tga&lt;br /&gt;
 		detailMult	4,4,0,0&lt;br /&gt;
 		'''detailWeightMap	textures/metal_detailmask.tga'''&lt;br /&gt;
 	}&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* For materials that use the Strogg renderprogram, use &amp;lt;tt&amp;gt;''program interaction/strogg_detailwm''&amp;lt;/tt&amp;gt;.&lt;br /&gt;
** Note: The Strogg detail renderprogram looks for a self-illumination map by default, if you are not using a glow map then you must specify &amp;lt;tt&amp;gt;''selfillummap			_black''&amp;lt;/tt&amp;gt; after the regular diffuse, bump and specular texture declarations.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Toggling Detail Textures in the Game ==&lt;br /&gt;
&lt;br /&gt;
* You can create a toggle bind to turn detail textures on and off by using '''bind ''&amp;lt;key&amp;gt;'' &amp;quot;toggle r_renderProgramLodDistance 1 250&amp;quot;'''.&lt;br /&gt;
&lt;br /&gt;
* If you want to set the range that the detail texture appears in the game, change the value of ''r_renderProgramLodDistance'' (defaults to 250). This is applied globally on the client side and cannot be controlled on a per-material basis - it is more of a graphics quality control setting.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]] [[Category:Textures]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Category:Level_Design&amp;diff=1441</id>
		<title>Category:Level Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Category:Level_Design&amp;diff=1441"/>
		<updated>2007-10-15T16:57:03Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki articles relating to Level Design processes and techniques.&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Terrain_Editing&amp;diff=1440</id>
		<title>Terrain Editing</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Terrain_Editing&amp;diff=1440"/>
		<updated>2007-10-15T16:56:41Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Making a Terrain Model ==&lt;br /&gt;
[[Making a Terrain Model]]&lt;br /&gt;
&lt;br /&gt;
== EditWorld's Terrain Editor ==&lt;br /&gt;
[[Terrain Editor]]&lt;br /&gt;
&lt;br /&gt;
== MegaBuild ==&lt;br /&gt;
{{:MegaBuild}}&lt;br /&gt;
&lt;br /&gt;
== STUFF System ==&lt;br /&gt;
{{:STUFF System}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Level Design]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Making_a_Terrain_Model&amp;diff=1439</id>
		<title>Making a Terrain Model</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Making_a_Terrain_Model&amp;diff=1439"/>
		<updated>2007-10-15T16:54:17Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Before building a detailed terrain mesh, make sure your gameplay layout works by using a more simplistic terrain model from Max, Maya or Lightwave, and jump to [[#Getting The Terrain Mesh Into Game|Getting The Terrain Mesh Into Game]] to test it in ETQW until you’re happy with the gameplay layout.&lt;br /&gt;
&lt;br /&gt;
= Terrain Model Methods =&lt;br /&gt;
If you want to make a terrain mesh only using a standard 3d package, you can do so and skip down to [[#Getting The Terrain Mesh Into Game|Getting The Terrain Mesh Into Game]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you do want to add some more natural detail to your terrain, here are the main steps for doing so:&lt;br /&gt;
* Build a basic layout in a 3d modelling package, for testing the gameplay layout.&lt;br /&gt;
* Convert the gameplay tested mesh to a Heightmap to use in World Machine.&lt;br /&gt;
* Add detail to terrain in World Machine (or other heightmap-based terrain editor).&lt;br /&gt;
* Create a level perturbate image using the [[renderBumpFlat]] and [[heightToNormal]] commands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to get your hands even dirtier you can import the heightmap from World Machine into Mudbox or Zbrush and sculpt more detail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Creating a Heightmap from a Model ==&lt;br /&gt;
This step is needed  if you want to import your current terrain mesh into World Machine.&lt;br /&gt;
&lt;br /&gt;
* Firstly, rotate the terrain mesh. In Lightwave, rotate -90° around the X axis. For 3ds Max &amp;amp; Maya, rotate +90° around the X axis.&lt;br /&gt;
* Cap any holes in the mesh, and triangulate. Using a machine with an nVidia graphics card, run the following command in the ETQW console to get the heightmap (where [model] is pointing to the relative path of the ''.lwo'', ''.obj'' or ''.ase'' mesh):&lt;br /&gt;
 ''RenderBumpFlat –floatHeightmap -size 2048 2048 [model]''&lt;br /&gt;
* [[RenderBumpFlat]] will print out a value called &amp;quot;Height Difference&amp;quot;, note down this number as you’ll need it later.  An .r32 heightmap will be saved into the same folder as your model, and this heightmap can be used in World Machine.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== World Machine ==&lt;br /&gt;
World Machine is a heightmap node based terrain editor, useful for creating a natural erosion look; here are a couple links to help you learn more about it, and get copy for yourself:&lt;br /&gt;
[http://www.world-machine.com World Machine] / [http://world-machine.com/blog/ World Machine Blog]&lt;br /&gt;
* The Erosion node is the main tool for creating natural-looking terrains, and contains many options to give a variety of results (try adding perlin noise to the heightmap before eroding).&lt;br /&gt;
* From the Erosion node, there are 3 extra outputs; Flow, Wear, and Deposition.  These outputs are very handy for making distribution masks for the Megatexture.  In order to use the 3 images you’ll have to convert them from top-down planar to UV-space via surface sampling in a 3d package.&lt;br /&gt;
* For areas that have been eroded so much that it has removed important gameplay geometry, you can use a Choose node that allows you to blend back the original heightmap using a mask.&lt;br /&gt;
* Export the heightmap as both a RAW 32 and 16 (image resolutions of 2048x2048 or higher are preferable), as some 3d packages don’t load 32-bit images.  A standard TGA file will give a stepped result due to less height levels.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optimising to Game Mesh ==&lt;br /&gt;
* First we need to convert the heightmap to a mesh.  In both Mudbox and Zbrush you can do this by applying the heightmap as a displacement map on a 3d plane (512x512 tessellation should be enough).  Also, World Machine Pro has mesh export capabilities.&lt;br /&gt;
* Once exported out, scale and move the new mesh so it matches up to your original gameplay tested mesh.&lt;br /&gt;
* The next step is to reduce the polygons to around 32K.  Good results can be obtained using a Lightwave plug-in called [http://amber.rc.arizona.edu/lw/qemloss3.html qemLOSS3].&lt;br /&gt;
** Create a top down greyscale image that’ll represent the polygon distribution. White on the image would make the mesh dense while black will be less dense.&lt;br /&gt;
** In Lightwave rename the default material (Press Q to bring up the appropriate window).&lt;br /&gt;
** Apply the distribution map using Textured Point under the Map tab, setting VMap Type to Weighted Map, and giving it a name. Texture editor window will pop up, choose Projection: UV, select the UV map, and select your distribution map for the image.&lt;br /&gt;
** Set the viewport to Weight Shade and make sure the image's orientation is correct, orange should be in areas where you want dense polygons.&lt;br /&gt;
** Run the plug-in qemLOSS3 (plug-in is found under the Utilities tab). Enter in the number of polygons you want to reduce to (around 32K). Go to the WGHT tab, tick Use Weights as Reduction Constraint, and select the multiply value you want (exaggerates the effect of the weight map). Export back to your preferred 3d package (there may be edges that will need there triangulation flipped).&lt;br /&gt;
* This extra little step helps smooth out the mesh (re-distributing the polygons) if you’ve noticed your reduction has left sharp angular polygons. Smooth the mesh (one subdivision) keeping mesh border edges how they are. Run the subdivided mesh through the qemLOSS3 plug-in in lightwave again, this time not applying the weightmap distribution.  The end result should leave a smoother mesh that’s better for gameplay.&lt;br /&gt;
* Small Lightwave tip: If you want to keep your UV’s, apply a texture to the mesh before exporting out of Lightwave.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UV the Terrain with minimal distortions ==&lt;br /&gt;
This process is written for Maya, other 3d packages might have to modify the process.&lt;br /&gt;
* To achieve relaxed UV borders use a mel script called worldSpaceUVLine - it can be found on [http://Highend3d.com/maya/downloads/mel_scripts/modeling/poly_tools/4508.html Highend3D]. Copy the .mel into your ''My Documents\maya\#.#\scripts'' folder and run by typing '''''worldSpaceUVLine;''''' in the Maya command line.&lt;br /&gt;
* Snap all 4 corners to the UV 0-1 square.  Select all the edge uv for one side, and in the worldSpaceUVLine tool select the corresponding UV layout direction (U for horizontal, V for vertical), and press the align UV’s on selected line button. Repeat for each side.&lt;br /&gt;
* Make sure all holes in the mesh are capped, and run the Relax UVs tool, with the option ''Edge Weights'' set to ''World Space'', and ''Pin UV Border'' selected.  Keep repeating Relax UVs until you see no more UV movement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create Perturbate Image for Whole Megatexture. ==&lt;br /&gt;
This step will make a tangent-space normal map of the difference between your World Machine heightmap and your game mesh.  This can then be applied to the Megatexture using the [[Terrain Editor|terrain editor]].&lt;br /&gt;
* First rotate the terrain mesh (save as a different file to be safe). In Lightwave, rotate -90° around the X axis. For 3ds Max &amp;amp; Maya, rotate +90° around the X axis.&lt;br /&gt;
* We need to make a normal map of the game mesh in order to create the tangent space normal map.  Cap any holes in the mesh, and triangulate. Using a machine with an nVidia graphics card, run the following line in the console to get the normal map of the game mesh:&lt;br /&gt;
 ''renderBumpFlat –size &amp;lt;width height&amp;gt; [model]''&lt;br /&gt;
* To get the Perturbate normal map, run [[heightToNormal]] in the console, using the normal map made in the step above, and the World Machine heightmap (which needs to be a 32-bit ''.R32'' file):&lt;br /&gt;
 ''heightToNormal sourcelsNormal -s &amp;lt;scale&amp;gt; [normalmap] [heightmap]''&lt;br /&gt;
* The ''&amp;lt;scale&amp;gt;'' value is the total height of the heightmap.  Use your game mesh as a guide.  You’ll probably have to change this value (by units of 10) until you get a mostly even normal map.&lt;br /&gt;
* Convert the perturbate normal map to UV space. This is done using a surface sampler (Modify/Surface Sampler in Maya). Source being a planar-mapped mesh with the perturbate map applied, Destination mesh being the relaxed UV game mesh.  Alternatively you can use the Warp Image tool in Maya using 2 UV sets, or if using 3dsmax, you can use the Render to Texture dialog to resample to correct UV space.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Getting The Terrain Mesh Into Game =&lt;br /&gt;
* Set the terrain mesh material to ''megatextures/'''map_name'''''&lt;br /&gt;
* Export the mesh as '''&amp;lt;map_name&amp;gt;.lwo''' to ''base/models/terrain''&lt;br /&gt;
* Create a material for the Megatexture using the same name as above:&lt;br /&gt;
 ''material megatextures/'''map_name'''	{ useTemplate megatextures/default_ambient  &amp;lt; &amp;quot;'''map_name'''&amp;quot; &amp;gt; }''&lt;br /&gt;
* Load your map (''.world'' file) in [[editWorld|World Editor]], and bring up the [[Terrain Editor]] inspector.&lt;br /&gt;
* On the Root node set the model field to your model, and set the ST Model to a version of your mesh with no mesh holes (fill holes where you have cut out for buildings that go into the terrain).&lt;br /&gt;
* Compile the map in order to see it in game (the terrain will appear red if no Megatexture ''.mega'' file exists).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Out of Bounds (OOB) Geometry =&lt;br /&gt;
OOB geometry is the terrain outside the main area that gives the look of terrain extending to the horizon.  The best way to build this is to have the Megatexture mirrored on the level/OOB border.  This is so there are no obvious texture seams.  A bit further out grab areas of terrain (like mountain peaks) from the gameplay mesh and merge those in, as this will keep the look of natural features in the oob. Also reduce the polygon count as the mesh gets further from the gameplay area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we break up the mesh into sections:&lt;br /&gt;
&lt;br /&gt;
'''The OOB Ring''' is a close mesh ring around the gameplay terrain (4096 units) that players can still run on, allowing an area of warning the player to turn back.  This mesh should be placed in the level as a model_static, with the properties of:&lt;br /&gt;
 mergecm                         1&lt;br /&gt;
 model                           models/terrain/''mapname''_oob_ring.lwo&lt;br /&gt;
&lt;br /&gt;
'''Outer OOB sections:'''  The rest of the oob mesh should be broken into 4 to 8 sections circling the oob_ring.  This helps the engine not draw sections that are out of the camera’s view.  These models should be placed in the level as func_static entities, with the properties:&lt;br /&gt;
 maxVisDist                      0&lt;br /&gt;
 model                           models/terrain/''mapname''_oob_1.lwo&lt;br /&gt;
 noclipmodel                     1&lt;br /&gt;
 noscriptobject                  1&lt;br /&gt;
 pushIntoConnectedOutsideAreas   1&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Level Design]]&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Terrain_Editor&amp;diff=1437</id>
		<title>Terrain Editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Terrain_Editor&amp;diff=1437"/>
		<updated>2007-10-15T16:53:59Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This inspector tab in editworld is mainly used to build the texture layers of the megatexture.  To activate the Terrain Editor click the Begin Editing button at the bottom of the page.   The terrain Editor works in a parent/child node based system, where nodes at the top of the list get drawn first and nodes further down get drawn last (opposite of photoshop layers).&lt;br /&gt;
&lt;br /&gt;
To create a node right click on the parent and under new you can select the different nodes: Image Source, Projector, Road, Stamp Node, and Group.  In the right click menu you can also copy/paste nodes and delete them.  To move a node click and drag, releasing on a node that you wish to be it’s new parent (it will by default make it bottom of the child list).  Alternatively you can release the node either just above or below a node, placing it respectively.&lt;br /&gt;
&lt;br /&gt;
= Root Node =&lt;br /&gt;
At the top of the node hierarquy, this node must be created first.&lt;br /&gt;
&lt;br /&gt;
* '''Detail Texture 0-3'''        Choose the texture for each of the 4 detail texture slots.&lt;br /&gt;
&lt;br /&gt;
* '''Model'''        Assign a terrain model to be compiled into the map.&lt;br /&gt;
&lt;br /&gt;
* '''ST Model'''        Assign a model to be used for calculating the megatexture ST grid (information used to focus the megatexture around the player).  This mesh should be the same as the gameplay mesh, only with all holes filled up (there should be no gaps in the mesh).&lt;br /&gt;
&lt;br /&gt;
= Group Node =&lt;br /&gt;
This node is useful for keeping your tree nice and tidy, and does what its name suggests.&lt;br /&gt;
&lt;br /&gt;
= Image Source Node =&lt;br /&gt;
Used to apply textures and can be distributed in a variety of ways.&lt;br /&gt;
&lt;br /&gt;
== Image Properties ==&lt;br /&gt;
&lt;br /&gt;
Images and procedurals can be assigned to the different inputs using the bottom left section of the Terrain Editor tab.&lt;br /&gt;
&lt;br /&gt;
* '''Diffuse''' The colour image to be used in the blend.&lt;br /&gt;
	&lt;br /&gt;
* '''Distribution''' The distribution image for the whole mesh, where white will blend the image and black will mask the image.  This layer uses the uv’s of the mesh, unless UV Type has been set to either Parallel projection settings, where the distribution will be projected in the same manner.&lt;br /&gt;
&lt;br /&gt;
* '''Distribution Pattern''' This images blends with the Distribution image allowing you to make a tiled blend images that matches the Diffuse image.  White areas on this images will blend through before black areas.&lt;br /&gt;
&lt;br /&gt;
* '''Global Mask''' This image is multiplied on top of the Distribution mask.  Useful when wanting to use complex mix of 2 masks in a node.  For example you’ve made a mask for where you want rock, but you want to mask that mask for different angles on the mesh (avoiding upside down rock).&lt;br /&gt;
&lt;br /&gt;
* '''Heightmap''' Used to set a heightmap of a layer for when it or another layer uses a HeightMap Blend.&lt;br /&gt;
&lt;br /&gt;
* '''Local''' The normal map to be used in conjunction with the diffuse image (uses the same scale and rotation settings)&lt;br /&gt;
&lt;br /&gt;
* '''Proj. Pattern''' Used when UV Type is set to a parallel projection.  Works in the same way as Distribution Pattern, except is projected parallel with the diffuse image (and uses the same scale settings).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To assign an image, select the image type (Diffuse, Distribution Pattern…) and under Image Properties/'''''Source Type''''' (on the left side of the tab) choose the type of image you would like (texture or procedural).  With each type, different settings can be entered:&lt;br /&gt;
&lt;br /&gt;
=== Texture ===&lt;br /&gt;
* '''Clamp Distribution''' Here you can set if an image tiles or is clamped.  Normally can be left to default, as by default the image node is set to tile and a projector node is set to clamp.&lt;br /&gt;
* '''File Type''' Choose a texture/image you wish to use.  In the Choose an image pop-up, you can add a favourite folder by dragging it into the favourites section.  Double click the favourite to enter that folder, and while selected press delete to remove it from the list.&lt;br /&gt;
	&lt;br /&gt;
=== Noise, Rocky, and  Marble ===&lt;br /&gt;
Contain standard procedural settings&lt;br /&gt;
&lt;br /&gt;
=== Geometry Based ===&lt;br /&gt;
Builds an image created from terrain attributes, useful for masks (snow caps, rocky cliffs).&lt;br /&gt;
* '''Altitude Properties''' Contains settings to mask based on geometry height (Altitude Lower and Upper).  To activate an altitude select and tick Enable.&lt;br /&gt;
** '''Value''' Assigns a height at which to start the mask (standard editor units).&lt;br /&gt;
** '''Fuzziness''' The higher the number the smoother/longer the fade in.&lt;br /&gt;
* '''Resolution''' Assign a texture resolution to the procedural image.&lt;br /&gt;
* '''Slope Properties''' Contains settings to mask based on geometry angle (Slope Lower and Upper).  To activate an altitude select and tick Enable.&lt;br /&gt;
** '''Value''' Assigns an angle at which to start the mask.&lt;br /&gt;
** '''Fuzziness''' The higher the number the smoother/longer the fade in.&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
Contains the settings/values on how to blend the images and nodes together.&lt;br /&gt;
&lt;br /&gt;
=== Blend ===&lt;br /&gt;
Here you can choose how you want this node to blend with the previous layers:&lt;br /&gt;
&lt;br /&gt;
* '''Add''' Brightens the previous layers using the image on this node. Note that masks don’t work with this blend mode&lt;br /&gt;
&lt;br /&gt;
* '''Multiply (d*(s*1.6))''' In the source image colours darker thank 160 will darken the previous layers, while colours brighter than 160 will lighten. &lt;br /&gt;
&lt;br /&gt;
* '''Multiply (d*s)''' Darkens the previous layers by using the image in this node.&lt;br /&gt;
&lt;br /&gt;
* '''Heightmap''' Using the heightmap images of all layers, and the first 2 values in blend parameters, this mode blends the node into the deeper parts of the blended heightmaps (darker).  The best way to set up a heightmap blend is add a heightmap to the previous layers you want to blend into.  Then on the node with the heightmap blend mode, set the heightmap to black.  It will now blend into the cracks and lower areas of the previous layers, using the Distribution image as a guide.  Adjust the Blend Parameters to bring up the height of the blend and the falloff.  Note that this method uses all the heightmaps blended together, so when using more than one heightmap blend it might not work as well.&lt;br /&gt;
&lt;br /&gt;
* '''Perturbate Normals''' This blend method will add the local image onto the previous layers normals.  Useful for adding detailed normals from a higher-res terrain.  Note the diffuse image is not rendered but all other layers work fine.&lt;br /&gt;
&lt;br /&gt;
=== Blend Parameters ===&lt;br /&gt;
&lt;br /&gt;
* '''Parm 0''' Used in a heightmap blend, this value controls the height as which the blend takes place.&lt;br /&gt;
&lt;br /&gt;
* '''Parm 1''' Used in a heightmap blend, this value controls the sharpness of the falloff in the blend.&lt;br /&gt;
&lt;br /&gt;
* '''Parm 2''' Not used for anything.&lt;br /&gt;
&lt;br /&gt;
* '''Parm 3''' Used to adjust the falloff sharpness when using UV Type set to Parallel (Top Down or Side).&lt;br /&gt;
&lt;br /&gt;
=== Color Properties ===&lt;br /&gt;
&lt;br /&gt;
* '''Alpha''' Transparency of the layer (white is opaque).&lt;br /&gt;
&lt;br /&gt;
* '''Color''' You can tint a layer by choosing a colour here.&lt;br /&gt;
&lt;br /&gt;
* '''Inverse Alpha''' Inverts where the layer is rendered.&lt;br /&gt;
&lt;br /&gt;
* '''Ramp Width''' Controls the sharpness of the falloff (1 is wide, 0 is sharp).&lt;br /&gt;
&lt;br /&gt;
=== Detail Texture Type ===&lt;br /&gt;
Sets what detail texture from 0 to 3 to use.  Detail textures are defined in the Root node.&lt;br /&gt;
&lt;br /&gt;
=== Distribution Pattern Texture Rotation ===&lt;br /&gt;
Sets the Rotation of the Distribution Pattern (counter clockwise).&lt;br /&gt;
&lt;br /&gt;
=== Distribution Pattern Texture Scale ===&lt;br /&gt;
Sets how many times the Distribution Pattern tiles.&lt;br /&gt;
&lt;br /&gt;
=== Image Renderer ===&lt;br /&gt;
This section is used to set the image node to render as a side or top projection. &lt;br /&gt;
&lt;br /&gt;
* '''Projection Angle''' Used when UV type is set to Parallel Side, it allows you to change the direction at which the side projection takes place.  In order to make sure the normals aren’t flipped, check that you aren’t projecting from the opposite side.&lt;br /&gt;
&lt;br /&gt;
* '''UV Type'''' Sets what UV method to use, Mesh UV’s or Planar Projection.&lt;br /&gt;
** '''From Mesh''' Renders the node with the mesh UV’s (default).&lt;br /&gt;
** '''Parallel Top Down''' Planar projection from Top Down.&lt;br /&gt;
** '''Parallel Side''' Planar projection from the side.&lt;br /&gt;
&lt;br /&gt;
=== Propagate Distribution ===&lt;br /&gt;
If set to '''true''' the mask of this Node will mask the children nodes also.&lt;br /&gt;
&lt;br /&gt;
=== Surface Type Properties ===&lt;br /&gt;
[[#Surface Type|Surface Type]] sets what footstep and impact effects to use.&lt;br /&gt;
&lt;br /&gt;
* '''Threshold''' Allows a [[#Surface Type|Surface Type]] of a Node to bend in sooner (stronger) if set above 0.5, or weaker below 0.5.  By default it's at 0.5 and usually doesn't need changing.&lt;br /&gt;
&lt;br /&gt;
* '''Type''' Sets what the [[#Surface Type|Surface Type]] is: ''carpet, concrete, dirt, dusty_road, flesh, forcefeild, glass, grass, gravel, ice, leaves, liquid, metal, metal_thick, moss, mud, paper, pavement, pine, plastic, sand, snow, stone, water, water_interior, wood, wood_thick.''&lt;br /&gt;
&lt;br /&gt;
=== Texture Properties ===&lt;br /&gt;
&lt;br /&gt;
* '''Clamp To Edge''' If set to '''true''' the edge pixels will repeat and the image wont tile.  Mainly used for a large image that will cover the whole map, and you don't want the edge pixels to blend through to the other side.&lt;br /&gt;
&lt;br /&gt;
* '''Mask Rotation''' Sets the Rotation of the Distribution image (counter clockwise).&lt;br /&gt;
&lt;br /&gt;
* '''Rotation''' Sets the Rotation of the Diffuse image (counter clockwise).&lt;br /&gt;
&lt;br /&gt;
* '''Scale''' Sets how many times the Diffuse image tiles.&lt;br /&gt;
&lt;br /&gt;
= Projector Node =&lt;br /&gt;
This node projects an image from a positional plane onto the terrain mesh (megatexture). Most of the settings from the [[#Image Source Node|Image Source Node]]work the same, except there is an extra section called [[#Projector|Projector]].  By pressing ''v'' (vertex edit mode) you can modify the projector into a different shape.&lt;br /&gt;
&lt;br /&gt;
=== Projector ===&lt;br /&gt;
* '''Num Sides''' Usually leave as default, don't set it to 2 or below.&lt;br /&gt;
* '''Origin''' Sets the center of the projector, usually best to move the projector in the editor than to type in a value.&lt;br /&gt;
* '''Parallel''' Buggy at the moment, leave as '''Parallel'''.&lt;br /&gt;
* '''Tex. Coords''' Sets what UV's to use when projecting.&lt;br /&gt;
** '''Generated''' Uses projected UV's&lt;br /&gt;
** '''From Model''' Uses mesh UV's for Diffuse and Local, and uses the Projected UV's for just the mask (Distribution).&lt;br /&gt;
&lt;br /&gt;
= Road Tool Node =&lt;br /&gt;
&lt;br /&gt;
= Stamping and the Stamp Node =&lt;br /&gt;
&lt;br /&gt;
= Megatexture Preview =&lt;br /&gt;
&lt;br /&gt;
= Detail Textures =&lt;br /&gt;
&lt;br /&gt;
= Surface Type =&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=MegaBuild&amp;diff=1434</id>
		<title>MegaBuild</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=MegaBuild&amp;diff=1434"/>
		<updated>2007-10-15T16:53:03Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MegaBuild is a small application designed to ease the MegaTexture compile process. It includes options for MegaGen (to render the raw texture tiles), Renderlight (to bake lighting info into the tiles) and MakeMegaTexture (which compiles the tiles into a compressed .mega file). It's a one-stop shop for compiling MegaTextures.&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|MegaBuild}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
The MegaBuild application can be found in the &amp;quot;Utilities&amp;quot; folder of the main ETQW directory. Look for '''MegaBuild.exe''' and run it.&lt;br /&gt;
&lt;br /&gt;
= Using MegaBuild =&lt;br /&gt;
[[Image:megabuild_overview.png|right|MegaBuild main window]]&lt;br /&gt;
&lt;br /&gt;
=== Find ETQW.exe ===&lt;br /&gt;
Firstly you need to select a valid game executable to launch the commands from.&lt;br /&gt;
* Go to ''File -&amp;gt; Find EXE...'' (or hit '''CTRL-SHIFT-O''').&lt;br /&gt;
* Browse to the game directory and select ''ETQW.exe''.&lt;br /&gt;
&lt;br /&gt;
=== Load a Surface Tree ===&lt;br /&gt;
Now you will need to load a [[Surface Tree]] (''.sft'') file which contains the texture and surface information you want to render into your MegaTexture.&lt;br /&gt;
* Go to ''File -&amp;gt; Open'' (or hit '''CTRL-O''').&lt;br /&gt;
* Browse to your ''maps'' directory and select your ''mapname.sft'' file.&lt;br /&gt;
&lt;br /&gt;
=== MegaGen Settings ===&lt;br /&gt;
MegaGen is the first stage of making a MegaTexture. The settings are fairly straightforward.&lt;br /&gt;
* '''Resolution''' sets the width and height in pixels of your final MegaTexture. For ET:QW we used a ratio of 1 pixel to 1 game unit, so a terrain which is 32,768 units across would use a MegaTexture with a resolution of 32,768.&lt;br /&gt;
* '''Video Cache'''. 128 is a good value.&lt;br /&gt;
* '''Memory Cache'''. Give it as much as your computer will allow! For a computer with 2GB of RAM, 1536 is a good value here.&lt;br /&gt;
&lt;br /&gt;
=== RenderLight Settings ===&lt;br /&gt;
RenderLight bakes atmospheric lighting information into your MegaTexture. Depending on the settings used here, MakeMegaTexture will either output a 3-channel (RGB) or 4-channel (RGBA) MegaTexture.&lt;br /&gt;
* '''Bake lighting''' - When checked, this option will bake the atmospheric sunlight into the MegaTexture.&lt;br /&gt;
* '''Bake ambient''' - When checked, this option will bake the ambient atmospheric light into the MegaTexture.&lt;br /&gt;
* Leaving both '''Bake lighting''' and '''Bake ambient''' un-checked will produce a 4-channel MegaTexture, which is larger size on disk but contains more accurate surface bump information.&lt;br /&gt;
&lt;br /&gt;
=== MegaTexture Settings ===&lt;br /&gt;
MakeMegaTexture is the process which compiles the output of the previous processes into a compressed ''.mega'' file.&lt;br /&gt;
* '''Best Quality''' denotes, er, using the best quality!&lt;br /&gt;
* '''Luminance Error''' denotes the luminance error...&lt;br /&gt;
* '''Chrominance Error''' denotes the chrominance error...&lt;br /&gt;
* '''Alpha Error''' denotes the alpha error...&lt;br /&gt;
&lt;br /&gt;
=== Run the Processes ===&lt;br /&gt;
Once you have set up all of the options for your MegaTexture, you can set the MegaBuild processes going.&lt;br /&gt;
* ''Tasks -&amp;gt; Run Checked...'' (or pressing '''F5''') will run all of the selected processes.&lt;br /&gt;
* If this is the first time you're compiling a MegaTexture, check all 3 boxes for MegaGen, RenderLight and MegaTexture.&lt;br /&gt;
* You can un-check any processes you don't want to run at this time. For example if you want to re-compile some tiles from RenderLight with different MegaTexture settings, un-check MegaGen and RenderLight, leave MegaTexture checked, and then select ''Run Checked'' or hit '''F5'''.&lt;br /&gt;
** Alternately, you can just click the ''&amp;quot;Make MegaTexture&amp;quot;'' button in the MegaTexture field.&lt;br /&gt;
&lt;br /&gt;
= Components =&lt;br /&gt;
These are the individual processes that MegaBuild calls from the game.&lt;br /&gt;
&lt;br /&gt;
=== MegaGen ===&lt;br /&gt;
{{:MegaGen}}&lt;br /&gt;
&lt;br /&gt;
=== RenderLight ===&lt;br /&gt;
{{:RenderLight}}&lt;br /&gt;
&lt;br /&gt;
=== MakeMegaTexture ===&lt;br /&gt;
{{:MakeMegaTexture}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=STUFF_System&amp;diff=1433</id>
		<title>STUFF System</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=STUFF_System&amp;diff=1433"/>
		<updated>2007-10-15T16:52:40Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The STUFF System is a quick and easy way of distributing thousands of models across a terrain. It is mainly used for adding grass, plants, small shrubs, stones and twigs on top of the [[MegaTexture]].&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{main|STUFF System}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
= Overview =&lt;br /&gt;
[[Image:stuff_grass.jpg|center|frame|A screenshot comparison from Valley showing the difference between the bare terrain and the STUFF distribution.]]&lt;br /&gt;
You can place &amp;quot;STUFF&amp;quot; in your map with the DistributeStuff console command. This command takes a single parameter, the filename of a &amp;quot;stuff generation&amp;quot; (''.sg'') file. See the reference section below to find how these scripts are set up.&lt;br /&gt;
&lt;br /&gt;
After running DistributeStuff, a ''stuff.clustb'' file will appear in the ''&amp;quot;/base/stuff/[mapname]&amp;quot;'' directory, this file contains the actual positions of all the scattered objects, so the mask images and the .sg file do not need to distributed with the game.&lt;br /&gt;
&lt;br /&gt;
=== Making It Appear In The Level ===&lt;br /&gt;
You need a '''&amp;quot;stuffsystem&amp;quot;''' entity in your map before the STUFF will be visible. The following entity is all you need.&lt;br /&gt;
 {&lt;br /&gt;
 &amp;quot;classname&amp;quot; &amp;quot;stuffsystem&amp;quot;&lt;br /&gt;
 &amp;quot;name&amp;quot; &amp;quot;my_stuff&amp;quot;&lt;br /&gt;
 &amp;quot;origin&amp;quot; &amp;quot;0 0 0&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
Compile your map with this entity added before doing any of the following steps, or you may not be able to view your STUFF distribution in-game.&lt;br /&gt;
&lt;br /&gt;
= Working Conventions =&lt;br /&gt;
* ''.stuff'' reference files should be stored in the following location: ''&amp;quot;base/stuff/[mapname].stuff''&lt;br /&gt;
* ''.sg'' scripts should be stored in the following location: ''&amp;quot;base/stuff/[mapname]/[mapname].sg&amp;quot;''&lt;br /&gt;
* Related media (masks, STUFF models and colour maps) should be stored in the same folder as the ''.sg'' file, for ease of access.&lt;br /&gt;
** Keep STUFF models unique on a per-map basis so you can easily adjust one map's &amp;quot;STUFF&amp;quot; without affecting any other levels accidentally.&lt;br /&gt;
&lt;br /&gt;
= StuffType (''.stuff'') Reference =&lt;br /&gt;
''.stuff'' files specify the different types of model you can scatter around, the declarations in these files are referenced by the STUFF system.&lt;br /&gt;
A simple example:&lt;br /&gt;
&lt;br /&gt;
 stuffType [mapname]/grass {&lt;br /&gt;
 	Model	&amp;quot;stuff/[mapname]/grass_01.ase&amp;quot;&lt;br /&gt;
 	Model	&amp;quot;stuff/[mapname]/grass_02.lwo&amp;quot; &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 stuffType [mapname]/plants {&lt;br /&gt;
 	Model	&amp;quot;stuff/[mapname]/plant_01.lwo&amp;quot;&lt;br /&gt;
 	Model	&amp;quot;stuff/[mapname]/plant_02.lwo&amp;quot; &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* '''stuffType''' is the declaration name that is referenced by other parts of the STUFF system (''.sg'' and ''.clustb'' files refer to this).&lt;br /&gt;
* '''Model''' should contain a path to a valid model (ASE, LWO and OBJ should all work). This model is scattered by this stuff declaration. If more than one model is specified, each will be randomly chosen and placed when the '''distributeStuff''' command is run.&lt;br /&gt;
** More unique models can lead to a more natural-looking distribution, especially in the case of shrubs and plants.&lt;br /&gt;
** You can put the same model multiple times in a single declaration, that way the chances of that model being chosen compared to other models are bigger. So if you put 9 times one model and 1 time another, 9 out of 10 models (on average) will be the first model.&lt;br /&gt;
&lt;br /&gt;
= StuffGeneration (''.sg'') reference =&lt;br /&gt;
Here is an example script:&lt;br /&gt;
&lt;br /&gt;
  version 1&lt;br /&gt;
  {&lt;br /&gt;
  	model &amp;quot;models/terrain/[mapname].lwo&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
 sdStuffLayer {&lt;br /&gt;
 	Density  10&lt;br /&gt;
 	Distancescale 1&lt;br /&gt;
 	Distribution Area&lt;br /&gt;
 	StuffType &amp;quot;[mapname]/grass&amp;quot;&lt;br /&gt;
 	Mask &amp;quot;stuff/[mapname]/mask_grass.tga&amp;quot;&lt;br /&gt;
 	ColorMap &amp;quot;stuff/[mapname]/grass_colour.tga&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
  sdStuffLayer {&lt;br /&gt;
  	Density 4&lt;br /&gt;
  	Distancescale 2&lt;br /&gt;
  	Distribution Area&lt;br /&gt;
  	StuffType &amp;quot;[mapname]/plants&amp;quot;&lt;br /&gt;
  	Mask &amp;quot;stuff/[mapname]/mask_plants.tga&amp;quot;&lt;br /&gt;
  	ColorMap &amp;quot;stuff/[mapname]/plants_color.tga&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
* '''version''' should always be set to 1.&lt;br /&gt;
* '''model''' should point to your map's terrain mesh.&lt;br /&gt;
* '''sdStuffLayer''' is a single layer over the whole terrain mesh that distributes STUFF models based on the following values:&lt;br /&gt;
** '''Density''' is a value which behaves differently depending on the Distribution type used. See below for details.&lt;br /&gt;
** '''Distribution''' specifies how the STUFF is distributed (positioned) over the terrain, and can be one of the following values:&lt;br /&gt;
*** '''Area''' means the STUFF is uniformly distributed over the whole terrain, independent of the underlying geometry. In this case, the '''Density''' value specifies the number of objects &amp;quot;per square unit&amp;quot;. You will nearly always want to use this type of distribution.&lt;br /&gt;
*** '''Vertex''' places a single STUFF model on every vertex of the terrain mesh. In this case, the '''Density''' value is unused.&lt;br /&gt;
*** '''Triangle''' places the same number of STUFF models on every triangle of the terrain mesh. In this case, the '''Density''' value specifies how many objects should be created per triangle.&lt;br /&gt;
** '''Distancescale''' will scale all distances used during rendering of this STUFF layer by an arbitrary amount. Setting this value to 1 will render STUFF models to the extent of the ''r_stuffFadeEnd'' cvar. Setting this value to 2 will make the STUFF models fade out twice as close, etc. This value should never be set lower than 1, as this will lead to visual &amp;quot;popping&amp;quot; errors in the distance.&lt;br /&gt;
** '''Mask''' specifies a grayscale TGA file that defines the density of STUFF models. White means full density (as specified by the density parameter) gray to black means successively lower densities until there are no objects placed at all. This parameter is optional (but recommended!), as the default is a fully white map.&lt;br /&gt;
** '''ColorMap''' specifies an RGB colour TGA file that defines the color of the individual stuff objects. In this way certain areas can have drier brown grass for example. This parameter is optional, the default is a fully white map.&lt;br /&gt;
** '''CutOff''' is an integer defining at wich value stuff should stop appearing in your mask. The default value is 16 which means grayscale values in the mask lower than 16 will not spawn any stuff.&lt;br /&gt;
** '''Orientation''' will control the orientation of the STUFF models, there are two options:&lt;br /&gt;
*** '''local''' orients STUFF models according to the normals of the model used for distribution (default behaviour).&lt;br /&gt;
*** '''world''' will always orient STUFF models upwards (ETQW never uses this, since '''local''' looks more natural).&lt;br /&gt;
&lt;br /&gt;
You can define as many sdStuffLayers in a ''.sg'' file as you like, but bear in mind that each one will be an additional rendering batch. Try and use as few layers as possible to achieve the visual effect you want.&lt;br /&gt;
&lt;br /&gt;
= distributeStuff =&lt;br /&gt;
Once you have set up your ''.stuff'' and ''.sg'' files, you can generate your STUFF cluster (''.clustb'') file by running the following command in the game console:&lt;br /&gt;
&lt;br /&gt;
 distributeStuff stuff/[mapname]/[mapname].sg&lt;br /&gt;
&lt;br /&gt;
Note you can run '''distributeStuff''' with your map loaded in game, then use '''reloadmodels''' to reload the STUFF cluster and see your changes immediately.&lt;br /&gt;
&lt;br /&gt;
= Performance Notes =&lt;br /&gt;
As STUFF potentially allows you to have thousands of objects added to the map by just a few parameters you should be careful not to overuse STUFF. Some performance hints:&lt;br /&gt;
* Keep the density as low as possible for the effect you want, as this is the parameter that affects the number of objects that get generated. You could in theory have a dark gray mask and a higher density (resulting in the same overall number of objects) but it's a better idea to keep distribution masks &amp;quot;normalized&amp;quot; (ie. the full range from black to white).&lt;br /&gt;
* With grass, the actual draw speed is not necessarily related to the total number of grass plants visible, the speed hit is when a lot of alpha-tested grass textures cover the same screen area (causing a high amount of overdraw) so it is better to render sparse grass to a further distance than dense grass that fades fast.&lt;br /&gt;
** To this end, it makes sense to have two grass layers - one would be sparse and fade to the distance, the other would fade very close but be more dense. This gives a more pleasing visual result with less performance loss.&lt;br /&gt;
&lt;br /&gt;
[[Category:Art]]&lt;br /&gt;
[[Category:Models]]&lt;br /&gt;
[[Category:Level Design]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Category:Art&amp;diff=1431</id>
		<title>Category:Art</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Category:Art&amp;diff=1431"/>
		<updated>2007-10-15T16:52:12Z</updated>

		<summary type="html">&lt;p&gt;192.168.0.129: Category description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wiki articles relating to Art processes and techniques.&lt;/div&gt;</summary>
		<author><name>192.168.0.129</name></author>
		
	</entry>
</feed>