zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    8、SpringBoot-CRUD默认访问的首页以及thyleaf的静态文件引入/WebMvcConfigurer / WebMvcConfigurationSupport
    7、springmvc的自动配置
    6、模板引擎
    5.对静态资源映射的规则
    文件的上传和下载
    python file operation
    python sys.argv[]
    python pydoc
    python compile
    python exec
  • 原文地址:https://www.cnblogs.com/hont/p/15221001.html
Copyright © 2011-2022 走看看