HDRP图形入门:HDRP渲染管线depth翻转

      新项目开坑HDRP渲染管线,花了些时间把项目开发框架和图形工作流更新到最新版本,其间发现HDRP中深度信息和buildin渲染管线翻转了。
      以前的buildin渲染管线,距离摄像机越近depth->0,越远depth->1,这也很好理解,离得越近距离越小,颜色值->(0,0,0,0)黑色,如下:
在这里插入图片描述
      而新HDRP中,深度如下:
在这里插入图片描述      可以看的出来是反过来的,也就是距离摄像机越近depth->1,越远depth->0。
      unity说是因为HDRP本身是为了支持高级图形硬件的图形语言比如hlsl设定的(比如dx和opengl的坐标系也是反的,同时uv也可能上下颠倒),当然这也不是什么大事,无非刚开始搞反了导致效果出问题,测试出来后改一改就好了。
在这里插入图片描述
      接下来根据新的规范实现一个遮挡剔除和不剔除的外发光特效,因为以前写过外发光特效的原理,所以这里从简,只叙述一下大纲:
      1.采样物体的轮廓纹理,进行纯色渲染。
      2.高斯滤波进行后处理得到轮廓像素外扩的纯色渲染。
      3.根据当前pixel片段所在的摄像机深度缓冲和物体轮廓纹理的深度相比较,如果片段轮廓纹理depth值更小,则代表距离摄像机更远,则被剔除渲染。

//滤波矩阵static float _GaussMatrix[9] = { 0.07511362, 0.1238414, 0.07511362, 0.1238414, 0.20418, 0.1238414, 0.07511362, 0.1238414, 0.07511362 };VaryingsEx VertBlur(AttributesEx input){VaryingsEx output;UNITY_SETUP_INSTANCE_ID(input);UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);//必须采样屏幕坐标output.positionCS = GetFullScreenTriangleVertexPosition(input.vertexID);//采样uv坐标,用于纹理采样output.uv = GetFullScreenTriangleTexCoord(input.vertexID);float c = 1;for(int x=0;x<3;x++){for(int y=0;y<3;y++){   output.uvs[x*3+y] = (output.uv+_CustomColorTexture_TexelSize.xy*float2((y-c)*_BlurSpread,(x-c)*_BlurSpread));}}return output;}float4 FragBlur(VaryingsEx input) : SV_Target{UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);float4 col = float4(0,0,0,0);for(int k=0;k<9;k++){col+=(CustomPassSampleCustomColor(input.uvs[k])*_GaussMatrix[k]);}col*=_Brightness;//采样上一个custompass纹理//如果纹理有颜色数据,则剔除掉,就可以显示最底层的模型渲染纹理float4 ocol = CustomPassSampleCustomColor(input.uv);if(ocol.a>0){discard;}return col;}

      以上是进行高斯滤波和原始纹理裁剪得到轮廓外发光效果。

			void GetSurfaceAndBuiltinData(FragInputs fragInputs, float3 viewDirection, inout PositionInputs posInput, out SurfaceData surfaceData, out BuiltinData builtinData){float2 colorMapUv = TRANSFORM_TEX(fragInputs.texCoord0.xy, _ColorMap);float4 result = SAMPLE_TEXTURE2D(_ColorMap, s_trilinear_clamp_sampler, colorMapUv);//hdrp摄像机深度值由近到远1->0深度图采样near=1,far=0//通过像素坐标xy值采样深度信息float camdepth = LoadCameraDepth(fragInputs.positionSS.xy);//当前像素深度信息由近到远//1->0float vertexdepth = posInput.deviceDepth;if(_OcclutionDiscard == 1){//如果当前像素的深度值<深度图深度值//则表示当前像素距离摄像机更远//则被剔除渲染if(vertexdepth<camdepth){discard;}}// Write back the data to the output structuresZERO_BUILTIN_INITIALIZE(builtinData); // No call to InitBuiltinData as we don't have any lightingZERO_INITIALIZE(SurfaceData, surfaceData);builtinData.opacity = result.a;builtinData.emissiveColor = float3(0, 0, 0);surfaceData.color = camdepth;}

      以上是根据深度缓冲进行剔除和非剔除采样。

在这里插入图片描述
      可以看到添加物体外发光和选择遮挡剔除完成需要的效果。
      ps:因为现在更加倾向于自身健康和家庭生活,所以博客只会偶尔花最多半个小时对一些技术要点(或坑点)进行说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/189066.html

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

相关文章

酷开科技持续推动智能投影行业创新发展

近年来&#xff0c;投影仪逐渐成为年轻人追捧的家居时尚单品。据国际数据公司&#xff08;IDC&#xff09;报告显示&#xff0c;2022年中国投影机市场总出货量505万台&#xff0c;超80%为家用投影仪。相比于电视&#xff0c;投影仪外观小巧、屏幕大小可调节&#xff0c;无论是卧…

Oracle获取执行计划的6种方法

一、什么是执行计划&#xff1f; 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。 执行计划描述了SQL引擎为执行SQL语句进行的操作&#xff0c;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时&#xff0c;必须知道执行计划&#xff1b;所以执行计划常用…

docker启动某个镜像一直restarting状态

因为微服务学习的需要&#xff0c;就需要在虚拟机中安装一下Nacos&#xff0c;可哪儿能想到使用docker ps命令一直显示nacos的状态是restarting。 经过一番测试&#xff0c;发现并不是执行代码的问题。上网查了一下&#xff0c;也找不到合适的答案&#xff0c;终于查到了是doc…

Java自学第8课:电商项目(3) - 重新搭建环境

由于之前用的jdk和eclipse&#xff0c;以及mysql并不是视频教程所采用的&#xff0c;在后面运行源码和使用作者提供源码时&#xff0c;总是报错&#xff0c;怀疑&#xff1a; 1 数据库有问题 2 jdk和引入的jar包不匹配 3 其他什么未知的错误&#xff1f; 所以决定卸载jdk e…

SharePoint 的 Web Parts 是什么

Web Parts 可以说是微软 SharePoint 的基础组件。 根据微软自己的描述&#xff0c;Web Parts 是 SharePoint 对内容进行构建的基础&#xff0c;可以想想成一块一块的砖块。 我们需要使用这些砖块来完成一个页面的构建。 我们可以利用 Web Parts 在 SharePoint 中添加文本&am…

CVE-2023-25194 Kafka JNDI 注入分析

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台&#xff0c;可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SASL …

CSS 文字溢出省略号显示

1. 单行文本溢出显示省略号 需要满足三个条件&#xff0c;添加对应的代码&#xff1a; &#xff08;1&#xff09;先强制一行内显示文本&#xff1b; &#xff08;2&#xff09;超出的部分隐藏&#xff1b; &#xff08;3&#xff09;文字用省略号来替代省略的部分&#xf…

STM32-EXTI中断

EXTI简介 EXTI&#xff08;Extern Interrupt&#xff09;外部中断 EXTI可以监测指定GPIO口的电平信号&#xff0c;当其指定的GPIO口产生电平变化时&#xff0c;EXTI将立即向NVIC发出中断申请&#xff0c;经过NVIC裁决后即可中断CPU主程序&#xff0c;使CPU执行EXTI对应的中断程…

【Proteus仿真】【STM32单片机】多路温度控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、DS18B20温度传感器、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;默认LCD1602显示前4路采集的…

工业镜头接口类型

现有产品主要有以下接口 1、C:最常见的工业相机接口&#xff0c;受限于接口物理尺寸大小&#xff0c;最大靶面目前是4/3” 2、M42:M421.0,2k和4k线阵相机使用 3、M58S:M580.75,大靶面相机使用&#xff0c;可以转C(限于CH080相机&#xff0c;靶面4/3”)&#xff0c;可以转F,可以…

UML/SysML建模工具更新(2023.10)(1)StarUML、Software Ideas Modeler

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 工具最新版本&#xff1a;Software Ideas Modeler 14.02 更新时间&#xff1a;2023年10月9日 工具简介 轻量级建模工具&#xff0c;支持UML、BPMN、SysML。 平台&#xff1a;Windo…

springboot全局拦截sql异常

起因:非法用户可通过特定的输入(如输入内容超长)等操作,使后台逻辑发生错误,从而使后台sql语句暴露至前台,进而为sql攻击提供条件 处理流程:经查找com.mysql.cj.jdbc.exceptions的父类为SQLException,在全局异常处理类中增加如下配置,经测试不起作用 ExceptionHandler(SQLExce…

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;标准&#xff0c;为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的&#xff0c;具有高度的可扩展性和可靠性&#xff0c;…

Redis(12)| 过期删除策略和内存淘汰策略

Redis 是可以对 key 设置过期时间的&#xff0c;因此需要有相应的机制将已过期的键值对删除&#xff0c;而做这个工作的就是过期键值删除策略。 如何设置过期时间 先说一下对 key 设置过期时间的命令。 设置 key 过期时间的命令一共有 4 个&#xff1a; expire key n&#x…

HTTP和HTTPS详解

一)什么是HTTP协议 1)HTTP协议是倾向于相遇业务层次上面的一种协议&#xff0c;传输层协议主要考虑的是端对端之间的一个传输过程&#xff0c;TCP重点进行关注的是可靠传输&#xff1b;咱们的HTTP/1&#xff0c;HTTP/2是基于TCP的&#xff0c;但是咱们的HTTP/3是基于UDP的&…

