LUX: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
m (→‎Credits: fix typo)
m (swap around some deprecated templates)
Line 5: Line 5:
== Goals ==
== Goals ==
* '''Overhauled/Cleaned <code>materialsystem\stdshaders\</code> Folder'''
* '''Overhauled/Cleaned <code>materialsystem\stdshaders\</code> Folder'''
: {{ModernWarning|Pretty much everything except existing shader-compile functionality is pretty much "nuked".}}
: {{warning|Pretty much everything except existing shader-compile functionality is pretty much "nuked".}}
: {{ModernNote|SDK_ Shaders will fall back to LUX_ Shaders, that way {{LUX|2}} can easily be used on {{mapbase|4}} mods without much work.}}
: {{Note|SDK_ Shaders will fall back to LUX_ Shaders, that way {{LUX|2}} can easily be used on {{mapbase|4}} mods without much work.}}
: {{Notice| Implementing {{LUX|2}} Shaders would entail replacing the existing <code>stdshaders\</code> with the one from {{LUX|2}}. Effectively 'nuking' SDK_ Shaders. {{LUX|2}} Shaders should be able to do everything SDK_ Shaders in {{src13}} and {{mapbase}} can do.}}
: {{Notice| Implementing {{LUX|2}} Shaders would entail replacing the existing <code>stdshaders\</code> with the one from {{LUX|2}}. Effectively 'nuking' SDK_ Shaders. {{LUX|2}} Shaders should be able to do everything SDK_ Shaders in {{src13}} and {{mapbase}} can do.}}
<br>
<br>
Line 16: Line 16:
: {{Why|ps20b and below is too limiting. The lack of available constant registers causes extreme branching and a lot of 'combos'. Making the code terrible to read and complicated. This disincentives Modders.}}
: {{Why|ps20b and below is too limiting. The lack of available constant registers causes extreme branching and a lot of 'combos'. Making the code terrible to read and complicated. This disincentives Modders.}}
: {{Notice|Linux is not officially supported. MacOS is also not officially supported. Users of said system will have to either patch <code>togl</code> to work with SM3.0 or use DxVK. }}
: {{Notice|Linux is not officially supported. MacOS is also not officially supported. Users of said system will have to either patch <code>togl</code> to work with SM3.0 or use DxVK. }}
: {{ModernNote|
: {{Note|
:* SM3.0 released in 2004, and [https://cdn.cloudflare.steamstatic.com/apps/valve/2010/siggraph2010_vlachos_waterflow.pdf Valve considered ps2.0b low end hardware in ~2008]. See slide '''8'''
:* SM3.0 released in 2004, and [https://cdn.cloudflare.steamstatic.com/apps/valve/2010/siggraph2010_vlachos_waterflow.pdf Valve considered ps2.0b low end hardware in ~2008]. See slide '''8'''
:* This means that older hardware not capable of SM3.0 will not be able to use the new Shaders.}}
:* This means that older hardware not capable of SM3.0 will not be able to use the new Shaders.}}
Line 25: Line 25:
: {{Notice|You might have noticed Articles like {{Ent|$lightwarptexture}}, {{Ent|$detail}}, {{Ent|UnlitTwoTexture}} and {{Ent|$envmapmask}} getting major updates from [[User:ShiroDkxtro2|ShiroDkxtro2]],
: {{Notice|You might have noticed Articles like {{Ent|$lightwarptexture}}, {{Ent|$detail}}, {{Ent|UnlitTwoTexture}} and {{Ent|$envmapmask}} getting major updates from [[User:ShiroDkxtro2|ShiroDkxtro2]],
: where new information about Caveats and bugs were added for {{tf2}}{{as}}{{src13}}{{csgo}}. This was a direct result of {{LUX|2}} development, although the focus was mainly on {{src13}}{{as}} as their code is publicly available. }}
: where new information about Caveats and bugs were added for {{tf2}}{{as}}{{src13}}{{csgo}}. This was a direct result of {{LUX|2}} development, although the focus was mainly on {{src13}}{{as}} as their code is publicly available. }}
: {{ModernNote|The current lack of documentation, on how Shaders work in Source, disincentives Modders from learning how to mod Shaders or make their own. The barrier of entry is v. high as a lot of very specific knowledge is required too.}}
: {{Note|The current lack of documentation, on how Shaders work in Source, disincentives Modders from learning how to mod Shaders or make their own. The barrier of entry is v. high as a lot of very specific knowledge is required too.}}
<br>  
<br>  
* '''Implementing features that aren't available in {{src13}}'''
* '''Implementing features that aren't available in {{src13}}'''
Line 34: Line 34:
<br>
<br>
* '''Easy way of disabling features'''
* '''Easy way of disabling features'''
: {{Important|A custom Pre-Processor program has been made. It automatically sets <code>// STATIC:</code>'s to predefined values depending on <code>#define</code>'s in an included header file.}}
: {{ModernImportant|A custom Pre-Processor program has been made. It automatically sets <code>// STATIC:</code>'s to predefined values depending on <code>#define</code>'s in an included header file.}}
: {{ModernNote|Mods that don't require specific features (lightwarptexture/distancealpha/phong/envmaps/etc), can easily disable them. This will speed up Shader-compilation. Most parameters have been <code>#ifdef</code>'d in the c++ code!}}
: {{Note|Mods that don't require specific features (lightwarptexture/distancealpha/phong/envmaps/etc), can easily disable them. This will speed up Shader-compilation. Most parameters have been <code>#ifdef</code>'d in the c++ code!}}
<br>  
<br>  
* '''Mapbase compatibility'''
* '''Mapbase compatibility'''
: {{Notice|Replacing SDK_ Shaders in SDK mods, SDK2013CE or Mapbase mods should be as simple as replacing the <code>stdshaders\</code> Folder.}}
: {{Notice|Replacing SDK_ Shaders in SDK mods, SDK2013CE or Mapbase mods should be as simple as replacing the <code>stdshaders\</code> Folder.}}
: {{ModernNote|It is assumed that no custom Shaders apart from SDK_ ones were added. If they do were added however, developers should be capable of adding them back, as that is the prerequisite for adding custom Shaders.}}
: {{Note|It is assumed that no custom Shaders apart from SDK_ ones were added. If they do were added however, developers should be capable of adding them back, as that is the prerequisite for adding custom Shaders.}}
<br>
<br>
== Planned Features ==
== Planned Features ==
This is a list of new features that are being implemented, or features that will be ported/recreated from newer branches such as {{as}}{{l4d2}}{{csgo}}
This is a list of new features that are being implemented, or features that will be ported/recreated from newer branches such as {{as}}{{l4d2}}{{csgo}}
{{ModernNote|Ported in this case usually means {{as}}{{mapbase}}, however in most of these cases, the code for this will be heavily adapted to simplify or overhaul it.}}
{{Note|Ported in this case usually means {{as}}{{mapbase}}, however in most of these cases, the code for this will be heavily adapted to simplify or overhaul it.}}
{{Important|{{LUX|2}} does '''not''' use ''any'' leaked code. Features like [[$phong#Colors|$phongalbedoboost]]{{only|csgo}} are not rocket-science. They can safely be recreated without the use of leaked code.}}
{{ModernImportant|{{LUX|2}} does '''not''' use ''any'' leaked code. Features like [[$phong#Colors|$phongalbedoboost]]{{only|csgo}} are not rocket-science. They can safely be recreated without the use of leaked code.}}
: {{ModernWarning|For features that are more complicated, there might be visual disparity when compared to official implementations.}}
: {{warning|For features that are more complicated, there might be visual disparity when compared to official implementations.}}
<br>
<br>
==== Features required for {{mapbase|2}} compatibility ====
==== Features required for {{mapbase|2}} compatibility ====
Line 52: Line 52:
* Spline-Ropes
* Spline-Ropes
* Parallax Corrected Cubemaps ( PCC )
* Parallax Corrected Cubemaps ( PCC )
: {{ModernNote|Just like {{mapbase|2}}, this requires custom compilers to work.}}
: {{Note|Just like {{mapbase|2}}, this requires custom compilers to work.}}
: {{Important|The parameters are the same for {{LUX|2}} and {{mapbase}}. This means that Mapbase compilers can be used for this to work.}}
: {{ModernImportant|The parameters are the same for {{LUX|2}} and {{mapbase}}. This means that Mapbase compilers can be used for this to work.}}
* {{Ent|$envmapmask}} + {{Ent|$bumpmap}} on {{Ent|VertexLitGeneric}}
* {{Ent|$envmapmask}} + {{Ent|$bumpmap}} on {{Ent|VertexLitGeneric}}
* Replacement for the "Postprocessing" Controller Shader
* Replacement for the "Postprocessing" Controller Shader
Line 64: Line 64:
==== New Features ====
==== New Features ====
* In {{src13mp}} Models utilizing Model Lightmapping can use {{Ent|$bumpmap}}. Additionally all Model shaders will be able to utilize this feature. Except they have {{Ent|$phong}}.
* In {{src13mp}} Models utilizing Model Lightmapping can use {{Ent|$bumpmap}}. Additionally all Model shaders will be able to utilize this feature. Except they have {{Ent|$phong}}.
: {{Important|The Lightmap does not do bumped-lighting using the bumpmap. Only named-lights/projected textures will be able to do so.}}
: {{ModernImportant|The Lightmap does not do bumped-lighting using the bumpmap. Only named-lights/projected textures will be able to do so.}}
: {{ModernNote| Lightmapped models will not be able to receive {{Ent|$phong}}. This is not planned at the moment but should be possible for named-lights/projected textures!}}  
: {{Note| Lightmapped models will not be able to receive {{Ent|$phong}}. This is not planned at the moment but should be possible for named-lights/projected textures!}}  
* In {{src13mp}} Models can utilize Lightmap UV's.
* In {{src13mp}} Models can utilize Lightmap UV's.
: {{ModernWarning|The way this is currently implemented requires a custom written tool, two smd's ( one with lightmap uv ) and also has a lot of precision loss for the Lightmap UV's. Additionally this requires a custom compiler! }}
: {{warning|The way this is currently implemented requires a custom written tool, two smd's ( one with lightmap uv ) and also has a lot of precision loss for the Lightmap UV's. Additionally this requires a custom compiler! }}
::{{ModernTodo|Investigate {{src07}} code, supposedly the Studiomdl code is there. Maybe it can be packed via Blendweights or alternatively the precision loss might be decreased.}}
::{{ModernTodo|Investigate {{src07}} code, supposedly the Studiomdl code is there. Maybe it can be packed via Blendweights or alternatively the precision loss might be decreased.}}
<br>
<br>
Line 75: Line 75:
* [[$phong#Colors|$phongalbedoboost]] From {{csgo}} - Its just <code>BaseTexture * $PhongAlbedoBoost</code>... No leaked code!
* [[$phong#Colors|$phongalbedoboost]] From {{csgo}} - Its just <code>BaseTexture * $PhongAlbedoBoost</code>... No leaked code!
* [[$phong#Masking|$basemapluminancephongmask]] From {{as}}+
* [[$phong#Masking|$basemapluminancephongmask]] From {{as}}+
: {{ModernNote|
: {{Note|
:* {{LUX|2}} allows the use of Rec. 709 HDTV Luminance Weights. <code>float3(0.2126f, 0.7152f, 0.0722f)</code>.
:* {{LUX|2}} allows the use of Rec. 709 HDTV Luminance Weights. <code>float3(0.2126f, 0.7152f, 0.0722f)</code>.
:* Previously SDK_ Shaders would use the NTSC Analog Television standard of <code>float3(0.2990f, 0.5870f, 0.1140f)</code>}}
:* Previously SDK_ Shaders would use the NTSC Analog Television standard of <code>float3(0.2990f, 0.5870f, 0.1140f)</code>}}
* [[Glowing_Textures#.24selfillum|$selfillumtexture]] Deprecated since {{src07}} - This used to be obsolete
* [[Glowing_Textures#.24selfillum|$selfillumtexture]] Deprecated since {{src07}} - This used to be obsolete
: {{ModernNote| Yes, there is a use for this! [[$detail#Parameters and Effects|$detailblendmode]] 5 is commonly used for glowing textures. This parameter allows for not wasting your $detail. Additionally no $emissiveblend is required.}}
: {{Note| Yes, there is a use for this! [[$detail#Parameters and Effects|$detailblendmode]] 5 is commonly used for glowing textures. This parameter allows for not wasting your $detail. Additionally no $emissiveblend is required.}}
: {{seealso|PBR Shaders in the community commonly have a $emissiontexture parameter that does EXACTLY what [[Glowing_Textures#.24selfillum|$selfillumtexture]] does in {{LUX|2}}.}}
: {{seealso|PBR Shaders in the community commonly have a $emissiontexture parameter that does EXACTLY what [[Glowing_Textures#.24selfillum|$selfillumtexture]] does in {{LUX|2}}.}}
* Water Shader with {{Ent|$flowmap}} Support - From {{as}}
* Water Shader with {{Ent|$flowmap}} Support - From {{as}}
* {{Ent|$envmaplightscale}} From {{as}} for brushes{{as}}+ AND models {{only|{{csgo}}}}+
* {{Ent|$envmaplightscale}} From {{as}} for brushes{{as}}+ AND models {{only|{{csgo}}}}+
: {{Important|
: {{ModernImportant|
:* On brushes this will use the Lightmap
:* On brushes this will use the Lightmap
:* On models '''with''' {{Ent|$bumpmap}}, this will use bumped lighting.
:* On models '''with''' {{Ent|$bumpmap}}, this will use bumped lighting.
Line 91: Line 91:
==== Features that are being discarded ====
==== Features that are being discarded ====
* {{Ent|$envmapsphere}} and related - These features have been removed since {{as}} and are obsolete.
* {{Ent|$envmapsphere}} and related - These features have been removed since {{as}} and are obsolete.
:{{ModernNote|This is very easy to re-implement. The 7th face of a Cubemap is still being built in {{src13}} and therefore this feature is still operational given that the code has been implemented!}}
:{{Note|This is very easy to re-implement. The 7th face of a Cubemap is still being built in {{src13}} and therefore this feature is still operational given that the code has been implemented!}}
* [[$bumpmap#Additional_Parameters|$bumpmask]] and related
* [[$bumpmap#Additional_Parameters|$bumpmask]] and related
<br>
<br>
Line 121: Line 121:
{{Ent|$basealphaenvmapmask}} + {{Ent|bumpmap}} Doesn't work}}
{{Ent|$basealphaenvmapmask}} + {{Ent|bumpmap}} Doesn't work}}


{{ModernNote|
{{Note|
[[Glowing_Textures#.24selfillum|$selfillummask]] Missing<br>
[[Glowing_Textures#.24selfillum|$selfillummask]] Missing<br>
{{Ent|$selfillum_envmapmask_alpha}} Missing<br>
{{Ent|$selfillum_envmapmask_alpha}} Missing<br>
Line 136: Line 136:


=== {{LUX}}LUX_LightMappedGeneric ===
=== {{LUX}}LUX_LightMappedGeneric ===
{{ModernNote|
{{Note|
[[$detail#Parameters and Effects|$detailblendmode]] 1-9 works.<br>
[[$detail#Parameters and Effects|$detailblendmode]] 1-9 works.<br>
[[$detail#Parameters and Effects|$detailblendmode]] 10-11 planned.<br>
[[$detail#Parameters and Effects|$detailblendmode]] 10-11 planned.<br>
Line 151: Line 151:
:{{Notice|Caveat - [[Glowing_Textures#.24selfillum|$selfillumtexture]] has higher priority than both.}}
:{{Notice|Caveat - [[Glowing_Textures#.24selfillum|$selfillumtexture]] has higher priority than both.}}


{{Important|{{Ent|$basealphaenvmapmask}} does no longer require a flipped mask.}}
{{ModernImportant|{{Ent|$basealphaenvmapmask}} does no longer require a flipped mask.}}
:{{ModernWorkaround|Materials that previously used have to be adjusted. Use {{Ent|$envmapmask}} or {{Ent|$normalmapalphaenvmapmask}} instead!}}
:{{ModernWorkaround|Materials that previously used have to be adjusted. Use {{Ent|$envmapmask}} or {{Ent|$normalmapalphaenvmapmask}} instead!}}
|}
|}
Line 167: Line 167:
[[Glowing_Textures#.24selfillum|$selfillumfresnel]] missing.<br>
[[Glowing_Textures#.24selfillum|$selfillumfresnel]] missing.<br>
{{Ent|$lightwarptexture}} missing.}}
{{Ent|$lightwarptexture}} missing.}}
{{ModernNote|$lightwarptexture fores bumpmapping by binding a default one, unless one is manually specified.}}
{{Note|$lightwarptexture fores bumpmapping by binding a default one, unless one is manually specified.}}




Line 174: Line 174:
[[$detail#Parameters and Effects|$detailblendmode]]{{src13}}{{tf2}}{{as}}{{csgo}} 5-11 Don't work.<br>
[[$detail#Parameters and Effects|$detailblendmode]]{{src13}}{{tf2}}{{as}}{{csgo}} 5-11 Don't work.<br>
[[$detail#Parameters and Effects|$detailblendmode]]{{csgo}} 5-6 & 8-11 Don't work.}}
[[$detail#Parameters and Effects|$detailblendmode]]{{csgo}} 5-6 & 8-11 Don't work.}}
{{ModernNote|
{{Note|
{{Ent|$envmapmask}} missing. Except {{mapbase}}.<br>
{{Ent|$envmapmask}} missing. Except {{mapbase}}.<br>
[[Glowing_Textures#.24selfillum|$selfillummask]] missing. {{ModernConfirm|Only in {{mapbase}}?}}
[[Glowing_Textures#.24selfillum|$selfillummask]] missing. {{ModernConfirm|Only in {{mapbase}}?}}
Line 195: Line 195:
[[Glowing_Textures#.24selfillum|$selfillumfresnel]] will cause {{Ent|$envmap}} to be masked using the {{Ent|$basetexture}} alpha channel.}}}}
[[Glowing_Textures#.24selfillum|$selfillumfresnel]] will cause {{Ent|$envmap}} to be masked using the {{Ent|$basetexture}} alpha channel.}}}}


{{ModernNote|[[$phong#Brightness|$phongdisablehalflambert]] only in {{as}}+<br>
{{Note|[[$phong#Brightness|$phongdisablehalflambert]] only in {{as}}+<br>
[[$phong#Masking|$phongexponentfactor]] only in {{tf2}}{{src13mp}}<br>
[[$phong#Masking|$phongexponentfactor]] only in {{tf2}}{{src13mp}}<br>
[[$phong#Masking|$basemapluminancephongmask]] only in {{l4d}}+<br>
[[$phong#Masking|$basemapluminancephongmask]] only in {{l4d}}+<br>
Line 223: Line 223:
* [[$detail#Parameters and Effects|$detailblendmode]] 10-11 planned. If possible.<br>
* [[$detail#Parameters and Effects|$detailblendmode]] 10-11 planned. If possible.<br>


{{ModernNote|[[$phong#Masking|$invertphongmask]] Now only flips the mask used for phong. It will no longer touch the envmapmask ''at all''.<br>
{{Note|[[$phong#Masking|$invertphongmask]] Now only flips the mask used for phong. It will no longer touch the envmapmask ''at all''.<br>
[[$phong#Colors|$phongalbedotint]] can now be used without [[$phong#Masking|$phongexponenttexture]].}}
[[$phong#Colors|$phongalbedotint]] can now be used without [[$phong#Masking|$phongexponenttexture]].}}
:{{Notice|Will use entirety of {{Ent|$basetexture}}, without being masked.}}
:{{Notice|Will use entirety of {{Ent|$basetexture}}, without being masked.}}
Line 231: Line 231:
* [[$phong#Colors|$phongalbedoboost]] + {{Ent|$detail}} Works. Does not work in {{csgo|4}}.<br>
* [[$phong#Colors|$phongalbedoboost]] + {{Ent|$detail}} Works. Does not work in {{csgo|4}}.<br>


{{ModernNote|[[$phong#Colors|$phongtint]] does no longer disable [[$phong#Colors|$phongalbedotint]]. It will do <code>($baseTexture * Mask) * $PhongTint</code>}}
{{Note|[[$phong#Colors|$phongtint]] does no longer disable [[$phong#Colors|$phongalbedotint]]. It will do <code>($baseTexture * Mask) * $PhongTint</code>}}
:{{Notice|When no [[$phong#Masking|$phongexponenttexture]] is specified, Mask will be 1.0f!}}
:{{Notice|When no [[$phong#Masking|$phongexponenttexture]] is specified, Mask will be 1.0f!}}


* {{Ent|$envmap}} Can now be not-masked by using a new parameter (<code>$phongenvmapnomask</code>)
* {{Ent|$envmap}} Can now be not-masked by using a new parameter (<code>$phongenvmapnomask</code>)
: {{Important|By default the original masking for the $envmap will be replicated as to not have disparity. However it can now be overriden using two new parameters. <code>$phongforcebasealphaenvmapmask</code> and <code>$phongforcenormalmapalphaenvmapmask</code>}}
: {{ModernImportant|By default the original masking for the $envmap will be replicated as to not have disparity. However it can now be overriden using two new parameters. <code>$phongforcebasealphaenvmapmask</code> and <code>$phongforcenormalmapalphaenvmapmask</code>}}


* [[$phong#Masking|$basemapalphaphongmask]] '''no longer''' makes {{Ent|$phong}} ignore the {{Ent|$bumpmap}}.
* [[$phong#Masking|$basemapalphaphongmask]] '''no longer''' makes {{Ent|$phong}} ignore the {{Ent|$bumpmap}}.
Line 288: Line 288:
* [https://github.com/Joshua-Ashton/Source-PlusPlus/ Source++] code might be included with {{LUX|2}}.
* [https://github.com/Joshua-Ashton/Source-PlusPlus/ Source++] code might be included with {{LUX|2}}.
One example would be the NvidiaPCF5x5Gaussian Shadow Filter
One example would be the NvidiaPCF5x5Gaussian Shadow Filter
{{ModernNote|What else from S++ is used in {{LUX|2}}?}}
{{Note|What else from S++ is used in {{LUX|2}}?}}
[[User:ShiroDkxtro2|ShiroDkxtro2]] would also like to thank Joshua Ashton personally for his various open-source work related to the source engine.
[[User:ShiroDkxtro2|ShiroDkxtro2]] would also like to thank Joshua Ashton personally for his various open-source work related to the source engine.



Revision as of 05:46, 21 June 2023

English (en)中文 (zh)Translate (Translate)

LUX LUX is a mod specifically made and developed for use in Source 2013 Singleplayer Source 2013 Singleplayer and Source 2013 Multiplayer Source 2013 Multiplayer.
The Project is to entirely rewrite all existing "SDK_" Shaders, that come with the SDK and all those available in Mapbase Mapbase.

Goals

  • Overhauled/Cleaned materialsystem\stdshaders\ Folder
Warning.pngWarning:Pretty much everything except existing shader-compile functionality is pretty much "nuked".
Note.pngNote:SDK_ Shaders will fall back to LUX_ Shaders, that way LUX LUX can easily be used on Mapbase Mapbase mods without much work.
Note.pngNote: Implementing LUX LUX Shaders would entail replacing the existing stdshaders\ with the one from LUX LUX. Effectively 'nuking' SDK_ Shaders. LUX LUX Shaders should be able to do everything SDK_ Shaders in Source 2013 and Mapbase can do.


  • Drastically decreased compile-times for all Shaders
Why?: Valves Shaders take forever to compile Source 2013 SingleplayerSource 2013 MultiplayerAlien Swarm. Especially using the stock Shader-Compiler. This disincentives modding the Shaders.
Note.pngNote:Even on a good CPU it can take half a day, or more. As an example for LUX LUX. Compiling the entirety of LUX_LightMappedGeneric takes around 30 seconds on 4 cores @4.1GHz


  • SM3.0 Shaders Only
Why?: ps20b and below is too limiting. The lack of available constant registers causes extreme branching and a lot of 'combos'. Making the code terrible to read and complicated. This disincentives Modders.
Note.pngNote:Linux is not officially supported. MacOS is also not officially supported. Users of said system will have to either patch togl to work with SM3.0 or use DxVK.
Note.pngNote:


  • Totally rewritten .h, .cpp, .fxc files


  • More Documentation for Shaders, their parameters, how they work and any possible caveats
Note.pngNote:You might have noticed Articles like $lightwarptexture, $detail, UnlitTwoTexture and $envmapmask getting major updates from ShiroDkxtro2,
where new information about Caveats and bugs were added for Team Fortress 2Alien SwarmSource 2013Counter-Strike: Global Offensive. This was a direct result of LUX LUX development, although the focus was mainly on Source 2013Alien Swarm as their code is publicly available.
Note.pngNote:The current lack of documentation, on how Shaders work in Source, disincentives Modders from learning how to mod Shaders or make their own. The barrier of entry is v. high as a lot of very specific knowledge is required too.


  • Implementing features that aren't available in Source 2013
See also:  Planned Features. This includes old features such as $selfillumtexture and newer features like $phongalbedoboost(only in Counter-Strike: Global Offensive).


  • Fixing most Parameter "bugs:" and other caveats


  • Easy way of disabling features
Icon-Important.pngImportant:A custom Pre-Processor program has been made. It automatically sets // STATIC:'s to predefined values depending on #define's in an included header file.
Note.pngNote:Mods that don't require specific features (lightwarptexture/distancealpha/phong/envmaps/etc), can easily disable them. This will speed up Shader-compilation. Most parameters have been #ifdef'd in the c++ code!


  • Mapbase compatibility
Note.pngNote:Replacing SDK_ Shaders in SDK mods, SDK2013CE or Mapbase mods should be as simple as replacing the stdshaders\ Folder.
Note.pngNote:It is assumed that no custom Shaders apart from SDK_ ones were added. If they do were added however, developers should be capable of adding them back, as that is the prerequisite for adding custom Shaders.


Planned Features

This is a list of new features that are being implemented, or features that will be ported/recreated from newer branches such as Alien SwarmLeft 4 Dead 2Counter-Strike: Global Offensive

Note.pngNote:Ported in this case usually means Alien SwarmMapbase, however in most of these cases, the code for this will be heavily adapted to simplify or overhaul it.
Icon-Important.pngImportant:LUX LUX does not use any leaked code. Features like $phongalbedoboost(only in csgo) are not rocket-science. They can safely be recreated without the use of leaked code.
Warning.pngWarning:For features that are more complicated, there might be visual disparity when compared to official implementations.


Features required for Mapbase Mapbase compatibility

Note.pngNote:Just like Mapbase Mapbase, this requires custom compilers to work.
Icon-Important.pngImportant:The parameters are the same for LUX LUX and Mapbase. This means that Mapbase compilers can be used for this to work.
Template:ModernTodo


New Features

  • In Source 2013 Multiplayer Models utilizing Model Lightmapping can use $bumpmap. Additionally all Model shaders will be able to utilize this feature. Except they have $phong.
Icon-Important.pngImportant:The Lightmap does not do bumped-lighting using the bumpmap. Only named-lights/projected textures will be able to do so.
Note.pngNote: Lightmapped models will not be able to receive $phong. This is not planned at the moment but should be possible for named-lights/projected textures!
  • In Source 2013 Multiplayer Models can utilize Lightmap UV's.
Warning.pngWarning:The way this is currently implemented requires a custom written tool, two smd's ( one with lightmap uv ) and also has a lot of precision loss for the Lightmap UV's. Additionally this requires a custom compiler!
Template:ModernTodo


Features ported/recreated/revived

Note.pngNote:
  • LUX LUX allows the use of Rec. 709 HDTV Luminance Weights. float3(0.2126f, 0.7152f, 0.0722f).
  • Previously SDK_ Shaders would use the NTSC Analog Television standard of float3(0.2990f, 0.5870f, 0.1140f)
Note.pngNote: Yes, there is a use for this! $detailblendmode 5 is commonly used for glowing textures. This parameter allows for not wasting your $detail. Additionally no $emissiveblend is required.
See also:  PBR Shaders in the community commonly have a $emissiontexture parameter that does EXACTLY what $selfillumtexture does in LUX LUX.

Icon-Important.pngImportant:
  • On brushes this will use the Lightmap
  • On models with $bumpmap, this will use bumped lighting.
  • On models without $bumpmap, this will use Vertex Lighting.
  • In Source 2013 Multiplayer Models utilizing Model Lightmapping, will use the Lightmap. Regardless of whether or not $bumpmap is used.


Features that are being discarded

  • $envmapsphere and related - These features have been removed since Alien Swarm and are obsolete.
Note.pngNote:This is very easy to re-implement. The 7th face of a Cubemap is still being built in Source 2013 and therefore this feature is still operational given that the code has been implemented!


Features that won't be ported/recreated/revived

  • $basealphaenvmapmaskminmaxexp from Alien Swarm - This parameter is not yet documented on the VDC, it is also unclear what exactly it does...
  • $EnvMapLightScaleMinMax from Counter-Strike: Global Offensive


Not functional - FOR NOW


Stock Shaders VS LUX

Todo: Move This to their own pages or something like that.


LightMappedGeneric

Stock Shaders

Template:ModernBug

Note.pngNote:$basealphaenvmapmask requires inverted masks

LUXLUX_LightMappedGeneric

Note.pngNote:

$detailblendmode 1-9 works.
$detailblendmode 10-11 planned.
$bumpmap + $envmapmask works, used to be (only in Counter-Strike: Global Offensive.)
$lightwarptexture + $detail works ( does not work in Alien SwarmTeam Fortress 2 ).
$basealphaenvmapmask + $bumpmap works.
$selfillummask Exists now.
$blendtintbybasealpha Exists now.
$selfillum_envmapmask_alpha Exists now.
$envmaplightscale Exists now.

$detailtexturetransform Exists now.
Note.pngNote:Caveat - Has higher priority than $selfillum/$selfillummask.
Note.pngNote:Caveat - $selfillumtexture has higher priority than both.
Icon-Important.pngImportant:$basealphaenvmapmask does no longer require a flipped mask.
Template:ModernWorkaround

VertexLitGeneric

Stock Shaders

Always

$envmaplightscale(only in Counter-Strike: Global Offensive).

Without $Bumpmap

Template:ModernBug

Note.pngNote:$lightwarptexture fores bumpmapping by binding a default one, unless one is manually specified.


With $Bumpmap

Template:ModernBug


With $Phong

Template:ModernBug

LUXLUX_VertexLitGeneric

Without $Bumpmap

Template:ModernTodo


With $Bumpmap


With $Phong

Note.pngNote:$invertphongmask Now only flips the mask used for phong. It will no longer touch the envmapmask at all.
$phongalbedotint can now be used without $phongexponenttexture.
Note.pngNote:Will use entirety of $basetexture, without being masked.
Note.pngNote:$phongtint does no longer disable $phongalbedotint. It will do ($baseTexture * Mask) * $PhongTint
Note.pngNote:When no $phongexponenttexture is specified, Mask will be 1.0f!
  • $envmap Can now be not-masked by using a new parameter ($phongenvmapnomask)
Icon-Important.pngImportant:By default the original masking for the $envmap will be replicated as to not have disparity. However it can now be overriden using two new parameters. $phongforcebasealphaenvmapmask and $phongforcenormalmapalphaenvmapmask
Note.pngNote:This will make materials that previously used this intentionally, look different.

History

LUX LUX started developement on the 20.01.2023 DMY, but it was planned and thought ~14.01.2023 when the lead-developer ShiroDkxtro2 was in a hospital stay.
Even before 2023, the idea of rewritting Valve's Shaders was in mind. Various people asked ShiroDkxtro2 if certain modifications could be implemented for default shaders, such as CSM.
These requests would usually result in a simple "no.", modifying the default shaders was not considered feasible for various reasons, most of which are indirectly mentioned in LUX's Goals.
The Inception was supposed to be a means to make the existing Shaders more modable, with new features in mind and laid out so that implementing new things would be easier.

Credits

However, it is only used to compile the Shaders. Include files ( .inc ) are intended to be made using Perl.

  • Tottery ( Also known as TotteryNine )

TotteryNine was crucial to ShiroDkxtro2 for learning the basics and more complicated aspects of making and compiling Shaders.

  • Sitkinator

Aiding with the initial logo and adding a screen-reflection effect to it.

  • Mr.Kleiner

For writing various tools. Including a VTF Flagging tool for Cubemaps inside a .bsp file, a tool for packing lightmap uv's into .smd files

  • roman_memes

Various logical checks and ideas. Also helped with prototyping new features and finding siggraph or other papers regarding modern and oldschool graphical implementations.

  • Alivebyte!

For doing modifications to the ShaderCompiler, which so far have not been implemented into the repo.

For enlightening us about the Constant Register Hack.
Which allows for the use of more than 32 float constant registers on sm3.0
This Project would be near impossible without it.

  • ChatGPT

Help with programming and undocumented graphical features of the Source Engine. It knows things and can make new things to a degree. Various code used in LUX LUX has been partially written by the AI.

Since one of the goals of this project is to be compatible with it, various code from it has been adapted. This means that all Shader-related things should also be inhereted with the credits of LUX LUX. You can find Mapbase's credits HERE.

One example would be the NvidiaPCF5x5Gaussian Shadow Filter

Note.pngNote:What else from S++ is used in LUX LUX?

ShiroDkxtro2 would also like to thank Joshua Ashton personally for his various open-source work related to the source engine.

See also

Development can be followed here, Bug-Reports & suggestions made.
It is also intended as a general place for discussing Source 2013 Source 2013 related Shader-Modding.
Todo: Make a new category for LUX_ Shaders and document them and their parameters there, instead of here. Preferably after they were released on the GitHub.