Unity入門精要(筆記)

Draw Call:理解為一個命令,由CPU發起,GPU接收,命令指向一個需要被渲染的圖元列表,計算數據后輸出為像素

頂點著色器:每個定點都會調用一次,完成坐標的變換(將定點坐標從模型空間轉換到其次裁剪空間)和逐定點的光照。

三角形設置:由得到的信息計算每個圖元覆蓋的像素,計算像素的顏色

三角形遍歷:檢查每個像素是否被一個三角網格覆蓋。被覆蓋則生成一個片元(片元并不是真正意義上的像素)

片元著色器(像素著色器):進行逐片元的操作,輸入的是對頂點著色器輸出的信息插值得到的結果(為了在片元著色器中進行紋理采樣,通常在定點著色器階段輸出每個頂點對應的紋理坐標)

逐片元操作:決定片元的可見性,混合顏色信息

HLSL(DirectX):High Level Shading Language

Cg(Nvidia):C for Graphic

GLSL(OpenGL):OpenGL Shading Language

DrawCall數量影響:DrawCall之前CPU向GPU提交數據,DrawCall多時,過多的CPU提交數據造成CPU過載

Unity Shader:用ShaderLab編寫,ShaderLab是Unity提供的編寫UnityShader的一種說明性語言

通過Shader名稱的字符串中添加'/'修改對應Shader出現在菜單中的位置

Properties:用于包含需要顯示在Inspector面板中的屬性的語義塊

\\ Example
Properties{
  Name("display name", PropertyType) = DefaultValue
}

SubShader

  • 一個Shader中至少包含一個SubShader
  • Unity會選擇第一個可以在當前平臺使用的SubShader,都不行的話使用Fallback指定的UnityShader
  • SubShader中會定義一系列的Pass,RenderSetup,Tags

常見渲染狀態

  • Cull:設置剔除模式,背面(Back),證明(Front),關閉(Off)
  • ZTest:設置深度測試使用函數
  • ZWrite:開啟和關閉深度寫入
  • Blend:開啟并設置混合模式

Pass語義塊

  • 通過Name "MyPassName"命名,從而實現復用
  • 復用使用UsePass "MyShader/MYPASSNAME",PassName部分要使用全大寫

Fallback:如果所有的SubShader都用不了的話就使用Fallback提供備選的Shader

表面著色器(Surface Shader)

  • 需要代碼量少,但是渲染代價比較大
  • 處理很多光照細節

頂點/片元著色器(Vertex/Fragment Shader)

  • 代碼復雜但是靈活度高
  • 代碼寫在Pass語義塊內,自己定義每個Pass的Shader代碼

Unity Shader并非是真正的Shader

  • Unity里,Unity Shader指的只是一個ShaderLab文件
  • Unity Shader可以同時編寫頂點著色器和片元著色器
  • 本質上說Unity中只存在定點/片元著色器

Unity中的笛卡爾坐標系

  • 對于模型空間和世界空間,使用的是左手系
  • 觀察空間使用的是右手系

點(Point):維度空間里面的一個位置,主要為二維空間或者三維空間

矢量(vector):包含了模和方向的有向線段,小寫粗體表示,通常用于相對于某個點的偏移

單位矢量:模為1的矢量,也稱為歸一化的矢量,將矢量轉化成單位矢量的過程叫做歸一化,單位矢量使用小寫粗體字符上添加'^'表示

矢量的點積

  • 也稱為內積
  • dot(a,b)表示兩個矢量的點積,計算為矢量對應的分量分別相乘。
  • 點積的其中一個幾何意義就是投影,一個矢量a點積一個矢量b,除以a模則是ba上的投影,除以b的模則是ab方向上的投影
  • 正負表示與單位矢量a方向相同或者相反
  • 一個矢量與自身進行點積,結果是矢量模的平方
  • 兩個單位矢量的點積是對應的余弦值

矢量的叉積

  • 也成為矢量的外積
  • 計算的結果仍然是一個矢量
  • axb = (aybz - azby, azbx - axbz, axby - aybx),計算的角標是按照xyz連續相鄰
  • 不滿足交換率
  • 點積的向量的長度為a的模和b的模乘以sin夾夾角值
  • 左手系和右手系不會對計算結果產生影響,影響的知識三維空間中視覺表現

矩陣(Matrix)

  • 由mxn個標量組成的長方形數組
  • 矩陣乘法滿足結合率不滿足交換率

方塊矩陣

  • 簡稱方陣,行數和列數相等的矩陣
  • 有對角元素,對角元素為行數和列數相等的元素

對角矩陣

  • 對角矩陣是除了對角元素外都為0的對角矩陣

單位矩陣

  • 將原矩陣的第i行變成了第i列,即為轉置矩陣

逆矩陣

  • 矩陣可逆的前提是方塊矩陣
  • 如果矩陣有逆矩陣則說矩陣可逆
  • 矩陣的行列式不為0,則矩陣可逆
  • 轉置矩陣的逆矩陣是逆矩陣的轉置

正交矩陣

  • 如果一個方陣和其轉置矩陣的相乘為單位矩陣則為正交矩陣

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • <轉>我也忘了轉自哪里,抱歉,感謝原作者 什么是Shader Shader(著色器)是一段能夠針對3D對象進行操作...
    星易乾川閱讀 5,631評論 1 16
  • Unity Shader學習-1.渲染流水線 先了解一下什么是流水線:(下面是百度百科的定義) 流水線:流水線又稱...
    ZeroTryTryTry閱讀 5,516評論 2 17
  • 轉載注明出處:點擊打開鏈接 Shader(著色器)是一段能夠針對3D對象進行操作、并被GPU所執行的程序。Shad...
    游戲開發小Y閱讀 3,428評論 0 4
  • 你好,三角形 圖形渲染管線(Pipeline) 3D坐標轉為2D坐標的處理過程是由OpenGL的圖形渲染管線(Pi...
    IceMJ閱讀 7,472評論 2 13
  • 目錄結構: 第一步,明確要干嘛 第二步,怎么去畫(純理論) 第三步,怎么去畫(實戰) 第四步,練練手 第一步,明確...
    半紙淵閱讀 8,109評論 18 57