[程式] frament shader問題

看板GameDesign (遊戲設計)作者 (Q2N2222)時間9年前 (2016/07/12 00:59), 編輯推噓8(8026)
留言34則, 6人參與, 最新討論串1/2 (看更多)
請問 假設以一個三角形來說 vertex shader 是三角形的三個vertex座標做些變換後再輸出 frament shader 是計算三角形中所有farment的color 是這樣的解讀有錯? 我看書上frament shader 會從vertex shader中 傳入經過模型矩陣變換過的vertex去計算光照 但這樣不就只有用那個頂點的座標去計算? 三角形上其他像素的座標不就沒用到? 那frament shader又是怎麼取得每個frament的座標的? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.129.65 ※ 文章網址: https://www.ptt.cc/bbs/GameDesign/M.1468256374.A.D30.html

07/12 01:14, , 1F
rasterization
07/12 01:14, 1F

07/12 01:29, , 2F
fragment
07/12 01:29, 2F

07/12 01:30, , 3F
你在 fragment shader 裡面會拿到已經內插好的座標
07/12 01:30, 3F

07/12 01:32, , 4F
早期的 GLSL 是用 varying 宣告要內插的變數
07/12 01:32, 4F

07/12 23:50, , 5F
了解了 感恩
07/12 23:50, 5F

07/14 20:07, , 6F
frag取得的不是頂點座標,而是插值uv座標
07/14 20:07, 6F

07/14 20:07, , 7F
頂點是給triangle setup單位處理。
07/14 20:07, 7F

07/14 20:08, , 8F
frag得到資料已是每個pixel所屬的uv,法線
07/14 20:08, 8F

07/15 00:07, , 9F
uv是指二維? 可是傳入的是三維 vec3
07/15 00:07, 9F

07/15 00:17, , 10F
輸入資料是幾維都不重要,每個分量都會依照座標內差
07/15 00:17, 10F

07/16 17:35, , 11F
而且還會幫你弄 perspective division
07/16 17:35, 11F

07/18 17:29, , 12F
貼圖UV通常只需要2維。除非反射貼圖。
07/18 17:29, 12F

07/18 17:31, , 13F
vs輸出資料不等於frag輸入資料。
07/18 17:31, 13F

07/18 17:45, , 14F
3維頂點不是給frag,是給TriangleSetup
07/18 17:45, 14F

07/18 17:55, , 15F
Setup完畢傳給Frag已非3D頂點座標
07/18 17:55, 15F

07/18 17:56, , 16F
而是2D螢幕像素,及其著色所需插值資訊
07/18 17:56, 16F

07/18 20:20, , 17F
那frag中要怎麼用2d座標就算光照?
07/18 20:20, 17F

07/18 21:10, , 18F
1.all vertices: calculate pos,n,color,uv,...(lit)
07/18 21:10, 18F

07/18 21:11, , 19F
2a. all fragments on 3 edges to calculate info.
07/18 21:11, 19F

07/18 21:12, , 20F
2b.rasterize: fragments on scanlines inside 3 edges.
07/18 21:12, 20F

07/18 21:13, , 21F
3c.each fragment get interpolated pos,n,color,uv,...
07/18 21:13, 21F

07/18 21:14, , 22F
3.in fragment shader, get your final result(color).
07/18 21:14, 22F

07/19 01:48, , 23F
不用 2D 座標算 shading 啊,你複製一份 pos 送內插就好
07/19 01:48, 23F

07/26 20:33, , 24F
float2 uv : TEXCOORD0; 用它與tex2d()抓貼圖顏色。
07/26 20:33, 24F

07/26 20:33, , 25F
float3 color: COLOR傳送算完Diffuse光照的顏色
07/26 20:33, 25F

07/26 20:34, , 26F
頂點光照就兩個乘起來就搞定。
07/26 20:34, 26F

07/26 20:35, , 27F
而pixel光照也不需要頂點3D位置。是傳法向量與光向量
07/26 20:35, 27F

07/26 20:37, , 28F
它只要知道兩個向量就能算夾角,用角度判斷光的強度
07/26 20:37, 28F

07/26 20:38, , 29F
Frag不需要知道自己處理得pixel位置在哪裡。
07/26 20:38, 29F

07/26 20:42, , 30F
Vert(頂點)->TriangleSetup(頂點轉pixel,插值)->Fra
07/26 20:42, 30F

07/26 20:42, , 31F
g(算顏色)
07/26 20:42, 31F

07/28 13:31, , 32F
我竟然沒發現 shading 不需要 pos 這個盲點 XDD
07/28 13:31, 32F

08/10 01:40, , 33F
frag連自己的螢幕2D座標都不必知道啊XD
08/10 01:40, 33F

08/10 01:41, , 34F
只要知道怎摸算顏色就好。
08/10 01:41, 34F
文章代碼(AID): #1NWz1sqm (GameDesign)
討論串 (同標題文章)
文章代碼(AID): #1NWz1sqm (GameDesign)