Unityshader 漫反射光照模型

2022-09-10 02:24:11 字數 910 閱讀 9236

基本光照漫反射計算公式:

c[diffuse] = (c[light]*m[diffuse]max(0,n·l) )

c[light]為光源顏色和強度,可以由lighting.cginc中的_lightcolor0提供

m[diffuse]為材質反射係數,一般自己定義在properties中

n為表面法線,l為光源方向。 其中n由normal提供,l由_worldspacelightpos0提供。

逐畫素光照:

//

upgrade note: replaced '_world2object' with 'unity_worldtoobject'

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

shader "

custom/chapter-diffusevertexlevel

" subshader

cgprogram //定義頂點著色器和片元著色器函式名稱

#pragma vertex vert

#pragma fragment frag#include

"lighting.cginc

"fixed4 _diffuse; //cg**中必須有乙個和屬性中名稱型別相匹配的變數

struct

a2v;

struct

v2f;

v2f vert(a2v v)

fixed4 frag(v2f i):sv_target

endcg}}

fallback

"diffuse

"}

其中逐頂點計算即是在頂點著色器中計算漫反射需要的變數,片元著色器只負責輸出顏色即可。

opengl 教程 18 漫反射光

環境光和漫反射光最大的區別在於 漫反射光依賴於光源的方向,而環境光和光源方向完全無關,環境光在場景中是均勻分布的,對場景中的所有物體都有效,而漫反射光在物體朝向光源的一面才有光照效果,在背面則沒有光照效果。如下圖所示,除了光源方向,漫反射光還和物體表面的法向有關。假設上圖中2個光束的強度都是一樣的,...

Unity Shader中實現漫反射光照模型

逐頂點漫反射光照模型。頂點著色器的最基本任務就是把頂點位置從模型位置轉換到裁剪空間中。pos mul unity matrix mvp,pos2 pos為float4型別,pos2為float4型別。其中pos2要獲得模型空間座標 可在定義時 float4 pos2 position 計算漫反射光照...

Note Unity Shader 漫反射光照模型

公式 逐頂點與標準對比 為了使用在properties中的宣告的屬性,需要定義乙個和該屬性型別相匹配的變數!重點是變數!這是個變數!通過這樣的方式,我們就可以得到漫反射公式所需引數之一,材質的漫反射屬性 逐頂點光照會出現一些鋸齒,對於細分模型較低的模型,逐頂點會出現問題 逐畫素光照會在背光區,模型外...