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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Unity3D之shader概述

發(fā)布時間:2024/6/21 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 Unity3D之shader概述 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引言,在Unity3d里,所有的圖形繪制都必須通過Shader,即著色器。一般的使用過程中,我們用到的都是unity自帶的Shader,即build-in shader。學(xué)習(xí)Shader后,自己寫的Shader能做出很多你想要的特殊效果,增強游戲的畫面表現(xiàn)。例如 水的倒影。 LOGO的光影閃過等等效果等等。

Shader的分類

Shader按管線分類一般分為固定渲染管線與可編程渲染管線

1)固定渲染管線 ——這是標準的幾何&光照(Transforming&Lighting)管線,功能是固定的,它控制著世界、視、投影變換及固定光照控 制和紋理混合。T&L管線可以被渲染狀態(tài)控制,矩陣,光照和采制參數(shù)。功能比較有限。基本所有的顯卡都能正常運行。
2)可編程渲染管線——對渲染管線中的頂點運算和像素運算分別進行編程處理,而無須象固定渲染管線那樣套用一些固定函數(shù),取代設(shè)置參數(shù)來控制管線。


Unity3d的三種Shader


Unity的Shader分為三種:
(1)Fixed function shader 屬于固定渲染管線Shader, 基本用于高級Shader在老顯卡無法顯示時的Fallback(之后有詳細介紹)。使用的是ShaderLab語言,語法與微軟的FX files 或者NVIDIA的 CgFX類似。
(2)Vertex and Fragment Shader 最強大的Shader類型,屬于可編程渲染管線. 使用的是CG/HLSL語法。
(3)Surface Shader Unity3d推崇的Shader類型,使用Unity預(yù)制的光照模型來進行光照運算。使用的也是CG/HLSL語法。


Unity3d三種Shader對比

三種Shader共同點:
(1)都必須從唯一一個根Shader開始
(2)Properties參數(shù)部分,作用及語法完全相同
(3)具體功能都在SubShader里(Subshader: 子Shader,Shader會自上而下運行第一個硬件能支持的Subshader,主要作用是對不用硬件的支持。)
(4)都可以打標簽,例如Tags { "RenderType" = "Opaque" }LOD 200 以及Lighting On等
(5)都可以Fallback
(6)都可以處理基本的功能,例如光照漫反射(Diffuse)以及鏡面反射(Specular)。但是Vertex and Fragment和Surface都能實現(xiàn)Fixed function實現(xiàn)不了的高級功能,例如基于uv計算的效果等等。

三種Shader不同點:
(1)Fixed function shader以及Vertex and Fragment Shader在subshader下面還有pass{},但是Surface Shader,由于已經(jīng)將具體內(nèi)容打包在光照模型了,不能加pass{},加了會報錯。
(2)Fixed function shader每句代碼之后沒有分號';'但是V&F shader以及Surface shader每句代碼之后都必須加分號';'
(3)核心結(jié)構(gòu)不同:
Fixed function shader的核心是
Material{} 以及 SetTexture[_MainTex]{}

Vertex and Fragment Shader的核心是

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
ENDCG

Surface Shader的核心是

(1)這套用的是Unity3d自帶光照模型Lambert,也不做頂點處理,那么只需要一個表面處理函數(shù)surf即可

CGPROGRAM
#pragma surface surf Lambert
ENDCG
或者(2)這套表示使用的是自己寫的光照模型lsyLightModel,并且使用了頂點處理函數(shù)vert

CGPROGRAM
//surface 表面處理函數(shù)光照模型函數(shù)頂點處理:函數(shù)
#pragma surfacesurflsyLightModelvertex:vert
//執(zhí)行順序頂點處理函數(shù) -> 表面處理函數(shù) -> 光照模型函數(shù) ->顏色值
ENDCG

摘自http://blog.sina.com.cn/s/blog_471132920101d5kh.html

總結(jié)

以上是生活随笔為你收集整理的Unity3D之shader概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。