国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity(三) Shader著色器初探

這篇具有很好參考價值的文章主要介紹了Unity(三) Shader著色器初探。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

學習3D開發(fā)技術的時候無可避免的要接觸到Shader,那么Shader是個什么概念呢?其實對于開發(fā)同事來說還是比較難理解的,一般來說Shader是服務于圖形渲染的一類技術,開發(fā)人員可以通過其shader語言來自定義顯卡渲染頁面的算法,從而達到按照自己的想法來渲染出目標效果。

1. Unity Shader

不同的圖形API會對應不同的Shader語言,感興趣的可以去了解下更多這方面的內容。Unity目前開發(fā)階段基于Windows平臺開發(fā)和運行,一般采用Direct3D或OpenGL,如需要兼容其他平臺可在打包的時候選取對應平臺如安卓、IOS等,并關注切換后是否存在”粉色“的情況,如出現(xiàn)模型表面為”粉色“,一般是Shader出現(xiàn)不兼容錯誤,需要修復。

在編碼之前我們需要先來了解下Unity常見的幾種Shader:

1. Surface Shaders 表面著色器

????????Unity對Vertex/Fragment Shader的又一層包裝,以使Shader的制作方式更符合人類的思維模式,同時可以以極少的代碼來完成不同的光照模型與不同平臺下需要考慮的事情。

2.?Vertex/Fragment Shaders 頂點/片段著色器(重要)

????????一般的頂點+片段著色器的工作原理如下圖所示

unity 著色器,3D開發(fā),unity,著色器,游戲引擎

a. 頂點處理(頂點著色器)

????????主要執(zhí)行坐標轉換和逐頂點光照的任務,坐標轉換是將頂點坐標從模型空間轉換到齊次裁剪空間中,可以使用UnityObjectToClipPos()函數(shù)來實現(xiàn)。

b. 圖元處理

????????在裁剪空間中進行裁剪(Clipping)、背面剔除(Back-Face Culling)、屏幕映射(ScreenMapping)等操作。為的是剔除不需要的頂點/面,并做好三維坐標到二維屏幕坐標的轉換。

c. 光柵化

????????是將變換到屏幕空間的圖元離散化為片元的過程。

d. 片段處理(片段著色器)

????????(1). 紋理貼圖 - Textures

????????紋理貼圖也稱為紋理映射,是將圖像信息映射到三角形網(wǎng)格上的技術,以此來增加物體表面的細節(jié),令物體更具有真實感。

????????(2). 光照計算 - Lighting

????????光照由直接光和間接光組成,計算光照最常用的就是phong模型了,它是一個經(jīng)驗模型,參數(shù)信息都是經(jīng)驗得到的,并沒有實際的物理意義,所以利用Phong模型會出現(xiàn)違背物理規(guī)則的時候。

漫反射Difuse + 鏡面發(fā)射Specular + 環(huán)境光Ambient = Phong

?????????(3). 混合與測試

????????輸出合并(Output-Merger):在DirectX中,該階段被稱為輸出合并階段,而OpenGL將其稱為逐片元操作(Per-Fragment Operations),從稱呼中就可以看出,這個階段主要是對每一個片元進行一些輸出合并操作,包括Alpha測試、模板測試、深度測試和混合等,它的主要任務是決定片元的可見性,對通過測試的片元顏色進行混合

????????Alpha測試:通過片元數(shù)據(jù),可以獲取該片元的alpha值,如果alpha值小于某個數(shù)的話,則直接將該片元丟棄,不進行渲染

????????模板測試:GPU會首先讀取模板緩沖區(qū)中該片元位置的模板值,然后將該值和讀取到的參考值進行比較,例如小于時舍棄該片元,或者大于等于時舍棄該片元。

????????深度測試:近處的物體會遮擋遠處的物體,這種效果我們可以通過深度測試來模擬實現(xiàn)。

????????混合:對于半透明物體,我們就需要使用混合操作來讓這個物體看起來是透明的

e. 幀緩存

