10_添加环境光

添加环境光

球谐光照计算公式

https://zhuanlan.zhihu.com/p/351289217

球谐光照SH代码

UE没有对应的SH节点,所以需要创建自定义节点调用

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
float4 NormalVector = float4(Normal, 1.0f);
float3 Intermediate0, Intermediate1, Intermediate2;

Intermediate0.x = dot(View.SkyIrradianceEnvironmentMap[0], NormalVector);
Intermediate0.y = dot(View.SkyIrradianceEnvironmentMap[1], NormalVector);
Intermediate0.z = dot(View.SkyIrradianceEnvironmentMap[2], NormalVector);

float4 vB = NormalVector.xyzz * NormalVector.yzzx;
Intermediate1.x = dot(View.SkyIrradianceEnvironmentMap[3], vB);
Intermediate1.y = dot(View.SkyIrradianceEnvironmentMap[4], vB);
Intermediate1.z = dot(View.SkyIrradianceEnvironmentMap[5], vB);

float vC = NormalVector.x * NormalVector.x - NormalVector.y * NormalVector.y;
Intermediate2 = View.SkyIrradianceEnvironmentMap[6].xyz * vC;

return max(0, Intermediate0 + Intermediate1 + Intermediate2);

环境光混合处理

传入法线数据计算SH环境光后进行混合颜色以及强度控制 最终输出直接使用加法混合即可,加上漫反射和高光。因为亮度会增加可能导致高光效果不明显,所以这里将高光部分大于1的部分在加一遍对高光提亮

当前效果

左边是加了环境光的,右侧是没有环境光的


Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • URP - RendererFeature :ScreenSpaceOutline
  • 平滑法线处理 - 八面体映射
  • Lv.3 Unity主线:一个简单的PBRShader
  • 理论支线:直接光漫反射与GGX高光的混合问题
  • 理论支线:PBR - 基于图像的照明( image based lighting-IBL)
  • # #