Unity3d的ShadeSH9环境光的球谐函数的应用
時光倒流,直接說結論
看完下面所有資料后,得知:
?
ShadeSH9 Unity內部應用在什么地方呢??
。。。
//------------------------------------------------------------------------------------- half3 ShadeSHPerVertex (half3 normal, half3 ambient) {#if UNITY_SAMPLE_FULL_SH_PER_PIXEL// Completely per-pixel// nothing to do here#elif (SHADER_TARGET < 30) || UNITY_STANDARD_SIMPLE// Completely per-vertexambient += max(half3(0,0,0), ShadeSH9 (half4(normal, 1.0)));#else而使用這個方法,又必須有一個前置條件
#elif UNITY_SHOULD_SAMPLE_SH#ifdef VERTEXLIGHT_ON// Approximated illumination from non-important point lightsambientOrLightmapUV.rgb = Shade4PointLights (unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0,unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb,unity_4LightAtten0, posWorld, normalWorld);#endifambientOrLightmapUV.rgb = ShadeSHPerVertex (normalWorld, ambientOrLightmapUV.rgb);#endif參考一
Unity Standard Shader 技術分析 - 知乎 (zhihu.com)
Diffuse部分
三種環境光源都會進行Diffuse部分的計算。當物體接受LightMap的時候,環境光照會被合并到LightMap中去,而當物體不接受LightMap的時候,會使用一種在RTR4中被稱為Sphere Harmonic Irradiance的技術,也就是使用球諧函數來解析的表示Irradiance Environment Map,其技術來源于Ravi Ramamoorthi,等人的文章"An Efficient Representation for Irradiance Environment Maps"。
另外Unity在進行Sphere Harmonic Irradiance的計算會根據是否使用了光照探針而有所不同。在沒有使用光照探針時,會在頂點著色階段進行Sphere Harmonic Irradiance計算,而在使用光照探針時,環境光照的Irradiance Map會被合并進光照探針中。
Specular部分
只有當使用天空盒作為環境光照的時候,才會進行Specular部分的光照計算。Unity使用的是基于經驗的模糊算法。模糊的方法是通過Mipmap來進行降采樣,而降采樣的層級則通過著色表面的粗糙程度來確定
參考二
UNITY3D ShadeSH9 屬于Irradiance environment maps 方法,可以參考DX SDK?PRTDemo,里面是幾乎相同的實現,總之就是解光傳輸的積分方程
目前主流輻射度計算的兩種主流方法
1.Irradiance environment maps 輻照環境貼圖方法,可用于生成柔和的環境光照,計算量比環境貼圖更小 ,適合于動態環境
ShaderX2: Shader Programming Tips & Tricks with DirectX 9 ?中?Efficient Evaluation of Irradiance?Environment Maps 一文有詳細解釋。
Functions can be represented/approximated
using basis functions
2.precomputed radiance transfer 預計算輻射度,這個方法實際上市將光照方程簡化近似,離線計算各頂點或者像素的球諧系數,并壓縮存儲到頂點或者像素上,運行時重建光照,不適合于動態環境,可用于Lightmapping
ShaderX2: Shader Programming Tips & Tricks with DirectX 9 ?中?Practical Precomputed RadianceTransfer?一文有詳細解釋。
Single Spherical Harmonic Lighting Shader?
(失效鏈接)
https://www.assetstore.unity3d.com/en/#!/content/10307
(某引擎 ppt)
Adding Spherical Harmonic Lighting to the Sushi Engine (amd.com)
理論參考
(第2個鏈接說的比較好,第1個鏈接是純數學??)
1.Unity Shader球諧光照解析-騰訊游戲學堂 (qq.com)
2.球諧光照(spherical harmonic lighting)解析-騰訊游戲學堂 (qq.com)
3.Unity3D的全局光照和陰影:下篇(unity3D中的球諧光照和SH球諧函數、unity實時陰影抗鋸齒解決方案) | 電子創新網 Imgtec 社區 (eetrend.com):優化向,不建議直接看
4.固定角色的間接光照 - 惡毒的狗 | Bad Fat Dog (baddogzz.github.io):說了一些關鍵字
5.球諧光照 (huailiang.github.io):自由引擎和unity引擎對比,說了一些理論,有截圖
總結
以上是生活随笔為你收集整理的Unity3d的ShadeSH9环境光的球谐函数的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MAC搭建ios自动化测试环境
- 下一篇: 板绘如何厚涂?绘画时应该怎样厚涂?教你利