Unity中的Shader的形態

2021-08-09 07:19:38 字數 1828 閱讀 2538

unity通過shaderlab來組織shader

作為一款號稱跨平台性最好的遊戲開發引擎,unity使用自定義使用mono這個開源的.net來實現。對於要適應不同的gpu的shader來說,unity使用自定義shaderlab來組織shader的內容,並會針對不同的平台進行編譯。

1.關鍵字shader

unity的shader檔案是通過shader這個關鍵字來開始的,使用者可以像目錄一樣組織shader的命名,shader的檔名和引用名不必一樣,舉例如下

shader "tut/newbie/firstshader"

}subshader

subshader

fallback"diffuse"

}

2.subshader的重要標籤

給subshader新增標籤(tags{}塊),其實這就是一系列指示牌,這些標籤可以告訴unity渲染引擎,或者其他使用者如何認證這個subshader。下面的**是適應於subshader的buildin類tags;

subshader 

}//queue就是佇列的意思,在這裡就是渲染佇列的意思,表示希望unity渲染引擎在什麼時候渲染自己。queue有5個可選值,它們就是background,geometry,alphatest,transparent和overlay,分別是對應數字1000,000,2450,3000,4000,既然可以對應成數字,當然也可以把這些單詞當作整型變數來看待,例如:#br

下面是rendertype標籤,其常用的內建值有opaque,transparent,transparentcutout,background,overlay.這個標籤在替代渲染做post effetcs時很重要,unity內建的image effects就是根據它來決定如何替代渲染,除此之外,如果你想到場景的一張zdepth和normals的快照,乙個正確的rendertype是必不可少的。

ignoreprojector比較簡單,值為true時,表示當前物體忽略projector的影響。

你還可以為subshader新增自定義的標籤,例如#br

subshader中的pass塊

subshader包裝了乙個渲染方案,而這個方案是由乙個個pass塊來執行的。subshader可以包括多個pass塊,每乙個pass塊都包含了渲染乙個幾何體的具體**。我們如果寫shader,大部分費力且能體現每位讀者的勞動價值的地方就是pass塊中。

4 . pass塊的標籤及其名字的意義

pass塊的內建的那些標籤都是針對渲染路徑的,告訴渲染引擎這個pass應該在什麼渲染路徑下被渲染。

pass塊的name一般用來引用此pass.這種引用意味著可以定義乙個pass塊,然後再其他shader的pass塊中的多次引用它,這是一種減少重複勞動的技巧,請牢記,下面是這種技巧的乙個演示;

shader "tut/newbie/secondshader"

lighting

on settexture[_] }}

}

這個shader命名了乙個pass塊,由於unity的原因,命名是必須使用大寫,下面這個shader則通過名字引用了此pass塊:

shader "tut/newbie/thiedshader" 

}

unity中shader的Cutout問題

unity中自帶的shader裡有cutout型別的shader,今天發現這種型別很詭異,先 貼幾種自帶的 shader transparent cutout diffuse cutoff alpha cutoff range 0,1 0.5 subshader lod 200 cgprogram ...

Unity中shader變數的名字規範

unity的shader讓我想起了以前被c語言的巨集支配的恐懼,裡面很多的變數名字都是固定的,會在其他 中被隱式的使用,把遇到的記錄下來。1.maintex base rgb 2d white main tex會在 後處理中的graphics.blit src,tempbuffer,material...

Unity3D中的shader高階

unity3d shader 基礎知識 unity3d shader 官方教程翻譯 1.unity中配備了強大的陰影和材料的語言工具稱為shaderlab,以程式語言來看,它類似於cgfx和direct3d的效果框架語法,它描述了材質所必須要的一切諮詢,而不僅僅侷限於平面頂點 畫素著色。2.在uni...