GPU是什么
? ? ? ? (CPU)Center Processing Unit:邏輯編程
? ? ? ? (GPU)Graphics Processing Unit:圖形處理(矩陣運算,數據公式運算,光柵化)
渲染管線
? ? ? ? 渲染管線也稱為渲染流水線,就是CPU準備一些數據,然后告訴GPU渲染出一個二維的
????????圖像的過程。
? ? ? ? 渲染管道的三個階段:應用程序階段,幾何階段,光柵化階段
? ? ? ? 1.應用階段(CPU)
? ? ? ? ? ? ? ? 主要就是CPU將硬盤中的數據加載后,和內存進行通訊后,將需要顯示的數據信息
????????????????(頂點數據,紋理坐標,法線信息),傳遞GPU處理。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Process : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//從硬盤加載數據GameObject prefab = Resources.Load<GameObject>("Capsule");//將數據放置在內存中GameObject capsule = Instantiate<GameObject>(prefab);//物體上面,帶有材質球,材質球會引用Shader著色器,因為Shader是GPU編程,所以就會將數據傳遞給GPU//注意:Unity采用了材質球調用Shader,所以Unity是通過材質球將數據傳遞給GPU的,別的引擎不一定是材質球實現}
}
????????? 2.幾何階段(GPU)
? ? ? ? ? ? ? ? 幾何階段最重要的工作就是“變換三維頂點坐標”,變換的工作由矩陣運算完成。
? ? ? ? ? ? ? ? 空間
? ? ? ? ? ? ? ? ? ? ? ? 模型空間:3D物體的原始坐標,存儲在模型中。
? ? ? ? ? ? ? ? ? ? ? ? 世界空間:物體放在場景中,才能構成整個游戲場景。
? ? ? ? ? ? ? ? ? ? ? ? 觀察空間:需要以相機為原點的三維空間。
? ? ? ? ? ? ? ? ? ? ? ? 裁剪空間:物體是否在相機的渲染范圍內。
? ? ? ? ? ? ? ? ? ? ? ? 屏幕空間:3D物體,投影到屏幕上。
? ? ? ? ? ? ? ? 物體最終顯示:需要GPU進行一系列的矩陣運算,將模型空間下的點,轉換到屏間
????????????????下(轉換點的過程是并行)
? ? ? ? ? ? ? ? 非模型頂點信息中記錄的點,GPU會以線性插值的方式獲得并提示
? ? ? ? 3.光柵化階段(GPU)
? ? ? ? ? ? ? ? 使用上一個階段(幾何階段)遞過來的數據,對像素點進行染色,最終顯示出來,
????????????????染色過程為并行執行。
? ? ? ? 著色器(Shader)是什么?
? ? ? ? ? ? ? ? 給GPU編程的語言,代碼會在GPU上并行執行(幾何運算,光柵化)
? ? ? ? Unity的Shader類型
? ? ? ? ? ? ? ? 固定管線Shader:很古老顯卡的編程著色器,現在很少使用,畫質不好
? ? ? ? ? ? ? ? 頂點/片元Shader:通用的著色器類型(重點學習),可編程
? ? ? ? ? ? ? ? 表面體Shader:Unity自己創建的著色器類型,基于頂點/片元著色器二次封裝實
????????????????現,降低了著色器的編寫難度。
? ? ? ? 材質球和Shader的關系
? ? ? ? ? ? ? ? Unity中Material用來關聯游戲物體和Shader著色器,所以編寫Shader前,需要先
????????????????建立材質球
? ? ? ? 建立Shader方法
? ? ? ? ? ? ? ? 1.建立材質球
? ? ? ? ? ? ? ? 2.建立Shader文件
? ? ? ? ? ? ? ? ? ? ? ? (1)表面體Shader
? ? ? ? ? ? ? ? ? ? ? ? (2)頂點/片元Shader
? ? ? ? ? ? ? ? ? ? ? ? (3)圖片效果Shader
? ? ? ? ? ? ? ? ? ? ? ? (4)GPU運算Shader
? ? ? ? Pass通道和SubShader的區別
? ? ? ? ? ? ? ? Pass通道在SubShader內部,SubShader不執行,則內部的Pass通道也不會執行
? ? ? ? ? ? ? ? SubShader從上向下依次執行,每次只會執行一個,同一個SubShader中的Pass通
????????????????道會依次向下執行。
? ? ? ? Shader的基本結構
//Shader名稱與材質球的Shader列表對應
Shader "CreateTest/FixedColor"
{//Shader屬性,會出現在關聯材質球的選項里Properties{}//SubShader根據顯卡等級只執行一個SubShader{//Pass依次向下執行Pass{}}SubShader{}//所有SubShader都執行失敗,則最終執行FallBack效果//"Diffuse"是Unity的一個內置Shader效果FallBack "Diffuse"
}
????????實現染色著色器效果(shader文件):
//Shader名稱與材質球的Shader列表對應
Shader "CreateTest/FixedColor"
{//Shader屬性,會出現在關聯材質球的選項里Properties{//用于在材質球上面配置的顏色//屬性名"_Color()"//參數1:材質面板上顯示的名稱//參數2:屬性的類型Color//等號右邊:當前屬性的默認值_Color("顏色",Color)=(1,1,1,1)}//SubShader根據顯卡等級只執行一個SubShader{Pass{//使用固定管線著色器染色//Color[]是固定管線著色器的染色命令Color[_Color]}}//所有SubShader都執行失敗,則最終執行FallBack效果//"Diffuse"是Unity的一個內置Shader效果FallBack "Diffuse"
}
????????????????
該系列專欄為網課課程筆記,僅用于學習參考。???????