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: