当前位置: 首页 > news >正文

UE4 CustomDepthMobile流程小记

原生UE opaque材质中获取CustomDepth/CustomStencil会报错

在其Compile中调用的函数中没有看到报错逻辑

材质节点的逻辑都没有什么问题,所以看一下报错

在HLSLMaterialTranslator::Translate中

修改之后 mobile流程的不透明材质可以直接获取SceneTexture::customdepth节点结果

但是PC流程会崩

材质编译的时候mobile和PC流程都会走 ,deffered流程CustomDepth是在BasePass之后走的,所以拿不到,会报uniformbuffer的错。改官方引擎的话,为了防止报错材质里需要加feature switch。PC这个流程改CustomDepth的渲染顺序改动太大,不如自己新开一个自定义的深度pass。

(以下讨论的都是Mobile流程在opaque材质中用customdepth,非后处理材质的情况)

到这里,Mobile流程的Opaque材质中用节点获取customdepth是可用的,但马上又遇到了下一个问题,在customnode中直接写采样CustomDepthTexture的结果是不对的

截帧查看,场景中物件勾上RenderCustomDepthPass的开关,材质中不用customdepth节点的时候,或者用自定义的custom节点中直接拿采样结果的时候,CustomDepth pass都是没有的。

那就可以确认一点,材质的SceneTexture节点一定有一些引擎相关flag/uniformbuffer相关的配置设置,是否渲CustomDepth pass不只是由模型勾选是否渲自定义深度决定的,材质的compile结果中一定有一些配置相关逻辑。

过一下流程,可以根据Template采样结果定位uniformbuffer,看和后面的分析对不对得上

再看看SceneTexture的Compile中做了哪些操作

在MobileSceneRenderer::InitViews中判断

该buffer包含了PC和Mobile

uniformbuffer的传参是对应上的

到这一步为止,如果我需要写一个循环采样customdepth的结果,是没法直接在材质的customnode中写采样CustomDepthTexture的。需要单独加一个自定义节点,Compile中实现SceneTexture节点配置部分相同的逻辑,然后在Template中添加自定义函数自定义采样逻辑才行。

但是,如果说我就是不想反复改代码,就想要在材质customnode里写呢。

其实是可以的,比如是否可以如下修改

这样修改后,原本是场景物体要勾RenderCustomDepthPass开关,并且材质节点SceneTexture走Complie逻辑后beShouldRenderCustomDepth才为true。而修改后是场景中物体只要勾了RenderCustomDepthPass开关,beShouldRenderCustomDepth就会true。这样改的好处是材质customnode中就可以直接写采样MobileSceneTextures的结果了,但是坏处是这样改不太符合管线设计的逻辑,比如这样场景中物件只要打了勾,后面材质没有到自定义深度信息,customdepthpass也是一直走的,不安全。总结就是能用,但最合理的方案还是单加上述的材质自定义节点。

http://www.lryc.cn/news/289886.html

相关文章:

  • Docker 基础篇
  • Idea上操作Git回退本地版本,怎么样保留已修改的文件,回退本地版本的四种方式代表什么?
  • vue3封装el-pagination分页组件
  • 负载均衡下Webshell连接思路及难点
  • 基于链表实现贪吃蛇游戏
  • Python网络爬虫实战——实验6:Python实现js逆向与加解密
  • 【python】使用aiohttp库编写一个简单的异步服务器
  • 新手使用代理IP接入代码教程
  • JVM问题排查手册
  • 前端canvas项目实战——简历制作网站(三)——右侧属性栏(线条宽度样式)
  • 字节跳动二面经典题目
  • 微搭低代码从入门到精通01应用介绍
  • 论文阅读《thanking frequency fordeepfake detection》
  • ArcgisForJs快速入门
  • 【解决方法】git pull报错ssh: connect to host github.com port 22: Connection timed out
  • 30天精通Nodejs--第三十天:项目实战-物联网应用
  • java 社区资源管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • 网络编程套接字(Socket)
  • C语言第十一弹---函数(下)
  • Unity读书系列《Unity3D游戏开发》——拓展编辑器(一)
  • 【Git】项目管理笔记
  • 中文词性标注工具pkuseg例子(运行结果,不太好)
  • 获取URL参数:split方法、URLSearchParams方法示例
  • SparkSql---用户自定义函数UDFUDAF
  • 系统架构15 - 软件工程(3)
  • 两个近期的计算机领域国际学术会议(软件工程、计算机安全):欢迎投稿
  • (二十一)Flask之上下文管理第二篇(细细扣一遍源码)
  • Java项目:基于SSM框架实现的企业员工岗前培训管理系统(ssm+B/S架构+源码+数据库+毕业论文)
  • 深入了解Redis:选择适用于你的场景的持久化方案
  • 【Git配置代理】Failed to connect to github.com port 443 问题解决方法