0ad/binaries/data/mods/public/shaders/effects/model_transparent.xml
Ykkrosh 14a73204dd Disable distance-sorting for most transparent objects
Distance-sorting of the alpha-blend pass of objects like trees and grass
is quite expensive (partly the cost of sorting, partly the cost of being
unable to batch efficiently), and the effect on visual quality is
typically very hard to see (the alpha-test pass does most of the work
for
objects that aren't fully translucent). That's not a good tradeoff, so
turn it off.

Leave distance sorting enabled for e.g. waterfalls since it might make a
more noticeable difference for them.

This was SVN commit r13753.
2013-08-24 14:48:02 +00:00

149 lines
4.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<effect>
<technique>
<require context="MODE_SHADOWCAST || MODE_SILHOUETTEOCCLUDER"/>
<require shaders="arb"/>
<pass shader="arb/model_solid_tex">
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
</pass>
</technique>
<technique>
<require context="MODE_SHADOWCAST || MODE_SILHOUETTEOCCLUDER"/>
<require shaders="glsl"/>
<pass shader="glsl/model_solid_tex">
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
</pass>
</technique>
<technique>
<require context="MODE_SHADOWCAST || MODE_SILHOUETTEOCCLUDER"/>
<require shaders="fixed"/>
<define name="USE_PLAYERCOLOR" value="0"/>
<define name="USE_OBJECTCOLOR" value="0"/>
<pass shader="fixed:model_solid_tex">
<alpha func="gequal" ref="0.4"/>
</pass>
</technique>
<!--
CRenderer::RenderSilhouettes skips alpha-blended models for
MODE_SILHOUETTEDISPLAY, so do a dummy non-blended behaviour here to
make it obviously buggy if CRenderer is changed to render these models.
-->
<technique>
<require context="MODE_SILHOUETTEDISPLAY || MODE_WIREFRAME"/>
<require shaders="arb"/>
<pass shader="arb/model_solid_player"/>
</technique>
<technique>
<require context="MODE_SILHOUETTEDISPLAY || MODE_WIREFRAME"/>
<require shaders="glsl"/>
<pass shader="glsl/model_solid_player"/>
</technique>
<technique>
<require context="MODE_SILHOUETTEDISPLAY || MODE_WIREFRAME"/>
<require shaders="fixed"/>
<define name="USE_PLAYERCOLOR" value="1"/>
<define name="USE_OBJECTCOLOR" value="0"/>
<pass shader="fixed:model_solid"/>
</technique>
<technique>
<require context="USE_ALPHATEST"/>
<require shaders="arb"/>
<pass shader="arb/model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
</pass>
</technique>
<technique>
<require context="USE_ALPHATEST"/>
<require shaders="glsl"/>
<pass shader="glsl/model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.4"/>
</pass>
</technique>
<technique>
<require context="USE_ALPHATEST"/>
<require shaders="fixed"/>
<pass shader="fixed:model">
<alpha func="gequal" ref="0.4"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_OPAQUE"/>
<require shaders="arb"/>
<pass shader="arb/model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.6375"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_OPAQUE"/>
<require shaders="glsl"/>
<pass shader="glsl/model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.6375"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_OPAQUE"/>
<require shaders="fixed"/>
<pass shader="fixed:model">
<alpha func="gequal" ref="0.6375"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_BLEND"/>
<require shaders="arb"/>
<pass shader="arb/model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.05"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="false"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_BLEND"/>
<require shaders="glsl"/>
<pass shader="glsl/model_common">
<define name="USE_TRANSPARENT" value="1"/>
<define name="REQUIRE_ALPHA_GEQUAL" value="0.05"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="false"/>
</pass>
</technique>
<technique>
<require context="ALPHABLEND_PASS_BLEND"/>
<require shaders="fixed"/>
<pass shader="fixed:model">
<define name="USE_TRANSPARENT" value="1"/>
<alpha func="gequal" ref="0.05"/>
<blend src="src_alpha" dst="one_minus_src_alpha"/>
<depth func="less" mask="false"/>
</pass>
</technique>
</effect>