675 Commits over 1,491 Days - 0.02cph!
VRAD3 (& it's resourcecompiler) explicitly uses rendersystem, our tools can omit it but we need to read back textures from the GPU for map compilation
Launch ToolAppSystem pretending to be a dedicated server so it doesn't use rendersystem for CI, revert me soon
Reenable rendersystem for console apps for map compilation
Invert logic of bSupportsLightmapping, make explicit flag of "NoLightmapping", doesn't feel right to apply that flag in every shader when it all should just support it
Fix indirect IBL fog not working
https://files.facepunch.com/sampavlovic/1b1911b1/jVWTMafLaa.png
Do view vector TAA jitter for fog on native instead off shader, proper way to handle this specially on thin surfaces
https://files.facepunch.com/sampavlovic/1b1911b1/B2DSaqPTHe.jpg
Be able to fetch all light information with Light::Count() and Light::From(), while doing all optimization from tiled lighting etc
Move light.hlsl to common/classes/Light.hlsl, start unfucking it, make it have same structure as everything else
DynamicLight refactor
Refactor StaticLight class, can do Light::From() to get all lights (static/dynamic) at once
https://i.imgur.com/jqko5ON.mp4
Fuck of with light.environment, light.dynamic and light.static are just in Light.hlsl instead of own internal files
Move shadow functions to Shadow.hlsl, much like BRDF.hlsl, will make it easy for us to upgrade, move LightMap definitions to Light.hlsl
Vr_lighting never directly referenced from any of our hlsls now, tonemaps in lighting.fxc never used and even if used shouldn't be there
Untangle this stuff
Use ProbeLight::UsesProbes() and LightmappedLight::UsesLightmaps() to see if drawcall is using these instead of insane combo ifdefs directly, makes it easy to remove a combo too
Remove lightmapping combos from sbox_pixel (should fuck that file off entirely), move to shadingmodel.hlsl, keep D_BAKED_LIGHTING_FROM_LIGHTMAP for vertex.hlsl, SupportsLightmapping attribute seems unused
Revert "Lightmapping combos go on shadingmodel, Lightmapping definiton should be in shadingmodel.hlsl not Material.hlsl, material should be only a contract to shadingmodels"
Fucked, need to get rid of this stupid SupportsLightmapping attribute and just do it directly
Rewrite AmbientLight into a class, stub
Handle AmbientLightKind::LightMapProbeVolume and AmbientLightKind::EnvMap
Move BRDF stuff to BRDF.hlsl, organizes it and makes it easier to move to CS2's one with multiscatter
Adjustments for AmbientLight, disable subsurface scattering for this class for now
ToolsVis ambient occlusion doesn't take AmbientLight
Lightmapping combos go on shadingmodel, Lightmapping definiton should be in shadingmodel.hlsl not Material.hlsl, material should be only a contract to shadingmodels
Add namespace_name to antlr grammar so that we can do "type Class::Function()" definition instead of defining all in class itself, we should just let it accept any HLSL
Allow for inner feathering for EnvmapProbe in UI, same defaults for hammer equivalents of this
ggxcubemaphelper (cpu) is equivalent to cubemapper (gpu), increase sample count but use faster sampling and sample from first mip always
https://i.imgur.com/5UuaG0b.mp4
Sample from mips again and decrease sample count to not be absurd for our budget
Use custom mip filter that samples from neighbors for cubemapper
https://i.imgur.com/nn23dRG.png
Remove HighlightDeprecated from shaders, seems was never used?
Remove long unused shit from pixelinput and vertexinput and clean it up
Remove D_ENABLE_USER_CLIP_PLANE, complete bullshit, we use oblique projection matrices now
Use multi-bounce ambient occlusion
Feathering goes outer rather than center, allow to have inner (negative) feathering again, fixes light leaks in maps
SQRTRoughness was correct behavior for sampling envmaps
Initialize SSR to null on 3d skybox
Revert "Include ReflectionTextureColor in all the layers", it's unlikely we can manage to do SSR with roughness fast on translucents, and this causes the issue that SSR reflections from opaques will be drawn over smoke or translucents
This reverts commit 8cce50baf03cd7f93e7c89c75dde46319412aff9.
Add ScreenSpaceTrace as a generic, simpler class for doing screen space ray tracing, move reflections.hlsl to use it
Fix overriding SSR with a black texture when it should be initialized with a translucent one
Remove unused shit from lightbinner and make everything enums
Adjustments to cubemap normalization, make cubemap feathering happen from center of cubemap, and in world units, rather than inner, math is much simpler
Clamp cube box parallax projection to actual bounds box the box, cleanup
Our both our envmap filters uses linear roughness instead of sqrt roughness
Gizmo for scale in envmaps, adjust default for feathering in world units
Sort envmaps also by size, giving higher priority to smaller ones if it's in a draw condition
tiled light culling with edge feathering additions
vLevel isn't const
Update path of build-shaders, upload all shaders as artifacts
Fix EnvironmentMapLight::GetEnvMapColor using deprecated variable
Gamma correct samples during accumulated ggx, makes highlight less blown out and makes the cubemap more vibrant
Reenable MSAA fetching for SSAO compositing, don't use loops
Depthresolve takes first MSAA sample rather than doing min/max calculation, if we want depth::get we'd want the proper sample to compare perfectly on the screen
GTAO temporal filter uses edge detection to filter out edge ghosting
https://i.imgur.com/EzfclG7.mp4
Ao proxies removal (#1678)
* Remove aoproxies ambient occlusion, it never looked too right and it's stupid to have artists authoring them manually, almost no one did
I still think SDF AO works better than SSAO in most cases, but they should live as a renderhook and artists don't need to touch anything, the way it is now is very hard to maintain, it could be 10x simpler
* Remove sdf.hlsl (until we meet again 🫡 )
Compiled shaders with ao viewporting changes
CommandLists SetConstantBuffer and be able to specify mip
Motion::TemporalFilter is converting from Pixel Coordinates to UV not the other way around
Fix ambient occlusion in offsetted viewports
Calculate aspect ratio from viewport size rather than screen size, fixes splitscreen viewports being fucked up
https://files.facepunch.com/sampavlovic/1b2811b1/sbox-dev_19tjSjbPcm.png
Composite SSAO on Lighting rather than Blitting (#1677)
Envmap feathering defaults to much tighter
SkyIndirectLighting param in hammer env_sky since it seems it never was there
Clear volumetric fog texture on creation, this seems to could've caused problems even back on Alyx but issue is bigger now that we don't write to all volumetric fog froxels at once
Fix ClearUnorderedAccessViewUint not clearing properly for Texture2DArray and Texture3D
Specify .net 9 for shaders.yml
Fix sampletexture_bicubic (is anything using it)?
Compiled shaders with correct specular brdf
Specify setup-dotnet version for shaders.yml
Fog TAA + Tiled Rendering
* Fixes artifacts
* Improves perfomance
* Removes Clipmaps
* Lights are culled with tiles
* Makes fog render until far-z
* Removes ghosting
* Simplifies codebase a lot
Fix vignietting on DoF
DoF Blur size is in pixels, make it relative to screen resolution so size is consistent, do uv offset a bit after first sample so there's less shimmer
Fix messed specular on skin shader that was using old normalization curve
https://files.facepunch.com/sampavlovic/1b3011b1/zPO0P1wuPT.png
Add Motion.hlsl for motion vectors
Add generic TAA filter to Motion.hlsl
Remove overriding SkyIndirectLighting to false in hammer maps, a lot of public maps are built without lighting and rely on IBL to have ambient lighting, we don't have a good way to tell if a map has baked lighting on MapLoader, better to just keep this on and let artist elect if they want IBL lighting by themselves
Add experimental r_tiled_rendering_conservative_culling so people can play with it, uses near-z approach for tiled culling for even better perfomance, doesn't play well with translucents, will be deprecated when we have two sets of light lists
Don't do OnDisabled(); OnEnabled() on Skybox2D dirty but clean up probe cleanly if needed
Test tl, tr, bl and br corners instead of updownleftright for cone frustum culling
Tiled Frustum Culling (#1669)
SkyBox2D Indirect Lighting ( Reflections/IBL ) can be toggled, hammer maps don't expect skyboxes to be used for lighting since it has vrad
Apply cubemap normalization properly on flat ambient light
Apply subsurface scattering to IBL lighting, looks shit otherwise
https://imgur.com/a/yipFu52
Fog Fix, allows you to change light settings for volumetric fog specifically and does a massive cleanup, last try of this had some perf issues but should be sorted
Squashed commit of the following:
commit 4c0d34857bb545c62a83b6b09ef65261dca3ddd8
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Thu Oct 3 18:41:48 2024 +0100
We dont use CLightBinnerStandard::InitForView twice in same view, rename GetLightbinnerStandard from scenesystem to not conflict with views getlightbinnerstandard which has different behavior
commit 8f3d1244f38a74525bcba28dc520ae5bf1dd1099
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Wed Oct 2 14:06:40 2024 +0100
Make fog lights buffer persistent with the volumetric fog's lifetime
commit 0d5bee31cad9b54fc75e2dbff85accfd03d7b3e1
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Wed Oct 2 13:52:39 2024 +0100
Make sure this is properly inlined to never trash cache
commit 5709fcf4b113088c684c095fc08d05fe176f940c
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Wed Oct 2 11:46:35 2024 +0100
LightBinner::InitFromParent and disable fog shadows
commit 93fa098f5c55bddfa4b3d3261b26b7c9edfc8dd8
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Tue Oct 1 18:01:49 2024 +0100
Some lightbinner cleanup, allow it to be used directly without the complex system that scenesystem wants, remove bRenderFogClipmaps for
commit 6f0125fd6ad1bf5512346ffe3c727532a6687cf4
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Fri Sep 6 13:23:03 2024 -0300
Put fog mode in it's own category and add nice icons to them
https://files.facepunch.com/sam/1b0611b1/zwd8qAJFu7.png
commit 0ff3702c73cf54edddc5dd82b8c54598904fae10
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Fri Sep 6 13:14:08 2024 -0300
Share dynamic shadow atlas if we have more than one lightbinner per view ( for example, fog ), fix light fog strength
commit 50170c166dd1cc37d863046aa632a30fb6629860
Author: Sam Pavlovic <sam@sampavlovic.com>
Date: Fri Sep 6 12:47:35 2024 -0300
VolumetricFogRenderer has it's own lightbinner outside of lightbinner pool, does lightbinning to fetch fog lights for the fog context only, fixes fog light settings not doing anything, deprecate LAYERFLAGS_NEEDS_FOG_CONTRIBUTING_LIGHTS since we don't need special code for that anymore
Don't update shadows on fog pass, some lights are set to be updated always but should all be fetched from cache
If Graphics.RenderTarget is not overriden, let it return the actual output rendertarget so you can fetch MSAA textures without copy ( you're going to shoot your own balls using this if you dont know what you're doing )
Fix Depth::GetLinear and add Depth::Linearize
Just get rid of F_DISABLE_Z_PREPASS entirely, it's not applicable for users to set it, static overlay uses BoolAttribute( NoZPrepass, true ); directly
use default depth_only combo for skin
Remove F_DISABLE_Z_PREPASS from shaders except if you want it explicit, remove it from eyeao until we recompile shaders