之前有一篇使用几何体的方式来绘制深坑,这种方式效果还不错,局限性还是有的,具体可以参考:Unity Shader - URP - 抄作业 - Deep Crack - 裂痕深坑 - SRP Batch优化
图形效果铁原则:制作方法没有最好的,只有最适合的,只要看起来不错,就够了
今天研究使用:URP 12.1 中的 Decal System
然后尝试了一下 在 Decal 中修改原来 GBuffer 的 Normal 的效果
但是没有法线图,我就随便那一张之前项目测试用的地裂图来做测试
但是只有 albedo,没有 normal
使用 Photoshop 来构建法线,使用到 NVIDIA Texture Tools Exporter
这个工具生成并不复杂,原理和:高度转法线的功能差不多,可以查看我之前的一篇:Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线
安装好之后,在:滤镜/NVIDIA Tools/NormalMapFilter… 中即可打开
在对应的 photoshop 安装目录下回有一个 plugin 有显示 *.8bf 文件
使用魔术棒工具,设置好:不连续,20 容差
打开上面提到的:NVIDIA Normal Map Filter 工具,设置好参数,点击:OK
不使用 RenderPath: Deffered 也没问题,原来时:Forward
如果 RenderPath : Forward的话,那么在 Render Feature 中的 Techinque 要选择:DBuffer
在 hierarchy 视图添加:empty go,添加 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 的过程
然后我在 GBuffer 之后再添加一个 修改 GBuffer 的过程
修改过程如下
然后我们将: Modifing GBuffer Data - Decal Shader 子过程放入到原来的 Pipeline 中,如下:
这样就达到了修改 normal 的效果
URP Decal Shader Graph 中,也提供了修改 Base Col, MAOS ,就是修改 albedo, metallic, ao, smoothness 的关键地方,如下图所示
TestURP_DecalSystem_Unity_2021.3.1f1.unitypackage