一、什麼是shader:
shader,就是著色器,是一種執行在 gpu 上的程式。gpu —— programmable graphics processing unit,即可程式設計圖形處理單元,也稱為可程式設計圖形硬體。至於 gpu 上的程式設計,實質上就是 gpu 允許應用程式指定乙個序列的指令進行頂點操作控制。shader 的作用是:
對三維物體進行著色處理、光與影的計算、紋理顏色的呈現等,從而將遊戲引擎中乙個個作為抽象的幾何資料存在的模型、場景和特效,以和真實世界類似的光與影的形式呈現與玩家的眼中。(簡單點的理解就是:利用 gpu 程式設計使得構件出來的物件近似於真實世界中的物件呈現出來的處理)通過 shader 可以改變物體的形狀、大小、位置以及旋轉等。
二、shader發展和架構:
1.發展簡史:
學過 opengl 的人應該知道,opengl 的發展歷程就是從固定管線的渲染發展到可程式設計管線的渲染。其實,shader 也是相似的,最初的 shader 程式設計採用的也是固定管線,如今也發展為可程式設計流水線。
微軟圖形軟體庫directx,定義了一系列的 sm,即 shader model(shader 模型),用於描述 shader 的特性和能力,而且與directx的版本具有對應關係如下:
sm 1.0 ——》directx 8.0,sm 2.0 ——》directx 9.0,
sm 3.0 ——》directx 9.0c,sm 4.0 ——》directx 10.0,
sm 5.0 ——》directx 11.0
說到directx我們自然而然地想起與之比肩的另外乙個圖形軟體庫標準opengl,它對於sm的也具有版本對應關係:
sm 4.0 ——》opengl 3.3,sm 5.0 ——》opengl 4.3
主流圖形 api:opengl、opengl es 和 directx
近幾年推出的新型圖形 api:vulkan 和 metal
2.內容架構:
shader 分為兩種基礎型別:頂點 shader 和片段 shader,它們的特點分別是:
頂點 shader:具有可以處理、變換,最終會渲染到螢幕上的網格物體的頂點位置的功能,但它不能生成新的頂點;
片段 shader:會對乙個片段(預備畫素)進行各種測試,如 z 深度測試、alpha 比較測試,能通過各種測試的片段,最終會被寫入渲染的輸出幀中,從而成為螢幕上的乙個可見畫素。
3.shader 的例項化:
從上文我們已經知道了 shader 是 gpu 中的一種程式設計程式,那麼與 cpu 中執行的普通程式語言(c語言、c++等)中的類相似,gpu 中的 shader 也相當於乙個類,能夠進行例項化,生成物件,然後可以對此物件進行各種屬性的設定,例如設定貼圖和顏色。
4.shader 的實現語言:
gpu 與 cpu 是截然不同的,這不僅僅再其硬體結構的差異上,這也就決定了在兩者執行環境下的程式設計過程也是不同的。目前面向gpu的程式設計,有3種高階影象語言,分別是:
a.微軟的 hlsl(high level shading language),是通過 direct3d 圖形軟體庫來寫 shader 程式的語言;
b.opengl 提供的 glsl(opengl shading language) 來寫 shader 程式;
c.nvidia 提供的 cg(c for graphics)語言(以 hlsl 為基礎,很相似),相容 direct3d 和 opengl 圖形介面;
考慮到最大化的跨平台支援,選擇使用相容性最高的 cg 作為編寫shader的語言,但假如只針對 unity 3d 引擎,也可以選擇 glsl。
unity shader 學習筆記
upgrade note replaced world2object with unity worldtoobject upgrade note replaced mul unity matrix mvp,with unityobjecttoclippos shader unity shader b...
unity shader學習總結一
學習unity shader有兩個月了,最近的兩個月總是有一些工程專案,占用我大量的學習時間,因此總是停停學學。今天虛擬校園工程開好完成了,就有時間吧自己學到的shader,總結一下。這是兩個 jianbian紋理 實現的效果如下 如下 shader custom katongmylihmodel ...
UnityShader學習記錄(一)
ps 本文章摘取自 unityshader入門精要 一書。之前一直想shader是乙個很難的東西,在接觸 unityshader入門精要 之後感覺也不是想象中的複雜,但是想要學好shader是乙個漫長的過程,基礎篇和初級篇看完之後感覺收穫挺大,為此,記錄一下。在進入shader之前,需要把渲染流水線...