游戏开发论坛

 找回密码
 立即注册
搜索
楼主: corpus

怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

[复制链接]

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-13 16:38:00 | 显示全部楼层

Re:怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

nrm是ps2.0才有的指令。ps1.x的话
1:考虑使用normalized cube map来代替,但是效果不会非常理想
2:如果模型本身比较精细的话,可以在vs中nrm后,再到ps中用以下指令修正(假设向量存储在t0)
ps_1_4
texcrd r0.xyz, t0
dp3 r1.xyz, r0 , r0
mad_d2 r0.xyz, r0, 1-r1, r0_x2

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-13 18:21:00 | 显示全部楼层

Re:怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

若是要实现在只有两个三角形的大平面附近的点光源呢?

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-13 19:23:00 | 显示全部楼层

Re:怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

那就不能在vs中做normalize,而必须在ps中才行。

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-14 21:28:00 | 显示全部楼层

Re:怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

我用的是GeForce4 Ti4200的显卡(PS1.3 VS1.1),在玩神偷3时看它都能渲染带凹凸的点光.
我现在自己写的shader若不加凹凸只用基本贴图还是正确的.只要一上normal map插值就原形毕露了.
既然游戏中有可行的方法,就应该能实现. 就是不知道像神偷3或Doom3那样的是怎么弄的.

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-14 21:47:00 | 显示全部楼层

Re: 怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

不加normal map时的效果,还可以..
sf_2005314214713.jpg

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-14 21:49:00 | 显示全部楼层

Re: 怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

同一个墙角,加了normal map...
sf_2005314214913.jpg

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-14 21:52:00 | 显示全部楼层

Re: 怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

上一张举的反例不明显,这个最说明问题..
sf_2005314215223.jpg

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-14 22:11:00 | 显示全部楼层

Re:怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

上图在红圈处本不该有光照的,但还是出来了色斑.

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-14 22:18:00 | 显示全部楼层

Re:怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

顺便问一下,点光求出的attenuation是如何对终的pixel颜色结果产生影响的呢?
给个公式吧.

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-3-15 10:11:00 | 显示全部楼层

Re:怎么才能把Vertex shader的顶点颜色之间的插值给去掉啊?

将shademode设置为flat之后,你在 vs中输出到oD0的值
就将不会被插值,但是phong模型本身就是需要插值的
只是插值以后需要重新归一化,不过归一化会照成矢量长度的改变,就会让
三角形内部显得暗一些,所以,lightvector一般可以不用归一化
不过halfvector一定要做,你使用ti4200,只能用cubemap 来做
也就是在VS里把halfvector输出到一个texcoord out,然后在PS里用这个坐标对normalize cube
map 来采样就可以了
TI4200的硬件,要做attenuation,一般需要第二个PASS,用ALPHA通道来混合
你图像上的错误应该是没有乘上ATTENUATION的结果
ATTENUATION公式一般可以用
output = exp(-2*(x*x+y*y))*exp(-2*z*z)
其中xyz是距离和光范围的比
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 20:09

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表