????????可以簡單理解為一個臨時畫布,GPU渲染完成的信息會存放在幀緩存區(qū),等待使用,上述各種測試也是在幀緩沖區(qū)進行的

以下這個圖更容易理解:

unity 著色器,3D開發(fā),unity,著色器,游戲引擎

自己理解簡而言之就是:

描點(坐標變換)->?

連線(三角面)->

形成格子(光柵化)->

上色(紋理、光照、) ->

后期處理(測試、混合)

2. 幾個和Shader相關的概念

(1)網(wǎng)格(Mesh)

????????網(wǎng)格Mesh是GameObject的3D骨架,它是有頂點(Vertex)定義的一個2D多邊形,這些頂點是3D空間中存儲為XYZ坐標。網(wǎng)格還包括法線,Shader通過法線讓面看起來更光滑。

(2)貼圖、紋理(Maps、textures)

????????紋理(Texture):2D 圖像文件,它像一張紙一樣環(huán)繞GameObject,以設置網(wǎng)格中的顏色、鏡面反射或金屬度、物理紋理和其他屬性。圖像文件的數(shù)據(jù)被組織為通道(RGB/RGBA)。

????????底圖紋理(Base Map Texture):一個常規(guī) RGB 或 RGBA 彩色圖像文件,用于定義對象表面的漫反射(即顏色)

????????平鋪紋理(Tiled Texture):平鋪紋理的紋理設計為圍繞任何網(wǎng)格平鋪。每個文件中的地圖就像地板上的瓷磚一樣簡單地重復

????????UV貼圖:對于像球體這樣的基元和像我們的塊這樣的簡單形狀,紋理貼圖在哪些點與對象的網(wǎng)格對齊并不重要。但是在角色模型等詳細對象上,紋理貼圖與網(wǎng)格的對齊非常重要

????????Alpha裁剪(Alpha Clip):根據(jù)Mesh網(wǎng)格填充紋理,避免大量計算。(也可用于溶解效果、消失/出現(xiàn)效果)

????????凹凸貼圖(Bump Texture):使用凹凸貼圖,著色器將表面細節(jié)的外觀添加到網(wǎng)格中,而無需實際添加多邊形。這種技術對性能更好。使用法線貼圖和高度貼圖(normal maps and height maps)

????????法線貼圖:通過設置頂點位置,使著色器創(chuàng)建表面上的片段(像素)面向不同方向的錯覺。

????????高度貼圖:設置網(wǎng)格中每個像素的相對高度

????????遮擋貼圖(Occlusion Map):遮擋貼圖為這些遮擋區(qū)域添加陰影。

????????發(fā)射貼圖(Emission Map):制作發(fā)光效果的貼圖

(2)反射

????????環(huán)境光遮蔽AO(Occlusion):大部分情況下,AO通過構造一個發(fā)射光線的半(hemisphere)來計算。半球上表面布滿朝各個方向發(fā)射的光線,然后判斷這些光線是否與其它的物體相交。如果光線到達背景或者天空,那么就增加這個光線發(fā)出點的表面亮度,如果與其他物體相交,則不用。(靠得非常近的物體之間的陰影效果會非常明顯)

????????漫反射(Base map):

? ? ? ? 1. 反照率(Albedo):描述了漫反射的測量。它通常指定為常規(guī)顏色,表示為紅色、綠色和藍色的三個值(RGB 值)。RGB 值可以轉換為色調、飽和度和亮度(亮度)的值。反照率顏色的亮度對應于漫反射的量,色調和飽和度描述了從表面逸出的光的質量。

????????2. 地圖(Map):地圖可以是純色的,也可以用 2D 圖像指定以增加表面的變化。

????????鏡面反射(Specular):鏡面反射作為材料的一種屬性,是一種指定表面看起來像金屬的方法。您可以使用兩種工作流程來指定材質中的金屬外觀——Specular、Metallic

????????平滑度(Smoothness):平滑度,也稱為光澤度或光澤度,使鏡面反射成為焦點。

