unity Shader基礎(chǔ)練習(xí)(一)

https://www.bilibili.com/video/av41316597?from=search&seid=16258485520600473382
此筆記是視頻整理所得 詳細的可以看視屏
http://blog.shuiguzi.com/2014/10/28/Release/

環(huán)境搭配

這個是VS的編寫shader的插件

根據(jù)VS版本選擇

當(dāng)然也可以在
image.png

搜索hlsl安裝第一個 然后速度挺慢的1M
image.png

我的安裝完是在桌面
image.png

運行安裝這個應(yīng)該是根據(jù)你VS型號自動匹配的
最好這樣安裝吧
但是這個有提示但是打{}時候不會自動換行對齊要自己手動空格調(diào)位置很麻煩 所以就有了VSCode
鏈接:https://pan.baidu.com/s/1eteXU72gL7_CY-Uc5D2roQ
提取碼:ca2i
這是個package包
image.png

其實只有這個是有用的
進入官方下載VSCode
image.png

然后安裝打開
Ctrl+Shift+p

搜索Configure Language


image.png

回車選擇zh-cn


image.png
image.png
image.png

安裝語言
然后就成了中文版 不行的話可能是順序反了 先安裝語言包再設(shè)置
然后再 ctrl+shif+p 并鍵入 install from vsix
然后按鍵盤上的Enter鍵樊拓。

image.png

就是Package包里的這個程序安裝然后就完畢了 重啟就有提示了

Shader和渲染管線是什么

Shader是圖形可編程方案的程序片段

渲染管線是一種計算機從數(shù)據(jù)到最終圖形成像的形象描述

材質(zhì)是商品 Shader是方法 貼圖是材料

整體流程
渲染管線內(nèi)部詳細流程

Shader三大高級匯編語言 (之前是用匯編 難度增加)

基于OpenGL的GLSL
基于DirectX(微軟)(單機游戲超級多需要安裝) HLSL
基于NVIDIA (N卡)的Cg (其實Cg由N卡公司和微軟一起開發(fā)的,HLSL和Cg其實是一門語言)

為什么使用GPU編程

優(yōu)點: GPU高并行結(jié)構(gòu) 擁有更多邏輯運算單元(ALU)適合用于密集型數(shù)據(jù)處理辩尊,對數(shù)據(jù)進行獨立運算(多個數(shù)據(jù)并行運算時間和一個數(shù)據(jù)單獨執(zhí)行時間是一樣的)
CPU大部分面積為控制器和寄存器
GPU并行處理能力強于CPU 讓它同一時間處理很多頂點數(shù)據(jù)
缺點:由于是數(shù)據(jù)獨立運算難以實現(xiàn)數(shù)據(jù)之間相關(guān)性的算法(射線和物體的求交運算)
GPU無法實現(xiàn)CPU強大邏輯運算能力(這就是為何GPU如此牛皮卻無法取代CPU的原因)

Unity的Shaderlab結(jié)構(gòu)

shader“name”{
[Properties] //屬性
SubShaders //編寫Shader 至少要有一個SubShader 但是多個SubShader只能選一個執(zhí)行 所以多個SubShader是為了不同設(shè)備環(huán)境所編寫(就是游戲里的畫質(zhì)高中低分級渲染)
[FallBack] //回滾 如果以上SubShader都帶不動就運行絕大多數(shù)都能運行的SubShader(一般往往是Unity自帶的)
}

image.png

常用Unity Shader分類

Unlit 只是個紋理不被光照影響(一般用于UI)
VertexLit 頂點光照 放在頂點著色器
Diffuse 漫反射(也是一種光照)放在片段著色器
Normal mapped法線貼圖(凹凸貼圖) 比漫反射昂貴 (表現(xiàn)更多細節(jié) 以假亂真)
Specular高光 模擬光滑物體 高光反射 (金屬 玻璃)
Normal Mapped Specular 高光法線貼圖 比高光昂貴
Parallax Normal mapped視差法線貼圖 (視差: 視覺的差異)
Parallax Normal mapped Specular 視差高光法線貼圖

Fixed function shader(功能有限 速度最快 可在幾乎所有平臺運行)

