轉(zhuǎn)自http://www.cnblogs.com/lixiang-share/p/5025662.html
游戲蠻牛課程地址 http://edu.manew.com/course/96
基本概念:
1.渲染管線:渲染管線也稱為渲染流水線或像素流水線或像素管線,是顯示芯片內(nèi)部處理圖形信號相互獨立的的并行處理單元鹃祖。在某種程度上可以把渲染管線比喻為工廠里面常見的各種生產(chǎn)流水線跷车,工廠里的生產(chǎn)流水線是為了提高產(chǎn)品的生產(chǎn)能力和效率槽片,而渲染管線則是提高顯卡的工作能力和效率绰筛。
2.shader與材質(zhì)薪丁,貼圖的關(guān)系
3.shader與渲染管線
- shader:是圖形可編程方案的程序片段
- 渲染管線:是一種計算機從數(shù)據(jù)到最終圖形成像的形象描述(類似汽車生產(chǎn)流水線)
- 材質(zhì)是商品假颇,shader是加工方法辆亏,貼圖是原材料
4.三種shader的高級語言:HLSL,GLSL,CG
5.unity中使用ShaderLab語法編寫:基本格式如下
- Properties:屬性
- SubShaders:編寫的執(zhí)行的shader方法风秤,每次只能執(zhí)行一組SubShader。如果第一個不適配扮叨,則往下執(zhí)行第二個
-
FallBack:如果上述SubShaders都不能執(zhí)行缤弦,則執(zhí)行FallBack所指定的shader,往往是系統(tǒng)包含的絕大多數(shù)硬件都支持的shader彻磁,如下
其中相當重要的:
- 法線貼圖 Normal Mapped:法線貼圖是可以應(yīng)用到3D表面的特殊紋理碍沐,不同于以往的紋理只可以用于2D表面狸捅。作為凹凸紋理的擴展,它使每個平面的各像素擁有了高度值累提,包含了許多細節(jié)的表面信息尘喝,能夠在平平無奇的物體外形上,創(chuàng)建出許多種特殊的立體視覺效果斋陪。
6.Fixed function shader
詳情參照http://blog.csdn.net/lichaoguan/article/details/43229767
目前速度快朽褪,適用范圍廣的shader,功能固定
五大要點:
- properties
- material
- lighting
- setTexture
- pass
1.PASS
2.重要的部分
關(guān)于SurfaceShader:
直接打開unity中默認生成的shader文件(5.0以后版本)可以得到以下代碼:
Shader "Custom/sf" { //surface代碼為自動生成固定格式的代碼功能无虚,它可以讓我們省略從低級開始編寫有些必須手寫的固定代碼段缔赠,
//從而簡化過程,使用Cg可編寫
Properties { //屬性聲明
_Color ("Color", Color) = (1,1,1,1) //顏色值骑科,是一個4階值
_MainTex ("Albedo (RGB)", 2D) = "white" {} //MainTex 為主紋理
_Glossiness ("Smoothness", Range(0,1)) = 0.5 //高光的光澤度
_Metallic ("Metallic", Range(0,1)) = 0.0 //金屬光澤度橡淑,體現(xiàn)在被光直接照射的面鏡面反射強,沒被照射的面鏡面反射弱
}
SubShader { //子shader咆爽,surface中不需要編寫pass通道梁棠,它會自動生成
Tags { "RenderType"="Opaque" } //描述的是一個渲染類型,Opaque是不透明物體
LOD 200
CGPROGRAM //CG代碼段斗埂,一直到ENDCG
// Physically based Standard lighting model, and enable shadows on all light types
#pragma surface surf Standard fullforwardshadows
//pragma為固定格式的代碼符糊,surface為類型,surf是函數(shù)名稱對應(yīng)下面的void surf
//standard是一個光照的方法(5.0之后版本)呛凶,在UnityPBSlighting中可以找到定義
//fullforwardshadows是一個可選選項男娄,具體查看unity手冊 【writing surface shader】部分
// Use shader model 3.0 target, to get nicer looking lighting
#pragma target 3.0 //硬件方面使用的方法
sampler2D _MainTex; //對應(yīng)Properties中的_MainTex,Properties中的2D對應(yīng)sampler2D
struct Input {
float2 uv_MainTex; //名字uv_的結(jié)構(gòu)是必須的漾稀,代表的是紋理坐標模闲,如果沒有uv則有可能導(dǎo)致紋理顯示失敗
};
half _Glossiness; //分別對應(yīng)Properties中的三個值,其中half對應(yīng)的range(浮點值)崭捍,fixed4對應(yīng)color的四階值
half _Metallic;
fixed4 _Color;
// Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
// See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
// #pragma instancing_options assumeuniformscaling
UNITY_INSTANCING_CBUFFER_START(Props)
// put more per-instance properties here
UNITY_INSTANCING_CBUFFER_END
void surf (Input IN, inout SurfaceOutputStandard o) {
//surf函數(shù)用的void返回值尸折,是因為inout中已經(jīng)包含了返回值,inout可有in殷蛇,out等選項
//Input IN對應(yīng)之上的struct結(jié)構(gòu)中對IN的定義
//SurfaceOutputStandard為unity5新增加的可用于(physically based lighing models)实夹,詳見技術(shù)手冊
// Albedo comes from a texture tinted by color
fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
o.Albedo = c.rgb;
// Metallic and smoothness come from slider variables
o.Metallic = _Metallic;
o.Smoothness = _Glossiness;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse" //默認的fallback
}
7.Cg語言的基本格式:
①.Cg語言中的profile:
②Profile(fp20)中Cg語言與C不同的地方(Cg語言的特性):
③Cg的標準函數(shù)庫:
內(nèi)容十分復(fù)雜,參考各類百科或者技術(shù)手冊(類似于matlab的指令)