unity shader入門

轉(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)能力和效率槽片,而渲染管線則是提高顯卡的工作能力和效率绰筛。

渲染管線.png
傳統(tǒng)的shader.png
unity中的shader.png

2.shader與材質(zhì)薪丁,貼圖的關(guān)系

shader與材質(zhì)产上,貼圖的關(guān)系.png

3.shader與渲染管線

  • shader:是圖形可編程方案的程序片段
  • 渲染管線:是一種計算機從數(shù)據(jù)到最終圖形成像的形象描述(類似汽車生產(chǎn)流水線)
  • 材質(zhì)是商品假颇,shader是加工方法辆亏,貼圖是原材料

4.三種shader的高級語言:HLSL,GLSL,CG

三種語言.png
CG語言優(yōu)勢.png

5.unity中使用ShaderLab語法編寫:基本格式如下

ShaderLab的基本結(jié)構(gòu).png
  • Properties:屬性
  • SubShaders:編寫的執(zhí)行的shader方法风秤,每次只能執(zhí)行一組SubShader。如果第一個不適配扮叨,則往下執(zhí)行第二個
  • FallBack:如果上述SubShaders都不能執(zhí)行缤弦,則執(zhí)行FallBack所指定的shader,往往是系統(tǒng)包含的絕大多數(shù)硬件都支持的shader彻磁,如下


    unity自帶shader.png

其中相當重要的:

  • 法線貼圖 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

ShaderLab的pass通道基本語法.png

2.重要的部分

Paste_Image.png

關(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語言的基本格式:

image.png

①.Cg語言中的profile:

image.png

②Profile(fp20)中Cg語言與C不同的地方(Cg語言的特性):

image.png

image.png

③Cg的標準函數(shù)庫:

內(nèi)容十分復(fù)雜,參考各類百科或者技術(shù)手冊(類似于matlab的指令)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末粒梦,一起剝皮案震驚了整個濱河市亮航,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匀们,老刑警劉巖缴淋,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡宴猾,警方通過查閱死者的電腦和手機圆存,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仇哆,“玉大人沦辙,你說我怎么就攤上這事《锾蓿” “怎么了油讯?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長延欠。 經(jīng)常有香客問我陌兑,道長,這世上最難降的妖魔是什么由捎? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任兔综,我火速辦了婚禮,結(jié)果婚禮上狞玛,老公的妹妹穿的比我還像新娘软驰。我一直安慰自己,他們只是感情好心肪,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布锭亏。 她就那樣靜靜地躺著,像睡著了一般硬鞍。 火紅的嫁衣襯著肌膚如雪慧瘤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天固该,我揣著相機與錄音锅减,去河邊找鬼。 笑死伐坏,一個胖子當著我的面吹牛怔匣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播著淆,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拴疤!你這毒婦竟也來了永部?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呐矾,失蹤者是張志新(化名)和其女友劉穎苔埋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜒犯,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡组橄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年荞膘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玉工。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡羽资,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遵班,到底是詐尸還是另有隱情屠升,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布狭郑,位于F島的核電站腹暖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏翰萨。R本人自食惡果不足惜脏答,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亩鬼。 院中可真熱鬧殖告,春花似錦、人聲如沸辛孵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽魄缚。三九已至宝与,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冶匹,已是汗流浹背习劫。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嚼隘,地道東北人诽里。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像飞蛹,于是被迫代替她去往敵國和親谤狡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 作者學(xué)習(xí)shader已經(jīng)有很長一段時間了卧檐,這篇文章是對shader的整理和總結(jié)墓懂。shader的世界繽紛多彩,浩瀚無...
    葉小健閱讀 12,874評論 5 79
  • 此系列為本人學(xué)習(xí)Unity Shader的隨筆記錄: Shader和Material Shader(著色器)實際上...
    白玖千代閱讀 1,512評論 0 1
  • <轉(zhuǎn)>我也忘了轉(zhuǎn)自哪里,抱歉,感謝原作者 什么是Shader Shader(著色器)是一段能夠針對3D對象進行操作...
    星易乾川閱讀 5,584評論 1 16
  • 忽憶兒時一事霉囚,甚覺可笑捕仔,遂記之。 時年余不過八九歲,喜動榜跌,好武功闪唆,尤愛棍棒。一日钓葫,見門角一棒悄蕾,光滑細長...
    老清閱讀 147評論 0 0
  • 我們每天都行走在對錯之間笼吟, 走得最急的,都是最美的風(fēng)景霸旗; 傷得最深的贷帮,也總是那些最真的感情。 時光诱告,用它的姿態(tài)流逝...
    一世明哥閱讀 304評論 0 1