1.7 KiB
Raw Blame History

title, date, excerpt, tags, rating
title date excerpt tags rating
Untitled 2024-09-25 14:59:32

前言

可以使用DrawDynamicMeshPass()实现在插件中使用MeshDraw绘制Pass。

参考文章:

NaniteMeshDraw

Engine\Source\Runtime\Renderer\Private\Nanite\NaniteMaterials.h & NaniteMaterials.cpp

PS.使用的Shader必须是FNaniteGlobalShader的子类。

BasePass

DrawBasePass()

该函数在FDeferredShadingSceneRenderer::RenderBasePassInternal()中调用。

DepthStencil

InitCustomDepthStencilContext()

根据当前平台是否支持使用ComputeShader直接输出结果bComputeExport、以及是否写入Stencil缓存以此来创建不同的资源。最终输出FCustomDepthContext。

struct FCustomDepthContext  
{  
    FRDGTextureRef InputDepth = nullptr;  
    FRDGTextureSRVRef InputStencilSRV = nullptr;  
    FRDGTextureRef DepthTarget = nullptr;  
    FRDGTextureRef StencilTarget = nullptr;  
    bool bComputeExport = true;  
};

EmitCustomDepthStencilTargets()

根据bComputeExport分别使用RDG的ComputeShader与PixelShader输出DepthStencil。

  • CS使用FComputeShaderUtils::AddPass()
  • PS使用NaniteExportGBuffer.usf的EmitCustomDepthStencilPS()FPixelShaderUtils::AddFullscreenPass()

FEmitCustomDepthStencilPS(NaniteExportGBuffer.usf)为例额外输入的Nanite相关变量

  • FSceneUniformParameters Scene
  • StructuredBuffer<FPackedView> InViews
  • ByteAddressBuffer VisibleClustersSWHW
  • FIntVector4, PageConstants
  • Texture2D<UlongType>, VisBuffer64
  • ByteAddressBuffer MaterialSlotTable

FinalizeCustomDepthStencil()

替换输出的Depth&Stencil。