UnityShader的基礎光照模型解析

2021-09-22 21:12:44 字數 873 閱讀 9608

// upgrade note: replaced 『_world2object』 with 『unity_worldtoobject』

// upgrade note: replaced 『mul(unity_matrix_mvp,)』 with 'unityobjecttoclippos()』

shader 「unity shaders book/chapter 6/diffuse vertex-level」

subshader --只有正確定義lightmode 才能得到unity內建的光照模型,例如 _lightcolor0

lightmode 是pass標籤中的一種,它用於定義該pass在unity的光照流水線中的角色。

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "lighting.cginc"

fixed4 _diffuse;

struct a2v ;

struct v2f ;

v2f vert(a2v v)

fixed4 frag(v2f i) : sv_target

endcg

}}fallback "diffuse"

}

shader 「unlit/testtwo」 //逐片面光照渲染

subshader

--只有正確定義lightmode 才能得到unity內建的光照模型,例如 _lightcolor0

pass

; struct v2f

;fixed4 frag (v2f i) : sv_target

endcg}}

}

UnityShader 挺進體積光

原本是想找找體積霧的,無意中發現了 gpu gems 3上的一篇螢幕特效實現體積光散射的文章,實現了一波發現文章裡公式列的很高大上,結果具體實現卻出乎意料的簡單,只是通過畫素的螢幕位置和光源的螢幕位置計算光線方向,然後在乙個迴圈中沿光線方向將上乙個畫素的顏色衰減後疊加到下乙個畫素,具體可參考 gpu...

UnityShader例項03 邊緣光材質

邊緣光材質 邊緣光材質原理和xray材質相類似,shader 也就長得幾乎一樣了 shader 實現 vf版本 01 shader penglu rimlight vf rimcolor rimcolor color 0,1,1,1 rimpower rim power range 0.1,8.0 ...

Unity Shader 自定義Phong光照

今天我們來學習一下怎麼在unity裡實現自定義phong光照模型 什麼是phong光照?環境光和漫反射光比較容易計算,那鏡面高光要如何計算呢?鏡面高光其實可以通過利用入射光方向 即光照方向的反方向 和法線計算出反射光方向,然後再通過反射光方向和觀察視角方向計算出實際進入眼睛的光照強度,然後再做乙個光...