欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入淺出掌握Unity ShaderLab語法基礎(chǔ)

 更新時間:2023年05月06日 10:06:15   作者:iukam  
Unity中所有Shader文件都通過一種陳述性語言進(jìn)行描述,稱為“ShaderLab”, 這篇文章主要介紹了Unity圖形學(xué)之ShaderLab入門基礎(chǔ),需要的朋友可以參考下

一、Shader基本介紹

shader的大致結(jié)構(gòu)如下:

Shader "Name"
{
	Properties
	{
		//開放到材質(zhì)面板的屬性
	}
	SubShader
	{
		//頂點(diǎn)-片段著色器
		//或者表面著色器
		//或者固定函數(shù)著色器
	}
	SubShader
	{
		//更加精簡的版本
		//為了在舊的圖形設(shè)備上運(yùn)行
	}
	...
	Fallback "Name"
}

相關(guān)特性:

  • Shader中可以編寫多個子著色器(SubShader),但至少需要一個。
  • 如果是頂點(diǎn)-片段著色器(Vertex-Fragment Shader),每個子著色器中還會包含一個甚至多個Pass。同時,該子著色器內(nèi)所有的Pass會依次執(zhí)行,每個Pass的輸出的結(jié)果會以指定的方式與上一步的結(jié)果進(jìn)行混合,最終輸出。
  • 如果是表面著色器(Surface Shader),著色器的代碼也是包含在子著色器中,但與頂點(diǎn)-片段著色器不同的是,表面著色器不會再嵌套Pass。

二、Properties(屬性)

1、數(shù)值類屬性

Unity Shader的數(shù)值類屬性基本都是浮點(diǎn)型(Float)數(shù)據(jù),雖然Unity提供了整型(int)數(shù)據(jù),但在編譯的時候最終都會轉(zhuǎn)化成浮點(diǎn)型。

數(shù)值類屬性有兩種:

name("display name",Float)=number
name("display name",Range(min,max))=number
  • Float是任意數(shù)值的浮點(diǎn)型數(shù)據(jù),在材質(zhì)面板上作為數(shù)字輸入框顯示。
  • Range是介于最大值和最小值之間的浮點(diǎn)型數(shù)據(jù),在材質(zhì)面板上作為滑動條顯示。

2、顏色和向量類屬性

顏色類語法定義:

name("display name",Color)=(0,0,0,0)
name("display name",Vector)=(0,0,0,0)
  • Color是顏色類型的數(shù)據(jù),由RGBA四個分量定義,在材質(zhì)面板上顯示為取色器(Color Picker)。
  • Vector是向量類型的屬性,是一個四維數(shù)組,在材質(zhì)面板上作為顯示4個連續(xù)的數(shù)值輸入框,分別為X,Y,Z,W。

3、紋理貼圖類屬性

name("display name",2D)="defaulttexture"{}
name("display name",Cube)="defaulttexture"{}
name("display name",3D)="defaulttexture"{}
  • 2D屬性是紋理類屬性中最常見使用的,包括漫反射貼圖、法線貼圖等;
  • Cube(全稱 Cube map texture 立方體紋理),是由前、后、左、右、上、下6張有聯(lián)系的2D貼圖拼成的立方體,主要用作反射,例如Skybox和Reflection Prob。
  • 3D紋理只能被腳本創(chuàng)建,在實(shí)際使用中很少使用。

4、所有類型屬性匯總

Shader "Custom/Properties"
{
	Properties
	{
		_MyFloat("Float Properties",Float)=1        	//浮點(diǎn)類型
		_MyRange("Range Properties",Range(0,1))=0.1		//范圍類型
		_MyColor("ColorProperties",Color)=(1,1,1,1) 	//顏色點(diǎn)類型
		_MyVector("Vector Properties",Vector)=(0,1,0,0) //向量類型
		_MyTex("Texture Properties",2D)="white"{} 		//2D貼圖類型
		_MyCube("Cube Properties",Cube)=""{} 			//立方體貼圖類型
		_My3D("3D Properties",3D)=""{} 					//3D貼圖類型
	}
	SubShader
	{
		Pass
		{
			//pass 中的代碼
		}
	}
	Fallback "Diffuse"
}

三、SubShader

在Unity中,每個Shader都會包含至少一個SubShader。同時,每個SubShader都可以設(shè)置一個或多個標(biāo)簽(Tags)和渲染狀態(tài)(States),然后定義至少一個Pass。

1、SubShader的標(biāo)簽

標(biāo)簽的語法如下:

Tags{"TagName1"="Value1" "TagName2"="Value2"}

標(biāo)簽通過鍵值對的形式進(jìn)行聲明,并且沒有使用數(shù)量限制。

渲染隊(duì)列(Queue)

在SubShader中可以使用Queue(隊(duì)列)標(biāo)簽確定物體的渲染順序,Unity定義了五種渲染隊(duì)列,如下:

也可以自己指定一個隊(duì)列,例如:

Tags{"Queue"="Geometry+1"}

這個隊(duì)列表示在所有的非透明幾何體繪制完成之后再進(jìn)行繪制。渲染類型(RenderType)

RenderType標(biāo)簽可以將Shader劃分為不同的類別,用于后期進(jìn)行Shader替換或者產(chǎn)生攝像機(jī)的深度紋理,具體如下:

禁用批處理

當(dāng)使用批處理(Batching)的時候,幾何體會被變換到世界空間,模型空間會被丟棄。

這會導(dǎo)致某些使用模型空間頂點(diǎn)數(shù)據(jù)的Shader最終無法實(shí)現(xiàn)所希望的效果。而開啟DisableBatching(禁用批處理)可以解決這個問題。

禁用批處理標(biāo)簽有三個數(shù)值可以使用:

(1) “DisableBatching”=“True”:總是禁用批處理。

(2) “DisableBatching”=“False”:不禁用批處理,默認(rèn)值。

(3) “DisableBatching”=“LODFading”:當(dāng)LOD效果激活的時候才會禁用批處理,主要用于地形系統(tǒng)上的樹。

禁止陰影投射

"ForceNoShadowCasting":禁止陰影投射標(biāo)簽。設(shè)置為Ture時,Shader物體就不會對其他物體產(chǎn)生投射陰影了。

忽略Projector

IgnoreProjector標(biāo)簽:不讓物體受到Projector(投影機(jī))的投射。

它有兩個數(shù)值可以使用:“True"和"False”,分別為忽略投射機(jī)和不忽略投射機(jī)。

一般半透明的Shader都會開啟這個標(biāo)簽。

其他標(biāo)簽

例如,CanUseSpriteAtlas,PreviewType。

2、Pass的渲染狀態(tài)

3、Fallback

Fallback在所有SubShader之后進(jìn)行定義。當(dāng)所有的SubShader都不能在當(dāng)前顯卡運(yùn)行的時候,就會運(yùn)行Fallback定義的Shader。

語法:Fallback "name"。

最常用于Fallback的Shader為Unity內(nèi)置的Diffuse。

到此這篇關(guān)于深入淺出掌握Unity ShaderLab語法基礎(chǔ)的文章就介紹到這了,更多相關(guān)Unity ShaderLab語法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論