vault backup: 2024-12-16 10:18:10
This commit is contained in:
parent
934d40aff9
commit
fe0b3e18b8
@ -768,7 +768,7 @@ ShadowProjectionPixelShader.usf
|
||||
- FProjectedShadowInfo::SetupFrustumForProjection():构建阴影投影4棱椎平面信息。
|
||||
- FProjectedShadowInfo::SetupProjectionStencilMask():
|
||||
|
||||
# 其他
|
||||
## 其他
|
||||
顺序:
|
||||
RenderCustomDepthPass
|
||||
|
||||
@ -829,6 +829,22 @@ if (RendererOutput == ERendererOutput::DepthPrepassOnly)
|
||||
```
|
||||
|
||||
|
||||
|
||||
# RenderLights
|
||||
FDeferredShadingSceneRenderer::RenderLights()
|
||||
=>
|
||||
RDG_EVENT_SCOPE(GraphBuilder, "UnbatchedLights");//batchedLights为没有LightFunction与没有阴影的灯光。
|
||||
=>
|
||||
for (int32 LightIndex = UnbatchedLightStart; LightIndex < LumenLightStart; LightIndex++)
|
||||
=>
|
||||
if (bDrawShadows){...} => ***RenderDeferredShadowProjections()***
|
||||
=>
|
||||
if (bDirectLighting){...}
|
||||
if (bDirectLighting){...}
|
||||
|
||||
## RenderDeferredShadowProjections()
|
||||
|
||||
|
||||
# 半程阴影
|
||||
由晨风&Neverwind提出:
|
||||
- 【[UFSH2024]用虚幻引擎5为《幻塔》定制高品质动画流程风格化渲染管线 | 晨风 Neverwind 完美世界游戏】 【精准空降到 07:27】 https://www.bilibili.com/video/BV1rW2LYvEox/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e&t=447
|
||||
@ -839,25 +855,16 @@ if 启用半程阴影:
|
||||
{
|
||||
额外进行一次CreatePerObjectProjectedShadow()
|
||||
{
|
||||
处理阴影光照Matrix
|
||||
向阴影信息写入IsHalfViewShadowFlag
|
||||
用新的光源方向画Atlas
|
||||
处理阴影光照Matrix //猜测:
|
||||
//在ProjectedShadowInfo->SetupPerObjectProjection()中调整,FProjectedShadowInfo.TranslatedWorldToView。
|
||||
//在LightSceneInfo->Proxy->GetPerObjectProjectedShadowInitializer(Bounds, ShadowInitializer)之后,修改WorldTolight。
|
||||
向阴影信息写入IsHalfViewShadowFlag//猜测:在FProjectedShadowInfo中添加判断Flag并且写入。
|
||||
用新的光源方向画Atlas //猜测:给带有对应Flog的DirectionLigh多创建一个对应的Atlas?
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**阴影Projection阶段**:
|
||||
//此阶段需要屏蔽角色投射到自己的非半程阴影
|
||||
//和角色投射到场景中会跟随视角移动的阴影
|
||||
```c++
|
||||
if(Toon材质,且没有程阴影Flag的阴影
|
||||
&&非Toon材质但有半程阴影Flag的阴影)
|
||||
{
|
||||
屏蔽此阴影
|
||||
}
|
||||
```
|
||||
|
||||
截图代码:
|
||||
截图代码(半程阴影修改LightDirection逻辑):
|
||||
```c++
|
||||
if(PrimitiveSceneinfo->Proxy->IsToonDisableSelfShadow())
|
||||
{
|
||||
@ -876,3 +883,16 @@ if(PrimitiveSceneinfo->Proxy->IsToonDisableSelfShadow())
|
||||
...
|
||||
}
|
||||
```
|
||||
|
||||
PS.很有可能需要创建2个Atlas。Atlas的创建位于***FSceneRenderer::AllocateCachedShadowDepthTargets()***。数据存储在***SortedShadowsForShadowDepthPass.ShadowMapAtlases***中。大致由FSceneRenderer::FinishInitDynamicShadows()调用。
|
||||
|
||||
**阴影Projection阶段**:
|
||||
//此阶段需要屏蔽角色投射到自己的非半程阴影
|
||||
//和角色投射到场景中会跟随视角移动的阴影
|
||||
```c++
|
||||
if(Toon材质,且没有程阴影Flag的阴影
|
||||
&&非Toon材质但有半程阴影Flag的阴影)
|
||||
{
|
||||
屏蔽此阴影
|
||||
}
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user