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::SetupFrustumForProjection():构建阴影投影4棱椎平面信息。
|
||||||
- FProjectedShadowInfo::SetupProjectionStencilMask():
|
- FProjectedShadowInfo::SetupProjectionStencilMask():
|
||||||
|
|
||||||
# 其他
|
## 其他
|
||||||
顺序:
|
顺序:
|
||||||
RenderCustomDepthPass
|
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提出:
|
由晨风&Neverwind提出:
|
||||||
- 【[UFSH2024]用虚幻引擎5为《幻塔》定制高品质动画流程风格化渲染管线 | 晨风 Neverwind 完美世界游戏】 【精准空降到 07:27】 https://www.bilibili.com/video/BV1rW2LYvEox/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e&t=447
|
- 【[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()
|
额外进行一次CreatePerObjectProjectedShadow()
|
||||||
{
|
{
|
||||||
处理阴影光照Matrix
|
处理阴影光照Matrix //猜测:
|
||||||
向阴影信息写入IsHalfViewShadowFlag
|
//在ProjectedShadowInfo->SetupPerObjectProjection()中调整,FProjectedShadowInfo.TranslatedWorldToView。
|
||||||
用新的光源方向画Atlas
|
//在LightSceneInfo->Proxy->GetPerObjectProjectedShadowInitializer(Bounds, ShadowInitializer)之后,修改WorldTolight。
|
||||||
|
向阴影信息写入IsHalfViewShadowFlag//猜测:在FProjectedShadowInfo中添加判断Flag并且写入。
|
||||||
|
用新的光源方向画Atlas //猜测:给带有对应Flog的DirectionLigh多创建一个对应的Atlas?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**阴影Projection阶段**:
|
截图代码(半程阴影修改LightDirection逻辑):
|
||||||
//此阶段需要屏蔽角色投射到自己的非半程阴影
|
|
||||||
//和角色投射到场景中会跟随视角移动的阴影
|
|
||||||
```c++
|
|
||||||
if(Toon材质,且没有程阴影Flag的阴影
|
|
||||||
&&非Toon材质但有半程阴影Flag的阴影)
|
|
||||||
{
|
|
||||||
屏蔽此阴影
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
截图代码:
|
|
||||||
```c++
|
```c++
|
||||||
if(PrimitiveSceneinfo->Proxy->IsToonDisableSelfShadow())
|
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