選擇第一個Create Shader Surface Shader
切記不要習(xí)慣加只锻; 會導(dǎo)致報錯

Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
    _Color("Main Color",COLOR)=(1,1,1,1)
    }
    SubShader {
        //編寫一個通道pass
        pass{
        //COLOR(1,0,0,1)小括號固定值
           Color[_Color]//中括號參數(shù)值
    }
    }
}
image.png

然后就可以創(chuàng)一個Material把Shader改為自己寫的 然后就可以滑動調(diào)節(jié)顏色

Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
    _Color("Main Color",COLOR)=(1,1,1,1)
    }
    SubShader {
        //編寫一個通道pass
        pass{
        //COLOR(1,0,0,1)小括號固定值
           //Color[_Color]//中括號參數(shù)值
           Material//材質(zhì)
           {
           DIFFUSE[_Color]//漫反射顏色 本身固有顏色
           }
           Lighting on//開燈 off關(guān)燈
    }
    }
}

關(guān)燈

關(guān)燈后是他固有顏色

開燈

正面

背面

背光面是黑的

Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
        _Color("Main Color",COLOR) = (1,1,1,1)
        _Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
    }
        SubShader{
        //編寫一個通道pass
        pass {
        //COLOR(1,0,0,1)小括號固定值
        //Color[_Color]//中括號參數(shù)值
        Material//材質(zhì)
        {
            DIFFUSE[_Color]//漫反射顏色 本身固有顏色
            ambient[_Ambient]//環(huán)境光影響
        }
            Lighting on//開燈 off關(guān)燈
    }
    }
}
然后可以受環(huán)境光影響
Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
        _Color("Main Color",COLOR) = (1,1,1,1)
        _Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
        _Specular("Specular",COLOR)= (1,1,1,1)
        _Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高 
    }
        SubShader{
        //編寫一個通道pass
        pass {
        //COLOR(1,0,0,1)小括號固定值
        //Color[_Color]//中括號參數(shù)值
        Material//材質(zhì)
        {
            DIFFUSE[_Color]//漫反射顏色 本身固有顏色
            ambient[_Ambient]//環(huán)境光影響
            SPECULAR[_Specular]//高光
            Shininess[_Shininess]//控制反光點集中
        }
            Lighting on//開燈 off關(guān)燈
            SeparateSpecular on//獨立的鏡面高光
    }
    }
}
Shininess

開始跟點一樣顯示

Shader "Sbin/ff1"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
        _Color("Main Color",COLOR) = (1,1,1,1)
        _Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
        _Specular("Specular",COLOR)= (1,1,1,1)
        _Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高 
        _Emission("Emission",COLOR)= (1,1,1,1)
    }
        SubShader{
        //編寫一個通道pass
        pass {
        //COLOR(1,0,0,1)小括號固定值
        //Color[_Color]//中括號參數(shù)值
        Material//材質(zhì)
        {
            DIFFUSE[_Color]//漫反射顏色 本身固有顏色
            ambient[_Ambient]//環(huán)境光影響
            SPECULAR[_Specular]//高光
            Shininess[_Shininess]//控制反光點集中
            Emission[_Emission]//自發(fā)光
        }
            Lighting on//開燈 off關(guān)燈
            SeparateSpecular on//獨立的鏡面高光
    }
    }
}
Emission