全域旅游“一机游”智慧旅游平台解决方案:PPT全文48页,附下载

关键词&#xff1a;智慧文旅解决方案&#xff0c;智慧旅游解决方案&#xff0c;智慧旅游平台建设方案&#xff0c;智慧文旅综合运营平台&#xff0c;智慧文旅建设方案 一、智慧文旅一机游定义 智慧文旅一机游是一种新型的旅游方式&#xff0c;它通过智能化的设备和系统&#…

web前端开发第一次Dreamweave课堂练习/html练习代码《社会主义核心价值观》

目标图片&#xff1a; 文字素材&#xff1a; 社会主义核心价值观 Socialist Core Values 富强、民主、文明、和谐是国家层面的价值目标。 自由、平等、公正、法治是社会层面的价值取向。 爱国、敬业、诚信、友善是公民个人层面的价值准则。 Core socialist values are the…

网页判断版本更新

一、需求解析 为什么我会想到这个技术呢&#xff0c;是因为我有一次发现&#xff0c;我司的用户在使用网页的时候&#xff0c;经常会出现一个页面放很久&#xff0c;下班也不关这个页面&#xff0c;这样就会导致页面的代码长时间处于不更新的状态。 在使用到一个功能出了bug&a…

文本处理大师:Linux中grep、sed和awk的绝佳教程

1 grep 搜索关键字 全局搜索正则表达式 1.1 基本格式 grep root passwd #过滤含有root关键字-e 多个过滤词 grep -e root -e bash pa grep -E "root|bin" pa # 等同于上面的命令-i 忽略大小写 -E 过滤 grep -E "\<root" passwd ##root字符之前不能有…

Rt-Thread 移植6--多线程(KF32)

6.1 就绪列表 6.1.1 线程就绪优先级组 线程优先级表的索引对应的线程的优先级。 为了快速的找到线程在线程优先级表的插入和移出的位置&#xff0c;RT-Thread专门设计了一个线程就绪优先级组。线程就绪优先组是一个32位的整型数&#xff0c;每一个位对应一个优先级&#xff…