文章目录

  • NVIDIA Texture Tools Exporter 下载、安装
  • 法线生成素材图
  • 扣干净无用像素
  • 使用 NVIDIA Normal Map Filter 生成贴图
  • 配置好 URP Renderer
  • 添加好 Decal Render Feature
  • 设置好 Decal Render Feature Techniqu: DBuffer
  • 配置好 unity shader graph
  • 添加 URP Decal Projector 组件
  • 配置好 URP Decal Projector 参数
  • 最终效果
  • 原理
  • Project

之前有一篇使用几何体的方式来绘制深坑,这种方式效果还不错,局限性还是有的,具体可以参考:Unity Shader - URP - 抄作业 - Deep Crack - 裂痕深坑 - SRP Batch优化

图形效果铁原则:制作方法没有最好的,只有最适合的,只要看起来不错,就够了


今天研究使用:URP 12.1 中的 Decal System

然后尝试了一下 在 Decal 中修改原来 GBuffer 的 Normal 的效果

但是没有法线图,我就随便那一张之前项目测试用的地裂图来做测试

但是只有 albedo,没有 normal


NVIDIA Texture Tools Exporter 下载、安装

使用 Photoshop 来构建法线,使用到 NVIDIA Texture Tools Exporter

这个工具生成并不复杂,原理和:高度转法线的功能差不多,可以查看我之前的一篇:Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线

安装好之后,在:滤镜/NVIDIA Tools/NormalMapFilter… 中即可打开

在对应的 photoshop 安装目录下回有一个 plugin 有显示 *.8bf 文件


法线生成素材图

打开这么一张图:


扣干净无用像素

使用魔术棒工具,设置好:不连续,20 容差

将中间灰色部分扣除掉


使用 NVIDIA Normal Map Filter 生成贴图

打开上面提到的:NVIDIA Normal Map Filter 工具,设置好参数,点击:OK

下面就是生成后的法线贴图


配置好 URP Renderer

不使用 RenderPath: Deffered 也没问题,原来时:Forward

如果 RenderPath : Forward的话,那么在 Render Feature 中的 Techinque 要选择:DBuffer


添加好 Decal Render Feature


设置好 Decal Render Feature Techniqu: DBuffer


配置好 unity shader graph


添加 URP Decal Projector 组件

在 hierarchy 视图添加:empty go,添加 URP Decal Projector


配置好 URP Decal Projector 参数


最终效果


原理

以 Deferred Rendering Path 为例

URP Decal Projector 组件集成了:从过 Blit 也好,或是 CopyTo/CopyFrom 也好
先将 GBuffer 中的 Albedo, Normal 等,需要的数据复制到 DBuffer

然后 在 Decal Shader 中读取 DBuffer 的参数,修改通过该Decal Shader 逻辑处理修改后的数据重新输出到 GBuffer

然后 GBuffer 就按 Deferred Rendering Path 流程,继续往下走


下面是正常的 Deferred Rendering Path 的过程

#mermaid-svg-R4dWOFJkZdg481CU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-R4dWOFJkZdg481CU .error-icon{fill:#552222;}#mermaid-svg-R4dWOFJkZdg481CU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-R4dWOFJkZdg481CU .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-R4dWOFJkZdg481CU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-R4dWOFJkZdg481CU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-R4dWOFJkZdg481CU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-R4dWOFJkZdg481CU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-R4dWOFJkZdg481CU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-R4dWOFJkZdg481CU .marker.cross{stroke:#333333;}#mermaid-svg-R4dWOFJkZdg481CU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-R4dWOFJkZdg481CU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-R4dWOFJkZdg481CU .cluster-label text{fill:#333;}#mermaid-svg-R4dWOFJkZdg481CU .cluster-label span{color:#333;}#mermaid-svg-R4dWOFJkZdg481CU .label text,#mermaid-svg-R4dWOFJkZdg481CU span{fill:#333;color:#333;}#mermaid-svg-R4dWOFJkZdg481CU .node rect,#mermaid-svg-R4dWOFJkZdg481CU .node circle,#mermaid-svg-R4dWOFJkZdg481CU .node ellipse,#mermaid-svg-R4dWOFJkZdg481CU .node polygon,#mermaid-svg-R4dWOFJkZdg481CU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-R4dWOFJkZdg481CU .node .label{text-align:center;}#mermaid-svg-R4dWOFJkZdg481CU .node.clickable{cursor:pointer;}#mermaid-svg-R4dWOFJkZdg481CU .arrowheadPath{fill:#333333;}#mermaid-svg-R4dWOFJkZdg481CU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-R4dWOFJkZdg481CU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-R4dWOFJkZdg481CU .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-R4dWOFJkZdg481CU .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-R4dWOFJkZdg481CU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-R4dWOFJkZdg481CU .cluster text{fill:#333;}#mermaid-svg-R4dWOFJkZdg481CU .cluster span{color:#333;}#mermaid-svg-R4dWOFJkZdg481CU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-R4dWOFJkZdg481CU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Regulars Write Albedo, Normal, PositionWS, Metallic, Roughness, AO, Depth
Rendering with GBufer Data
Deferred Rendering Pipeline
GBuffer
Deferred Shader

