$ambientocclusion

From Valve Developer Community
Jump to: navigation, search
Various WrinkleMaps maps found in Valve games for eyes and face.

Ambient occlusion is a shading method which helps add realism to local reflection models by taking into account attenuation of light due to occlusion [Clarify]. Unlike local methods like Phong shading, ambient occlusion is a global method, meaning the illumination at each point is a function of other geometry in the scene. However, it is a very crude approximation to full global illumination. The soft appearance achieved by ambient occlusion alone is similar to the way an object appears on an overcast day. It is globally supported on the EyeRefract shader. The IFM module, when loaded, makes the $ambientocclusion parameter function on other shaders such as VertexLitGeneric as a means of controlling the intensity of SSAO.


Using Ambient Occlusion

Example VMT Syntax

The following example is taken from Left 4 Dead from the model material located in L4D root/materials/models/survivors/teenangst/teenangst_eyeball_l.vmt

EyeRefract
{
$Iris "models/survivors/green_iris2" 
$AmbientOcclTexture "models/survivors/survivor_eye_ao" 
$Envmap "Engine/eye-reflection-cubemap-" 
$CorneaTexture "Engine/eye-cornea" 
$EyeballRadius "0.6" 
$AmbientOcclColor "[.4 .4 .4]" Default 0.33, 0.33, 0.33
$Dilation ".5" 
$ParallaxStrength "0.25" 
$CorneaBumpStrength ".5" 
$halflambert 1
$nodecal 1
$ambientocclusion 1

$RaytraceSphere 1 
$SphereTexkillCombo 0 
}

VMT Parameters

$AmbientOcclusion <float>
Controls strength of Ambient Occlusion. (1 = fully enabled, 0 = fully disabled)
Note:Used to toggle SSAO off/on for models in Source Film Maker.
$AmbientOcclColor "[.n .n .n]"
Replacing n with a number of the color (RGB format)
$AmbientOcclTexture "path/to/vtf"
Filename of the ambient occlusion texture to use

To do: How does $ambientocclusiontexture fit in with all of this?

Useful notes

Bug: When used on transparent materials (either $translucent or $alphatest, or all materials on a model where a transparent material has been used without compiling with either $Opaque or $MostlyOpaque in the QC file), $ambientocclusion also causes the material to render the effect for any objects behind the material.

(Tested in Source Filmmaker)

See also