Pixel shader logic for mixing colors: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 4: | Line 4: | ||
==Symbols== | ==Symbols== | ||
vec4 | <code>vec4 tex1</code> - color from first texture<br> | ||
vec4 | <code>vec4 tex2</code> - color from second texture<br> | ||
vec4 | <code>vec4 submeshColor</code> - value for current animation and animation time from [[M2#Colors|M2Color]] (<code>M2Color.color</code> lands into <code>submeshColor.rgb</code>, <code>M2Color.alpha</code> goes <code>into submeshColor.a</code>). If [[M2#Colors|M2Color]] is not present in M2 file, this values is (1.0, 1.0, 1.0, 1.0)<br> | ||
float | <code>float transparency</code> - value for current animation and animation time from [[M2#Transparency|M2TextureWeight]]. If [[M2#Transparency|M2TextureWeight]] doesnt exists in M2 file, this value is 1.0<br> | ||
vec4 | <code>vec4 meshResColor</code> - the combined color of several variables: | ||
* for M2 spawned from MDDF chunk of Adt: | * for M2 spawned from MDDF chunk of Adt: | ||
* for M2 spawned from MDDF chunk of WMO: | * for M2 spawned from MDDF chunk of WMO: | ||
Line 14: | Line 14: | ||
** otherwise: | ** otherwise: | ||
vec4 | <code>vec4 finalColor</code> - the result of combining | ||
==M2 shaders== | ==M2 shaders== | ||
===Combiners_Opaque=== | ===Combiners_Opaque=== | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb; | <syntaxhighlight lang="glsl"> | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb; | |||
finalColor.a = meshResColor.a; | finalColor.a = meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Decal=== | ===Combiners_Decal=== | ||
finalColor.rgb = (meshResColor.rgb - tex1.rgb) * meshResColor.a + tex1.rgb; | <syntaxhighlight lang="glsl"> | ||
finalColor.rgb = (meshResColor.rgb - tex1.rgb) * meshResColor.a + tex1.rgb; | |||
finalColor.a = meshResColor.a; | finalColor.a = meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Add=== | ===Combiners_Add=== | ||
<syntaxhighlight lang="glsl"> | |||
finalColor.rgba = tex1.rgba + meshResColor.rgba; | finalColor.rgba = tex1.rgba + meshResColor.rgba; | ||
</syntaxhighlight> | |||
===Combiners_Mod2x=== | ===Combiners_Mod2x=== | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb * 2.0; | <syntaxhighlight lang="glsl"> | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb * 2.0; | |||
finalColor.a = tex1.a * meshResColor.a * 2.0; | finalColor.a = tex1.a * meshResColor.a * 2.0; | ||
</syntaxhighlight> | |||
===Combiners_Fade=== | ===Combiners_Fade=== | ||
finalColor.rgb = (tex1.rgb - meshResColor.rgb) * meshResColor.a + meshResColor.rgb; | <syntaxhighlight> | ||
finalColor.rgb = (tex1.rgb - meshResColor.rgb) * meshResColor.a + meshResColor.rgb; | |||
finalColor.a = meshResColor.a; | finalColor.a = meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Mod=== | ===Combiners_Mod=== | ||
<syntaxhighlight> | |||
finalColor.rgba = tex1.rgba * meshResColor.rgba; | finalColor.rgba = tex1.rgba * meshResColor.rgba; | ||
</syntaxhighlight> | |||
===Combiners_Opaque_Opaque=== | ===Combiners_Opaque_Opaque=== | ||
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb; | <syntaxhighlight> | ||
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb; | |||
finalColor.a = meshResColor.a; | finalColor.a = meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Opaque_Add=== | ===Combiners_Opaque_Add=== | ||
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb; | <syntaxhighlight> | ||
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb; | |||
finalColor.a = meshResColor.a + tex1.a; | finalColor.a = meshResColor.a + tex1.a; | ||
</syntaxhighlight> | |||
===Combiners_Opaque_Mod2x=== | ===Combiners_Opaque_Mod2x=== | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb * tex2.rgb * 2.0; | <syntaxhighlight> | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb * tex2.rgb * 2.0; | |||
finalColor.a = tex2.a * meshResColor.a * 2.0; | finalColor.a = tex2.a * meshResColor.a * 2.0; | ||
</syntaxhighlight> | |||
===Combiners_Opaque_Mod2xNA=== | ===Combiners_Opaque_Mod2xNA=== | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb * tex2.rgb * 2.0; | <syntaxhighlight> | ||
finalColor.rgb = tex1.rgb * meshResColor.rgb * tex2.rgb * 2.0; | |||
finalColor.a = meshResColor.a; | finalColor.a = meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Opaque_AddNA=== | ===Combiners_Opaque_AddNA=== | ||
<syntaxhighlight> | |||
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb;<br> | finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb;<br> | ||
finalColor.a = meshResColor.a; | finalColor.a = meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Opaque_Mod=== | ===Combiners_Opaque_Mod=== | ||
<syntaxhighlight> | |||
finalColor.rgb = tex1rgb * tex2.rgb * meshResColor.rgb;<br> | finalColor.rgb = tex1rgb * tex2.rgb * meshResColor.rgb;<br> | ||
finalColor.a = tex2.a * meshResColor.a; | finalColor.a = tex2.a * meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Mod_Opaque=== | ===Combiners_Mod_Opaque=== | ||
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb; | <syntaxhighlight lang="glsl"> | ||
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb; | |||
finalColor.a = tex1.a; | finalColor.a = tex1.a; | ||
</syntaxhighlight> | |||
===Combiners_Mod_Add=== | ===Combiners_Mod_Add=== | ||
<syntaxhighlight> | |||
finalColor.rgba = tex2.rgba + tex1.rgba * meshResColor.rgba; | finalColor.rgba = tex2.rgba + tex1.rgba * meshResColor.rgba; | ||
</syntaxhighlight> | |||
===Combiners_Mod_Mod2x=== | ===Combiners_Mod_Mod2x=== | ||
<syntaxhighlight lang="glsl"> | |||
finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba * 2.0; | finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba * 2.0; | ||
</syntaxhighlight> | |||
===Combiners_Mod_Mod2xNA=== | ===Combiners_Mod_Mod2xNA=== | ||
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb * 2.0; | <syntaxhighlight lang="glsl"> | ||
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb * 2.0; | |||
finalColor.a = tex1.a * meshResColor.a; | finalColor.a = tex1.a * meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Mod_AddNA=== | ===Combiners_Mod_AddNA=== | ||
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb; | <syntaxhighlight> | ||
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb; | |||
finalColor.a = tex1.a * meshResColor.a; | finalColor.a = tex1.a * meshResColor.a; | ||
</syntaxhighlight> | |||
===Combiners_Mod_Mod=== | ===Combiners_Mod_Mod=== | ||
<syntaxhighlight lang="glsl"> | |||
finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba; | finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba; | ||
</syntaxhighlight> | |||
===Combiners_Add_Mod=== | ===Combiners_Add_Mod=== | ||
finalColor.rgb = (tex1.rgb + meshResColor.rgb) * tex2.a; | <syntaxhighlight> | ||
finalColor.rgb = (tex1.rgb + meshResColor.rgb) * tex2.a; | |||
finalColor.a = (tex1.a + meshResColor.a) * tex2.a; | finalColor.a = (tex1.a + meshResColor.a) * tex2.a; | ||
</syntaxhighlight> | |||
===Combiners_Mod2x_Mod2x=== | ===Combiners_Mod2x_Mod2x=== | ||
<syntaxhighlight lang="glsl"> | |||
finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba * 4.0 | finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba * 4.0 | ||
</syntaxhighlight> | |||
===Combiners_Opaque_Mod2xNA_Alpha=== | ===Combiners_Opaque_Mod2xNA_Alpha=== | ||
===Combiners_Opaque_AddAlpha=== | ===Combiners_Opaque_AddAlpha=== |
Revision as of 16:47, 30 August 2016
WoW combines colors of textures in shader. The actual formula used depends on shader used.
Symbols
vec4 tex1
- color from first texture
vec4 tex2
- color from second texture
vec4 submeshColor
- value for current animation and animation time from M2Color (M2Color.color
lands into submeshColor.rgb
, M2Color.alpha
goes into submeshColor.a
). If M2Color is not present in M2 file, this values is (1.0, 1.0, 1.0, 1.0)
float transparency
- value for current animation and animation time from M2TextureWeight. If M2TextureWeight doesnt exists in M2 file, this value is 1.0
vec4 meshResColor
- the combined color of several variables:
- for M2 spawned from MDDF chunk of Adt:
- for M2 spawned from MDDF chunk of WMO:
- if M2 is contained:
- otherwise:
vec4 finalColor
- the result of combining
M2 shaders
Combiners_Opaque
finalColor.rgb = tex1.rgb * meshResColor.rgb;
finalColor.a = meshResColor.a;
Combiners_Decal
finalColor.rgb = (meshResColor.rgb - tex1.rgb) * meshResColor.a + tex1.rgb;
finalColor.a = meshResColor.a;
Combiners_Add
finalColor.rgba = tex1.rgba + meshResColor.rgba;
Combiners_Mod2x
finalColor.rgb = tex1.rgb * meshResColor.rgb * 2.0;
finalColor.a = tex1.a * meshResColor.a * 2.0;
Combiners_Fade
finalColor.rgb = (tex1.rgb - meshResColor.rgb) * meshResColor.a + meshResColor.rgb;
finalColor.a = meshResColor.a;
Combiners_Mod
finalColor.rgba = tex1.rgba * meshResColor.rgba;
Combiners_Opaque_Opaque
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb;
finalColor.a = meshResColor.a;
Combiners_Opaque_Add
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb;
finalColor.a = meshResColor.a + tex1.a;
Combiners_Opaque_Mod2x
finalColor.rgb = tex1.rgb * meshResColor.rgb * tex2.rgb * 2.0;
finalColor.a = tex2.a * meshResColor.a * 2.0;
Combiners_Opaque_Mod2xNA
finalColor.rgb = tex1.rgb * meshResColor.rgb * tex2.rgb * 2.0;
finalColor.a = meshResColor.a;
Combiners_Opaque_AddNA
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb;<br>
finalColor.a = meshResColor.a;
Combiners_Opaque_Mod
finalColor.rgb = tex1rgb * tex2.rgb * meshResColor.rgb;<br>
finalColor.a = tex2.a * meshResColor.a;
Combiners_Mod_Opaque
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb;
finalColor.a = tex1.a;
Combiners_Mod_Add
finalColor.rgba = tex2.rgba + tex1.rgba * meshResColor.rgba;
Combiners_Mod_Mod2x
finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba * 2.0;
Combiners_Mod_Mod2xNA
finalColor.rgb = tex1.rgb * tex2.rgb * meshResColor.rgb * 2.0;
finalColor.a = tex1.a * meshResColor.a;
Combiners_Mod_AddNA
finalColor.rgb = tex2.rgb + tex1.rgb * meshResColor.rgb;
finalColor.a = tex1.a * meshResColor.a;
Combiners_Mod_Mod
finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba;
Combiners_Add_Mod
finalColor.rgb = (tex1.rgb + meshResColor.rgb) * tex2.a;
finalColor.a = (tex1.a + meshResColor.a) * tex2.a;
Combiners_Mod2x_Mod2x
finalColor.rgba = tex1.rgba * tex2.rgba * meshResColor.rgba * 4.0