$lightwarptexture: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (→‎top: clean up, replaced: {{Language subpage → {{langsp)
mNo edit summary
Line 1: Line 1:
{{langsp}}
{{langsp}}
[[File:Lightwarp snow.jpg|thumb|200px|The technique was first used in {{dods|2}}'s snow maps, such as Kalt.]]
[[File:Lightwarp snow.jpg|thumb|200px|The technique was first used in {{dods|2}}'s snow maps, such as Kalt.]]
[[File:Lightwarp heavy.png|thumb|150px|<code>$lightwarptexture</code> is a cornerstone of {{tf2|2}}'s illustrative character rendering.]]
[[File:Lightwarp heavy.png|thumb|150px|{{code|$lightwarptexture}} is a cornerstone of {{tf2|2}}'s illustrative character rendering.]]
[[File:Lightwarp BW.png|thumb|150px|Posterized color can be achieved, but lighting must be tightly controlled.]]
[[File:Lightwarp BW.png|thumb|150px|Posterized color can be achieved, but lighting must be tightly controlled.]]


Line 7: Line 7:


== Caveats ==
== Caveats ==
{{Important|<code>$lightwarptexture</code> must be specified ''after'' all other textures, otherwise it will overwrite them.}}
{{Important|{{code|$lightwarptexture}} must be specified ''after'' all other textures, otherwise it will overwrite them.}}
{{Important|Make sure the texture is clamped in the VTF otherwise it will render incorrectly.}}
{{Important|Make sure the texture is clamped in the VTF otherwise it will render incorrectly.}}
{{Important|<code>$lightwarptexture</code> on {{Ent|VertexLitGeneric}} requires a {{Ent|$bumpmap}}. If not specified, a default one will be used instead! '''It will be as if a {{Ent|$bumpmap}} is in the VMT!'''}}
{{Important|{{code|$lightwarptexture}} on {{Ent|VertexLitGeneric}} requires a {{Ent|$bumpmap}}. If not specified, a default one will be used instead! '''It will be as if a {{Ent|$bumpmap}} is in the VMT!'''
{{Warning| This means that all parameters that don't work with {{Ent|$bumpmap}} also won't work with <code>$lightwarptexture</code>.}}
{{Warning| This means that all parameters that don't work with {{Ent|$bumpmap}} also won't work with {{code|$lightwarptexture}}.
:* [[$detail#Parameters and Effects|$detailblendmode]] 5-9 won't work - 5 & 6 will work when {{Ent|$phong}} is used.
* [[$detail#Parameters and Effects|$detailblendmode]] 5-9 won't work - 5 & 6 will work when {{Ent|$phong}} is used.
:* {{Ent|$envmapmask}} won't work, except in {{mapbase|4}}.
* {{Ent|$envmapmask}} won't work, except in {{mapbase|4}}.
:* {{Ent|$selfillum_envmapmask_alpha}} doesn't work in any branch.
* {{Ent|$selfillum_envmapmask_alpha}} doesn't work in any branch.
}} }}
{{Note|Does not work without {{Ent|$phong}} on {{Ent|VertexLitGeneric}} in {{css|2}} '''and''' {{csgobranch|4}}.}}
{{Note|Does not work without {{Ent|$phong}} on {{Ent|VertexLitGeneric}} in {{css|2}} '''and''' {{csgobranch|4}}.}}
{{Note|<code>$lightwarptexture</code> does not seem to exist at all for {{Ent|LightmappedGeneric}} in {{csgobranch|4}}.}}
{{Note|{{code|$lightwarptexture}} does not seem to exist at all for {{Ent|LightmappedGeneric}} in {{csgobranch|4}}.}}


{{Bug|Does not work when using {{Ent|$detail}} '''or''' {{Ent|$bumpmap2}} on both {{Ent|LightmappedGeneric}} and {{Ent|WorldVertexTransition}}.}}
{{Bug|Does not work when using {{Ent|$detail}} '''or''' {{Ent|$bumpmap2}} on both {{Ent|LightmappedGeneric}} and {{Ent|WorldVertexTransition}}.}}
Line 23: Line 24:
== Lightwarp textures ==
== Lightwarp textures ==
A lightwarp texture is a one-dimensional strip of pixels. Dark texels will be tinted with the colour on the left-hand side, and bright texels with the colour on the right. 50% gray means no tint.
A lightwarp texture is a one-dimensional strip of pixels. Dark texels will be tinted with the colour on the left-hand side, and bright texels with the colour on the right. 50% gray means no tint.
{{tip|Use an uncompressed BGR888 texture to avoid color banding on lighting gradients.<!-- as per https://gamebanana.com/mods/466641 -->}}
 
=== VTF parameters ===
A lightwarp texture should use uncompressed BGR888 format to avoid undesired color banding on lighting gradients{{ref|1}}, and should be clamped.
 
If using {{vtex|4}}, use these compile parameters:
<pre>
nocompress 1 // disable texture compression, to prevent undesired color banding
nomip 1 // disable mipmaps, which are unnecessary in this instance
nolod 1 // always use the full resolution version of this texture (due to being low-resolution to begin with)
clamps 1 // prevent tints at lighting extremes from blending together
clampt 1 // optional?
stripalphachannel 1 // remove unnecessary alpha channel, if present
</pre>


=== Examples ===
=== Examples ===
; <code>snow_warp</code>:[[File:Warptexture.jpg|border|dod\materials\ground\snow_warp]]
; {{code|snow_warp}}:[[File:Warptexture.jpg|border|dod\materials\ground\snow_warp]]
: This is the lightwarp texture used in the {{dods|2}} screen to the right. It is designed to add a subtle bluish tint to darker snow without affecting brighter regions.
: This is the lightwarp texture used in the {{dods|2}} screen above. It is designed to add a subtle bluish tint to darker snow without affecting brighter regions.
; <code>pyro_lightwarp</code>:[[File:Pyro lightwarp.png|border|tf\materials\models\player\pyro\pyro_lightwarp]]
; {{code|pyro_lightwarp}}:[[File:Pyro lightwarp.png|border|tf\materials\models\player\pyro\pyro_lightwarp]]
: This is applied to all {{tf2|2}} characters, not just the Pyro. It creates the high-contrast shadows with red-tinged terminators typical of the illustrative art the game apes.
: This is applied to all {{tf2|2}} characters, not just the Pyro. It creates the high-contrast shadows with red-tinged terminators typical of the illustrative art the game apes.
; Posterized: [[File:Warp bw.png|border|Custom texture]]
; Posterized: [[File:Warp bw.png|border|Custom texture]]
: This custom warp texture creates a posterized "line art" style. Enabling lightwarp alone isn't enough however: ambient lighting must be at 0 to make unlit areas black, and world lighting must become viewer-dependent to ensure that shadows are always cast.
: This custom warp texture creates a posterized "line art" style. Enabling lightwarp alone isn't enough however: ambient lighting must be at 0 to make unlit areas black, and world lighting must become viewer-dependent to ensure that shadows are always cast.
; <code>Cel Shading</code>:[[File:Cel_lightwarp.png|border|Custom texture]]
; {{code|Cel Shading}}:[[File:Cel_lightwarp.png|border|Custom texture]]
:Cel shading can make objects look more cartoony by replacing the smooth lighting gradient with sharp steps.
:Cel shading can make objects look more cartoony by replacing the smooth lighting gradient with sharp steps.


Other possible uses of <code>$lightwarptexture</code> include contrast enhancement, tweaking vertex lighting shadow transitions, highlight softening, and more.
Other possible uses of {{code|$lightwarptexture}} include contrast enhancement, tweaking vertex lighting shadow transitions, highlight softening, and more.




::[[File:Celshadingpreview.png|thumb|320px|left|Cel shading in action.]]
::[[File:Celshadingpreview.png|thumb|320px|left|Cel shading in action.]]
{{clr}}
== References ==
<ol>
<li>[https://gamebanana.com/mods/466641 Lightwarp Fixes <nowiki>[Team Fortress 2] [Mods]</nowiki> on GameBanana]
</ol>

Revision as of 12:28, 5 February 2024

English (en)中文 (zh)Translate (Translate)
The technique was first used in Day of Defeat: Source Day of Defeat: Source's snow maps, such as Kalt.
$lightwarptexture is a cornerstone of Team Fortress 2 Team Fortress 2's illustrative character rendering.
Posterized color can be achieved, but lighting must be tightly controlled.

Template:Shaderparam It tints texels depending on their brightness. It can be thought of as localized color correction.

Caveats

Icon-Important.pngImportant:$lightwarptexture must be specified after all other textures, otherwise it will overwrite them.
Icon-Important.pngImportant:Make sure the texture is clamped in the VTF otherwise it will render incorrectly.
Icon-Important.pngImportant:$lightwarptexture on VertexLitGeneric requires a $bumpmap. If not specified, a default one will be used instead! It will be as if a $bumpmap is in the VMT!
Warning.pngWarning: This means that all parameters that don't work with $bumpmap also won't work with $lightwarptexture.
Note.pngNote:Does not work without $phong on VertexLitGeneric in Counter-Strike: Source Counter-Strike: Source and CS:GO engine branch CS:GO engine branch.
Note.pngNote:$lightwarptexture does not seem to exist at all for LightmappedGeneric in CS:GO engine branch CS:GO engine branch.
Icon-Bug.pngBug:Does not work when using $detail or $bumpmap2 on both LightmappedGeneric and WorldVertexTransition.  [todo tested in ?]
Icon-Bug.pngBug:Does not work when using $selfillumfresnel without also using $phong.  [todo tested in ?]
Icon-Bug.pngBug:Does not work when using $seamless_scale.  [todo tested in ?]

Lightwarp textures

A lightwarp texture is a one-dimensional strip of pixels. Dark texels will be tinted with the colour on the left-hand side, and bright texels with the colour on the right. 50% gray means no tint.

VTF parameters

A lightwarp texture should use uncompressed BGR888 format to avoid undesired color banding on lighting gradients[1], and should be clamped.

If using VTEX VTEX, use these compile parameters:

nocompress 1 // disable texture compression, to prevent undesired color banding
nomip 1 // disable mipmaps, which are unnecessary in this instance
nolod 1 // always use the full resolution version of this texture (due to being low-resolution to begin with)
clamps 1 // prevent tints at lighting extremes from blending together
clampt 1 // optional?
stripalphachannel 1 // remove unnecessary alpha channel, if present

Examples

snow_warp
dod\materials\ground\snow_warp
This is the lightwarp texture used in the Day of Defeat: Source Day of Defeat: Source screen above. It is designed to add a subtle bluish tint to darker snow without affecting brighter regions.
pyro_lightwarp
tf\materials\models\player\pyro\pyro_lightwarp
This is applied to all Team Fortress 2 Team Fortress 2 characters, not just the Pyro. It creates the high-contrast shadows with red-tinged terminators typical of the illustrative art the game apes.
Posterized
Custom texture
This custom warp texture creates a posterized "line art" style. Enabling lightwarp alone isn't enough however: ambient lighting must be at 0 to make unlit areas black, and world lighting must become viewer-dependent to ensure that shadows are always cast.
Cel Shading
Custom texture
Cel shading can make objects look more cartoony by replacing the smooth lighting gradient with sharp steps.

Other possible uses of $lightwarptexture include contrast enhancement, tweaking vertex lighting shadow transitions, highlight softening, and more.


Cel shading in action.

References

  1. Lightwarp Fixes [Team Fortress 2] [Mods] on GameBanana