这篇条目有关 Source引擎。如需详情,点击这里。

Zh/$bonemerge: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
(deepseek translation)
 
(deepseek translation)
 
Line 1: Line 1:
{{LanguageBar}}
{{LanguageBar}}
{{this is a|QC命令|name=$bonemerge}}
{{this is a|QC命令|name=$bonemerge}}
它用于在指定骨骼上设置`$bonemerge`标志,作为对游戏代码的提示,表明该骨骼将在游戏中被用于骨骼合并(参见{{L|Attachments}})。如果未设置此标志,骨骼仍可用于合并,但会收到性能警告。
该命令在指定骨骼上设置骨骼合并标志,用于提示游戏代码该骨骼将在游戏运行期间用于骨骼合并(参见{{L|Attachments}})。若未设置此标志,骨骼仍可用于合并,但会触发性能警告。


{{warning|对于没有网格的模型(即仅包含动画的模型),任何计划用于骨骼合并的骨骼都必须设置此标志,否则合并将失败并导致变形。然而,如果外部模型通过{{L|$includemodel|包含}}了动画,则此问题不适用。}}
{{warning|对于无网格的纯动画模型,所有拟用于骨骼合并的骨骼必须设置此标志,否则将无法正确合并并导致形变。但通过{{L|$includemodel}}引用外部动画模型的情况不受此限制。}}


