[Unity Shader] Shader學習筆記1 - 概述1

 

GPU發展

GPU英文全稱Graphic Processing Unit,中文翻譯爲「圖形處理器」。NVIDIA在1999年發佈GeForce 256圖形處理芯片時首先提出GPU的概念。GPU所採用的核心技術有硬件T&L、立方紋理(Cube map)和頂點混合、紋理壓縮和凹凸映射貼圖、雙重紋理四像素256位渲染引擎等,而硬件T&L(Transform and Lighting,多邊形轉換與光源處理)技術能夠說是GPU的標誌。
2001年第三代modern GPU提供了vertex programmability(頂點編程能力),容許應用程序指定一個序列的進行定點操做控制。所謂vertex,就是組成3D圖形的頂點,vertex信息包含了3D模型在空間內的座標等信息,vertex shader能夠經過特定的算法在工做中改變3D模型的外形。到了2003年,GPU開始同時支持vertex programmability 和 fragment programmability(片斷編程能力,也成像素編程)。同時DirectX 和 OpenGL也獲得了發展。算法

什麼是Shader

Shader,即着色器。是一些在GPU上運行的小程序,可編程圖形管線的算法片斷,用以告訴圖形硬件如何計算和輸出圖像。
主要分爲兩類:Vertex Shader 和 Fragment Shader。編程

渲染管線

渲染管線也稱爲渲染流水線或像素流水線或像素管線,是顯示芯片內部處理圖形信號相互獨立的的並行處理單元。在某種程度上能夠把渲染管線比喻爲工廠裏面常見的各類生產流水線,工廠裏的生產流水線是爲了提升產品的生產能力和效率,而渲染管線則是提升顯卡的工做能力和效率。小程序

光柵化

光柵化就是把頂點數據轉換爲片元的過程。片元中的每個元素對應於幀緩衝區中的一個像素。
光柵化實際上是一種將幾何圖元變爲二維圖像的過程。該過程包含了兩部分的工做。第一部分工做:決定窗口座標中的哪些整型柵格區域被基本圖元佔用;第二部分工做:分配一個顏色值和一個深度值到各個區域。光柵化過程產生的是片元。
把物體的數學描述以及與物體相關的顏色信息轉換爲屏幕上用於對應位置的像素及用於填充像素的顏色,這個過程稱爲光柵化,這是一個將離散信號轉換爲模擬信號的過程。編程語言

渲染管線spa

unity圖形處理流程翻譯

Shader、材質和貼圖

輸入的貼圖或者顏色,通過Shaer將其與頂點數據以必定方式組合起來,而後輸出。繪圖單位能夠依據這個輸出來將圖像繪製到屏幕上。輸入的貼圖或者顏色等,加上對應的shader,以及對shader的特定的參數設置,將這些內容(shader以及輸入參數)打包存儲在一塊兒,獲得的就是一個material(材質)。以後,咱們即可以將材質賦予三維物體來進行渲染(輸出)了。orm

GLSL/HLSL/Cg

Shader language 目前主要有3種:GLSL(OpenGL Shder Language, 基於OpenGL), HLSL(High Level Shading Language, 基於DirectX), 還有NVIDIA公司的Cg語言(C for Graphic)。htm

OpenGL 支持Windows、Linux、MacOS等許多平臺,DirectX僅支持Win平臺。而Cg是一個能夠被OpenGL和Direct3D普遍支持的圖形處理器編程語言。並且Cg語言是Microsoft和NVIDIA相互協做在標準硬件光照語言的語法和語義上達成了一致而開發,因此,HLSL和Cg實際上是同一種語言。開發

因此儘可能選擇Cg比較好。get

總結

通常來講,着色器會分爲頂點(Vertex)着色器和片斷(Fragment)着色器兩個部分。

頂點着色器,主要求出各個頂點在投影面的座標。因此傳進去的值須要有頂點的三維座標,還須要有攝像機的位移旋轉矩陣。
片斷着色器,主要經過給出的數據,結合從頂點着色器獲得的座標值,計算出每個像素點應該顯示的顏色值。因此傳進去的值,會默認包括了頂點程序的座標,而後咱們給予的貼圖信息、顏色信息和UV座標信息。片斷着色器是針對於每一個像素點的,因此片斷着色器的輸出,就是該像素點應該顯示的顏色值。

因而,咱們就能夠經過編寫頂點着色器程序,經過必定的方式去改變頂點在投影面的座標,讓模型變形;或者經過編寫片斷着色器程序,讓模型表現出來的顏色根據咱們的須要而改變。

Shader(着色器)實際上就是一小段程序,它負責將輸入的Mesh(網格)以指定的方式和輸入的貼圖或者顏色等組合做用,而後輸出。輸入的貼圖或者顏色等,加上對應的Shader,以及對Shader的特定的參數設置,將這些內容(Shader及輸入參數)打包存儲在一塊兒,獲得的就是一個Material(材質)。

Shader開發者要作的就是根據輸入,進行計算變換,產生輸出而已。

相關文章
相關標籤/搜索