6 Days Ago
DepthNormal G-Buffer Rendering Mode (#1766) * DepthNormalPrepassLayer stub, DepthNormal shader class consumes from S_MODE_DEPTH * DepthNormals mode, uses values directly instead of Material, attach it to ShadingModels * Ignore and don't compile combo if it's not referenced by a mode or feature instead of erroring out, e.g. We want to reference DepthNormal.hlsl everywhere in Class.hlsl, but we want to only have combos for it if we're using a DepthNormal mode without complicating the codebase, this way when adding a new mode that references that combo, it's added to the shader without convoluting the source, argue with me if you think this is shit behavior * Temp bind FindOrCreateRenderTarget and use managed rendertarget for depthnormalprepasslayer * Should be continue rather than break, fix undefined identifier if S_MODE_DEPTH_NORMAL is not set * Pass MSAA value from pipeline, make DepthNormals a dynamic combo instead of a mode, conditional * Add Normals.hlsl, with fallback if no depthnormals are available, add Bindless::GetTexture2DMS * Adjustments, Depth Prepass Depth Only under a convar, do depthnormals without size cull threshold * GTAO uses Normals::Sample() instead of recalculating normals from depth https://files.facepunch.com/sampavlovic/1b1711b1/sbox-dev_e5dHGELNmU.mp4 * Bind ClearFlags, this should probably be implicit * Just use DepthNormalPrepassLayer, use depthnormal mode again * Remove old no-normals depth prepass, keeps things simple, effects that we use will need to rely on depthnormals, doesn't add too much cost * Fix typo on gtao * Reconstruct Normals::Sample from depth if underlying texel doesn't use DepthNormal mode https://files.facepunch.com/sampavlovic/1b2711b1/DdYOdR9WrI.png * DepthNormals mode fallback if shader doesn't have it * Pass screen size to managed texture we create for depthnormal gbuffer, dimensions must match the swapchain, which resized viewports don't match * Apply offset when sampling Prepass Normals https://files.facepunch.com/sampavlovic/1b0411b1/dfC5VELlYw.png * Use Depth MODE instead of DepthNormals for DepthNormals * Enable shadow fast pass properly, make it use depth_only shader * update shaders with depthnormal * Shader template uses S_MODE_DEPTH combo