unityShader前篇之光照模型

2021-09-30 13:21:11 字數 2672 閱讀 3148

固定管道使用的基本光照計算公式

su***cecolor = emissive + ambient + diffuse + specular

su***cecolor:最終顏色

emissive:自發光顏色

ambient:環境關顏色

diffuse:漫反射關顏色

specular:鏡面高光顏色

emissive = ke

ke:材質的emissive顏色

自發光是在沒有光照的情況下現在的顏色,光照計算直接就是該顏色想象一下在乙個黑暗無光的背景,如果物體emissive=color(1,0,0,1),當前物體就顯示出紅色,su***cecolor = emissive + 0+ 0 + 0

ambient = ka x globalambient

ka:材質的ambient顏色

globalambient:全域性環境光的顏色

diffuse = kd x lightcolor x max(n · l, 0)

kd:材質的漫反射顏色

lightcolor :漫反射光照顏色

n:物體表面法線

l:光照向量(是從表面位置指向光源位置的向量,與光的方向相反)

當n與l之間的夾角大於90度是值為負數,光照不能照到物體的背面故取值為0

其中向量全部歸一化了

ks :材質的鏡面反射顏色

lightcolor:漫反射光照顏色

facing:預設為1,協調光照,相當於光照強度

n:物體表面法線

v:視角,物體到攝像機向量

l:光照向量(是從表面位置指向光源位置的向量,與光的方向相反)

h:h = v+l (n與l之間夾角中一半的向量);

shininess:高光級別值越大高光區域越小(是n*h的冪n*h的值在0-1)

其中向量全部歸一化了

常用選項

其中emissive一般用於特殊效果,最常用的光照模型是排除他的及

su***cecolor = ambient + diffuse + specular

ambient :一般在乙個場景中就乙個環境光

diffuse 與specular的光照顏色一般在同乙個光源裡面設定同樣的顏色

上面提到的光照模型還沒有計算衰減

方向光不需要衰減,點光源和聚光燈是需要衰減的

衰減公式 :attenuationfactor=1/(kc+kl*d+kq*d^2)

kc,kl,kq:衰減常量

d:當前光照點與光源的距離

光線是平行了如太陽關,距離太遠了所以不需要衰減

直接在漫反射與鏡面發生乘以衰減值attenuationfactor

公式:su***cecolor = emissive + ambient + (diffuse + specular)*attenuationfactor

d:光源方向

v:光源與光照點的向量

取捨:為聚關燈照射的角度一般取cos值

判斷一點是否在聚關燈照射範圍,取d,v之間的cos值(向量點積)與取捨值比較

if(dot(d,v)《取捨)

return false//不知光照範圍

公式:

if(dot(d,v)《取捨)

return false//不在光照範圍

else

su***cecolor = emissive + ambient + (diffuse + specular)*attenuationfactor

這樣計算的光照在光照範圍內是均勻的,而真實世界是有外圍衰減的,我們將聚光燈分為兩部分,內部光照強度不變,外表向外光照強度遞減

使用hlsl及cg都提供的乙個內建函式smoothstep(min,max,x),計算0到1的平滑插值範圍[min,max]小於min為0,打於max為1hlsl官網函式詳情

計算公式為

if(dot(d,v)《取捨)

return false//不在光照範圍

else

su***cecolor = emissive + ambient +

(diffuse + specular)*attenuationfactor*smoothstep(外部,內部,dot(d,v))

unity Shader前向渲染

unity shader前向渲染記錄,先說原理,後附 1 前向渲染的原理 兩個pass,乙個basepass主要負責 乙個addpass主要負責 2 對光源處理方式分類 unity在渲染每乙個物體之前都會根據光源的強度,顏色,距離物體的遠近以及光源對該物體的影響程度對場景中的所有光源進行乙個重要度排...

UnityShader初級篇 遮罩紋理

shader unity shaders book chapter 7 mask texture bumpmap normal map 2d bump bumpscale bump scale float 1.0 高光反射遮罩紋理 specularmask specular mask 2d whit...

Unity Shader學習 一 基礎篇

本系列學習是以馮樂樂學姐編寫的 unityshader入門精要 為基礎資料來學習的。據隔壁學霸介紹,此書有很多實用shader而且講解細緻,所以在這裡也向大家推薦一下。計算機影象是通過渲染流水線的方式進行渲染的 分為應用階段,幾何階段,光柵化階段。每個階段本身通常也是乙個子流水線 應用階段 由cpu...