3. 如何編寫Shader

(1). ShaderLab

????????ShaderLab 是一種在著色器源文件中使用的類C語言的聲明性語言。它使用嵌套大括號語法來描述 Shader 對象。其結構如下:

Shader "Examples/ShaderSyntax"
{
    CustomEditor = "ExampleCustomEditor"

    Properties
    {
        // 此處是材質屬性聲明
    }
    SubShader
    {
        // 此處是定義子著色器的其余代碼

        Pass
        {
           // 此處是定義通道的代碼
        }
    }

    Fallback "ExampleFallbackShader"
}

ShaderLab是一種聲明式語言格式來編寫Shader,可在代碼自由編寫Shader支持的所有特性和屬性,并設置回退行為。

(2). HLSL

都是著色語言,作為中間語言(Intermediate Language),即交給GPU可以理解的語言。

因為Microsoft和NVIDIA合作,所以Cg/HLSL實際上是同一種語言。而ShaderLab內部可以嵌套Cg/HLSL語言編寫著色代碼,需要嵌套在命令CGPROGRAM和ENDCG之間。如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-731092.html

Pass {
    // Pass 的標簽和狀態(tài)設置
    CGPROGRAM
    // 編譯指令
    #pargma vertex vert
    #pargma fragment frag
    // CG代碼
    ENDCG
    // 其他設置
}</pre>

