如何导出Dota2模型资源

如何导出Dota2中的模型资源

工具准备

解压 Dota2 资源

  • 将下载下来的 gcfscape185.zip 解压
  • 32位系统运行 x86\GCFScape.exe,64位系统运行 x64\GCFScape.exe,界面如图:

gcfscape.exe.normal.png

  • 选择 File->Open,在文件选择对话框中定位到 ...\Steam\Steamapps\common\dota 2 beta\dota 目录,找到 pak01_dir.vpk 文件并打开,如图:

pak01_dir.vpk.path.png

  • 右键 root ,选择 Extract,选择资源解压目标目录并确定,耐心等待解压完成,如图:

extract_root.png

  • 解压完成后,就会在目标目录生成一个 root 文件夹,里面就是所有的 Dota2 资源文件了

预览 Dota2 模型

  • 找到 Dota2 的安装目录,进入 ...\Steam\SteamApps\common\dota 2 beta\bin 目录,运行 hlmv.exe,如图:

hlmv.exe.path.png

  • 这时会弹出一个错误提示框,如图:

hlmv.exe.error.png

  • 这是缺少游戏描述文件导致的,需要去 ...\Steam\SteamApps\common\dota 2 beta\dota 文件夹中,复制 gameinfo.txt 过来,然后打开文件,把 SearchPaths 中的 Platform 改成 dota,此时运行 hlmv.exe,又会弹出一个错误框,如图:

hlmv.exe.error1.png

  • 看提示就知道缺少 game_sounds_manifest.txt 文件,在同目录下新建一个 game_sounds_manifest.txt 然后填入如下内容:
    game_sounds_manifest
    {
        "preload_file"		"scripts/game_sounds.txt"
        "preload_file"		"scripts/game_sounds_ambient.txt"
        "preload_file"		"scripts/game_sounds_music.txt"
        "preload_file"		"scripts/game_sounds_ui.txt"
        "preload_file"		"scripts/game_sounds_creeps.txt"
        "preload_file"		"scripts/game_sounds_items.txt"
        "preload_file"		"scripts/voscripts/game_sounds_vo_announcer.txt"
        "preload_file"		"scripts/voscripts/game_sounds_vo_announcer_killing_spree.txt"
        "preload_file"		"scripts/game_sounds_hero_pick.txt"
        "preload_file"		"scripts/voscripts/game_sounds_vo_tut1.txt"
        "preload_file"		"scripts/voscripts/game_sounds_vo_announcer_diretide_2012.txt"
    
    
    
        //   ///////////Seasonal and/or outdated files below here////////////////////////////////
        // 	"preload_file"		"scripts/game_sounds_roshan_halloween.txt"
        //	"preload_file"		"scripts/voscripts/game_sounds_vo_announcer_dlc_tusk.txt"
        // 	"preload_file"		"scripts/voscripts/game_sounds_vo_announcer_diretide_2012.txt"
        // 	"preload_file"		"scripts/voscripts/game_sounds_vo_secretshop.txt"
        //  "preload_file"		"scripts/game_sounds_greevils.txt"
    }
    
  • 保存退出,再次运行 hlmv.exe,这时程序就能正常运行了,界面如图:

hlmv.exe.normal.png

  • 选择 File->Load Model...,定位到之前解压好的 root 文件夹,进入 models\heroes (英雄模型目录) 文件夹,随便进入一个英雄文件夹,这里进入 undying (尸王)目录,打开 undying.mdl,如图: (这造型挺别致呀 = =!)

undying.png

  • 还可以继续选择 File->Load Weapon... 导入相关的头盔,盔甲,武器之类的模型,还可以在中间一排标签页菜单中选择 Sequence,在 BindPose 下拉列表中选择一些动画片段来预览各种不同的动作动画

反编译 Dota2 模型

  • 解压出来的 root 文件夹中的模型还不能直接使用,还需要进行反编译,然后才能导入到 3ds max 之类的建模软件中进行修改

  • 几点说明:

    • Valve 将模型数据都打包在 MDL 格式的文件中,MDL 文件其实就是一堆 SMD 文件的集合,也就是我们反编译 MDL 文件其实就是为了得到各种各样的 SMD 文件,SMD 文件则是真正包含了模型和动画数据的文件,也是最终要导入到Maya、3ds max 中的文件
    • 每一个 MDL 文件都有一个同名的 VTXVVD 后缀的文件。VTX 文件包含了该模型所有网格( mesh )数据,包括 LoD(Level of Detail) 信息(不知道是什么东西…);VVD(Valva Vertex Data) 文件包含该模型的所有顶点数据( data of the vertices )。
    • 模型的纹理数据则保存在 VTF(Valve Texture File) 格式的文件中,(可在 root\materials\models\heroes\undying 中找到英雄的纹理和材质文件),每一个 VTF 文件都有一个同名的 VMT 格式的文件,VMT(Valve Material Type) 文件包含了 Source 引擎定义和使用这些纹理所需要的信息(材质对象)
  • 打开安装好的 StudioCompiler,点击 Configure 按钮,将之前安装的另一个游戏 Alien Swarmbin 目录的路径 复制SDK Tool Directory 文本框中,注意,这里只能将路径复制进来,不能使用该文本框右边的浏览文件夹按钮来选择目录,否则程序会崩溃,点击 OK 按钮完成配置,如图:

