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.mzph.cn/news/657521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚焦AI新动能,九州未来与燧弘华创签约!

1月24日,厦门市电子信息与人工智能产业高质量发展大会成功举办。来自电子信息产业、人工智能领域的企业家、专家等近300位嘉宾齐聚一堂,共谋智能基础,共话产业合作,共享发展商机。 会上,九州未来与燧弘华创签署算力租…

anaconda离线安装包的方法

当设备没有网络时,可以使用有网络的设备先下载所需安装包,然后离线拷贝到需要安装的设备,最后安装。 一. 下载所需安装包 下载命令:使用pip download。详细描述参见pip download -h 以"blind-watermark"为例。 pip …

​学者观察 | 区块链技术理论研究与实践观察——中央财经大学朱建明

导语 当下区块链研究成果质量越来越高,技术应用越来越成熟。在现阶段的研究中存在哪些短板需要弥补,如何将研究成果转化为推动数字经济高质量发展的实际应用,区块链技术与其他新技术结合发展将带来哪些新的机遇? 中央财经大学朱…

eduSRC那些事儿-3(命令执行类+越权逻辑类)

点击星标,即时接收最新推文 本文对edusrc挖掘的部分漏洞进行整理,将案例脱敏后输出成文章,不包含0DAY/BYPASS的案例过程,仅对挖掘思路和方法进行相关讲解。 命令执行类 St2命令执行 在电量查询手机管理平台,观察到.do或…

大坑!react+thress.js

2. UI交互界面与Canvas画布叠加 | Three.js中文网 (webgl3d.cn) // canvas画布绝对定位 renderer.domElement.style.position absolute; renderer.domElement.style.top 0px; renderer.domElement.style.left 0px; renderer.domElement.style.zIndex -1; 我按照教程设置了…

Golang的数字签名之旅:crypto/ecdsa库详解

Golang的数字签名之旅:crypto/ecdsa库详解 引言crypto/ecdsa库概览基本功能安装和设置使用场景 ECDSA原理简介椭圆曲线密码学基础ECDSA的工作原理安全性考虑 Golang中ECDSA的实现密钥生成数字签名签名验证 crypto/ecdsa的高级应用性能优化安全性考虑实际应用案例 总…

掌握 Android JNI 基础

写在前面 最近在看一些底层源码,发现 JNI 这块还是有必要系统的看一下,索性就写一写博客,加深加深印象🍻 本文重点聊一聊一些干货,避免长篇大论 JNI 概述 JNI 是什么? 定义:Java Native In…

用GPT写PHP框架

参考https://www.askchat.ai?r237422 写一个mvc框架 上面是简单的案例,完整的PHP框架,其核心通常包含以下几个关键组件: 1. 路由(Routing):路由组件负责解析请求的URL,并将其映射到相应的控制…

Kotlin快速入门系列9

Kotlin对象表达式和对象声明 对象表达式 有时,我们想要创建一个对当前类有些许修改的对象同时又不想重新声明一个子类。如果是Java,可以用匿名内部类的概念来解决这个问题。kotlin的对象表达式和对象声明就是为了实现这一点(创建一个对某个类做了轻微改…

使用Mysql实现Postgresql中窗口函数row_number的功能

1. 描述 需要根据用户id,查询每个人得分第二高的科目信息 2. 表结构及数据 2.1 表结构 CREATE TABLE t_score (id bigint(20) NOT NULL AUTO_INCREMENT,user_id bigint(20) NOT NULL,score double NOT NULL,subject varchar(100) NOT NULL,PRIMARY KEY (id) ) E…

在 Amazon EKS 上部署生成式 AI 模型

导言 生成式 AI 正在改变企业的运作方式,并加快创新的步伐。总体而言,人工智能正在改变企业利用技术的方式。生成式 AI 技术包括微调和部署大型语言模型(LLM),并允许开发人员访问这些模型以执行提示和对话。负责在 Kub…

【String、StringBuffer和StringBuilder的区别及使用场景】

String、StringBuffer和StringBuilder的区别及使用场景 1. String类是不可变的,一旦创建,就不能修改。每次对String进行操作(如拼接、替换等),实际上是创建了一个新的String对象。由于String的不可变性,频繁…

使用 Python 的 Matplotlib 库来绘制简单的爱心图案

import matplotlib.pyplot as plt import numpy as npt np.linspace(0, 2*np.pi, 100) x 16 * np.sin(t)**3 y 13 * np.cos(t) - 5 * np.cos(2*t) - 2 * np.cos(3*t) - np.cos(4*t)plt.plot(x, y, r) plt.axis(equal) plt.fill(x, y, r) plt.show()这段代码首先导入了 Matpl…

【java中如何避免死锁及其分析和解决多线程环境下的死锁问题】

java中如何避免死锁及其分析和解决多线程环境下的死锁问题 死锁是在多线程环境中经常遇到的一种问题,可以通过以下方法来避免和解决死锁问题:死锁是多线程环境下常见的问题,它发生在两个或多个线程等待对方释放资源的情况下。为了避免死锁&am…

uniapp H5 touchstart touchend 切换背景会失效,或者没用

uniapp H5 touchstart touchend 切换背景会失效&#xff0c;或者没用 直接上代码 &#xff08;使用 class 以及 hover-class来设置样式&#xff09; class 设置默认的背景图或者样式 hover-class 来设置按下的背景图 或者样式 抬起 按下 <view class"mp_zoom_siz…

NRF24L01无线 2.4G射频模块(学习笔记)

一、市场上的NRF24L01模块有三种 二、模块的引脚接口 标准的4线SPI接口 三、寄存器操作命令以及寄存器地址 四、两个NRF24L01模块能够成功通信需要满足的条件 五、两个NRF24L01模块通信连接示意图

git远程仓库基本操作

目录 gitremote &#xff08;查看远程仓库&#xff09; git remote add [仓库名] [url] git clone [url]&#xff08;克隆远程仓库到本地&#xff09; git push [名][分支名]&#xff08;提交到远程仓库&#xff09;​编辑 git pull [名][分支名]从远程仓库拉取​编辑 注意操作…

人工智能是哪个专业

人工智能是一个以计算机科学为基础&#xff0c;由计算机、心理学、哲学等多学科交叉融合的交叉学科、新兴学科。其研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学&#xff0c;企图了解智能的实质&#xff0c;并生产出一种新的能以人类…

【个人博客搭建】Hexo安装部署

目录 一、本地构建Hexo (一) 安装前提 1. Node.js 2. Git 3. Hexo (二) 初始化Hexo 1. 初始化博客目录 2. 配置网站基本信息 (三) 主题配置 1. 选择主题 2. 下载主题 (四) 本地启动Hexo 1. 生成静态文件 2. 启动服务 二、部署 (一) 部署到Github Pages 1. 新建…

开源博客项目Blog .NET Core源码学习(8:EasyCaching使用浅析)

开源博客项目Blog使用EasyCaching模块实现缓存功能&#xff0c;主要是在App.Framwork项目中引用了多类包&#xff0c;包括内存缓存&#xff08;EasyCaching.InMemory&#xff09;、Redis缓存&#xff08;EasyCaching.CSRedis&#xff09;&#xff0c;同时支持多种序列化方式&am…