From 934d40aff98a8b350611cd1aa42d2718961cea2c Mon Sep 17 00:00:00 2001 From: BlueRose <378100977@qq.com> Date: Fri, 13 Dec 2024 16:22:58 +0800 Subject: [PATCH] vault backup: 2024-12-13 16:22:58 --- .../渲染功能/阴影控制/ToonShadow.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/03-UnrealEngine/卡通渲染相关资料/渲染功能/阴影控制/ToonShadow.md b/03-UnrealEngine/卡通渲染相关资料/渲染功能/阴影控制/ToonShadow.md index 965ba0a..8cac0fe 100644 --- a/03-UnrealEngine/卡通渲染相关资料/渲染功能/阴影控制/ToonShadow.md +++ b/03-UnrealEngine/卡通渲染相关资料/渲染功能/阴影控制/ToonShadow.md @@ -826,4 +826,53 @@ if (RendererOutput == ERendererOutput::DepthPrepassOnly) RDG_GPU_STAT_SCOPE(GraphBuilder, SortLights); ComputeLightGridOutput = GatherLightsAndComputeLightGrid(GraphBuilder, bComputeLightGrid, SortedLightSet); } +``` + + +# 半程阴影 +由晨风&Neverwind提出: +- 【[UFSH2024]用虚幻引擎5为《幻塔》定制高品质动画流程风格化渲染管线 | 晨风 Neverwind 完美世界游戏】 【精准空降到 07:27】 https://www.bilibili.com/video/BV1rW2LYvEox/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e&t=447 + +**阴影Setup阶段**: +```c++ +if 启用半程阴影: +{ + 额外进行一次CreatePerObjectProjectedShadow() + { + 处理阴影光照Matrix + 向阴影信息写入IsHalfViewShadowFlag + 用新的光源方向画Atlas + } +} +``` + +**阴影Projection阶段**: +//此阶段需要屏蔽角色投射到自己的非半程阴影 +//和角色投射到场景中会跟随视角移动的阴影 +```c++ +if(Toon材质,且没有程阴影Flag的阴影 +&&非Toon材质但有半程阴影Flag的阴影) +{ + 屏蔽此阴影 +} +``` + +截图代码: +```c++ +if(PrimitiveSceneinfo->Proxy->IsToonDisableSelfShadow()) +{ +... + for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++) + { + const FViewInfo& View = Views[ViewIndex]; + const FMatrix& ViewMatrix = View.ShadowViewMatrices.GetViewMatrix() + FVector LightDirection = Lightsceneinfo->Proxy- GetDirection(); + const FVector CameraDirection = ViewMatrix.GetColumn(2).GetSafeNonmal() + float LightViewBlendFactor = PrimitiveSceneinfo->Proxy->GetToonHalfVienShadowFactor(); + Fvector HalfViewLightDir = (LightDirection + ( 1 - LightViewBlendFactor) + CameraDirection * LightViewBlendFactor).GetSafeNormal(); + FMatrix FinalCombineMatrix = FNnverseRotationMatrix(HalfViewLightDir.Rotation()) + ShadowInitializer.WorldTolight = FinalCombineMatrix; + } +... + } ``` \ No newline at end of file