UnityShader基礎知識

前言

之前學過一段時間的shader,但是是從看視頻學的,這樣會導致基礎知識不牢固,看了,就是看了而已,不從理解上去學習,
終究只是短時的記憶而已,很容易就忘記,因爲基礎知識的學習,就顯得更加重要了,以前實現shader需求,都是從網上抄抄shader,隨便改改,也沒有去理解每個實現的意義,結果就是知識上並沒有長進;因此呢,打算實打實的從基礎開始,鞏固鞏固;從理解上去學習新知識;好好啃書… 此篇作爲自己的學習筆記;

概念渲染流水線:

 需要經歷四大階段:
 應用階段,幾何階段,光柵階段,測試階段
 測試階段分爲 模板測試,深度測試

概念流水線的完整描述

在這裏插入圖片描述

在ShaderLab中的關係

應用階段相對於shaderlba裏的 a2v (applydata to vertex); 
指的是傳遞給頂點着色器的 模型的應用數據;
幾何階段相對於shaderlab裏的  vertex;
光柵化階段相對於 shaderlab裏的 frament;

關於Shader中應用階段中數據:

模型空間下的 頂點信息,法線信息,切線信息,紋理信息等等....
Unity裏有給內置的Struct appdata_full,它可以用於頂點着色器的輸入;
它是Unity的內置 cginc文件,路徑在 Editor\2018.1.9f2\Editor\Data\CGIncludes下,
下,可以看到很多內置的CG 文件;

中文完整解釋

截圖取的是UnityShader入門精要

UnityCG內置文件的描述

以下的數據可以作爲 應用數據 傳遞給 頂點着色器,作爲 頂點着色器的輸入;

在這裏插入圖片描述
CPU與GPU之間的通信:在這裏插入圖片描述

GPU流水線

在這裏插入圖片描述

Unity ShaderLab 結構

Shader "Custom/SpecularVertexLevel" {
	Properties {
	}
	SubShader {
		Tags{"xxx"="xxx"}
		pass
		{
			Tags{"xxx"="xxx"}
			CGPROGRAM
			ENDCG
			
		}

	}
	FallBack "Diffuse"
}

Properties

語義塊定義,屬性是來用作爲用戶輸入的一部分
在這裏插入圖片描述

屬性類型

在這裏插入圖片描述

變量關係

可以在CGPROGRAM 裏 聲明 取得該變量
在這裏插入圖片描述

Subshader

如果Subshader不能在目標平臺上使用,Unity就會 用備胎, 這個備胎就是FallBack “xxxx” 可以是 任意存在的ShaderName

Tags

用字符鍵值對來表示,中間用空格 隔開
在這裏插入圖片描述

狀態設置 (RenderStep)

在這裏插入圖片描述
以上的RenderStep 和Tags 如果不是在Pass裏寫的,那麼 它們將會應用到每個pass中

pass 可以 存在多個,有時候爲了適應 不同的平臺需要寫不同的pass

pass

在這裏插入圖片描述

CGPROGRAM

在這裏插入圖片描述
在CGPROGRAM 裏 經常要 定義一些 結構體,來存儲 應用傳遞給頂點着色器的數據,a2v , 以及 頂點着色器傳遞給片元着色器的 數據,v2f
這些結構體的聲明,必須要有個語義的聲明,它表達了這個參數的含義。
和 cg/hlsl 編程 裏的語義是 一樣的;

a2v 語義 , 應用數據
在這裏插入圖片描述
在這裏插入圖片描述
這裏的0 ,1 ,2… 可以被認爲是一個存儲該類型的 變量
v2f 頂點着色器傳遞給 片元作色器的 語義
在這裏插入圖片描述
片元作色器函數 用的語義;
SV_Target 這個語義表示 輸出值將會存儲到渲染目標 裏;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章