10_添加环境光

添加环境光

球谐光照原理

内置函数SH

Built-in Render Pipeline

内置sh函数

1
2
3
4
5
6
7
8
9
10
Tags { "LightMode"="ForwardBase"}
--------------------------------------------
#pragma multi_compile_fwdbase
#include "AutoLight.cginc"
-------------------------------------------
//************************************
//SH代码 内置函数
//**********************************
half3 env_color = ShadeSH9(float4(normal_dir,1.0));

Universal Render Pipeline

内置sh函数

1
 float3 ambientColor = SampleSH(pixelNormalWS);

函数对应内容在下方文件中 GlobalIllumination.hlsl文件 SphericalHarmonics.hlsl文件

添加球谐光照

新增参数

增加环境光强度控制参数

计算SH

使用GammaColor进行混合颜色和_AmbientColorIntensity控制强度。最终输出颜色直接加上环境光颜色即可,但这里做了额外的处理,提取出高光颜色大于1的部分在相加,因为SH环境光是加法混合,整体颜色变亮可能会让高光效果不明显,所以这里为增加高光做处理。

1
2
3
4
5
6
7
8
//Sh球谐光照
float3 ambientColor = SampleSH(pixelNormalWS) * gammaColor * _AmbientColorIntensity;
float3 color = ambientColor;
color += pbrDiffuseColor * albedo + pbrSpecularColor * specularColor * albedo;
color += max(0, pbrSpecularColor * specularColor * albedo - 1);

//雾效颜色混合设置
color = MixFog(color, input.positionWSAndFogFactor);

当前效果

左边是没有环境光,右面是加上环境光处理过的。


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)
  • # #