1,819 Commits over 1,491 Days - 0.05cph!
We were multiplying BRDF twice making envmaps look awfully dark
https://files.facepunch.com/sam/1b1311b1/E8pK9UTpn4.png
Avoid directional lights clipping with world with a reasonable value
Ensure proper number of maximum simultanious updates for EnvMapProbe dirty updates
Destroy buffers properly when deleting lightbinner
Move s_LightList out of singleton to the CLightObjectDesc, make other light-like object descriptors use CUtlVectorFixedGrowable instead of linked list ( trashes the cache while iterating ), all of them should be consistent now, use a single light descriptor for all light types
Tiled Culling Renderer buffers shouldn't live in Lightbinner, but instead on CLightCullingRenderer itself since they're rendered per view, so we just reuse that memory, Lightbinners are allocated in a pool, so all that memory was wasted on GPU, remove wasteful copy of binned lights on tiled light callback
Don't generate shadow frusta for unshadowed lights
Separate shadow generation, both shadow maps and the viewproj we pass, into SetupShadowsForLight in Lightbinner, when we do bindless shadows and lightbinner caching, this is where to look for it
Go back to do a copy of current light list for CLightCullVisibilityReadback, callbacks can have latency longer than one frame and that list could change
Cleanup, fix mixed logic for shadows
Fix lights and their cookies not being able to rotate on roll
Add baked lights after dynamic ones
Move s_LightList out of singleton to the CLightObjectDesc, make other light-like object descriptors use CUtlVectorFixedGrowable instead of linked list ( trashes the cache while iterating ), all of them should be consistent now, use a single light descriptor for all light types
Tiled Culling Renderer buffers shouldn't live in Lightbinner, but instead on CLightCullingRenderer itself since they're rendered per view, so we just reuse that memory, Lightbinners are allocated in a pool, so all that memory was wasted on GPU, remove wasteful copy of binned lights on tiled light callback
Don't generate shadow frusta for unshadowed lights
Separate shadow generation, both shadow maps and the viewproj we pass, into SetupShadowsForLight in Lightbinner, when we do bindless shadows and lightbinner caching, this is where to look for it
Go back to do a copy of current light list for CLightCullVisibilityReadback, callbacks can have latency longer than one frame and that list could change
Partial backport of ISceneObjectDesc::OnSceneObjectVisibleInView
Add lights to lightbinner through CLightObjectDesc::OnSceneObjectVisibleInView instead of LightBinnerStandard::AddLights
Add stub GBuffer.hlsl for DepthNormals() mode and move ToolVis to it's own file and class so it's not a mess, aiming to remove ToolVis() mode, S_DISABLE_SPECULAR_HIGHLIGHTS not referenced anywhere
Don't add more lights to visible list than the list can permit, this relatively low limit is silly but don't want to break api until frustum tiled cull is here https://files.facepunch.com/sam/1b1011b1/parsecd_CiKjzyScdq.mp4
Don't add more lights to visible list than the list can permit, this relatively low limit is silly but don't want to break api until frustum tiled cull is here
https://files.facepunch.com/sam/1b1011b1/parsecd_CiKjzyScdq.mp4
Lightbinner caching experiment, AddLight still sucks and we need to deal with shadows and faster insertions
https://files.facepunch.com/sam/1b1011b1/NkiL7ryaEs.png
Revert "Fog Fix (#1661)", causing some slowdown problems, will be
brought back shortly
This reverts commit f0981cbaf9679a34c219f57cd232a638f60d463f.
Partial backport of ISceneObjectDesc::OnSceneObjectVisibleInView
Add lights to lightbinner through CLightObjectDesc::OnSceneObjectVisibleInView instead of LightBinnerStandard::AddLights
Update compiled shaders with relative cubemap luminance
Fog Fix (#1661)
* Some lightbinner cleanup, allow it to be used directly without the complex system that scenesystem wants
* 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
* Share dynamic shadow atlas if we have more than one lightbinner per view ( for example, fog ), fix volume fog no shadows option, cleanup unused shit
* Put fog mode in it's own category and add nice icons to them
https://files.facepunch.com/sam/1b0611b1/zwd8qAJFu7.png
* These convars don't do anything or are redundant, some notes for tiled rendering in the future
* Remove deprecated VR stuff for volumetric fog on rendering pipeline, note for Alex that we can just reproject the frame for eye 2 for cheap volumetric fog rendering, any crumbs will be stripped more when I remove clipmaps
* One lightbinner per volumetric fog rather than creating it every frame
* Start removing fog clipmap rendering, there are better ways to do this and it's massive
* Disable clipmaps on managed code, clean up shader code
* Remove VR-specific frustum stuff from volumetric fog
* Get rid of redundant data
* Separate two passes cleanly, remove accumulation TAA, we'll do a proper big pants one
* TAA stub
* Fancy volumetric fog taa, move what was on integration step to previous pass, so this has pretty much the same cost and memory footprint as previously but much higher quality
* Proper fog TAA with ping-ponging accumulation textures
* Iterate fog denoising
* Do soft TAA jitter and encode non-final texture to a softer color space so that TAA bbox is also softer
* Final cleanup, fix fog density, fix obsolete error
Some lightbinner cleanup, allow it to be used directly without the complex system that scenesystem wants
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
Share dynamic shadow atlas if we have more than one lightbinner per view ( for example, fog ), fix volume fog no shadows option, cleanup unused shit
Put fog mode in it's own category and add nice icons to them
https://files.facepunch.com/sam/1b0611b1/zwd8qAJFu7.png
These convars don't do anything or are redundant, some notes for tiled rendering in the future
Remove deprecated VR stuff for volumetric fog on rendering pipeline, note for Alex that we can just reproject the frame for eye 2 for cheap volumetric fog rendering, any crumbs will be stripped more when I remove clipmaps
One lightbinner per volumetric fog rather than creating it every frame
Start removing fog clipmap rendering, there are better ways to do this and it's massive
Disable clipmaps on managed code, clean up shader code
Remove VR-specific frustum stuff from volumetric fog
Get rid of redundant data
Separate two passes cleanly, remove accumulation TAA, we'll do a proper big pants one
TAA stub
Fancy volumetric fog taa, move what was on integration step to previous pass, so this has pretty much the same cost and memory footprint as previously but much higher quality
Proper fog TAA with ping-ponging accumulation textures
Iterate fog denoising
Do soft TAA jitter and encode non-final texture to a softer color space so that TAA bbox is also softer
Final cleanup, fix fog density, fix obsolete error
Do soft TAA jitter and encode non-final texture to a softer color space so that TAA bbox is also softer
Final cleanup, fix fog density, fix obsolete error
Proper fog TAA with ping-ponging accumulation textures
Fancy volumetric fog taa, move what was on integration step to previous pass, so this has pretty much the same cost and memory footprint as previously but much higher quality
Separate two passes cleanly, remove accumulation TAA, we'll do a proper big pants one
Remove VR-specific frustum stuff from volumetric fog
Get rid of redundant data
Disable clipmaps on managed code, clean up shader code
Remove deprecated VR stuff for volumetric fog on rendering pipeline, note for Alex that we can just reproject the frame for eye 2 for cheap volumetric fog rendering, any crumbs will be stripped more when I remove clipmaps
One lightbinner per volumetric fog rather than creating it every frame
Start removing fog clipmap rendering, there are better ways to do this and it's massive
Some lightbinner cleanup, allow it to be used directly without the complex system that scenesystem wants
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
Share dynamic shadow atlas if we have more than one lightbinner per view ( for example, fog ), fix volume fog no shadows option, cleanup unused shit
Put fog mode in it's own category and add nice icons to them
https://files.facepunch.com/sam/1b0611b1/zwd8qAJFu7.png
These convars don't do anything or are redundant, some notes for tiled rendering in the future
Fix Depth::GetLinear, be expressive about it for correctness before all, precompute these values later
Start fixing up dof https://files.facepunch.com/sam/1b2211b1/ombChoX97P.png
Iterate DoF
Smooth fade DoF from composite shader
Iterate dof, needs cleanup, almost perfect
Wave intrinsics to do early out for far dof
DoF2 Downsample with bias based on depth, cleanup
https://files.facepunch.com/sam/1b0211b1/sbox-dev_rXaN2wxsmC.mp4
Front blur, tweaks
Final tweaks, add depth gap for adding an area where u might want more focus
https://files.facepunch.com/sam/1b0211b1/sbox-dev_VBIoPeaBWP.mp4
Depth Resolve writes to both channels correctly
Final cleanups for dof2
Fix perfomance validation warning on depth_only shader, it never produces output from PS, any operations from ps for translucents are clip or discard, D_WRITE_DEPTH_MASKS is never used
Strip D_WRITE_DEPTH_MASKS from the rest
Fix shadows not showing up on non-scenecamera views like Hammer
Allow for multi-bounce reflections on EnvmapProbe
Make sure all cubemaps are up to date when loading/unloading mapinstances, cubemaps placed on scene weren't getting updated
GPU Shadow Culling light list is stored on camera where it should belong rather than on lightbinner, a lightbinner can be shared across multiple views causing issues, this also guarantees proper lifetime of list since lightbinner pool is only flushed on shutdown
https://files.facepunch.com/sam/1b0411b1/sbox-dev_Esvot2kDTb.mp4
Depth Resolve writes to both channels correctly
Final cleanups for dof2
update depth of field scene
Final tweaks, add depth gap for adding an area where u might want more focus
https://files.facepunch.com/sam/1b0211b1/sbox-dev_VBIoPeaBWP.mp4
DoF2 Downsample with bias based on depth, cleanup
https://files.facepunch.com/sam/1b0211b1/sbox-dev_rXaN2wxsmC.mp4
Disable volumetric fog clipmaps by default, they're fucked right now with massive frame drops and they feel overengineered
LatticeDeform stub
WIP Lattice Deform
https://files.facepunch.com/sam/1b2911b1/sbox-dev_5LFnSp7Xlr.mp4
updated depth of field scene to better benchmark against dof2
Wave intrinsics to do early out for far dof
Smooth fade DoF from composite shader
Iterate dof, needs cleanup, almost perfect
Fix Depth::GetLinear, be expressive about it for correctness before all, precompute these values later
Start fixing up dof https://files.facepunch.com/sam/1b2211b1/ombChoX97P.png
Iterate DoF
Internal AfterDepthPrepass hooks
CSM doesn't suck anymore
Texel snap cascade shadow map matrix so lights never shimmer when you're moving
Cleanup
Use the frustum from the previous shadow map to cull the current shadow map, m_pLightObject neverr used
Transparency Sorting Test Scene
Pass rotation to cubemapper so rotated envmap probes captures are rotated the correct way
Fix Cubemap Brightness Normalization, uses prefiltered envmap instead of spherical harmonics, fixes overbrightened envmaps in dark areas, and increases overall contrast of envmaps
Update transform for skybox envmap
Shadow maps were stripped out for testing, readded
Expose Screen Space Shadows as a parameter for Directional Light
SSR uses our generic ScreenSpaceTrace methods 🙏
Correct curve for static_overlay custom fog blending for fog HDR values above 1.0f
https://files.facepunch.com/sam/1b1611b1/pl0WF6eu5Q.png
Move albedo chart to bottom right corner, make it scale more aggresively to not take away screen space
Add button to toggle albedo chart
https://files.facepunch.com/sampavlovic/1b1611b1/CkUDe1JWMc.png
Compile shaders with SSR fixes
SampleLevel so the two shaders that use lighting.fxc on VS can read it proper, let's also start getting rid of these texture macros
Complex Reflections as Devshader