游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10806|回复: 13

Parallax Mapping

[复制链接]

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2006-12-22 17:53:00 | 显示全部楼层 |阅读模式
请勿转载
clayman
Blog:http://blog.csdn.net/soilwork
clayman_joe@yahoo.com.cn  

   作为实现bump map的技术之一,Parallax Mapping(视差映射)的目的同样也是让平坦表面实现凹凸效果。和Normal Mapping相比,Parallax Mapping能实现更加真实和强烈的凹凸感。

Parallax Mapping的思想:

       对真正高度起伏不同的凹凸表面来说,当观察它时会出现视差效果,但用平坦面表来模拟这种凹凸效果时,这种视差效果就消失了。上图中,点A对应的像素元为Ta,点B对应的为Tb。假设我们从上图所示的eye位置观察表明,对普通的纹理映射来说,应为观察矢量穿过了像素元Ta,所以我们应该看到A点。可是,观察矢量同样穿过了真实表面的B点。在实际生活中,我们观察的结果应该是看到点B,也就是看到像素元Tb。因此,对平坦表明来说,为了正确的显示点B,我们必须对Ta处的纹理坐标进行偏移,使它等于Tb。如果我们对多边形中的每个像素都进行这样的计算,视差效果也就出现了。

需要的数据:
       除了渲染表面所需的纹理,法线等贴图之外,为了计算像素的纹理坐标偏移值,还需要表面的高度图。当然,还需要从每个象素指向观察点的矢量。由于最终的结果是用来修改纹理坐标,所以所有的计算都在切线空间下计算。这里,需要把世界坐标下的观察矢量变换到切空间下,因此对每个顶点来说都要一个切空间坐标变换矩阵。

算法:

       在一般的纹理映射中,每个顶点都包含一对纹理坐标。在parallax mapping中,我们将用纹理坐标对高度图进行查找,根据所得结果对自身进行修改,最后再进行普通的纹理查找。如上图所示,纹理坐标偏移值等于点A到观察矢量的距离offset。由于从点A到观察矢量的射线和观察矢量的交点不一定在真正的几何体凹凸表面,所以parallax mapping上只是一种近似实现视差的方法。当然,可以使用其它方法获得更精确的偏移值,但这通常需要许多额外的计算,实际上在大多数情况下,这种近似已经足够好了。为了计算偏移,先要对切空间下的观察矢量进行标准化(normalized)。在切空间下,x和y轴都位于切平面上V{x,y},z轴于切平面正交V{z}。接下来需要对高度图中的值进行缩放和偏移。高度图中的值在[0,1]之间,一般来说,需要把这个值映射到一个合适的范围内。比如对边长为2m的砖墙来说,假设表面水泥的厚度为0.02m,那么相应的缩放值应该为 0.02 / 2 = 0.01。此外,偏移值为0,那么水泥看起来是凸起的,如果为-0.01,则看起来是凹陷的。用以下公式来计算高度:

Hsb = (h * s)+ b

       最终,修改之后的纹理坐标就为:

Tb = Ta + (V{x,y} * Hsb)/ V{z}   

    上面的公式虽然看起来是很合理的,但却有一些重要缺陷。当观察矢量和平面间的角度趋近于0时,Vz也趋近于0,结果将导致坐标偏移变的无限大,让parallax mapping方法崩溃。为了避免这种效果,只需要丢弃公式中的Vz项就可以了。当然,这同样会在精度上带来一些损失,不过实际情况下,一般不容易察觉出这些效果。

Tb = Ta + (V{x,y} * Hsb)


59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-12-22 18:09:00 | 显示全部楼层

Re:Parallax Mapping

04年的技术了, 比较大的缺点是逼近算法效率低, 并且无法实现self-shadow. 基本上没有什么实用价值.

ps: 楼主的几张图是从老外的文档里直接抓出来的吧, 那张树根的normal/bump我以前研究parallax mapping的时候也用过.

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
 楼主| 发表于 2006-12-22 19:02:00 | 显示全部楼层

Re:Parallax Mapping

Parallax Mapping的计算量不大
按照简化公式Tb = Ta + (V{x,y} * Hsb),简单的几条HLSL语句就能实现了,而且效果要normal mapping好
似乎近期的rpg大作如上古4,Gothic 3都用了Parallax Mapping

当然,缺点在于不能能实现self-occlusions, shadow效果
而且不适合高频的凹凸表面
当然可以使用relief mapping或者pom实现更好的效果
但计算量自然也就大了 ^_^

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2006-12-22 19:49:00 | 显示全部楼层

Re:Parallax Mapping

支持楼主~

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2006-12-25 09:00:00 | 显示全部楼层

Re:Parallax Mapping

顶了。

18

主题

92

帖子

92

积分

注册会员

Rank: 2

积分
92
发表于 2006-12-25 11:23:00 | 显示全部楼层

Re:Parallax Mapping

ok

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-12-25 14:12:00 | 显示全部楼层

Re:Parallax Mapping

目前游戏对细节的要求还不至于淘汰bump mapping,未来2-3年也不至于,所以这种方法还是有实用价值的。

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-12-26 02:29:00 | 显示全部楼层

Re:Parallax Mapping

具体到项目里,关键还是看美术的实力,出色的normal map效果一样能带来很大视觉上的改善.
就目前而言,能够大面积使用的技术基本上也就是normal map而已,当然,如果讨论到ps3, xbox360之类的,的确需要涉及到很多新技术.

对于某些平台上的开发,很多时候normal map的使用都要小心谨慎,毕竟象素填充率的瓶颈摆在那.

27

主题

179

帖子

259

积分

中级会员

Rank: 3Rank: 3

积分
259
发表于 2006-12-26 03:21:00 | 显示全部楼层

Re:Parallax Mapping

说道ps3,最近发现ps3的图象功能竟然还不如 360. 结果失望的很。按图象处理功能排序的话: xbox360>ps3>wii,

59

主题

1104

帖子

1199

积分

金牌会员

Rank: 6Rank: 6

积分
1199
发表于 2006-12-26 09:36:00 | 显示全部楼层

Re:Parallax Mapping

楼上的不要只看效果,sony的产品向来开发门槛就高,目前主机刚出炉,很多开发公司不适应而已,估计过段时间ps3的强悍将被慢慢挖掘出来.

前阵子有参加过一个ps3 dev group的presentation,才知道ps3的性能那叫一个强劲,8 channel cpu可不是闹着玩的.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 15:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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