Unity3D shader腳本


Unity中的shader腳本,是用叫做shaderlab的腳本語言來寫。這個unity中的shader不只是DX中HLSL寫的頂點和像素shader,而應該說是對應着
DX中的Effect腳本,定義了一個完整渲染的狀態。


一個文件,只能包含一個unity的shader


shader文件的內容:


簡單的一個shader的內容框架大致如下:
shader "shader name"
{


properties
{
_Color("Diffuse Color", Color) = (1,.5,.5,1)
_Texture("Main Texture", 2D) = ""{}
}
SubShader
{
Tags{"Queue"="Transparent"}
pass
{
Tags{}
Material{}


}
}
Fallback ""
}
框架看上去非常簡潔,大致的功能也從字面意思上面就可以理解。
properties 中定義的變量,是可以暴露出來給編輯器編輯的,在unity編輯器中選中一個材質,材質中的shader里面定義在properties 
中的變量就會出現該材質的屬性面板中,可以手動設置對應的屬性。其中,紋理屬性后面,還有一些可選的屬性可以設置,用於設置紋理的坐標,和其他一些屬性。
當使用頂點shader的時候,該屬性標記的紋理坐標無效。




一個SubShader相當於DX中的技術,一個shader中可以出現多個subshader。在引擎渲染物體的時候,會在shader中找到第一個可以匹配硬件的SubShader,用於渲染。
如果一個都沒有找到,則用 Fallback 中的shader來渲染物體。
Tags 標記。SubShader 和 pass都有自己的標記。先來說說SubShader的Tags,這個Tags是用來告訴引擎該什么時候渲染該物體。一般在渲染引擎中,
渲染物體順序為 背景物體->不透明物體->透明物體->UI。Unity給了幾個保留的關鍵字,Background, Geometry, Transparent,Overly.也就對應着背景,不透明,透明,UI。
在內部,這幾個關鍵字都對應着一個數值Background = 1000, Geometry = 2000, Transparent = 3000,Overly = 4000。所以,我們也可以把tag這樣寫:
Tags{"Queue"="Geometry + 1"}
這代表着該物體時在不透明物體渲染之后,透明物體渲染之前被渲染。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM