Unity Shader學習1——初識計算機圖形學

文章爲學習《Unity Shader入門精要》馮樂樂著時做的筆記

一. 初識計算機圖形學

圖形與圖形

  • 圖像純指計算機內以位圖(Bitmap)形式存在的灰度信息
  • 圖形含有幾何屬性,更強調場景的幾何表示,是場景幾何模型和景物的物理屬性共同組成的
  • 圖形主要分成兩類:
    • 基於線條信息表示
    • 明暗圖(Shading)

GPU 流水線

1. 渲染管線

頂點着色器 --> 光柵化 --> 片段着色器 --> alpha測試 --> 模板測試 --> 深度測試 --> Blend --> Gbuffer --> frontBuffer --> frame buffer -->顯示器

1.1 頂點着色器
  • 流水線的第一個階段,輸入來自CPU
  • 處理單位爲頂點,即輸入的每個頂點都會調用一次頂點着色器
  • 頂點着色器本身無法創建或者銷燬任何頂點,也無法得到頂點之間的關係,例如無法知道兩個頂點是否屬於同一個三角網格
  • 所以GPU可以並行處理每一個頂點,故此階段處理速度很快

主要工作:座標轉換和逐頂點光照

1.2 光柵化

​ 將頂點轉成像素

1.3 片段着色器
  • 紋理採樣,從紋理像素 賦給頂點生成的像素
  • 像素跟燈光計算
1.4 Alpha 測試

​ 挑選合格的alpha 像素顯示

1.5 模板測試

​ 像素可攜帶模板信息,達到模板條件的顯示出來

1.6 深度測試

​ 符合條件的像素通過,否則丟棄

1.7 Blend

​ 將當前要渲染的像素和已經渲染出來的像素混合運算

1.8 GBuffer

​ RGBA、 模板值 、深度值等

2.屏幕座標系

屏幕座標系在OpenGL和DirectX之間存在差異:

  • OpenGL把屏幕左下角當成最小的窗口座標
  • DirectX則把屏幕左上角當成最小的窗口座標

GPU編程語言

GLSL

OpenGL Shading Language

優點:有較好的跨平臺性,可在Windows、Linux、Mac甚至移動平臺等多種平臺上工作

原因:跨平臺性是由於OpenGL沒有提供着色器編譯器,而是由顯卡驅動來完成着色器的編譯工作,也就是說只要顯卡驅動支持GLSL的編譯,就能運行它,它依賴硬件,而非系統層級

缺點:因爲編譯結果取決於供應商,供應商編譯實現不盡相同,所以存在編譯結果不一致的情況。

HLSL

High Level Shading Language,DirectX

由微軟控制着色器的編譯,即使不同的硬件,同一着色器的編譯結果相同,故而支持HLSL的平臺相對有限,幾乎都是微軟自己的產品,其他平臺沒有可以編譯HLSL的編譯器。

CG

C for Graphic

真正意義上的跨平臺,會根據平臺的不同,編譯成相同的中間語言,因爲它和微軟合作,導致CG語言的語法和HLSL非常相似。CG語言可以無縫移植成HLSL代碼。

固定管線渲染

固定函數的流水線(Fixed-Function Pipeline),也稱固定管線,指在較舊的GPU上實現的渲染流水線,這種流水線只給開發者提供一些配置操作,開發者沒有對流水線階段的完全控制權。

固定管線通常只提供一系列接口,接口包含一個函數入口點,這些函數入口點匹配GPU上的特定邏輯功能,開發者通過這些接口來控制渲染流水線。

**標註:**已逐漸棄用,不建議繼續使用

名詞解釋

NDC:歸一化設備座標(Normalized Device Coordinates)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章