Zh/Compiling a model: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
m (clean up, replaced: {{note:zh-cn → {{note (3))
m (obsolete language category)
 
(3 intermediate revisions by 2 users not shown)
Line 3: Line 3:
{{toc-right}}
{{toc-right}}


[[Model|模型]]在游戏中使用之前需要被编译。编译他你需要以下三个东西:
{{L|Model|模型}}在游戏中使用之前需要被编译。编译他你需要以下三个东西:


# 一套用于描述模型的文件(像'''[[Studiomodel Data|SMD]], [[DMX]], [[Flex Animation|VTA]])'''。如果你没有,请参见[[Exporting a model|导出一个模型]]。FBX格式在CSGO的1.34.8.4版本后获得有限的支持。
# 一套用于描述模型的文件(像'''{{L|Studiomodel Data|SMD}}, {{L|DMX}}, {{L|Flex Animation|VTA}})'''。如果你没有,请参见{{L|Exporting a model|导出一个模型}}。FBX格式在CSGO的1.34.8.4版本后获得有限的支持。
# 一个'''[[Qc|QC]]文件'''它定义了这里源文件该如何被转换成为一个起源引擎模型,它与材质文件的 [[VMT]]文件较为相似。
# 一个'''{{L|Qc|QC}}文件'''它定义了这里源文件该如何被转换成为一个起源引擎模型,它与材质文件的 {{L|VMT}}文件较为相似。
# '''[[Studiomdl|模型工作室]]'''程序,这个SDK中的程序利用QC文件来编译输出一个编译过的模型(但愿如此!)
# '''{{L|Studiomdl|模型工作室}}'''程序,这个SDK中的程序利用QC文件来编译输出一个编译过的模型(但愿如此!)


== 一些设置 ==
== 一些设置 ==


假如你已经成功的从你最喜欢的3D建模软件中导出了模型源文件,在编译前,最后一步就是设置[[VPROJECT]]环境变量。它定义了模型工作室工具将会在那里输出编译好了的模型。你可以用以下方法改变输出位置:
假如你已经成功的从你最喜欢的3D建模软件中导出了模型源文件,在编译前,最后一步就是设置{{L|VPROJECT}}环境变量。它定义了模型工作室工具将会在那里输出编译好了的模型。你可以用以下方法改变输出位置:


#一般地,你可以在SDK启动器(SDK Launcher)中的下拉菜单中选择你当前工作的游戏或者模组来改变它。
#一般地,你可以在SDK启动器(SDK Launcher)中的下拉菜单中选择你当前工作的游戏或者模组来改变它。
#但你只用模型工作室工具时,在命令行中添加<code>-game "<指向你[[gameinfo.txt]]所在文件夹的完整路径>"</code> {{tip:zh-cn|大部分SDK工具都支持<code>-game</code>命令行参数}}
#但你只用模型工作室工具时,在命令行中添加<code>-game "<指向你{{L|gameinfo.txt}}所在文件夹的完整路径>"</code> {{tip|大部分SDK工具都支持<code>-game</code>命令行参数}}


=== 句法高亮 ===
=== 句法高亮 ===
Line 20: Line 20:
当你使用支持 [[Wikipedia:syntax highlighting|句法高亮]]的高级文本编辑器时,编辑QC文件将会变得非常简单。下面是目前支持QC高亮显示规则的两款文本编辑器:
当你使用支持 [[Wikipedia:syntax highlighting|句法高亮]]的高级文本编辑器时,编辑QC文件将会变得非常简单。下面是目前支持QC高亮显示规则的两款文本编辑器:


* [[Notepad++ VDF languages|Notepad++]]
* {{L|Notepad++ VDF languages|Notepad++}}
* [[Highlighting and Compiling QCs with ConTEXT|ConTEXT]]
* {{L|Highlighting and Compiling QCs with ConTEXT|ConTEXT}}


== 创建一个QC ==
== 创建一个QC ==
Line 27: Line 27:
QC文件仅仅是一个拥有<code>.qc</code>后缀名的文本文件。你可以在任何地方以任何名字命名它,但是最好将他存储在你SMD文件所在的目录下并且命名它为你目标模型文件的名字。
QC文件仅仅是一个拥有<code>.qc</code>后缀名的文本文件。你可以在任何地方以任何名字命名它,但是最好将他存储在你SMD文件所在的目录下并且命名它为你目标模型文件的名字。


在文件中应该是一个告诉模型工作室模型的各个SMD文件的位置,编译后文件应该被写入的位置,如何处理动画以及其他特性的一个[[:Category:QC Commands|QC命令]]列表,你可以在[[:Category:QC Commands|QC命令]]中找到所有已知命令的列表。
在文件中应该是一个告诉模型工作室模型的各个SMD文件的位置,编译后文件应该被写入的位置,如何处理动画以及其他特性的一个{{LCategory|QC Commands|QC命令}}列表,你可以在{{LCategory|QC Commands|QC命令}}中找到所有已知命令的列表。


=== 例子 ===
=== 例子 ===
Line 37: Line 37:


* 使用绝对路径 (例如 <code>C:\modelsrc\my_model\</code>)
* 使用绝对路径 (例如 <code>C:\modelsrc\my_model\</code>)
* 使用相对路径 (例如 <code>.\subfolder</code> 或 <code>..\</code>) {{tip:zh-cn|一个点表示当前目录。两个点表示上一级目录。 <code>..\..\</code> 表示上上一级目录}}
* 使用相对路径 (例如 <code>.\subfolder</code> 或 <code>..\</code>) {{tip|一个点表示当前目录。两个点表示上一级目录。 <code>..\..\</code> 表示上上一级目录}}
* 使用 <code>[[$pushd]]</code> 和 <code>[[$popd]]</code> 命令
* 使用 <code>{{L|$pushd}}</code> 和 <code>{{L|$popd}}</code> 命令
}}
}}