默認白為最亮

Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
        _Color("Main Color",COLOR) = (1,1,1,1)
        _Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
        _Specular("Specular",COLOR)= (1,1,1,1)
        _Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高 
        _Emission("Emission",COLOR)= (1,1,1,1)
        _MainTex("MainTex",2d)=""
    }
        SubShader{
        //編寫一個通道pass
        pass {
        //COLOR(1,0,0,1)小括號固定值
        //Color[_Color]//中括號參數(shù)值
        Material//材質(zhì)
        {
            DIFFUSE[_Color]//漫反射顏色 本身固有顏色
            ambient[_Ambient]//環(huán)境光影響
            SPECULAR[_Specular]//高光
            Shininess[_Shininess]//控制反光點集中
            Emission[_Emission]//自發(fā)光
        }
            Lighting on//開燈 off關(guān)燈
            SeparateSpecular on//獨立的鏡面高光
                    
            SetTexture[_MainTex]//紋理
            {
               // Combine合并
               Combine texture * primary double//代表之前屬性乘上材質(zhì)合并 不然之前的屬性沒用  倍數(shù) 看著亮度加或者減
            }
    }
    }
}
在創(chuàng)建一個material
Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
        _Color("Main Color",COLOR) = (1,1,1,1)
        _Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
        _Specular("Specular",COLOR)= (1,1,1,1)
        _Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高 
        _Emission("Emission",COLOR)= (1,1,1,1)
        _MainTex("MainTex",2d)=""
        _SecondTex("SecondTex",2d)=""
    }
        SubShader{
        //編寫一個通道pass
        pass {
        //COLOR(1,0,0,1)小括號固定值
        //Color[_Color]//中括號參數(shù)值
        Material//材質(zhì)
        {
            DIFFUSE[_Color]//漫反射顏色 本身固有顏色
            ambient[_Ambient]//環(huán)境光影響
            SPECULAR[_Specular]//高光
            Shininess[_Shininess]//控制反光點集中
            Emission[_Emission]//自發(fā)光
        }
            Lighting on//開燈 off關(guān)燈
            SeparateSpecular on//獨立的鏡面高光
                    
            SetTexture[_MainTex]//紋理
            {
               // Combine合并
               Combine texture * primary double//代表之前屬性乘上材質(zhì)合并 不然之前的屬性沒用  倍數(shù) 看著亮度加或者減
            }
            SetTexture[_SecondTex]
            {
               Combine texture * previous double//代表乘上之前所有材質(zhì)的效果 根據(jù)硬件可以添加多個 目前一般兩個
            }
    }
    }
}
兩張材質(zhì)合并后
Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
        _Color("Main Color",COLOR) = (1,1,1,1)
        _Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
        _Specular("Specular",COLOR)= (1,1,1,1)
        _Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高 
        _Emission("Emission",COLOR)= (1,1,1,1)
        _MainTex("MainTex",2d)=""
        _SecondTex("SecondTex",2d)=""
    }
        SubShader{
        //渲染隊列
        Tags {"Queue"="Transparent"}
        //編寫一個通道pass
        pass {
        Blend SrcAlpha OneMinusSrcAlpha//混合之前的層級Alpha 正常模式(透明度混合) 
        //COLOR(1,0,0,1)小括號固定值
        //Color[_Color]//中括號參數(shù)值
        Material//材質(zhì)
        {
            DIFFUSE[_Color]//漫反射顏色 本身固有顏色
            ambient[_Ambient]//環(huán)境光影響
            SPECULAR[_Specular]//高光
            Shininess[_Shininess]//控制反光點集中
            Emission[_Emission]//自發(fā)光
        }
            Lighting on//開燈 off關(guān)燈
            SeparateSpecular on//獨立的鏡面高光
                    
            SetTexture[_MainTex]//紋理
            {
               // Combine合并
               Combine texture * primary double//代表乘上之前屬性乘上材質(zhì)合并 不然之前的屬性沒用  倍數(shù) 看著亮度加或者減
            }
            SetTexture[_SecondTex]
            {
               Combine texture * previous double//代表乘上之前所有材質(zhì)的效果 根據(jù)硬件可以添加多個 目前一般兩個
            }
    }
    }
}
調(diào)節(jié)MainColor的Alpha值
Shader "Sbin/ff2"http:// Shader中的位置這個最后一個名字要和你創(chuàng)的Shader名字一樣
{
    Properties{
        _Color("Main Color",COLOR) = (1,1,1,1)
        _Ambient("Ambient",COLOR)=(0.3,0.3,0.3,0.3)
        _Specular("Specular",COLOR)= (1,1,1,1)
        _Shininess("Shininess",Range(0,8))=4//范圍0-8默認=4 越光滑物體 值越高 
        _Emission("Emission",COLOR)= (1,1,1,1)
        //不加括號可以 _Constant("ConstantColor",COLOR)=(1,1,1,0.3)放兩個貼圖上面
        
        _MainTex("MainTex",2d)="white"{}
        _SecondTex("SecondTex",2d)=""{}
        _Constant("ConstantColor",COLOR)=(1,1,1,0.3)
    }
        SubShader{
        //渲染隊列
        Tags {"Queue"="Transparent"}//是一個值 譯為透明的
        //編寫一個通道pass
        pass {
        Blend SrcAlpha OneMinusSrcAlpha//混合之前的層級Alpha 正常模式(透明度混合) 
        //COLOR(1,0,0,1)小括號固定值
        //Color[_Color]//中括號參數(shù)值
        Material//材質(zhì)
        {
            DIFFUSE[_Color]//漫反射顏色 本身固有顏色
            ambient[_Ambient]//環(huán)境光影響
            SPECULAR[_Specular]//高光
            Shininess[_Shininess]//控制反光點集中
            Emission[_Emission]//自發(fā)光
        }
            Lighting on//開燈 off關(guān)燈
            SeparateSpecular on//獨立的鏡面高光
                    
            SetTexture[_MainTex]//紋理
            {
               // Combine合并
               Combine texture * primary double//代表乘上之前屬性乘上材質(zhì)合并 不然之前的屬性沒用  倍數(shù) 看著亮度加或者減
            }
            SetTexture[_SecondTex]
            {
               ConstantColor[_Constant]//改為用灰度系數(shù)控制透明度
               //代表乘上之前所有材質(zhì)的效果 根據(jù)硬件可以添加多個 目前一般兩個
               //Combine texture * previous double,texture //針對貼圖自身Alpha之前的Alpha無效 一般用于美工給的圖自帶Alpha通道   
               Combine texture * previous double,texture*constant           
             }
    }
    }
}

