Unity Shader 光照模型之漫反射

2021-09-10 21:46:53 字數 1225 閱讀 4973

【舊部落格轉移 - 2023年4月3日 23:27】

在現實生活中,我們看見能看見的東西都是光反射出來的顏色,如果反射光太弱,或者沒有進入你的視角範圍,你看到的就是黑色的。

在遊戲中光分為幾種,平行光源(太陽光),點光源(燈泡)等等,最常用的是directional light(平行光源)。

當然在計算機中光不過是一些資料罷了,

方向,顏色,亮度就可以決定乙個平行光源

漫反射是是投射在粗糙表面上的光向各個方向反射的現象,根據入射光線與此點的法線來決定此點的反射強度,

用shaderlab書上的公式表達就是

lum = c * max(0, cos)

c:到達此點光線的強度和顏色

n:法線

l:單位長度(標準化)的入射光向量

shader "

lijia/diffcue

" }

subshader

lod

100pass

;sampler2d _maintex;

float4 _maintex_st;

float4 _lightcolor0;

fixed4 frag (v2f i) : sv_target

endcg}}

}

這裡要注意的是,計算lightdir跟normal的夾角的時候,一定要保證在同乙個座標空間。有兩種方式

把lightdir轉成模型空間

把normal轉世界空間

但是把normal轉世界座標一定要注意,不要用mul(_object2world, normal)去轉,這樣如果模型有一些縮放變化就會出現異常。正確的做法是用模型到世界的逆矩陣的轉置矩陣。mul(float4(normal, 0), _world2object);

漫反射效果:

李嘉的部落格 閱讀(

...)

編輯收藏

Unity Shader自定義光照模型

前幾天去一家公司面試,因為簡歷上寫著 能寫簡單的shader 就被問了乙個問題 怎麼自定義乙個光照模型?直接懵逼了,隱隱約約能聯想到的什麼漫反射光 鏡面反射光 環境光.難道是這個?光照模型就是 pragam su ce surf lambert裡面的那個lambert唄?這不都是寫好的嗎?還能自定義...

UnityShader的基礎光照模型解析

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

unityShader前篇之光照模型

固定管道使用的基本光照計算公式 su cecolor emissive ambient diffuse specular su cecolor 最終顏色 emissive 自發光顏色 ambient 環境關顏色 diffuse 漫反射關顏色 specular 鏡面高光顏色 emissive ke k...