Unity Shader (六)基礎光照

2022-09-20 20:24:07 字數 685 閱讀 2088

一、輻照度

q1. 如何量化光?

a:用輻照度irradiance

q2:什麼是輻照度?

圖中a點單位時間內穿過的能量就是輻照度。

q2:怎麼計算輻照度呢?

上圖中cosθ值就是輻照度。θ=0°時,cosθ=1,也就是說光線垂直於物體表面時,輻照度最大。θ越大,表示光線越不垂直,輻照度越小。

二、吸收和散射

學過基礎光學知識一定知道,光線與物體相交,會發生散射和吸收。而散射改變方向不改變密度和顏色,吸收相反。

散射根據方向又分為折射和反射,折射是射到物體內部,反射是射到物體外部。在光照模型中,用漫反射表示折射,高光反射表示反射。

折射又分為被內部物體吸收和與內部物體顆粒相交,重新發射出物體表面。重新發射的光線方向和顏色都會被改變。而重新發射的光線數量和方向稱為出射度。

三、光照模型

q1. 什麼是光照模型?

a:根據材質屬性和光源資訊去計算某個觀察方向的出射度的等式。

啊好抽象,下面來看看標準光照模型:

分為四個部分:

高光反射 specular:物體表面在完全鏡面反射方向散射的輻射量。

漫反射 diffuse:物體表面向每個方向散射多少輻射量。符合蘭伯特定律。

環境光 ambient:所有的間接光照。通常是個全域性變數,場景中所有物體都使用這個環境光。

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光照?環境光和漫反射光比較容易計算,那鏡面高光要如何計算呢?鏡面高光其實可以通過利用入射光方向 即光照方向的反方向 和法線計算出反射光方向,然後再通過反射光方向和觀察視角方向計算出實際進入眼睛的光照強度,然後再做乙個光...