效果是一樣的 調(diào)節(jié)透明度方式不一樣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市樱溉,隨后出現(xiàn)的幾起案子挣输,更是在濱河造成了極大的恐慌,老刑警劉巖福贞,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撩嚼,死亡現(xiàn)場離奇詭異,居然都是意外死亡挖帘,警方通過查閱死者的電腦和手機完丽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拇舀,“玉大人逻族,你說我怎么就攤上這事∧阒桑” “怎么了瓷耙?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵朱躺,是天一觀的道長。 經(jīng)常有香客問我搁痛,道長长搀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任鸡典,我火速辦了婚禮源请,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彻况。我一直安慰自己谁尸,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布纽甘。 她就那樣靜靜地躺著良蛮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悍赢。 梳的紋絲不亂的頭發(fā)上决瞳,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音左权,去河邊找鬼皮胡。 笑死,一個胖子當(dāng)著我的面吹牛赏迟,可吹牛的內(nèi)容都是我干的屡贺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锌杀,長吁一口氣:“原來是場噩夢啊……” “哼甩栈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抛丽,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤谤职,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亿鲜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡冤吨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年蒿柳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漩蟆。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡垒探,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怠李,到底是詐尸還是另有隱情圾叼,我是刑警寧澤蛤克,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站夷蚊,受9級特大地震影響构挤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惕鼓,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一筋现、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧箱歧,春花似錦矾飞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至价淌,卻和暖如春微谓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背输钩。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工豺型, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人买乃。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓姻氨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親剪验。 傳聞我的和親對象是個殘疾皇子肴焊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

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

  • 這個《孟姜女的傳說》的版本編的不好,可人民文學(xué)出版社照樣收集出版功戚。 因為這個故事有兩段情節(jié)的描寫娶眷,實在有損孟姜女在...
    張楓閱讀 603評論 0 0
  • 因為要寫論文,所以常來圖書館查閱資料和寫作啸臀,圖書館里面光線充足届宠、溫暖舒適、布局安排合理乘粒、學(xué)習(xí)氣氛濃厚豌注,每天來學(xué)習(xí)的...
    解憂少年閱讀 5,582評論 9 6
  • 西游記告訴我們的道理17 經(jīng)典劇《西游記》,百看不厭灯萍。仔細想來轧铁,處處皆經(jīng)典,句句皆可揣摩旦棉。(本次依據(jù)的第25集) ...
    寒娜Hannah閱讀 1,030評論 0 1
  • 中國共有四個故宮:北京故宮齿风、南京故宮药薯、沈陽故宮、臺北故宮救斑。 沈陽故宮與北京故宮一起構(gòu)成了中國僅存的兩大完整的明清皇...
    投己有趣閱讀 1,433評論 0 3