UnityShader學習 立方體紋理及其應用

2021-10-05 03:03:20 字數 2499 閱讀 1918

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 允許應用程式指定乙個序列的指令進行...