下面是一个非常简单的QC文件,用于一个没有任何动画和特殊属性的静态模型(单击某个命令以获取它的详细信息):
下面是一个非常简单的QC文件,用于一个没有任何动画和特殊属性的静态模型(单击某个命令以获取它的详细信息):


  [[$modelname]] "props\myfirstmodel.mdl"
  {{L|$modelname}} "props\myfirstmodel.mdl"
  [[$body]] mybody "myfirstmodel-ref.smd"
  {{L|$body}} mybody "myfirstmodel-ref.smd"
  [[$staticprop]]
  {{L|$staticprop}}
  [[$surfaceprop]] combine_metal
  {{L|$surfaceprop}} combine_metal
  [[$cdmaterials]] "models\props"
  {{L|$cdmaterials}} "models\props"
   
   
  [[$sequence]] idle "myfirstmodel-ref.smd"
  {{L|$sequence}} idle "myfirstmodel-ref.smd"
   
   
  [[$collisionmodel]] "myfirstmodel-phys.smd" { [[$concave]] }
  {{L|$collisionmodel}} "myfirstmodel-phys.smd" { {{L|$concave}} }


你可以把这个文件作为你的模型的QC文件模板,把其中的参数换成你自己的SMD文件(或 DMX,或 FBX)看看会发生什么。
你可以把这个文件作为你的模型的QC文件模板,把其中的参数换成你自己的SMD文件(或 DMX,或 FBX)看看会发生什么。
Line 59: Line 59:
=== 其他教程 ===
=== 其他教程 ===


* 物理模型,见 '''<code>[[Prop Data|嵌入物理数据]]</code>'''
* 物理模型,见 '''<code>{{L|Prop Data|嵌入物理数据}}</code>'''
* 人物和玩家模型,见 '''[[Player_Models|人物模型编译]]'''
* 人物和玩家模型,见 '''{{L|Player_Models|人物模型编译}}'''
* 武器模型,见 '''[[Creating worldmodels from viewmodels]]'''
* 武器模型,见 '''{{L|Creating worldmodels from viewmodels}}'''
* 载具模型,见 '''[[Compiling a vehicle model|载具模型编译]]'''
* 载具模型,见 '''{{L|Compiling a vehicle model|载具模型编译}}'''
* 模型编译的常见问题 '''[[:Category:QC Commands|分类:编译QC]]'''
* 模型编译的常见问题 '''{{LCategory|QC Commands|分类:编译QC}}'''


== 模型编译 ==
== 模型编译 ==
Line 72: Line 72:


* [[Notepadpp VDF languages#Compiling QC files|使用 Notepad++ 编译]]
* [[Notepadpp VDF languages#Compiling QC files|使用 Notepad++ 编译]]
* [[Highlighting and Compiling QCs with ConTEXT|使用 ConTEXT 编译]]
* {{L|Highlighting and Compiling QCs with ConTEXT|使用 ConTEXT 编译}}


=== 使用批处理文件 ===
=== 使用批处理文件 ===
Line 87: Line 87:
=== 使用编译工具 ===
=== 使用编译工具 ===


你也可以使用像 [[Crowbar]] 这样的工具来编译你的模型。只需要读取你的QC文件,选择对应的起源引擎游戏,然后点击编译按钮就可以了。
你也可以使用像 {{L|Crowbar}} 这样的工具来编译你的模型。只需要读取你的QC文件,选择对应的起源引擎游戏,然后点击编译按钮就可以了。


== 常见错误 == <!-- linked to from [[studiomdl]] -->
== 常见错误 == <!-- linked to from {{L|studiomdl}} -->


* 错误 <code>Error opening <model>! (Check for write enable)</code>
* 错误 <code>Error opening <model>! (Check for write enable)</code>
: Studiomdl 遇到不存在的路径时,不会自己新建文件夹;你必须在编译前,为你的.mdl文件手动创建对应文件夹。
: Studiomdl 遇到不存在的路径时,不会自己新建文件夹;你必须在编译前,为你的.mdl文件手动创建对应文件夹。
* 错误 <code>[[Costly collision model]]</code>
* 错误 <code>{{L|Costly collision model}}</code>
* 错误 <code>[[Duplicate weightlist pelvisonly]]</code>
* 错误 <code>{{L|Duplicate weightlist pelvisonly}}</code>
* 错误 <code>[[Short conversion out of range]]</code>
* 错误 <code>{{L|Short conversion out of range}}</code>
* 错误 <code>[[WARNING: (4768124) : ERROR: 'EXCEPTION ACCESS VIOLATION' (assert: 1)]]</code>
* 错误 <code>{{L|WARNING: (4768124) : ERROR: 'EXCEPTION ACCESS VIOLATION' (assert: 1)}}</code>
: 如果你遇到了 <code>EXCEPTION_ACCESS_VIOLATION</code> 错误但没有错误码,尝试在运行 [[HLMV|模型浏览器]] 的同时编译。
: 如果你遇到了 <code>EXCEPTION_ACCESS_VIOLATION</code> 错误但没有错误码,尝试在运行 {{L|HLMV|模型浏览器}} 的同时编译。
* 错误 <code>WARNING: Bad collision model, check your smoothing groups!!!</code>
* 错误 <code>WARNING: Bad collision model, check your smoothing groups!!!</code>
: 如果你使用XSI来创建碰撞模型,你需要关闭 Geometry Approximation's Automatic Discontinuity 选项(Explorer -> Your Mesh -> Geometry Approximation -> Polygon Mesh -> Discontinuity -> Untick Automatic) 让平滑组(smoothing groups)能够被正确地导出.
: 如果你使用XSI来创建碰撞模型,你需要关闭 Geometry Approximation's Automatic Discontinuity 选项(Explorer -> Your Mesh -> Geometry Approximation -> Polygon Mesh -> Discontinuity -> Untick Automatic) 让平滑组(smoothing groups)能够被正确地导出.
Line 103: Line 103:
* 错误 <code>WARNING: Model  has 2-dimensional geometry (less than 0.500 inches thick on any axis)!!!</code>
* 错误 <code>WARNING: Model  has 2-dimensional geometry (less than 0.500 inches thick on any axis)!!!</code>
: 当碰撞模型的一个或多个面不在同一个平滑组中会导致该错误。解决方法只需把所有的面分配到 smoothing group 1(因为你只能使用一个平滑组)中即可。非常感谢 Vaenyc 的  [http://forums.steampowered.com/forums/showthread.php?t=964995&highlight=WARNING%3A+Model+2-dimensional+geometry this thread]
: 当碰撞模型的一个或多个面不在同一个平滑组中会导致该错误。解决方法只需把所有的面分配到 smoothing group 1(因为你只能使用一个平滑组)中即可。非常感谢 Vaenyc 的  [http://forums.steampowered.com/forums/showthread.php?t=964995&highlight=WARNING%3A+Model+2-dimensional+geometry this thread]
: 当碰撞模型的构件太小时也会出现该错误。它还可能与缩放模型的 [[$scale]] 命令有关,尤其是在重编译全尺寸的 [[3D Skybox|3D天空盒]] 时。(在这种情况下,把碰撞模型替换为一个空模型也是可行的,因为天空盒通常不需要碰撞体积)
: 当碰撞模型的构件太小时也会出现该错误。它还可能与缩放模型的 {{L|$scale}} 命令有关,尤其是在重编译全尺寸的 {{L|3D Skybox|3D天空盒}} 时。(在这种情况下,把碰撞模型替换为一个空模型也是可行的,因为天空盒通常不需要碰撞体积)
* 错误 <code>Bounding box out of range</code>
* 错误 <code>Bounding box out of range</code>
: 编译错误 '''''"bounding box out of range"''''' 后面跟着一串坐标,表示碰撞模型超出了允许的最大值;各方向上的最大值固定为16384单位。错误通常发生在,你把模型放大得过大导致碰撞体积超出了上限,或者你的动画让碰撞范围超过了最大值时。
: 编译错误 '''''"bounding box out of range"''''' 后面跟着一串坐标,表示碰撞模型超出了允许的最大值;各方向上的最大值固定为16384单位。错误通常发生在,你把模型放大得过大导致碰撞体积超出了上限,或者你的动画让碰撞范围超过了最大值时。
: {{tip:zh-cn|一个解决方案是,在可行情况下,把你的模型分割成几个小模型。}}
: {{tip|一个解决方案是,在可行情况下,把你的模型分割成几个小模型。}}
: 在你的模型不会与其他物件发生碰撞的情况下,似乎你也可以忽略这些错误,因为它似乎不影响游戏运行。
: 在你的模型不会与其他物件发生碰撞的情况下,似乎你也可以忽略这些错误,因为它似乎不影响游戏运行。


Line 114: Line 114:
{{note|求生之路和求生之路2的模型位于 <code><game>\sdk_content\modelsrc\</code>}}
{{note|求生之路和求生之路2的模型位于 <code><game>\sdk_content\modelsrc\</code>}}
; <code>sdk</code>
; <code>sdk</code>
: Complete SMD source for both player models in [[Day of Defeat: Source]].
: Complete SMD source for both player models in {{L|Day of Defeat: Source}}.
; <code>tf</code>
; <code>tf</code>
: Complete, but outdated, [[DMX]] source for all TF2 classes. Rigged [[reference mesh|reference meshes]] are also available as [[SMD]] and [[Maya]].
: Complete, but outdated, {{L|DMX}} source for all TF2 classes. Rigged {{L|reference mesh|reference meshes}} are also available as {{L|SMD}} and {{L|Maya}}.
; <code>generic</code>
; <code>generic</code>
: A tweaked [[ValveBiped]] rig (no meshes)
: A tweaked {{L|ValveBiped}} rig (no meshes)
; <code>cstrike</code>
; <code>cstrike</code>
: "Urban CT" player model
: "Urban CT" player model
: Several static props
: Several static props
; <code>hl2</code>
; <code>hl2</code>
: [[Airboat]] and [[Buggy]]
: {{L|Airboat}} and {{L|Buggy}}
: [[Antlion Guard]]
: {{L|Antlion Guard}}
: Male citizen (old version with only a few animations)
: Male citizen (old version with only a few animations)
: Some CS stuff that is probably a duplicate of <code>\cstrike</code>'s content
: Some CS stuff that is probably a duplicate of <code>\cstrike</code>'s content
Line 142: Line 142:


== 另见 ==
== 另见 ==
* [[Qc|QC]]
* {{L|Qc|QC}}
* [[:Category:QC Commands]]
* {{LCategory|QC Commands}}
* [http://steamcommunity.com/groups/CrowbarTool Crowbar Tool]
* [http://steamcommunity.com/groups/CrowbarTool Crowbar Tool]
**[[Crowbar]], Decompile and Compile Source Engine Models in a user friendly interface
**{{L|Crowbar}}, Decompile and Compile Source Engine Models in a user friendly interface
* [[studiomdl]]
* {{L|studiomdl}}
** [[Studiocompiler]], a graphical interface for studiomdl
** {{L|Studiocompiler}}, a graphical interface for studiomdl
** [[GUIStudioMDL]], another graphical interface
** {{L|GUIStudioMDL}}, another graphical interface
* [[Highlighting and Compiling QCs with ConTEXT]]
* {{L|Highlighting and Compiling QCs with ConTEXT}}
* [[Notepad++ VDF languages]]
* {{L|Notepad++ VDF languages}}
* [http://wallworm.com/projects/utilities/docs/troubleshooting/compile_errors.html Common Compile Errors and Some Solutions]
* [http://wallworm.com/projects/utilities/docs/troubleshooting/compile_errors.html Common Compile Errors and Some Solutions]


[[Category:Modeling:zh-cn]]
{{ACategory|Modeling}}
[[Category:Tutorials:zh-cn]]
{{ACategory|Tutorials}}

Latest revision as of 04:12, 22 August 2024

English (en)Français (fr)한국어 (ko)Русский (ru)中文 (zh)Translate (Translate)

模型(en)在游戏中使用之前需要被编译。编译他你需要以下三个东西:

  1. 一套用于描述模型的文件(像SMD(en), DMX(en), VTA(en))。如果你没有,请参见导出一个模型(en)。FBX格式在CSGO的1.34.8.4版本后获得有限的支持。
  2. 一个QC(en)文件它定义了这里源文件该如何被转换成为一个起源引擎模型,它与材质文件的 VMT(en)文件较为相似。
  3. 模型工作室(en)程序,这个SDK中的程序利用QC文件来编译输出一个编译过的模型(但愿如此!)

一些设置

假如你已经成功的从你最喜欢的3D建模软件中导出了模型源文件,在编译前,最后一步就是设置VPROJECT(en)环境变量。它定义了模型工作室工具将会在那里输出编译好了的模型。你可以用以下方法改变输出位置:

  1. 一般地,你可以在SDK启动器(SDK Launcher)中的下拉菜单中选择你当前工作的游戏或者模组来改变它。
  2. 但你只用模型工作室工具时,在命令行中添加-game "<指向你gameinfo.txt(en)所在文件夹的完整路径>"
    Tip.png提示:大部分SDK工具都支持-game命令行参数

句法高亮

当你使用支持 句法高亮的高级文本编辑器时,编辑QC文件将会变得非常简单。下面是目前支持QC高亮显示规则的两款文本编辑器:

创建一个QC

QC文件仅仅是一个拥有.qc后缀名的文本文件。你可以在任何地方以任何名字命名它,但是最好将他存储在你SMD文件所在的目录下并且命名它为你目标模型文件的名字。

在文件中应该是一个告诉模型工作室模型的各个SMD文件的位置,编译后文件应该被写入的位置,如何处理动画以及其他特性的一个QC命令(en)列表,你可以在QC命令(en)中找到所有已知命令的列表。

例子

文件路径

当QC文件中存储了源文件的路径时,编译器会在同一个文件夹下寻找文件。因此你应该把一个模型的所有的源文件,放到同一个文件夹下。当然,在QC文件中,也有告诉编译器寻找在其他路径下的文件的命令。

  • 使用绝对路径 (例如 C:\modelsrc\my_model\)
  • 使用相对路径 (例如 .\subfolder..\)
    Tip.png提示:一个点表示当前目录。两个点表示上一级目录。 ..\..\ 表示上上一级目录
  • 使用 $pushd(en)$popd(en) 命令

下面是一个非常简单的QC文件,用于一个没有任何动画和特殊属性的静态模型(单击某个命令以获取它的详细信息):

$modelname(en)	"props\myfirstmodel.mdl"
$body(en) mybody	"myfirstmodel-ref.smd"
$staticprop(en)
$surfaceprop(en)	combine_metal
$cdmaterials(en)	"models\props"

$sequence(en) idle	"myfirstmodel-ref.smd"

$collisionmodel(en)	"myfirstmodel-phys.smd" { $concave(en) }

你可以把这个文件作为你的模型的QC文件模板,把其中的参数换成你自己的SMD文件(或 DMX,或 FBX)看看会发生什么。

Note.png注意:每个模型至少需要一个 $sequence,即便模型没有任何动画效果

其他教程

模型编译

使用文本编辑器

编译模型最简单的方式是使用装好编译插件的高级文本编辑器。

使用批处理文件

如果你不能(或不想)用高级文本编辑器,在Windows下你可以通过把QC文件拖动到Studiomdl中来编译。Studiomdl程序位于 sourcesdk/bin/[orangebox|ep1]/bin/ 路径下。

如果创建一个 .cmd 文件来自动化地编译,这个过程会方便的多。把.txt重命名为.cmd就可以了,文件内容如下:

"%sourcesdk%/bin/orangebox/bin/studiomdl" -nop4 %1
pause

把你的QC文件拖动到CMD文件上来运行;它相当于Studiomdl程序的快捷方式。

使用编译工具

你也可以使用像 Crowbar(en) 这样的工具来编译你的模型。只需要读取你的QC文件,选择对应的起源引擎游戏,然后点击编译按钮就可以了。

常见错误

  • 错误 Error opening <model>! (Check for write enable)
Studiomdl 遇到不存在的路径时,不会自己新建文件夹;你必须在编译前,为你的.mdl文件手动创建对应文件夹。
如果你遇到了 EXCEPTION_ACCESS_VIOLATION 错误但没有错误码,尝试在运行 模型浏览器(en) 的同时编译。
  • 错误 WARNING: Bad collision model, check your smoothing groups!!!
如果你使用XSI来创建碰撞模型,你需要关闭 Geometry Approximation's Automatic Discontinuity 选项(Explorer -> Your Mesh -> Geometry Approximation -> Polygon Mesh -> Discontinuity -> Untick Automatic) 让平滑组(smoothing groups)能够被正确地导出.
Note.png注意:如果关闭了automatic discontinuity 选项还是不能正常工作,尝试简化你的碰撞模型。
  • 错误 WARNING: Model has 2-dimensional geometry (less than 0.500 inches thick on any axis)!!!
当碰撞模型的一个或多个面不在同一个平滑组中会导致该错误。解决方法只需把所有的面分配到 smoothing group 1(因为你只能使用一个平滑组)中即可。非常感谢 Vaenyc 的 this thread
当碰撞模型的构件太小时也会出现该错误。它还可能与缩放模型的 $scale(en) 命令有关,尤其是在重编译全尺寸的 3D天空盒(en) 时。(在这种情况下,把碰撞模型替换为一个空模型也是可行的,因为天空盒通常不需要碰撞体积)
  • 错误 Bounding box out of range
编译错误 "bounding box out of range" 后面跟着一串坐标,表示碰撞模型超出了允许的最大值;各方向上的最大值固定为16384单位。错误通常发生在,你把模型放大得过大导致碰撞体积超出了上限,或者你的动画让碰撞范围超过了最大值时。
Tip.png提示:一个解决方案是,在可行情况下,把你的模型分割成几个小模型。
在你的模型不会与其他物件发生碰撞的情况下,似乎你也可以忽略这些错误,因为它似乎不影响游戏运行。

SDK 中的样例

在 SDK 中有许多样例模型,包括几个完整的人物和玩家模型。可以在 sourcesdk_content\<game>\modelsrc\ 中找到。

Note.png注意:求生之路和求生之路2的模型位于 <game>\sdk_content\modelsrc\
sdk
Complete SMD source for both player models in Day of Defeat: Source(en).
tf
Complete, but outdated, DMX(en) source for all TF2 classes. Rigged reference meshes(en) are also available as SMD(en) and Maya(en).
generic
A tweaked ValveBiped(en) rig (no meshes)
cstrike
"Urban CT" player model
Several static props
hl2
Airboat(en) and Buggy(en)
Antlion Guard(en)
Male citizen (old version with only a few animations)
Some CS stuff that is probably a duplicate of \cstrike's content
Viewmodels for all HL2 weapons
hl2mp
All with multiplayer animations only:
Combine soldier
Metrocop
Male rebel
Left 4 Dead 求生之路
Common infected Models, Bodygroups, and commands necessary for Dynamic Skins
Breakable Woodrail prop example
Explosive Weapon examples for red gas cans and propane tanks
Left 4 Dead 2 求生之路2
Breakable Woodrail prop example different from the one found in Left 4 Dead 1
Crumbling Ceiling dynamic prop example

另见