游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8079|回复: 10

魔兽世界模型文件.m2 在D3D下的渲染

[复制链接]

9

主题

28

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2008-9-7 15:49:00 | 显示全部楼层 |阅读模式
魔兽世界模型文件.m2 在D3D下的渲染

魔兽世界模型文件众多,是我们用来测试程序的很好的资源。本文通过笔者的实践,分别用GPU和CPU两种方法实现m2文件的渲染。
M2文件的解析由国外一个社区完成,藉由此社区的帮助,诞生了像MyWarCraftStudio、wowmapview、wowmodelview这些读取并显示魔兽世界模型文件的程序,其中后两者的源代码可以下载到,但他们使用GL实现,参考这两款软件的源码,笔者实现了在D3D下的渲染。
首先,大略介绍一下m2文件的格式。M2文件存储了常规的顶点数据,纹理、法线数据,骨骼动画数据。当然还有许多其他数据,重点说的是它的骨骼数据,它不像.x那样通常存储的是每个关键点的骨骼变换矩阵,而是缩放、平移、旋转因子,在每帧动画中都根据时间计算出平移向量,旋转向量,缩放向量,根据这些向量来计算骨骼的变换矩阵,最后用这个矩阵变换顶点坐标。所以,在时间上m2文件比常规存储的.x文件更耗费时间,因为变换矩阵是通过实时计算得到的,而在空间上m2文件甚为小巧,400多K就能包含几十个动画。
其次,对于骨骼动画的渲染,dx sdk中介绍了一种基于骨骼调色板的混合技术,使用了shader实现。原理是:模型的某一顶点,可能受到几个骨骼的共同作用,每个骨骼的作用程度表示为一个权重,所有权重相加为1.所有骨骼的变换矩阵存储为一个矩阵数组(MatrixPalette),由cpu传给shader。具体如何确定骨骼变换矩阵,由顶点数据的一个DWORD确定。具体来说,m2文件的每个顶点最多由4个骨骼共同决定,那么每个骨骼的变换矩阵,都可以在MatrixPalette中找到,利用索引就可以了,该索引值占用一个字节,最大寻址128个骨骼矩阵,所以这种方法要求骨骼数不超过128个。DWORD是4个字节,而那4个骨骼矩阵的索引刚好从低位到高位合成了一个DWORD,所以在VS中可以把DWORD转换为int4类型,其分量x\y\z\w刚好就是那4个索引值。
如果模型文件的骨骼数超过128,就使用CPU计算。该段代码可以参照wowmapview或wowmodelview中Model::animate(int panim)方法。
最后,要注意GL和DX使用的矩阵和向量不同(当然还有左右手坐标系的不同)。GL使用的是列向量,DX使用的是行向量,GL和DX的矩阵互为逆矩阵。所以在看wowmapview或wowmodelview源码的时候一定要注意。
由于还有别的事情,像粒子系统、character以后再说,演示程序默认使用shader渲染,当骨骼数大于128或显卡不支持shader的话使用CPU计算。
窗口使用wxWidgets制作,非常喜欢wx,可用的人不多。
欢迎游戏公司联系笔者itlmy@163.com
sf_200897154922.jpg

9

主题

28

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2008-9-7 15:52:00 | 显示全部楼层

Re: 魔兽世界模型文件.m2 在D3D下的渲染

shader渲染效果
sf_200897155217.jpg

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-9-7 16:23:00 | 显示全部楼层

Re:魔兽世界模型文件.m2 在D3D下的渲染

很好,wow的模型也不过如此。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2008-9-7 20:40:00 | 显示全部楼层

Re:魔兽世界模型文件.m2 在D3D下的渲染

不错

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2008-9-9 11:07:00 | 显示全部楼层

Re:魔兽世界模型文件.m2 在D3D下的渲染

脱光的人类女,用了多少个POLYGON?

4

主题

220

帖子

220

积分

中级会员

Rank: 3Rank: 3

积分
220
发表于 2008-9-9 13:52:00 | 显示全部楼层

Re:魔兽世界模型文件.m2 在D3D下的渲染

你用的魔兽世界的模型查开器吗? 我运行它的源码,发现少很多数据库文件,你是用的源码编译运行的吗?怎么弄的?

9

主题

28

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2008-9-9 18:33:00 | 显示全部楼层

Re: 魔兽世界模型文件.m2 在D3D下的渲染

我用D3D重写了代码,wxWidgets做的GUI,添加了基于GPU的骨骼权重混合,优先使用GPU渲染,当GPU不能渲染使用CPU渲染

sf_200899183230.rar

500 KB, 下载次数:

9

主题

28

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2008-9-9 18:33:00 | 显示全部楼层

Re: 魔兽世界模型文件.m2 在D3D下的渲染

part2

sf_200899183316.rar

500 KB, 下载次数:

9

主题

28

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2008-9-9 18:34:00 | 显示全部楼层

Re: 魔兽世界模型文件.m2 在D3D下的渲染

part3
光标键控制动画集

sf_20089918340.rar

474.68 KB, 下载次数:

14

主题

156

帖子

158

积分

注册会员

Rank: 2

积分
158
QQ
发表于 2008-9-10 03:42:00 | 显示全部楼层

Re:魔兽世界模型文件.m2 在D3D下的渲染

顶~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-22 06:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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