日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UnityShader之Shader分类篇【Shader资料2】

發布時間:2023/12/10 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UnityShader之Shader分类篇【Shader资料2】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  關于ShaderLab,從我個人的理解上來看應該是分為三種類型。

  1、Fixed function shader

    固定渲染管線Shader,基于用于高級Shader在老顯卡無法顯示時的Fallback,使用的是ShaderLab語言,屬于真正的ShaderLab語言,和我們平時看到的shader的區別后面細說。

  2、Vertex and Fragment Shader

    可編程渲染管線,這種Shader包含Vertex Shader和Fragment Shader,也就是頂點著色器和片段著色器。頂點著色器會根據你自己的定義自動獲取頂點一些相關信息。使用CG/HLSL語法,小伙伴們平時應該都注意到了有時候在Shader中會出現#include "UnityCG.cginc"這類聲明,這里面就是Unity給我們做好的一個庫,你可以想像成C語言程序中的include,C#程序員可以想象成代碼文件開頭的Using引用,Android程序員可以將其想象成代碼開頭的import引用。

  3、Surface Shader

    unity自己最為推崇的Shader類型,使用Unity預制的光照模型來進行光照運算。也是使用CG/HLSL。

  

  Unity的三種Shader對比相同點:

  1、都必須從唯一一個根的Shader開始,也就是本系列資料1中解釋的調用函數。

  2、Properties參數部分,作用和語法完全相同,沒有任何區別,沒有萬一。

  3、具體的功能都在SubShader里去實現,如果有多個Subshader,那么機器不會全部執行,而是最多只執行一個,執行方式是從上自下開始運行硬件能夠支持的第一個SubShader,這樣做的目的主要是為了兼容不同類型的顯卡。

  4、都可以貼上標簽,也就是Tags塊,例如Tags { "RenderType" = "Opaque" }????LOD 200 ????以及Lighting On等,這些的具體用法咱們后面細說。

  5、結束的時候都可以用Fallback來進行對備胎Shader的使用,備胎的意思也就是如果所有的SubShader都不被硬件支持,就會去使用Fallback所指定的Shader。

  6、都可以處理基本的功能,例如光照反射鏡面反射等。但是頂點片段著色器和表面著色器都可以實現固定管線實現不了的高級功能,例如基于UV計算的效果等。

  

  Unity的三種Shader對比不同點:

  1、固定管線和頂點片段著色器的SubShader下面還有pass{}通道,但是表面著色器已經將具體內容打包在光照模型里面了,所以不能加上pass{}通道。

  2、固定管線每句代碼之后沒有分號,但是V&F著色器Sur著色器的每句代碼之后都必須加上分號,這種設計也許更符號碼農們的期望吧。

  3、核心結構不同,?

  固定管線的核心:

    Material{} 以及 SetTexture[_MainTex]{}

  V&F著色的核心:

    CGPROGRAM    //聲明使用CG語言

    #pragma vertex vert  //聲明頂點函數vert

    #pragma frament frag  //聲明片段函數frag

    #include "UnityCG.cginc"  //導入unity的CG庫

    ENDCG

  Surface Shader的核心:

    CGPROGRAM  //聲明使用CG語言

    #pragma surface surf Lambert  //聲明一個表面著色器函數surf,并使用Unity自己的光照模型和頂點函數

    //Lambert為Unity自帶的光照模型函數,我們也可以使用自己寫的光照模型函數,并且使用自己寫的頂點函數

    //  ? ? ? surface 表面處理函數???光照模型函數??????頂點處理:函數
    //#pragma surface??surf?????????lsyLightModel??????vertex:vert

    //執行順序???頂點處理函數 -> 表面處理函數 -> 光照模型函數 ->顏色值

    ENDCG

    

轉載于:https://www.cnblogs.com/vsirWaiter/p/5988974.html

總結

以上是生活随笔為你收集整理的UnityShader之Shader分类篇【Shader资料2】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。