作者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/cn.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