studiocompiler_config.png

  • VTX 文件名中的 90 改成 80,以尸王为例,进入root\models\heroes\undying 文件夹,修改所有 .vtx 文件,如图:

modify_vtx.png

  • 回到 StudioCompiler 中,选择 Model Decompile 标签,在 Choose Model File 文本框中打开 root\models\heroes\undying\undying.mdl,在 Choose Output Directory 文本框中 复制 解压后文件的保存目录,然后点击 Extract 按钮,如图:

decompile_undying.png

  • 解压完成后,在解压目录就会看到一堆 smd 文件被释放出来了,其中 .dmx.smd 后缀的是模型文件,.smd 的是动画文件,如图:

undying_smd.png

  • 重复以上步骤,把尸王的其他模型如盔甲,头盔模型都解压出来:

undying_mdl_all.png

  • 这样模型就反编译完成了,smd 文件就可以导入到建模软件中使用了

反编译 Dota2 模型纹理

  • 上一步中反编译得到了模型和动画文件,还需要得到模型的纹理文件,这样才能在建模软件中完整还原 Dota2 模型

  • 将下载下来的 vtfedit133.zip 解压

  • 32位系统运行 x86\VTFEdit.exe,64位系统运行 x64\VTFEdit.exe,界面如图:

vtfedit.exe.normal.png

  • File System 中展开定位到 root\materials\models\heroes\undying 文件夹,双击 undying_armor.vtf 在右边窗口中就可以看到纹理的预览,然后选择 File->Export,在文件保存对话框下方的保存类型选为 PNG Files(*.png),默认为 .tga文件,点击保存,这样就完成了一个纹理的导出

  • 重复上方步骤,继续导出其他纹理文件,xxx_mask1.vtf xxx_mask2.vtf xxx_normal.vtf 这样命名的纹理不需要导出(因为不知道有什么用 = =!) ,导出的纹理文件如下:

undying_all_texture.png

  • 这样,一个模型的纹理文件就完成导出了

在3ds max 2012 中修改模型

  • 将下载下来的 smdimp 插件解压,把解压出来的 smdimp.dli 文件复制到 3ds maxplugins 目录下,如图:

smdimp_path.png

  • 打开 3ds max,选择导入,如图:

import_smd.png

  • 在文件选择对话框中定位到之前的模型导出文件夹,选择 undying_model.dmx.smd注意,.dmx.smd 后缀的文件才是模型文件,如图:

import_undying.png

  • 选择打开,然后 3ds max 中就会弹出 smd importer 插件的对话框,保持对话框中的复选框都选中,然后点击 OK 按钮,接着会弹出纹理选择对话框,选择 取消,这样模型就导入到 3ds max 中了,但是好像姿势有点奇怪,如图:

undying_in_3dsmax.png

  • 继续在 3ds max 中选择导入,这时候选择 undying_model.dmx.smd 同一目录的BindPose.smd 文件,导入,这时就会看见尸王站起来了,如图:

undying_stand_in_3dsmax.png

  • 打开 3ds max 右上角的材质编辑器(或者直接按 M 键打开),如图:

open_materail_editor.png

  • 在打开的材质编辑器左上角中选择 模式(Modes)->精简材质编辑器...(Compact Material Editor...),转换成精简材质编辑器后,创建一个材质球,如图:

create_material.png

  • 在打开的文件选择对话框中,定位到之前导出的纹理文件夹,选择 undying_body_color.png,这样,尸王的身体材质球就创建好了,然后需要把这个材质球拖到尸王模型身上应用,如图:

apply_material.png

  • 这样,尸王的身体模型就出来了,如图:

undying_body.png

  • 重复以上步骤(导入.dmx.smd模型文件->创建材质球->应用材质球),导入尸王的头盔,铠甲,得到尸王的完整模型,如图:

undying_all.png

  • 如果想看动画效果,同样的,像导入BindPose.smd 文件那样,在同目录下导入任何一个动画文件,如 undying_run.smd,然后在 3ds max 右下角选择播放按钮,就可以看到动画效果了,如图:

undying_run.png

总结