然后我在 GBuffer 之后再添加一个 修改 GBuffer 的过程

修改过程如下

#mermaid-svg-dAGPXbtW59FkPR6t {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dAGPXbtW59FkPR6t .error-icon{fill:#552222;}#mermaid-svg-dAGPXbtW59FkPR6t .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-dAGPXbtW59FkPR6t .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-dAGPXbtW59FkPR6t .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-dAGPXbtW59FkPR6t .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-dAGPXbtW59FkPR6t .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-dAGPXbtW59FkPR6t .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-dAGPXbtW59FkPR6t .marker{fill:#333333;stroke:#333333;}#mermaid-svg-dAGPXbtW59FkPR6t .marker.cross{stroke:#333333;}#mermaid-svg-dAGPXbtW59FkPR6t svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-dAGPXbtW59FkPR6t .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-dAGPXbtW59FkPR6t .cluster-label text{fill:#333;}#mermaid-svg-dAGPXbtW59FkPR6t .cluster-label span{color:#333;}#mermaid-svg-dAGPXbtW59FkPR6t .label text,#mermaid-svg-dAGPXbtW59FkPR6t span{fill:#333;color:#333;}#mermaid-svg-dAGPXbtW59FkPR6t .node rect,#mermaid-svg-dAGPXbtW59FkPR6t .node circle,#mermaid-svg-dAGPXbtW59FkPR6t .node ellipse,#mermaid-svg-dAGPXbtW59FkPR6t .node polygon,#mermaid-svg-dAGPXbtW59FkPR6t .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-dAGPXbtW59FkPR6t .node .label{text-align:center;}#mermaid-svg-dAGPXbtW59FkPR6t .node.clickable{cursor:pointer;}#mermaid-svg-dAGPXbtW59FkPR6t .arrowheadPath{fill:#333333;}#mermaid-svg-dAGPXbtW59FkPR6t .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-dAGPXbtW59FkPR6t .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-dAGPXbtW59FkPR6t .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-dAGPXbtW59FkPR6t .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-dAGPXbtW59FkPR6t .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-dAGPXbtW59FkPR6t .cluster text{fill:#333;}#mermaid-svg-dAGPXbtW59FkPR6t .cluster span{color:#333;}#mermaid-svg-dAGPXbtW59FkPR6t div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-dAGPXbtW59FkPR6t :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Reading GBuffer Data to DBuffer
Albedo
Normal
Compute And Write Back GBuffer
Modifing GBuffer Data - Decal Shader
GBuffer
DBuffer
Decal Shader

然后我们将: Modifing GBuffer Data - Decal Shader 子过程放入到原来的 Pipeline 中,如下:

#mermaid-svg-VSFyairU74S4dopo {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-VSFyairU74S4dopo .error-icon{fill:#552222;}#mermaid-svg-VSFyairU74S4dopo .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VSFyairU74S4dopo .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-VSFyairU74S4dopo .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VSFyairU74S4dopo .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VSFyairU74S4dopo .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VSFyairU74S4dopo .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VSFyairU74S4dopo .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VSFyairU74S4dopo .marker.cross{stroke:#333333;}#mermaid-svg-VSFyairU74S4dopo svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VSFyairU74S4dopo .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VSFyairU74S4dopo .cluster-label text{fill:#333;}#mermaid-svg-VSFyairU74S4dopo .cluster-label span{color:#333;}#mermaid-svg-VSFyairU74S4dopo .label text,#mermaid-svg-VSFyairU74S4dopo span{fill:#333;color:#333;}#mermaid-svg-VSFyairU74S4dopo .node rect,#mermaid-svg-VSFyairU74S4dopo .node circle,#mermaid-svg-VSFyairU74S4dopo .node ellipse,#mermaid-svg-VSFyairU74S4dopo .node polygon,#mermaid-svg-VSFyairU74S4dopo .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VSFyairU74S4dopo .node .label{text-align:center;}#mermaid-svg-VSFyairU74S4dopo .node.clickable{cursor:pointer;}#mermaid-svg-VSFyairU74S4dopo .arrowheadPath{fill:#333333;}#mermaid-svg-VSFyairU74S4dopo .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VSFyairU74S4dopo .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VSFyairU74S4dopo .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-VSFyairU74S4dopo .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-VSFyairU74S4dopo .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VSFyairU74S4dopo .cluster text{fill:#333;}#mermaid-svg-VSFyairU74S4dopo .cluster span{color:#333;}#mermaid-svg-VSFyairU74S4dopo div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VSFyairU74S4dopo :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

