From ac1e93ecd8025325df3e4d2b7ef7b69af2389a26 Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Wed, 15 May 2024 17:25:57 +0800 Subject: [PATCH] vault backup: 2024-05-15 17:25:57 --- .../渲染功能/PostProcess/ToonPostProcess.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 03-UnrealEngine/卡通渲染相关资料/渲染功能/PostProcess/ToonPostProcess.md diff --git a/03-UnrealEngine/卡通渲染相关资料/渲染功能/PostProcess/ToonPostProcess.md b/03-UnrealEngine/卡通渲染相关资料/渲染功能/PostProcess/ToonPostProcess.md new file mode 100644 index 0000000..a0aa5b5 --- /dev/null +++ b/03-UnrealEngine/卡通渲染相关资料/渲染功能/PostProcess/ToonPostProcess.md @@ -0,0 +1,53 @@ +--- +title: ToonPostProcess +date: 2024-05-15 16:50:13 +excerpt: +tags: +rating: ⭐ +--- +# 实用代码 +代码位于DeferredShadingCommon.ush: +```c++ +// @param UV - UV space in the GBuffer textures (BufferSize resolution) +FGBufferData GetGBufferData(float2 UV, bool bGetNormalizedNormal = true) +{ +#if GBUFFER_REFACTOR + return DecodeGBufferDataUV(UV,bGetNormalizedNormal); +#else + float4 GBufferA = Texture2DSampleLevel(SceneTexturesStruct.GBufferATexture, SceneTexturesStruct_GBufferATextureSampler, UV, 0); + float4 GBufferB = Texture2DSampleLevel(SceneTexturesStruct.GBufferBTexture, SceneTexturesStruct_GBufferBTextureSampler, UV, 0); + float4 GBufferC = Texture2DSampleLevel(SceneTexturesStruct.GBufferCTexture, SceneTexturesStruct_GBufferCTextureSampler, UV, 0); + float4 GBufferD = Texture2DSampleLevel(SceneTexturesStruct.GBufferDTexture, SceneTexturesStruct_GBufferDTextureSampler, UV, 0); + float CustomNativeDepth = Texture2DSampleLevel(SceneTexturesStruct.CustomDepthTexture, SceneTexturesStruct_CustomDepthTextureSampler, UV, 0).r; + + // BufferToSceneTextureScale is necessary when translucent materials are rendered in a render target + // that has a different resolution than the scene color textures, e.g. r.SeparateTranslucencyScreenPercentage < 100. + int2 IntUV = (int2)trunc(UV * View.BufferSizeAndInvSize.xy * View.BufferToSceneTextureScale.xy); + uint CustomStencil = SceneTexturesStruct.CustomStencilTexture.Load(int3(IntUV, 0)) STENCIL_COMPONENT_SWIZZLE; + + #if ALLOW_STATIC_LIGHTING + float4 GBufferE = Texture2DSampleLevel(SceneTexturesStruct.GBufferETexture, SceneTexturesStruct_GBufferETextureSampler, UV, 0); + #else + float4 GBufferE = 1; + #endif + + float4 GBufferF = Texture2DSampleLevel(SceneTexturesStruct.GBufferFTexture, SceneTexturesStruct_GBufferFTextureSampler, UV, 0); + + #if WRITES_VELOCITY_TO_GBUFFER + float4 GBufferVelocity = Texture2DSampleLevel(SceneTexturesStruct.GBufferVelocityTexture, SceneTexturesStruct_GBufferVelocityTextureSampler, UV, 0); + #else + float4 GBufferVelocity = 0; + #endif + + float SceneDepth = CalcSceneDepth(UV); + + return DecodeGBufferData(GBufferA, GBufferB, GBufferC, GBufferD, GBufferE, GBufferF, GBufferVelocity, CustomNativeDepth, CustomStencil, SceneDepth, bGetNormalizedNormal, CheckerFromSceneColorUV(UV)); +#endif +} + +// Minimal path for just the lighting model, used to branch around unlit pixels (skybox) +uint GetShadingModelId(float2 UV) +{ + return DecodeShadingModelId(Texture2DSampleLevel(SceneTexturesStruct.GBufferBTexture, SceneTexturesStruct_GBufferBTextureSampler, UV, 0).a); +} +```