Virtual Ambient Light Textures: Difference between revisions

From The DarkMod Wiki
Jump to navigationJump to search
m (update for v1.03)
(Added further explanations and ambient stages for vertex-blended Materials)
Line 1: Line 1:
To improve performance on some low-end systems, Dark Mod textures can simulate the main ambient light. This feature pre-calculates how much textures should be illuminated once only instead of continuously. Players can select between three methods, so those with faster machines can use the true ambient light which gives better quality.
To improve performance on some low-end systems, Dark Mod textures can simulate the main ambient light. This feature pre-calculates how much textures should be illuminated once only instead of continuously. Players can select between three methods for ambient rendering, so those with faster machines can use the true ambient light which gives better quality.


'''So all textures should include these two stages:'''
'''So all textures should include these two stages:'''
''Please note that there is also a command for automatically converting all materials to fulfill the TDM 1.03 requirements called tdm_batchConvertMaterials (see [[TDM Material Batch Conversion]])''


<pre>
<pre>
Line 8: Line 10:
                 if (global5 == 1)
                 if (global5 == 1)
                 blend add
                 blend add
                 map                             textures/darkmod/yourname
                 map                     textures/darkmod/yourname                         // Diffuse
                 scale                  1, 1
                 scale                  1, 1
                 red                             global2
                 red                     global2
                 green                  global3
                 green                  global3
                 blue                    global4
                 blue                    global4
Line 18: Line 20:
                 blend add
                 blend add
                 program ambientEnvironment.vfp
                 program ambientEnvironment.vfp
                 vertexParm              0              1, 1, 1, 1             // UV Scales for Diffuse and Bump
                 vertexParm              0              1, 1, 1, 1                       // UV Scales for Diffuse and Bump
                 vertexParm              1              1, 1, 1, 1     // (X,Y) UV Scale for specular
                 vertexParm              1              1, 1, 1, 1                       // (X,Y) UV Scale for specular
                 vertexParm              2              global2, global3, global4, 1
                 vertexParm              2              global2, global3, global4, 1


                 fragmentMap            0              cubeMap env/gen1
                 fragmentMap            0              cubeMap env/gen1
                 fragmentMap            1              textures/darkmod/yourname_local                 // Bump
                 fragmentMap            1              textures/darkmod/yourname_local   // Bump
                 fragmentMap            2              textures/darkmod/yourname                       // Diffuse
                 fragmentMap            2              textures/darkmod/yourname         // Diffuse
                 fragmentMap            3              _black                  // Specular
                 fragmentMap            3              textures/darkmod/yourname_s      // Specular
         }
         }
</pre>
The first stage is for the simple ambient method, whereas the second one is for enhanced ambient rendering, which obviously also processes the normal- and specularmap of the material.
If a material does not contain a specularmap, the fragmentMap parameter 3 in the enhanced ambient rendering stage has to be changed to _black, e.g. "textures/darkmod/yourname_s" becomes "_black". If on the contrary a material does not contain a normalmap, the proper replacement is "_flat", meaning a flat surface, e.g. "textures/darkmod/yourname_local" becomes "_flat".
'''For [[DrVertexBlend (tutorial)|vertex-blended materials]], the ambient stages have to be altered in the following way:'''
<pre>
        // TDM Ambient Method Related
{
if (global5 == 1)
blend add
map textures/darkmod/materialA                        // Diffuse A
scale 1, 1
red global2
green global3
blue global4
vertexColor
}
{
if (global5 == 1)
blend add
map textures/darkmod/materialB                        // Diffuse B
scale 1, 1
red global2
green global3
blue global4
inverseVertexColor
}
{
if (global5 == 2)
blend add
program ambientEnvVertexBlend.vfp
vertexParm 0 1, 1, 1, 1           // UV Scales for Diffuse A and Bump A resp.
vertexParm 1 1, 1, 1, 1           // UV Scale for specular A and Diffuse B resp.
vertexParm 2 1, 1, 1, 1           // UV Scale for Bump B and specular B resp.
vertexParm 3 global2, global3, global4, 1
//----------- VertexColored -------------------
fragmentMap 0 cubeMap env/gen1
fragmentMap 1 textures/darkmod/materialA_local  // Bump A
fragmentMap 2 textures/darkmod/materialA   // Diffuse A
fragmentMap 3 textures/darkmod/materialA_s   // Specular A
//----------- InverseVertexColored ------------
fragmentMap 4 textures/darkmod/materialB_local  // Bump B
fragmentMap 5 textures/darkmod/materialB   // Diffuse B
fragmentMap 6 textures/darkmod/materialB_s   // Specular B
}
</pre>
</pre>


