vault backup: 2024-10-01 21:59:53
This commit is contained in:
parent
a5cf6060f4
commit
44ba312e86
@ -32,6 +32,73 @@ PS.使用的Shader必须是`FNaniteGlobalShader`的子类。
|
|||||||
|
|
||||||
DrawNaniteMaterialPass() => SubmitNaniteIndirectMaterial()
|
DrawNaniteMaterialPass() => SubmitNaniteIndirectMaterial()
|
||||||
## DepthStencil
|
## DepthStencil
|
||||||
|
***TStaticDepthStencilState***
|
||||||
|
- RDG 04 Graphics Pipeline State Initializer https://zhuanlan.zhihu.com/p/582020846
|
||||||
|
|
||||||
|
|
||||||
|
```c++
|
||||||
|
DrawRenderState.SetDepthStencilState(TStaticDepthStencilState<false, CF_Equal>::GetRHI());
|
||||||
|
|
||||||
|
template<bool bDepthTest, ECompareFunction CompareFunction, uint32 StencilWriteMask>
|
||||||
|
void SetDepthStencilStateForBasePass_Internal(FMeshPassProcessorRenderState& InDrawRenderState)
|
||||||
|
{
|
||||||
|
InDrawRenderState.SetDepthStencilState(TStaticDepthStencilState<
|
||||||
|
bDepthTest, CompareFunction,
|
||||||
|
true, CF_Always, SO_Keep, SO_Keep, SO_Replace,
|
||||||
|
false, CF_Always, SO_Keep, SO_Keep, SO_Keep,
|
||||||
|
0xFF, StencilWriteMask>::GetRHI());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<bool bDepthTest, ECompareFunction CompareFunction>
|
||||||
|
void SetDepthStencilStateForBasePass_Internal(FMeshPassProcessorRenderState& InDrawRenderState, ERHIFeatureLevel::Type FeatureLevel)
|
||||||
|
{
|
||||||
|
const static bool bStrataDufferPassEnabled = Strata::IsStrataEnabled() && Strata::IsDBufferPassEnabled(GShaderPlatformForFeatureLevel[FeatureLevel]);
|
||||||
|
if (bStrataDufferPassEnabled)
|
||||||
|
{
|
||||||
|
SetDepthStencilStateForBasePass_Internal<bDepthTest, CompareFunction, GET_STENCIL_BIT_MASK(STRATA_RECEIVE_DBUFFER_NORMAL, 1) | GET_STENCIL_BIT_MASK(STRATA_RECEIVE_DBUFFER_DIFFUSE, 1) | GET_STENCIL_BIT_MASK(STRATA_RECEIVE_DBUFFER_ROUGHNESS, 1) | GET_STENCIL_BIT_MASK(DISTANCE_FIELD_REPRESENTATION, 1) | STENCIL_LIGHTING_CHANNELS_MASK(0x7)>(InDrawRenderState);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetDepthStencilStateForBasePass_Internal<bDepthTest, CompareFunction, GET_STENCIL_BIT_MASK(RECEIVE_DECAL, 1) | GET_STENCIL_BIT_MASK(DISTANCE_FIELD_REPRESENTATION, 1) | STENCIL_LIGHTING_CHANNELS_MASK(0x7)>(InDrawRenderState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetDepthStencilStateForBasePass(
|
||||||
|
FMeshPassProcessorRenderState& DrawRenderState,
|
||||||
|
ERHIFeatureLevel::Type FeatureLevel,
|
||||||
|
bool bDitheredLODTransition,
|
||||||
|
const FMaterial& MaterialResource,
|
||||||
|
bool bEnableReceiveDecalOutput,
|
||||||
|
bool bForceEnableStencilDitherState)
|
||||||
|
{
|
||||||
|
const bool bMaskedInEarlyPass = (MaterialResource.IsMasked() || bDitheredLODTransition) && MaskedInEarlyPass(GShaderPlatformForFeatureLevel[FeatureLevel]);
|
||||||
|
if (bEnableReceiveDecalOutput)
|
||||||
|
{
|
||||||
|
if (bMaskedInEarlyPass)
|
||||||
|
{
|
||||||
|
SetDepthStencilStateForBasePass_Internal<false, CF_Equal>(DrawRenderState, FeatureLevel);
|
||||||
|
}
|
||||||
|
else if (DrawRenderState.GetDepthStencilAccess() & FExclusiveDepthStencil::DepthWrite)
|
||||||
|
{
|
||||||
|
SetDepthStencilStateForBasePass_Internal<true, CF_GreaterEqual>(DrawRenderState, FeatureLevel);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetDepthStencilStateForBasePass_Internal<false, CF_GreaterEqual>(DrawRenderState, FeatureLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (bMaskedInEarlyPass)
|
||||||
|
{
|
||||||
|
DrawRenderState.SetDepthStencilState(TStaticDepthStencilState<false, CF_Equal>::GetRHI());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bForceEnableStencilDitherState)
|
||||||
|
{
|
||||||
|
SetDepthStencilStateForBasePass_Internal<false, CF_Equal>(DrawRenderState, FeatureLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
### InitCustomDepthStencilContext()
|
### InitCustomDepthStencilContext()
|
||||||
根据当前平台是否支持使用ComputeShader直接输出结果(bComputeExport)、以及是否写入Stencil缓存,以此来创建不同的资源。最终输出FCustomDepthContext。
|
根据当前平台是否支持使用ComputeShader直接输出结果(bComputeExport)、以及是否写入Stencil缓存,以此来创建不同的资源。最终输出FCustomDepthContext。
|
||||||
```c++
|
```c++
|
||||||
|
Loading…
x
Reference in New Issue
Block a user