Unity Shader 詳細自學(三)

2021-10-21 04:11:11 字數 1073 閱讀 5417

#pragma target 3.0:表示我們將要對這個著色器使用硬體的「shader model 3.0」的能力,硬體的「shader model」是硬體乙個用於著色處理的基礎的指令範圍和能力,值越高表示能使用越高階的功能,如果沒有使用「#pragma target 3.0」這句指令,預設使用的是「shader model 2.0」。

sampler2d _maintex:這個東西和properties屬性裡面的2d型別對應,在cg中,sampler2d就是和texture2d所繫結的乙個資料容器介面,然後在我們的cg**塊,如果要使用外部傳入的_maintex貼圖,那麼就需要在cg**塊裡面定義一次。

#include 「lighting.cginc」:這是包含檔案,主要是方便我們編寫shader,內建了很多方法。下面還有一些包含檔案:

struct input字面意思,這是乙個輸入的結構體,用來幹啥,這就要結合剛剛定義的surf表面著色器的函式了,這個函式是cg規定的,所以引數是不能變的,我們得按照它得來:void surf (input in, inout su***ceoutputstandard o),第乙個是input輸入引數,第二個是inout輸出引數,其中輸入引數的結構我們可以自定義,輸出的su***ceoutputstandard就是unity規定的,如下:

這裡面的:float2 uv_maintex指的是什麼呢,首先float是個資料型別,比如:half , fixed4,float2:這些就是資料型別,這裡做了詳細說明cg中的資料型別

看到這裡就只有一步之遙了,最後的surf函式,在計算輸出時shader會多次呼叫surf函式,每次給入乙個貼圖上的點座標,來計算輸出。

這裡用到了乙個tex2d函式,這是cg程式中用來在一張貼圖中對乙個點進行取樣的方法,返回乙個float4。這裡對_maintex在輸入點上進行了取樣,並將其顏色的rbg值賦予了輸出的畫素顏色,將a值賦予透明度。於是,著色器就明白了應當怎樣工作:即找到貼圖上對應的uv點,直接使用顏色資訊來進行著色。(未完待續。。)。

《Unity Shader入門精要》自學筆記(一)

shader custom zhudingdian subshader cgprogram float4 diffuse 取用設定中的顏色資訊 pragma vertex vert pragma fragment frag include lighting.cginc struct a2v stru...

UnityShader自學日誌 線框自發光著色器

1 新建乙個無光照著色器 unlit shader 重新命名為 unlit wire 2 修改其 如下 shader packt unlit wireframe1 subshader lod 100 第一遍繪製背面 pass 定義了由頂點處理器向片元處理器傳送的資料 struct v2f 頂點處理器...

UnityShader自學日誌 建立自定義著色器

在 asset 中,建立乙個新的standard su ce shader,在mono或者vs中開啟,將原有的 段全部刪除 加入以下 每行 具體功能如下所示 shader packt moon 指定了該著色器在著色器選單中的名稱 基礎紋理貼圖,2d指定該屬性是乙個二維貼圖 子著色器 subshade...