LUX: Difference between revisions
m (cleanup, needs more work) |
(→Planned Features: Made this section way easier to read, still needs work) |
||
Line 41: | Line 41: | ||
: {{Note|It is assumed that no custom Shaders apart from SDK_ ones were added. If they were added, developers should be capable of adding them back/recreating them.}} | : {{Note|It is assumed that no custom Shaders apart from SDK_ ones were added. If they were added, developers should be capable of adding them back/recreating them.}} | ||
<br> | <br> | ||
= Planned Features = | |||
This is a list of new features that are being implemented | This is a list of new features that are being implemented / will be implemented from newer branches such as | ||
{{ | *{{asbranch|4.1}} | ||
{{ModernImportant|{{LUX|2}} does '''not''' use ''any'' leaked code. Features like [[$phong#Colors|$phongalbedoboost]]{{only|csgo}} are not rocket | *{{l4dbranch|4.1}} | ||
: {{warning|For more complicated features, there might be visual disparity when compared to official implementations.}} | *{{csgobranch|4.1}} | ||
The code will be heavily modified to simplify or overhaul | |||
* [[$phong#Brightness|$phongdisablehalflambert]] from {{ | {{ModernImportant|{{LUX|2}} does '''not''' use '''any''' leaked code. Features like [[$phong#Colors|$phongalbedoboost]]{{only|csgo}} are not rocket science and can be recreated without the use of leaked code.}} | ||
:{{warning|For more complicated features, there might be visual disparity when compared to official implementations.}} | |||
=== Features required for {{mapbase|4.1}} compatibility === | |||
{{ModernImportant|The parameters are the same for {{LUX|2}} and {{mapbase}}. This means that Mapbase's compilers can also be used}} | |||
* [[$phong#Brightness|$phongdisablehalflambert]] from the {{asbranch|4}} | |||
* Radial Fog for all "Geometry" Shaders | * Radial Fog for all "Geometry" Shaders | ||
* Spline-Ropes | * Spline-Ropes | ||
* Parallax Corrected Cubemaps ( PCC ) | * Parallax Corrected Cubemaps ( PCC ) | ||
{{Note|Just like {{mapbase|2}}, this requires custom compilers 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 60: | Line 64: | ||
* Brush {{Ent|$phong}} | * Brush {{Ent|$phong}} | ||
* Treesway | * Treesway | ||
{{todo|Is the {{mapbase}} implementation ported from {{as}}?}} | |||
* [[$bumpmap#Additional_Parameters|$bumpmask]] and related | |||
<br> | <br> | ||
=== 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}}. | ||
{{ModernImportant|The Lightmap does not do bumped-lighting using the bumpmap. Only named lights/projected textures will be able to do so.}} | |||
{{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. | ||
{{warning|The way this is currently implemented requires a custom written tool, two SMDs ( one with lightmap uv ), and also has a lot of precision loss for the Lightmap UVs. Additionally, this requires a custom compiler! }} | |||
:{{todo|Investigate {{src07}} code, supposedly the Studiomdl code is there. Maybe it can be packed via Blendweights or alternatively, the precision loss might be decreased.}} | |||
=== Features ported/recreated === | |||
* [[$phong#Brightness|$phongdisablehalflambert]] | * [[$phong#Brightness|$phongdisablehalflambert]] {{as|since}} - Also needed for {{mapbase|4.1}} | ||
* [[$phong#Masking|$phongexponentfactor]] From {{src13mp}}{{tf2}} | * [[$phong#Masking|$phongexponentfactor]] From {{src13mp|4.1}}/{{tf2|4.1}} and with {{LUX|2}}, also supports {{src13sp|4.1}} | ||
* [[$phong#Colors|$phongalbedoboost]] | * [[$phong#Colors|$phongalbedoboost]] {{csgo|since}} - Its just <code>BaseTexture * $PhongAlbedoBoost</code>... No leaked code! | ||
* [[$phong#Masking|$basemapluminancephongmask]] | * [[$phong#Masking|$basemapluminancephongmask]] {{as|since}} | ||
{{Note| {{LUX|2}} allows the use of Rec. 709 HDTV Luminance Weights. <code>float3(0.2126f, 0.7152f, 0.0722f)</code>.<br>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}} | * [[Glowing_Textures#.24selfillum|$selfillumtexture]] Deprecated since {{src07}} | ||
{{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 | * {{Ent|$envmaplightscale}} From for brushes {{as|since}} '''and''' models {{only|{{csgo}}}} | ||
: {{ModernImportant| | : | ||
{{ModernImportant|Features are dependant on types: | |||
* On brushes, this will use the Lightmap | |||
* On models '''with''' {{Ent|$bumpmap}}, this will use Bumped lighting. | |||
* On models '''without''' {{Ent|$bumpmap}}, this will use Vertex Lighting. | |||
* In {{src13mp}} Models utilizing Model Lightmapping, this will use the Lightmap, regardless of if {{Ent|$bumpmap}} is used.}} | |||
* {{Ent|$envmapsphere}} and related - These features have been removed since {{as}} and | === Features that are being discarded === | ||
* {{Ent|$envmapsphere}} and related - These features have been removed since {{as|4}} and is obsolete. | |||
{{Note|This is very easy to re-implement. The 7th face of a [[cubemap]] is still built in {{src13}}, so this feature is still operational.}} | |||
* $basealphaenvmapmaskminmaxexp from {{as}} - This parameter is not yet documented on the VDC, it is also unclear what exactly it does... | === Features that '''won't''' be ported/recreated/revived === | ||
* $EnvMapLightScaleMinMax from {{csgo}} | * $basealphaenvmapmaskminmaxexp from {{as|4.1}} - This parameter is not yet documented on the VDC, it is also unclear what exactly it does... | ||
* $EnvMapLightScaleMinMax from {{csgo|4.1}} | |||
=== Not functional - FOR NOW === | |||
* {{Ent|$distancealpha}} - Non-Functional. Planned for later. | * {{Ent|$distancealpha}} - Non-Functional. Planned for later. | ||
Revision as of 15:01, 5 February 2024
LUX is a mod specifically made and developed for use in
Source 2013 Singleplayer and
Source 2013 Multiplayer.
The Project is to entirely rewrite all existing "SDK_" Shaders, that come with the SDK and all those available in Mapbase.
Goals
- Overhauled/Cleaned
materialsystem\stdshaders\
Folder
Warning:Pretty much everything except existing shader-compile functionality is pretty much "nuked".
- Drastically decreased compile-times for all Shaders
Note:Even on a good CPU it can take half a day, 'or more. As an example for
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:Linux is not officially supported. MacOS is also not officially supported. Users of said systems will have to either patch
togl
to work with SM3.0 or use DxVK.Note:
- SM3.0 released in 2004, and 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.
- Totally rewritten .h, .cpp, .fxc files
- More Documentation for Shaders, their parameters, how they work and any possible caveats
Note: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
. This was a direct result of
LUX development, although the focus was mainly on
as their code is publicly available.
Note:The current lack of documentation on how Shaders work in Source, disincentives learning how to mod Shaders or make their own. The barrier of entry is very high as a lot of very specific knowledge is required too.
- See also: Planned Features. This includes old features such as $selfillumtexture and newer features like $phongalbedoboost(only in
).
- Fixing most Parameter "bugs:" and other caveats
- See also: Stock Shaders VS LUX
- Easy way of disabling features
Important: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:Mods that don't require specific features (lightwarptexture/distancealpha/phong/envmaps/etc), can easily disable them and further increase Shader compilation speed. Most parameters have been
#ifdef
'd in the c++ code!
- Mapbase compatibility
Note:Replacing SDK_ Shaders in SDK mods, SDK2013CE or Mapbase mods should be as simple as replacing the
stdshaders\
Folder.Note:It is assumed that no custom Shaders apart from SDK_ ones were added. If they were added, developers should be capable of adding them back/recreating them.
Planned Features
This is a list of new features that are being implemented / will be implemented from newer branches such as
The code will be heavily modified to simplify or overhaul


Warning:For more complicated features, there might be visual disparity when compared to official implementations.
Features required for
Mapbase compatibility



- $phongdisablehalflambert from the
Alien Swarm engine branch
- Radial Fog for all "Geometry" Shaders
- Spline-Ropes
- Parallax Corrected Cubemaps ( PCC )


- $envmapmask + $bumpmap on VertexLitGeneric
- Replacement for the "Postprocessing" Controller Shader
- Replacement for the "Engine_post" Shader from
- Hammer $blendmodulatetexture previewing fix.
- Brush $phong
- Treesway
- $bumpmask and related
New Features
- In
Models utilizing Model Lightmapping can use $bumpmap. Additionally, all Model shaders will be able to utilize this feature. Except they have $phong.



Features ported/recreated
- $phongdisablehalflambert (in all games since
) - Also needed for
Mapbase
- $phongexponentfactor From
Source 2013 Multiplayer/
Team Fortress 2 and with
LUX, also supports
Source 2013 Singleplayer
- $phongalbedoboost (in all games since
) - Its just
BaseTexture * $PhongAlbedoBoost
... No leaked code! - $basemapluminancephongmask (in all games since
)


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)
- $selfillumtexture Deprecated since

- See also: PBR Shaders in the community commonly have a $emissiontexture parameter that does EXACTLY what $selfillumtexture does in
LUX.
- Water Shader with $flowmap Support - From
- $envmaplightscale From for brushes (in all games since
) and models (only in
)

Features that are being discarded
- $envmapsphere and related - These features have been removed since
Alien Swarm and is obsolete.


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
- $distancealpha - Non-Functional. Planned for later.
Stock Shaders VS LUX
LightmappedGeneric
Stock Shaders![]() $detailblendmode ![]() $selfillummask Missing ![]() ![]() |
|
VertexLitGeneric
Stock ShadersAlways$envmaplightscale(only in Without $Bumpmap![]() ![]() ![]() ![]() ![]() $selfillumfresnel missing. ![]()
With $Bumpmap![]() $detailblendmode ![]() ![]() $envmapmask missing. Except $selfillum_envmapmask_alpha
With $Phong![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() $phongalbedotint cannot be used without $phongexponenttexture. ![]() ![]() $phongexponentfactor only in ![]() |
|
History
LUX started development on January 20th, 2023, but it was planned and thought around January 14th, when the lead developer ShiroDkxtro2 was in a hospital stay.
Even before 2023, the idea of rewriting Valve's shaders was being considered. Various people asked ShiroDkxtro2 if certain modifications could be implemented for default shaders, such as cascaded shadow mapping.
These requests would usually result in a simple "no", as modifying the default shaders was not considered feasible for various reasons, most of which are indirectly mentioned in LUX's Goals.
The project's inception was supposed to be a means to make the existing shaders more moddable, 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.
LUX copies various code from thexa4's PBR header
- 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 nearly 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 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 inherited with the credits of LUX. You can find Mapbase's credits HERE.
One example would be the NvidiaPCF5x5Gaussian Shadow Filter


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 related Shader-Modding.