'''<code>$bonemerge</code>''' 还有以下几种替代用途:
'''<code>$bonemerge</code>'''还具有以下扩展用途:
* 通常<sup>†</sup>可以防止[[studiomdl]]在模型编译期间折叠骨骼。作为优化过程的一部分,`studiomdl`会尝试从输出的{{L|MDL}}文件中剔除非必需的骨骼。主要目标是以下两类骨骼:'''1)''' 没有顶点权重分配的骨骼,以及 '''2)''' 其顶点权重仅分配给它自身的骨骼。未使用的骨骼会被直接移除,而在后一种情况下,骨骼会被删除,其顶点权重会转移到其父骨骼上。通过在这些骨骼上设置`$bonemerge`,可以强制`studiomdl`将它们保留在输出的MDL文件中。在模型骨架的每个骨骼上设置`$bonemerge`,可能<sup>†</sup>会确保整个骨架在引擎中可用。
* 通常<sup>†</sup>可阻止[[studiomdl]]在模型编译时剔除骨骼。作为优化流程,studiomdl会尝试删除MDL文件中非必要的骨骼,主要针对两类情况:'''1)''' 无顶点权重的骨骼;'''2)''' 其顶点权重仅关联单一骨骼的情况。前者直接删除,后者则删除骨骼并将顶点权重转移至父骨骼。通过设置<code>$bonemerge</code>可强制保留这些骨骼。若为模型所有骨骼设置此标志,理论上<sup>†</sup>可确保完整骨骼结构保留在最终MDL中。
:{{note|<sup>†</sup> 对于某些游戏(如{{gmod}}),`studiomdl`会忽略`$bonemerge`标志,并强制折叠不必要的骨骼。}}
:{{note|<sup>†</sup> 部分游戏(如{{gmod}})的studiomdl会无视<code>$bonemerge</code>标志,仍会强制剔除冗余骨骼。}}
* `$bonemerge`标志是{{L|$proceduralbones#Driving_Flexes_with_Procedural_Bones|程序化驱动表情}}的关键组成部分。程序化骨骼必须设置`$bonemerge`标志,才能使该技术生效。
* 该标志是实现{{L|$proceduralbones#Driving_Flexes_with_Procedural_Bones|过程化控制面部表情}}的关键要素,相关过程化骨骼必须设置此标志方可生效。
* {{sfm}} SFM通常会在大纲视图和视口中隐藏{{L|$proceduralbones}}。在程序化骨骼上设置`$bonemerge`可以强制SFM始终显示它们。
* {{sfm}}通常会在大纲视图和视口中隐藏{{L|$proceduralbones}}。为过程化骨骼设置此标志可强制显示。


== 语法 ==
== 语法 ==
  $bonemerge <骨骼名称>
  $bonemerge <骨骼名称>


== 在Notepad++中编写Bonemerge ==
== 在Notepad++中批量编写 ==
目前尚无自动化功能,但可以使用Notepad++的正则表达式手动完成此操作。此过程大约需要两分钟。
当前尚无自动化工具,但可通过正则表达式手动实现,耗时约两分钟。
{{tip|您可以将以下'''查找与替换'''过程记录为Notepad++的宏,以避免在后续使用中重复复制粘贴文本字符串。}}
{{tip|可将以下'''查找替换'''操作录制为Notepad++宏以便复用。}}


# 在Notepad++中打开您的mesh.smd文件。
# 在Notepad++中打开mesh.smd
# 将文件顶部的骨骼名称复制到一个新的空白文件中。
# 复制文件顶部的骨骼名称至新文件
# 按下'''Ctrl&H'''进入“替换”模式。
# 按下'''Ctrl+H'''进入替换模式
# 在“查找目标”字段中输入:<source>^\s*\d+\s*"(.+)"\s*-?\d+\s*$</source>
# "查找目标"输入:<source>^\s*\d+\s*"(.+)"\s*-?\d+\s*$</source>
# 在“替换为”字段中输入:<source>$bonemerge "\1"</source>
# "替换为"输入:<source>$bonemerge "\1"</source>
# 确保'''". 匹配新行"'''选项已禁用。
# 确保取消勾选'''". 匹配新行"'''
# 点击'''“全部替换”'''
# 点击'''"全部替换"'''


现在,您可以将这些行粘贴到您的QC文件中,或将其用作QCI文件。
生成的内容可粘贴至QC文件或保存为QCI文件。


{{ACategory|QC Commands|bonemerge}}
{{ACategory|QC Commands}}

Latest revision as of 04:24, 29 January 2025

English (en)中文 (zh)Translate (Translate)

$bonemerge是一个QC命令,可在所有的 起源 起源 游戏中使用。 该命令在指定骨骼上设置骨骼合并标志,用于提示游戏代码该骨骼将在游戏运行期间用于骨骼合并(参见Attachments(en))。若未设置此标志,骨骼仍可用于合并,但会触发性能警告。

Warning.png警告:对于无网格的纯动画模型,所有拟用于骨骼合并的骨骼必须设置此标志,否则将无法正确合并并导致形变。但通过$includemodel(en)引用外部动画模型的情况不受此限制。

$bonemerge还具有以下扩展用途:

  • 通常可阻止studiomdl在模型编译时剔除骨骼。作为优化流程,studiomdl会尝试删除MDL文件中非必要的骨骼,主要针对两类情况:1) 无顶点权重的骨骼;2) 其顶点权重仅关联单一骨骼的情况。前者直接删除,后者则删除骨骼并将顶点权重转移至父骨骼。通过设置$bonemerge可强制保留这些骨骼。若为模型所有骨骼设置此标志,理论上可确保完整骨骼结构保留在最终MDL中。
Note.png注意: 部分游戏(如Garry's Mod)的studiomdl会无视$bonemerge标志,仍会强制剔除冗余骨骼。
  • 该标志是实现过程化控制面部表情(en)的关键要素,相关过程化骨骼必须设置此标志方可生效。
  • 起源电影制作器通常会在大纲视图和视口中隐藏$proceduralbones(en)。为过程化骨骼设置此标志可强制显示。

语法

$bonemerge <骨骼名称>

在Notepad++中批量编写

当前尚无自动化工具,但可通过正则表达式手动实现,耗时约两分钟。

Tip.png提示:可将以下查找替换操作录制为Notepad++宏以便复用。
  1. 在Notepad++中打开mesh.smd
  2. 复制文件顶部的骨骼名称至新文件
  3. 按下Ctrl+H进入替换模式
  4. "查找目标"输入:
    ^\s*\d+\s*"(.+)"\s*-?\d+\s*$
  5. "替换为"输入:
    $bonemerge "\1"
  6. 确保取消勾选". 匹配新行"
  7. 点击"全部替换"

生成的内容可粘贴至QC文件或保存为QCI文件。