Unity HDRP BentNormal的理解

1.通过网络上资料了解到,BentNormal可以解决间接环境高光漏光及间接漫反射光照漏光的问题。

这里的漏光是指间接光照部分没有考虑到模型自身的遮挡关系导致的漏光。

2.可以通过SD之类的软件烘焙BentNormal贴图,软件会根据余弦角向外计算各个角度可见性,最终求平均得到一个向量,会在之后的计算里带入这个向量求权重。

另外BentNormal贴图存放的是归一化向量,和法线的储存方式一样。

具体可参考文章: https://developer.download.nvidia.cn/books/HTML/gpugems/gpugems_ch17.html

注:烘焙时设置更远的最大距离检测参数会有较好结果

3.Unity实现部分看了一下GetSpecularOcclusionFromBentAO,差不多是这个意思,

如果大于BendNormal向量的权重区域就不计算Occlusion,否则根据系数计算SpecularOcclusion的值并返回。

间接光照的测试(以光照探针SH为例),开了2倍的NormalMap缩放,防止图片压缩不明显。

Unity HDRP BentNormal的理解_权重

(左 无BentNormal, 右 BentNormal)

高光的测试,需要打开Specular Occlusion的From Bent Normal。

Unity HDRP BentNormal的理解_权重_02

测试效果:

Unity HDRP BentNormal的理解_可见性_03

Unity HDRP BentNormal的理解_BentNormal_04

(左 无BentNormal, 右 BentNormal)

最后我验证了下理解是否正确,在URP中改写了一个简单的BentNormal,用其给间接光照部分增加权重:

登录后复制

//GlobalIllumination部分增加
float bentNormalIntensity = saturate(1.0 - dot(normalWS, bentNormalWS));
float weight = max(dot(bentNormalWS, reflectVector), 0.0);
weight = lerp(1.0, weight, _BentNormalWeight * bentNormalIntensity);
indirectDiffuse *= weight;
indirectSpecular *= weight;
fresnelTerm *= weight;1.2.3.4.5.6.7.

然后还是赋予之前烘焙好的BentNormal贴图,结果如下:

Unity HDRP BentNormal的理解_权重_05

(左 无BentNormal, 右 BentNormal)

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空