1.天空盒子
是什麼?
天空盒子(skybox)是遊戲中用於模擬背景的一種方法。當我們在場景中使用了天空盒子時,整個場景就被包圍在乙個立方體內。在unity中,天空盒子是在所有不透明物體之後渲染的,而其背後使用的網格是乙個立方體或乙個細分後的球體。
怎麼用?
製作材質:
window → lighting選單中,把skyboxmat賦給skybox選項。
設定攝像機:
2.環境對映
如何建立用於環境對映的立方體紋理?
直接由一些特殊布局的紋理建立:
手動建立乙個cubemap資源,再把6張圖賦給它。 在專案資源中建立乙個cubemap,然後把6張紋理拖曳到它的面板中。
由指令碼生成(理想情況下,我們希望根據物體在場景中位置的不同,生成它們各自不同的立方體紋理)。
建立立方體紋理的指令碼:
using unityengine;
using unityeditor;
using system.collections;
public
class
rendercubemapwizard
:scriptablewizard
void onwizardcreate ()[
menuitem
("gameobject/render into cubemap")]
static
void rendercubemap (
)}
(1)反射
shader關鍵**:
(2)折射
當光線從一種介質(例如空氣)斜射入另一種介質(例如玻璃)時,傳播方向一般會發生改變。當給定入射角時,我們可以使用斯涅爾定律(snell』s law)來計算反射角。當光從介質1沿著和表面法線夾角為θ1的方向斜射入介質2時,我們可以使用如下公式計算折射光線與法線的夾角θ2:
shader關鍵**:
(3)菲涅爾反射
菲涅耳反射描述了一種光學現象,即當光線照射到物體表面上時,一部分發生反射,一部分進入物體內部,發生折射或散射。被反射的光和入射光之間存在一定的比率關係,這個比率關係可以通過菲涅耳等式進行計算。
乙個經常使用的例子是,當你站在湖邊,直接低頭看腳邊的水面時,你會發現水幾乎是透明的,你可以直接看到水底的小魚和石子;但是,當你抬頭看遠處的水面時,會發現幾乎看不到水下的情景,而只能看到水面反射的環境。這就是所謂的菲涅耳效果。事實上,不僅僅是水、玻璃這樣的反光物體具有菲涅耳效果,幾乎任何物體都或多或少包含了菲涅耳效果。
真實世界的菲涅耳等式是非常複雜的,但在實時渲染中,我們通常會使用一些近似公式來計算。其中乙個著名的近似公式就是schlick菲涅耳近似等式:其中,f0是乙個反射係數,用於控制菲涅耳反射的強度,v是視角方向,n是表面法線。
shader關鍵**:
shader "shaderbook/chapter10/fresnel"
} subshader
;
v2f vert
(a2v v)
fixed4 frag
(v2f i)
: sv_target
endcg
}} fallback "reflective/vertexlit"
}
把_fresnelscale調節到1時,物體將完全反射cubemap中的影象;當_fresnelscale為0時,則是乙個具有邊緣光照效果的漫反射物體。
注意圖中在模型邊界處的反射現象。
unity shader 學習筆記
upgrade note replaced world2object with unity worldtoobject upgrade note replaced mul unity matrix mvp,with unityobjecttoclippos shader unity shader b...
unity shader學習總結一
學習unity shader有兩個月了,最近的兩個月總是有一些工程專案,占用我大量的學習時間,因此總是停停學學。今天虛擬校園工程開好完成了,就有時間吧自己學到的shader,總結一下。這是兩個 jianbian紋理 實現的效果如下 如下 shader custom katongmylihmodel ...
Unity Shader學習1 簡述
一 什麼是shader shader,就是著色器,是一種執行在 gpu 上的程式。gpu programmable graphics processing unit,即可程式設計圖形處理單元,也稱為可程式設計圖形硬體。至於 gpu 上的程式設計,實質上就是 gpu 允許應用程式指定乙個序列的指令進行...