[[Category:Textures]]
[[Category:Textures]]

Revision as of 11:52, 27 December 2010

To improve performance on some low-end systems, Dark Mod textures can simulate the main ambient light. This feature pre-calculates how much textures should be illuminated once only instead of continuously. Players can select between three methods for ambient rendering, so those with faster machines can use the true ambient light which gives better quality.

So all textures should include these two stages:

Please note that there is also a command for automatically converting all materials to fulfill the TDM 1.03 requirements called tdm_batchConvertMaterials (see TDM Material Batch Conversion)

        // TDM Ambient Method Related
        {
                if (global5 == 1)
                blend add
                map                     textures/darkmod/yourname                         // Diffuse
                scale                   1, 1
                red                     global2
                green                   global3
                blue                    global4
        }
        {
                if (global5 == 2)
                blend add
                program ambientEnvironment.vfp
                vertexParm              0               1, 1, 1, 1                        // UV Scales for Diffuse and Bump
                vertexParm              1               1, 1, 1, 1                        // (X,Y) UV Scale for specular
                vertexParm              2               global2, global3, global4, 1

                fragmentMap             0               cubeMap env/gen1
                fragmentMap             1               textures/darkmod/yourname_local   // Bump
                fragmentMap             2               textures/darkmod/yourname         // Diffuse
                fragmentMap             3               textures/darkmod/yourname_s       // Specular
        }

The first stage is for the simple ambient method, whereas the second one is for enhanced ambient rendering, which obviously also processes the normal- and specularmap of the material.

If a material does not contain a specularmap, the fragmentMap parameter 3 in the enhanced ambient rendering stage has to be changed to _black, e.g. "textures/darkmod/yourname_s" becomes "_black". If on the contrary a material does not contain a normalmap, the proper replacement is "_flat", meaning a flat surface, e.g. "textures/darkmod/yourname_local" becomes "_flat".

For vertex-blended materials, the ambient stages have to be altered in the following way:

        // TDM Ambient Method Related 
	{							
		if (global5 == 1)		
		blend add				
		map			textures/darkmod/materialA                         // Diffuse A
		scale			1, 1		
		red			global2	
		green			global3	
		blue			global4	
		vertexColor				
	}							
	{							
		if (global5 == 1)		
		blend add				
		map			textures/darkmod/materialB                         // Diffuse B
		scale			1, 1		
		red			global2	
		green			global3	
		blue			global4	
		inverseVertexColor		
	}							
	{							
		if (global5 == 2)		
		blend add				
		program	ambientEnvVertexBlend.vfp	
		vertexParm		0		1, 1, 1, 1		          // UV Scales for Diffuse A and Bump A	resp.	
		vertexParm		1		1, 1, 1, 1		          // UV Scale for specular A and Diffuse B resp.
		vertexParm		2		1, 1, 1, 1		          // UV Scale for Bump B and specular B resp.	
		vertexParm		3		global2, global3, global4, 1	
		//----------- VertexColored -------------------			
		fragmentMap		0		cubeMap env/gen1				
		fragmentMap		1		textures/darkmod/materialA_local  // Bump A			
		fragmentMap		2		textures/darkmod/materialA	  // Diffuse A
		fragmentMap		3		textures/darkmod/materialA_s	  // Specular A		
		//----------- InverseVertexColored ------------			
		fragmentMap		4		textures/darkmod/materialB_local  // Bump B		
		fragmentMap		5		textures/darkmod/materialB	  // Diffuse B		
		fragmentMap		6		textures/darkmod/materialB_s	  // Specular B
	}