作者Q2N2222 (Q2N2222)
看板GameDesign
標題[程式] frament shader問題
時間Tue Jul 12 00:59:31 2016
請問
假設以一個三角形來說
vertex shader 是三角形的三個vertex座標做些變換後再輸出
frament shader 是計算三角形中所有farment的color
是這樣的解讀有錯?
我看書上frament shader 會從vertex shader中
傳入經過模型矩陣變換過的vertex去計算光照
但這樣不就只有用那個頂點的座標去計算?
三角形上其他像素的座標不就沒用到?
那frament shader又是怎麼取得每個frament的座標的?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.129.65
※ 文章網址: https://webptt.com/m.aspx?n=bbs/GameDesign/M.1468256374.A.D30.html
1F:推 holymars: rasterization 07/12 01:14
2F:推 Bencrie: fragment 07/12 01:29
3F:→ Bencrie: 你在 fragment shader 裡面會拿到已經內插好的座標 07/12 01:30
4F:→ Bencrie: 早期的 GLSL 是用 varying 宣告要內插的變數 07/12 01:32
5F:→ Q2N2222: 了解了 感恩 07/12 23:50
6F:→ kuma660224: frag取得的不是頂點座標,而是插值uv座標 07/14 20:07
7F:→ kuma660224: 頂點是給triangle setup單位處理。 07/14 20:07
8F:→ kuma660224: frag得到資料已是每個pixel所屬的uv,法線 07/14 20:08
9F:→ Q2N2222: uv是指二維? 可是傳入的是三維 vec3 07/15 00:07
10F:推 cjcat2266: 輸入資料是幾維都不重要,每個分量都會依照座標內差 07/15 00:17
11F:推 Bencrie: 而且還會幫你弄 perspective division 07/16 17:35
12F:→ kuma660224: 貼圖UV通常只需要2維。除非反射貼圖。 07/18 17:29
13F:→ kuma660224: vs輸出資料不等於frag輸入資料。 07/18 17:31
14F:→ kuma660224: 3維頂點不是給frag,是給TriangleSetup 07/18 17:45
15F:→ kuma660224: Setup完畢傳給Frag已非3D頂點座標 07/18 17:55
16F:→ kuma660224: 而是2D螢幕像素,及其著色所需插值資訊 07/18 17:56
17F:→ Q2N2222: 那frag中要怎麼用2d座標就算光照? 07/18 20:20
18F:推 riveranb: 1.all vertices: calculate pos,n,color,uv,...(lit) 07/18 21:10
19F:→ riveranb: 2a. all fragments on 3 edges to calculate info. 07/18 21:11
20F:→ riveranb: 2b.rasterize: fragments on scanlines inside 3 edges. 07/18 21:12
21F:→ riveranb: 3c.each fragment get interpolated pos,n,color,uv,... 07/18 21:13
22F:→ riveranb: 3.in fragment shader, get your final result(color). 07/18 21:14
23F:推 Bencrie: 不用 2D 座標算 shading 啊,你複製一份 pos 送內插就好 07/19 01:48
24F:→ kuma660224: float2 uv : TEXCOORD0; 用它與tex2d()抓貼圖顏色。 07/26 20:33
25F:→ kuma660224: float3 color: COLOR傳送算完Diffuse光照的顏色 07/26 20:33
26F:→ kuma660224: 頂點光照就兩個乘起來就搞定。 07/26 20:34
27F:→ kuma660224: 而pixel光照也不需要頂點3D位置。是傳法向量與光向量 07/26 20:35
28F:→ kuma660224: 它只要知道兩個向量就能算夾角,用角度判斷光的強度 07/26 20:37
29F:→ kuma660224: Frag不需要知道自己處理得pixel位置在哪裡。 07/26 20:38
30F:→ kuma660224: Vert(頂點)->TriangleSetup(頂點轉pixel,插值)->Fra 07/26 20:42
31F:→ kuma660224: g(算顏色) 07/26 20:42
32F:推 Bencrie: 我竟然沒發現 shading 不需要 pos 這個盲點 XDD 07/28 13:31
33F:推 kuma660224: frag連自己的螢幕2D座標都不必知道啊XD 08/10 01:40
34F:→ kuma660224: 只要知道怎摸算顏色就好。 08/10 01:41