游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5187|回复: 12

请教大虾们,如何用纹理混合实现凹凸贴图

[复制链接]

23

主题

35

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2005-5-1 10:21:00 | 显示全部楼层 |阅读模式
我用D3DTOP_BUMPENVMAP试了一天也没搞出来
想知道具体的做法,谢谢

2

主题

85

帖子

85

积分

注册会员

Rank: 2

积分
85
发表于 2005-5-1 15:09:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

把代码贴出来吧,

其实这些技术最好使用着色器来实现,比settexturestage要方便多了。

17

主题

454

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2005-5-1 19:11:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

只要你的卡支持多曾纹理.就可以模拟Bump map.其中最简单的就是 Emboss map.但是基于固定管道模拟的凹凸贴图看上去都不太是太正常

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2005-5-1 20:29:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

咳!m$的sdk里面一大堆例子怎么没几个人看呢?

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-5-4 11:41:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

BUMPENVMAP多数情况下用于水面涟漪等的模拟。近似于一个texture dependent read操作。原理是设置一个2x2矩阵(3DTSS_BUMPENVMAT00 - D3DTSS_BUMPENVMAT11),然后与bump map(这里使用2 channel signed格式,如V8U8)相乘得到纹理坐标uv偏移,作用于下一个texture stage的纹理坐标并sample texture。另外用D3DTOP_BUMPENVMAPLUMINANCE还可以包含luminance计算,功能还算可以的。
问题在于支持这种功能的、DX8以下级别的显卡并不是很多,只有DX6级别的Matrox G4xx,G5xx,DX7级别的Radeon7xxx系列。(好像还有个采用eDRAM的bitboys的glaze3d也支持,不过用的人就太少了)占有率很高的NV1x(Geforce,Geforce2系列,Geforce4 MX系列)都不行,所以这个东西并没有推广。
目前一般意义上的凹凸贴图,指的是normal map + per pixel lighting,(emboss方式实在不是很理想)这个在DX7级别硬件上基本可以实现,需要1个或多个pass,主要是使用DOT3方式,第一个pass完成(N dot L)*Scale + Ambient(一个DOTPRODUCT3加上一个MULTIPLYADD)第2个pass完成specular计算,这里需要简化,比如用JC在DOOM3中用的方法((N Dot H) -0.75)*4。(一个DOTPRODUCT3加一个SUBTRACT加一个MODULATE4X)。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-5-4 11:43:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

不过上面说到的ppl方法可以不用ps,但是需要用VS。算是可以在DX7级别的GPU上运行吧。

17

主题

454

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2005-5-4 12:44:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

顶一下.
DUDV方式的bumpmap在NV3X上应该是没问题的。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-5-4 13:59:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

nv3x那显然没有问题。
BUMPENVMAP方式所有DX8和以上级别的显卡都可以支持。也可以ps实现。
对应的ps1.1的instruction是tex + texbem。
对应的ps1.4的instruction是texld + bem + texld
这里和FFP的区别在于2x2矩阵的4元素对应的texture stage是目标文理而不是dudv纹理。
ps2.0和以上没有直接对应的ins,因为没有必要。可以直接展开公式实现。

说到底,BUMPENVMAP就是纹理坐标扰动效果的简化实现罢了,做个water surface,haze effect等效果没有问题,但问题在于这种fall back意义不大,DX8以上的显卡不需要(有ps)。而DX7的显卡一多半都不支持。所以其实际应用的意义很成问题。为了很少一部分用户多写个path并不合算。

6

主题

444

帖子

457

积分

中级会员

Rank: 3Rank: 3

积分
457
发表于 2005-5-4 14:05:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

说实话,NV在NV1x中不提供BUMPENVMAP挺不厚道。这个东东还是很有用的,再说也不是什么后出台标准(如ps1.4)早在DX6时代Matrox G4xx系列就已经实现了。

17

主题

454

帖子

470

积分

中级会员

Rank: 3Rank: 3

积分
470
发表于 2005-5-4 15:05:00 | 显示全部楼层

Re:请教大虾们,如何用纹理混合实现凹凸贴图

Matrox G4xx是最早支持Bumpmap的图形卡.当时最菁菁乐道的就是一个金属片,一个点光源在动,然后金属片上折射出在当时很惊人的bump效果
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 13:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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