Regulars Write Albedo, Normal, PositionWS, Metallic, Roughness, AO, Depth
Copy GBuffer to DBuffer
Rendering with GBufer Data
Deferred Rendering Pipeline
Modifing GBuffer Data - Decal Shader
GBuffer
Deferred Shader

这样就达到了修改 normal 的效果

URP Decal Shader Graph 中,也提供了修改 Base Col, MAOS ,就是修改 albedo, metallic, ao, smoothness 的关键地方,如下图所示


Project

TestURP_DecalSystem_Unity_2021.3.1f1.unitypackage

DCC - Photoshop - Nvidia NormalMapFilter - 法线生成工具 - 顺便测试 Unity URP 12.1 中的 Decal System相关推荐

  1. Shellcode生成工具Donut测试分析

    0x00 前言 Donut是一个shellcode生成工具,可以将.NET程序集转换为shellcode.这是对execute-assembly的进一步利用,隐蔽性更高,可扩展性更强. 结合byt3b ...

  2. Unity内置Shader解读3——Decal

    1.Shader在什么情况下使用 Decal(贴花)贴花就是类似于CF里的喷漆,或者汽车/墙上等贴一个贴纸. image.png 2.Shader的价值(用的多不多),Shader的难度 这个应该是极 ...

  3. Unity Shader - URP - 抄作业 - Deep Crack - 裂痕深坑 - SRP Batch优化

    文章目录 环境 思路 建模 Houdini 设置好 Geometry + Curve + Extrude 3ds max 设置好参考背景图 使用:创建/图形/线,来勾勒刨面 封口刨面 转为可编辑多边形 ...

  4. 自动产生fsm代码的工具_代码自动生成工具

    构建支持多种数据库类型的代码自动生成工具 背景: 一般的业务代码中写来写去,无外乎是先建好model,然后针对这个model做些CRUD的操作.(主要针对单表的业务操作)针对于数据库dao.mappe ...

  5. 代码规范检查工具+代码规范生成工具

    代码规范检查工具: 1. arc lint arc diff时会自动执行arc lint,arc lint会根据配置文件(.arclint)进行代码规范检查,并且只检查最新的提交:需要在每个git仓库 ...

  6. 微页导出为html文件怎么打开吗,h5自动生成工具(示例代码)

    一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...

  7. labelme数据增强_NO. 21 标注工具 amp; 合成数据生成工具

    [VGG Image Annotator ( VIA )] 简介:快速.轻便.设计精良,但功能有限 网址:http://www.robots.ox.ac.uk/~vgg/software/via/ [ ...

  8. c mysql实体类生成工具_【干货分享】C# 实体类生成工具

    前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...

  9. 20款漂亮的长阴影 LOGO 设计作品【附免费生成工具】

    长阴影(Long Shadow)概念来自于最新非常流行的扁平化设计(Flat Design).扁平化设计趋势影响最大的是用户界面元素和图标,但它也开始蔓延到其他网页设计的其他部分. 长阴影其实就是扩展 ...

最新文章

  1. 二进制包 mysql_二进制包;mysql
  2. opencv orb
  3. 【网络安全】SQL注入bypass最新版安全狗
  4. C语言调用python代码
  5. Java Instanceof
  6. 作者:陈卫, 男, 微软亚洲研究院高级研究员, 清华大学客座教授。
  7. 字节缓冲流 BufferedOutputStream java
  8. SQL SERVER 2008 中分页方法
  9. Java 中初始化 List 集合的 7 种方式
  10. Python:pip下载库后导入Pycharm的方法
  11. zabbix通过jmx监控tomcat
  12. 设计模式 -- 解释器模式(Interpreter Pattern)
  13. word上怎么把图片拼接到一起_图片合并,WORD如何将文字与图片合并
  14. php ob_get_contents,ob_get_contents();用法【转】
  15. 管家婆 打开经营历程 Date exceeds maximum of 19-12-31报错解决
  16. Python学习资料篇
  17. 杭州英博电磁流量计通讯协议
  18. python怎么添加包_python怎样导入包
  19. CSS代码查重开源项目,秒级代码查重与重复行标记
  20. 阿里云将全面提供IPv6服务 | 中国制造业正被双向挤压,需智能化发展

热门文章

  1. 强烈推荐这些值得下载的神仙工具,每一个都让人惊喜
  2. 2-人的发声原理和听觉原理
  3. linux学习篇 之 复制、黏贴、删除、撤销
  4. 群晖 winscp php,WinSCP自动执行脚本
  5. 遭遇win10激活问题
  6. Arduino 高级教程 01:基础篇
  7. Qlik Sense申请试用账号详细步骤(可试用30天)
  8. C++控制台实现简单的注册登录
  9. windows10 系统配置nginx文件服务器
  10. 供参考的一些APP推广渠道