到了這里,關于Unity(三) Shader著色器初探的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質

    SuperMap Hi-Fi 3D SDK for Unity制作游戲引擎材質

    kele ????在交通,電力,規(guī)劃等行業(yè)中,有的對象常常具有很強的質感,比如金屬質感的 鋼軌,電力塔;陶瓷材質的絕緣子;玻璃材質的建筑幕墻等,但常規(guī)方式的表現(xiàn)效果 往往差強人意。 ????游戲引擎(Unity3D)中已有豐富的材質資源庫,比如玻璃,金屬等材質,這

    2024年02月09日
    瀏覽(21)
  • 【畢業(yè)論文】| 基于Unity3D引擎的冒險游戲的設計與實現(xiàn)

    【畢業(yè)論文】| 基于Unity3D引擎的冒險游戲的設計與實現(xiàn)

    ??博客主頁:肩匣與橘 ??歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤敬請指正! ??本文由 肩匣與橘 編寫,首發(fā)于 CSDN ?? ??生活依舊是美好而又溫柔的,你也是?? 基于Unity3D引擎的冒險游戲的設計與實現(xiàn) ??前言 摘要 Abstract 1 緒論 1.1 選題背景 1.2 研究目的及意義 2 開發(fā)工具

    2024年02月05日
    瀏覽(34)
  • 【游戲開發(fā)小技】Unity通過UI全屏圖來模糊場景畫面(Shader | 模糊 | 濾鏡 | Blur)

    【游戲開發(fā)小技】Unity通過UI全屏圖來模糊場景畫面(Shader | 模糊 | 濾鏡 | Blur)

    一、前言 嗨,大家好,我是新發(fā)。 以前我寫文章都是很長很長,接下來我會嘗試用新的方式來寫博客,盡量簡短,以實用為主。同時也是作為自己零碎的一些記錄,方便查閱。 本文我要說的是在 Unity 中通過 UI 全屏圖來模糊場景畫面的效果。 二、效果演示 這是沒用模糊效果

    2024年02月05日
    瀏覽(22)
  • Unity、UE、Cocos游戲開發(fā)引擎的區(qū)別

    Unity、Unreal Engine(UE)和Cocos引擎是三個常用的游戲開發(fā)引擎,它們在功能和特性上有一些區(qū)別。以下是它們之間的主要區(qū)別: 編程語言:Unity使用C#作為主要的編程語言,開發(fā)者可以使用C#腳本進行游戲邏輯編寫。Unreal Engine主要使用C++作為編程語言,但也支持藍圖系統(tǒng),允許

    2024年02月22日
    瀏覽(99)
  • 【Unity3D賽車游戲優(yōu)化篇】【十】汽車粒子特效和引擎咆哮打造極速漂移

    【Unity3D賽車游戲優(yōu)化篇】【十】汽車粒子特效和引擎咆哮打造極速漂移

    ?????個人主頁 :@元宇宙-秩沅 ????? hallo 歡迎 點贊?? 收藏? 留言?? 加關注?! ????? 本文由 秩沅 原創(chuàng) ????? 收錄于專欄 :Unity游戲demo – ??????版本: Unity2021 ??????適合人群:Unity初學者進階 ??????學習目標:3D賽車游戲的基礎制作 ??????技能

    2024年02月09日
    瀏覽(44)
  • 【贈書第11期】Unity 3D游戲開發(fā)

    【贈書第11期】Unity 3D游戲開發(fā)

    文章目錄 前言 1 Unity 3D簡介 2 Unity 3D基本概念 2.1 場景(Scene) 2.2 游戲對象(Game Object) 2.3 組件(Component) 2.4 資源(Asset) 3 Unity 3D重要組件 3.1 物理引擎 3.2 動畫系統(tǒng) 3.3 粒子系統(tǒng) 3.4 網(wǎng)絡功能 4. 常用技術和工具 4.1 編程語言 4.2 物理材質 4.3 光照和陰影 5 總結 6 推薦書籍 7 粉

    2024年02月04日
    瀏覽(16)
  • Unity讀書系列《Unity3D游戲開發(fā)》——腳本(一)

    Unity讀書系列《Unity3D游戲開發(fā)》——腳本(一)

    腳本在Unity的重要程度不用多說,她是大部分軟件的核心組件。 我們將在此篇文章學習腳本模版及其拓展、腳本的生命周期、腳本的執(zhí)行順序、腳本序列化,下一篇為腳本編譯與調試。 如下圖我們可以在Project視圖右鍵進行腳本創(chuàng)建,除了C#腳本,還有兩類腳本;Testing用來做

    2024年04月28日
    瀏覽(101)
  • Unity讀書系列《Unity3D游戲開發(fā)》——基礎知識

    Unity讀書系列《Unity3D游戲開發(fā)》——基礎知識

    本篇對應標題書籍的第一章基礎知識,也就是unity的基本常識和工作流的說明。 Unity目前用于創(chuàng)建2D和3D游戲、模擬應用程序、可視化體驗以及其他虛擬現(xiàn)實(VR)和增強現(xiàn)實(AR)應用,游戲工業(yè)兩開花。 Unity初版是在2005年發(fā)布的,開始時用unity3.X、4.X這樣的名稱進行版本更新

    2024年01月18日
    瀏覽(96)
  • Unity 3D游戲開發(fā)+腳本編程完整指南:制作第一個游戲:3D滾球跑酷

    Unity 3D游戲開發(fā)+腳本編程完整指南:制作第一個游戲:3D滾球跑酷

    教程相關資源 Unity 3D游戲開發(fā)+腳本編程完整指南(工程文件+PPT).zip 本節(jié)利用前面的知識來實現(xiàn)第一個較為完整的小游戲,如 圖 1-21 所示。 圖1-21 3D滾球跑酷游戲完成效果 1. 功能點分析 游戲中的小球會以恒定速度向前移動,而玩家控制著小球 左右移動來躲避跑道中的黃色障

    2024年02月21日
    瀏覽(31)
  • Unity 3D腳本編程與游戲開發(fā)(2.6)

    Unity 3D腳本編程與游戲開發(fā)(2.6)

    4.5.2 四元數(shù)的概念 ????????四元數(shù)包含?個標量分量和?個三維向量分量,四元數(shù)Q可以記作Q=[w,(x,y,z)] ????????在3D數(shù)學中使?單位四元數(shù)表?旋轉,下?給出四元數(shù)的公式定義。對于三維空間中旋轉軸為n,旋轉?度為a的旋轉,如果?四元數(shù)表?,則4個分量分別為

    2024年02月03日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包