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缩放,防止图片压缩不明显。

(左 无BentNormal, 右 BentNormal)

 

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

 

 

测试效果:

(左 无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;

 

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

(左 无BentNormal, 右 BentNormal)

posted @   HONT  阅读(1194)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
历史上的今天:
2017-09-02 游戏编程精粹学习 - CatmullRom路径/线段平滑
2017-09-02 游戏编程精粹学习 - 线段与非无限平面相交检测
2014-09-02 C#用正则表达式一键Unicode转UTF8(解决LitJson中文问题)
点击右上角即可分享
微信分享提示
回到顶部