Unity shader學習之逐畫素漫反射光照模型

2022-03-04 08:22:02 字數 789 閱讀 3622

shader如下:

shader "

custom/diffuse fragment-level

" subshader

lod

100pass

//只有設定了正確的lightmode,才能訪問一些unity提供的內建變數,如:_lightcolor0

cgprogram

#pragma vertex vert

#pragma fragment frag#include

"unitycg.cginc

"#include

"lighting.cginc

"struct

;struct

v2f ;

float4 _diffuse;

fixed4 frag (v2f i) : sv_target

endcg}}

fallback

"diffuse

"}

效果如下:

逐畫素光照可以得到更新平滑的光照效果,但有乙個缺點,在光照無法到達的區域,模型的外觀通常是全黑的,沒有任何明暗變化,像乙個平面一樣,無任何模型細節表現,如下圖。

為此,有一種改善技術:半蘭伯特(half lambert)光照模型。

Unity shader學習之逐頂點漫反射光照模型

公式如下 cdiffuse clight mdiffuse max 0,dot n,l 其中,n為表面法線,l為指向光源的單位向量,mdiffuse為材質溫反射顏色,cdiffuse為光源顏色。需要注意的是,需要防止法線與光源方向點積為負,因些使用max函式。shader如下 shader cust...

unity shader 學習筆記

upgrade note replaced world2object with unity worldtoobject upgrade note replaced mul unity matrix mvp,with unityobjecttoclippos shader unity shader b...

Unity Shader之再談雜訊

對於雜訊其實我還有很多不懂的地方,比如random函式,比如雜訊的實際應用場景等等。於是在搜尋資料的時候我發現了兩個超超超牛b的 可以說是我這種想要去學習相關知識的人的福利 在這裡給自己標記一下同時也分享給大家 1.shadertoy創始人之一的奇淫巧計大集合 之前看shadertoy的時候,在驚嘆...