游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: corpus

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

[复制链接]

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

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

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

做per-pixel attenuation的话,可以考虑在vs中求出L的长度,放缩到一定范围(比如全衰减距离为1)输出到oTn,然后在ps中使用一个attenuation look up texture来采样。
不过如果要做specular的话,一个pass确实比较困难

65

主题

518

帖子

521

积分

高级会员

Rank: 4

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

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

太谢谢二位了!
我现在用的就是attenuation look up texture采样法.而且也没想做出specular呢.
仔细一想,光向量是存在vertex里的数据.若用flat mode,光向量仍然需要插值.
看来要想彻底解决还是需要在ps中逐像素地单位化光向量.
我们能不能证明只要对插值得到的向量做normalize,就一定等于逐象素地计算得到的光向量呢?

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-3-15 22:40:00 | 显示全部楼层

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

由于透视校正的存在,所以可以这样断言:
只要是和坐标线性相关的量,插值后就可以保证正确。
解释一下:
L = LightPos - worldPos,是和坐标线性相关的量,所以在经过光栅化插值后,可以保证其per-pixel的正确
但是length(L) = sqrt(L dot L)并不和坐标线性相关,所以,光栅化插值后,其并不能保证per-pixel的正确性。(也就是说我在上面提到的perpixel attenuation并不能保证正确,但是ps1.3也只能这样了,想要达到比较接近正确的结果需要模型有必要的精细度)
同理,normalized L = L/length(L)经过插值后同样不能保证per-pixel的精确。这也就是我说对于低面模型必须在pixel shader中做向量的归一化的原因。

65

主题

518

帖子

521

积分

高级会员

Rank: 4

积分
521
 楼主| 发表于 2005-3-16 00:17:00 | 显示全部楼层

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

看来我要换成支持pixel 2.0以上的显卡才能解决问题哦.
贴一张加细了模型之后的墙角..
sf_200531601744.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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