UE 4.27安卓Vulkan首次子通道输入Attachment断言触发问题
UE4.27安卓Vulkan延迟渲染下触发首子通道输入附件断言的材质排查
在UE4.27安卓平台Vulkan的Dev构建中,VulkanPipeline.cpp内的断言会触发(Release构建无此问题):
if (RemappingInfo.InputAttachmentData.Num()) { // input attachements can't exist in a first sub-pass check(PSOInitializer.SubpassHint != ESubpassHint::None); check(PSOInitializer.SubpassIndex != 0); }
该断言禁止首子通道(SubpassIndex=0)存在输入附件,结合延迟渲染架构,以下材质设置大概率是问题根源:
基础Pass材质直接采样GBuffer输入附件:延迟渲染的首子通道负责填充GBuffer,若材质在这个阶段通过
SceneTextures节点读取GBuffer的Albedo/法线等通道,或是绑定了自定义GBuffer输入附件纹理,会迫使引擎在首子通道中创建输入附件绑定,触发断言。混合模式或渲染状态错误依赖前序缓冲:如果材质设置了需要读取当前帧渲染缓冲的混合逻辑(比如自定义混合模式引用了当前像素的已有颜色值),或是手动开启了输入附件相关的渲染状态标记,引擎可能错误地将该材质分配到首子通道执行。
深度预通过程中采样深度输入附件:部分自定义材质在
Depth Prepass阶段错误使用了需要采样深度缓冲的节点,比如用SceneTextures::Depth来做特殊逻辑,这会导致首子通道(深度预通属于首子通道范畴)绑定深度输入附件,触发断言。自定义渲染通道/子通道配置错误:若材质指定了自定义Render Pass或Subpass,且将需要输入附件的绘制逻辑放到了首子通道中,会直接触发该断言检查。
基础材质引用后期处理纹理节点:如果非后期处理的基础材质中引用了
PostProcessInput0这类后期阶段的纹理,引擎可能误将其纳入首子通道的输入附件列表,引发断言。
内容的提问来源于stack exchange,提问作者DoN1cK
相关产品推荐
相关产品推荐

