
大家好,我是vghost,我们来讲解CS起源与CSGO模型QC文件常用参数
在此说明
本系列教程仅适用于单机、线下模式
不支持联网、线上的游戏模式
额外说明,QC文件参数难度较高,以下内容只是我的一些个人理解,不代表绝对正确,如有需求请上官网查看官方解释,感谢理解!
好的,那么我们需要准备一个CS起源游戏以及一个CSGO游戏
CS起源和CSGO只需能跟人机游玩即可
以及一些你喜欢的武器模型或者人物模型,在此我选择的是分别提取CS起源的V模型以及W模型以及人物模型
和CSGO的V模型、W模型以及人物模型
好的,我们依次将我们的所有模型进行反编译,还不会反编译模型以及不懂什么是V模型W模型的朋友可以查看上一期视频
首先,我们先来讲什么是QC文件,QC文件是什么
QC文件是用来编译模型的索引文件,有了它就可以将模型编译成游戏可以识别的格式并应用到游戏中去
所以,无论你拥有什么样格式的3D模型,只需要将它转换成SMD文件格式并写好对应的QC文件,那么就可以将该模型放到游戏中去了
QC文件性质跟VMT文件的性质是一模一样的,只不过QC文件把索引的对象换成了SMD文件
而SMD文件的编辑我会在后续的教程中讲解
好的,我们用notepad来打开我们反编译模型文件夹中的QC文件,我们先来讲解V模型的QC文件参数
我们看到第一行的参数modelname,顾名思义,这是模型的名称,但我们看到后面的语法,它是一个路径

为什么一个模型名称会是一个路径?根据上一期视频所讲的正编译
我们可以看到,打开正编译出来的模型文件夹首先显示的是一个models文件夹,再打开我们看到的是wespons文件夹
最后再打开才是我们的正编译模型文件
那么我们再参照QC文件中的参数,wespons文件夹的存在没什么问题,但是这个models文件夹为什么也会存在?
其实这是V社强制设置的,我们打开crowbar中的compile选项,点击output to中有一个game's"models"folder,意思就是

将正编译后的模型直接放在游戏目录中的models文件夹
这样就可以直接进入游戏查看正编译后的模型,所以这就是models文件夹的来源
好的,我们看到下面的bodygroup参数,这项参数不仅可以表示SMD文件的名称和位置,也可以将SMD文件进行分组
我们可以看到这项参数有两个,一个是studio,一个是hands,我们一般将bodygroup旁边的双引号里的语法称为组
bodygroup组下的双引号也就是SMD文件名称的这个语法称为成员,成员由组来进行管理

我们在QC文件中复制bodygroup中的参数,分别复制一个组和一个成员,并且修改复制出来的同名SMD文件
在此我已经修改完毕了
我们正编译模型后可以看到,在hlmv中的model选项卡,这个折叠栏指的就是组
我们可以看到与QC文件中的组一一对应,并且新增加的组也出现在了模型中,而后面的这个submodel指的就是该组下的成员
切换组后我们可以看到,该组下有多少个成员都是跟QC文件一一对应,这就是bodygroup参数的作用

需要注意的是,在QC文件中写了多少个组,如果这些组只带有一个成员,那么这些组下的成员都会呈现在模型中
如果这些组下带有多个成员,那么只有第一个成员会呈现在模型中,也就是说,QC文件中有多少个组,那么模型就可以呈现出多少个成员
如果写了一个名称跟其他组名称不一样的组,但该组下所带的成员名称与另一个组下所带的成员名称一致
那么选择查看模型时将会呈现出两个一模一样且又重叠在一块的SMD模型
如果没有什么特别的要求,我们一般都只会在一个组后面带一个成员,很少有出现一个组带有多个成员的情况
而如果我们写了很多个组,要么是有特别的要求需要写,要么是模型的面数过大导致不得不进行SMD模型的分割而写
这种情况在以前的金源引擎中时不时会出现,因为金源引擎是很老很老的引擎了,带不动面数过大的模型是很正常的
但是对于现在的起源引擎来说,这种情况几乎微乎其微
并且如果你是想往一个武器模型中添加许多种不同的手臂而增加bodygroup中的组成员,从而在游戏中体验不同的手臂
这是不可取的,首先,体验不同的手臂这需要程序的支持,其次,不仅需要程序的支持还需要模型与程序的互相搭配
也就是说,程序方面必须渗透进模型内部,但是这样的难度是非常高的
就连CSGO分为不同的手臂都不是使用的bodygroup,而是将手臂与武器独立分开模型的方式
所以,想使用bodygroup实现不同手臂是很难的
好的,我们来看到下一项参数,surfaceprop,翻译过来叫做表面特性
顾名思义,赋予模型表面拥有什么特性的参数
我们看到V模型的这项参数的语法,是default,默认,我们再来看到人物模型的这项参数,语法则是flesh,血肉的意思

这项参数背后的语法有一大堆,至此我们一般都保持默认,为什么要保持默认我们到后面再说
好的,我们看到下一项,contents,可以称为里面特性
这项参数与上面的surfaceprop很像,至此我们一般也是保持默认
好的,我们看到下面的illumposition参数,这项参数指的是模型相对于原点的照明位置
Source引擎对于模型来说,只会计算两个最亮最接近目标的光源进行照明计算,而这个illumposition参数指的就是目标位置
默认情况下,illumposition位于模型的几何中心,如果你不懂是什么,那就保持默认并跳过这项参数即可
好的,我们看到下面的cdmaterials参数,看到这项参数有没有似曾相识的感觉?没错,在前几期的视频中都有提到过materials这个词
这个词指的是材料、材质的意思,而这项参数也是跟材料、材质有关系
看到后面语法的朋友们可能已经猜出来了,没错,这项参数指的就是模型的材质文件路径位置
我们随便打开一个模型压缩包中都会出现materials文件夹,这个materials文件夹里的文件夹一一对应了cdmaterials参数的路径
所以,如果你想寻找这个模型的材质文件位于什么位置,直接来QC文件中查看这项参数即可
这项参数还会与SMD文件的材质贴图拾取有关系,我们到后面的教程再说
好的,我们看到下面的attachment参数,这项参数非常好理解,但是实际操作却是稍微有些麻烦
上一期的视频在hlmv中也简单提到过attachment参数,这项参数指的是模型的附件
什么是模型的附件呢?就像武器模型枪口上的枪火、抛壳窗中抛出来的弹壳
我们并没有制作模型的枪火以及抛出来的弹壳,那这些枪火和弹壳哪里来的呢?
其实这就是模型附件的作用,附件可以理解为粒子效果的展示位置,枪火和弹壳都属于粒子效果
还有另外一种理解方式,附件确实可以顾名思义,它就是一种附在模型上面的物件
我们将V模型的QC文件切换到人物的QC文件,可以看到,attachment参数多了很多
而这些attachment参数的作用在游戏中出现了无数次,如图所示,我们可以看到,在游戏中,人物身上所附带的一些道具




比如手雷、闪光弹、拆弹钳子,以及一些武器的位置,这些其实都是附件的位置
好的,明白了这一点之后,我们来操作attachment参数,attachment这项参数具体操作是稍微有些麻烦的
我们看到QC文件中的attachment参数,可以看到有两个双引号,第一个双引号里是指这是一个什么样的附件

我们看到knife,意思是小刀,所以我们知道了这就是放小刀的位置的附件
我们预览这个人物模型,点击attachment选项卡,找到knife这个附件,我们发现,的确是小刀的位置
而第二个双引号是指这个附件绑定在了哪个骨骼上,这里就需要了解一些编辑SMD文件的知识了

我们一般都会将附件绑定在距离要求最近的一个骨骼上,这样我们便可以更加精确且简单的调整附件位置
好的我们看到QC文件中的位于rotate前后的数值,这些数值看上去杂乱无章,但其实都是有迹可循的
这些数值可以理解为附件的修正数值,刚刚讲了附件是绑定在骨骼上的,而有些骨骼是位于模型的内部

也就是说,附件也跟着位于模型的内部,那么如果附件位置不经过修正的话,到了实际的游戏中可能就会出现比较严重的穿模情况
我们同样使用hlmv来预览这个人物模型,同样在attachment选项卡中点击knife这个附件
我们看到attach to,这指的就是第二个双引号中的骨骼,当你点击任何一个附件,attach to都会显示自动匹配绑定的骨骼
我们看到translation和rotation,有没有发现与QC文件中的rotate前后的数值一样呢?
没错,这里指的就是附件的修正数值
我们看到translation的数值与QC中rotate前面的数值是一样的,这里指的是修正数值

而rotation的数值与QC中rotate后面的数值是一样的,指的是修正旋转数值

我们在hlmv中将translation和rotation这两个数值全部归零,我们可以看到
这个坐标很明显是位于模型内部的,我们点击旁边的bones选项卡,这个选项卡是可以查看模型的骨骼
我们找到knife所绑定的骨骼leg_upper_L会发现,归零后的坐标就是绑定的骨骼的坐标

所以,translation和rotation这两个数值对于attachment来说是很重要的
好的,明白了这一些后我们还需要讲解attachment参数在实际游戏中的效果
我们就拿背上的主武器来说,你要如何调整修正数值使主武器的枪口朝下而不是朝上呢?
是不是要先载入这个武器模型到人物模型身上然后再进行调整?这就要求对translation和rotation这两个数值的精确调控了
在hlmv中可以载入武器模型到人物模型上,但是武器模型只能停留在右手手掌而不能调整到其他的attachment的位置上

或许日后hlmv将会修复这项bug,但目前为止,只有不断进入游戏尝试,一点一点的调整attachment参数才能设置出自己想要的效果
好的,我们返回V模型的QC文件,看到下面的cbox和bbox参数,转到人物模型,我们还会看到hboxset、hbox和skipboneinbbox这几项参数
这几项参数都是设置的是模型的物理碰撞,这些参数不是常用参数所以我们一般都是直接跳过这些参数
好的,我们看到下面这些一大堆的definebone参数,无论是哪个QC文件下都有这个definebone参数
这项属于非常用参数,参数的作用我也不是特别清楚,我们一般都是选择跳过这项参数
并且还有非常多的非常用参数,在此我就不一一列举了,我们就讲解最后一个常用参数
回到V模型的QC文件,我们看到sequence参数,这项参数同样在上一期的视频简单提到过
这是一个有关于模型动作的参数,我们来一点一点的讲解sequence参数
首先,我们看到sequence参数旁边的双引号,这指的是模型动作的名称,这个跟attachment参数的第一个双引号是不一样的

attachment参数的第一个双引号是不能更改的,也就是说是系统指定的
而sequence参数的第一个双引号是可以由制作者命名的,也就是说可以看到各种各样的动作名称出现
好的,我们看到下面的第二个双引号,这里指的是动作SMD的指向位置与命名

在上期视频已经讲解过了在此我也就不重复了
好的我们看到下面的activity参数,是指在游戏中这项sequence参数以什么样的形式去触发这个动作
这个activity参数是区分游戏的,不同的游戏对应不同的activity参数,所以我们一般都是保持默认
好的,我们看到下面括号内有许多带有event字样的参数,这个带有event括号的参数是指在指定的动作帧数播放需要激发的事件
我们看到event后面的5001,这个5001是一个代码,这个代码是游戏指定产生一个枪口火焰的代码

这些代码都是由游戏指定的,所以并不能随意更改
我们看到5001后面的0,是指这个需要激发的事件位于0帧时激发,也就是激发时所在的帧数,我们称为激发帧数

我们看到0后面的双引号,这是指5001这个代码的参数,这里写的是1,也就是指枪口火焰的参数为1
有些代码有参数,但有些代码没有参数,没有参数则显示的是只有一个双引号里面什么都没有

参数可以为任何的字样,有些是数字,有些是文件名称,有些是系统参数等等
我们看到下面一行event,同样的,event后面这个以AE开头的字样与5001同样为代码
这个0同样是激发帧数,后面双引号里的字样同样为参数
所以,我们便可以举一反三,下面的这些sequence参数里的event我们就可以看得明白了
在这里说明几个常用的CS起源和CSGO的event代码,首先是5001,5001是指产生一个枪口的火焰,它的参数值为0到100之间,参数值越大那么枪口火焰的大小和形状就越大
我们可以看到以shoot字样的sequence参数,shoot的意思为射击,那么射击就会有枪口火焰,所以event参数我们当然要加上5001代码

我们看到reload的sequence参数,这个是换弹的意思,而5004代码则是表示播放一个声音
而5004的参数指的就是这个声音名称,这个声音是一个文件,我们可以在解包vpk文件中的sound文件夹中找到
也就是说,我们可以使用5004代码来更换我们想要在sequence中播放的声音
这里需要注意一下,这种代码的参数也就是双引号内的文件是文件路径与文件命名二合一的形式

与bodygroup参数中的双引号是一样的,只不过将文件存放在了sound文件夹中的武器文件夹的根目录,所以才省略了
并且,这种音效文件后缀必须要为wav格式才能使用,要不然游戏可能无法读取
好的,还有一个为5002的代码,这个是一个没有参数的代码,效果是产生枪口火星
好的,我们看到下面的参数,fadein和fadeout,翻译过来叫做淡入、淡出,跟视频剪辑里的淡入淡出是一样的

意思是,当播放完该sequence动作时,下一个sequence动作播放需要多少秒进行淡入或淡出
我们可以看到,这两项参数后面的数值都是0.2,也就是说需要0.2秒来进行淡入淡出
好的,我们看到下面的snap参数,这项参数后面没有数值
这项参数说的是清除掉所有的音效,仅仅只播放这一个sequence音效
比如说,在换弹的时候换到一半突然进行切枪,换弹的音效播放到一半突然切换出另一个音效
那么此时如果没有写上snap这项参数,则会出现换弹的音效和切枪的音效重叠在一起的效果
这就是snap参数的作用

好的,我们看到下面的fps参数,这项参数是指该sequence参数的播放速率
数值越大,播放的速率就越快,数值越小,播放的速率就越慢
这项参数只需要进行实际操作一下就可以明白了,并且在以后的编辑动作SMD教程中还会进行深入的讲解

好的,至此我们所有的常用QC参数就讲解完了,讲解的不够多还请大家见谅
给新手们的一些温馨提示,首先,QC文件参数的难度是比较高的,要比VMT参数还要难,所以,建议新手们只了解常用的参数即可
其次,为什么在本教程总是出现保持默认并跳过参数这样的话,因为有些QC参数确实难以理解并难以操作,甚至有些参数还用不上
所以,如果遇到一些看不懂的QC参数,除非真的需要去使用,否则直接保持默认并跳过即可
并且,不建议自己从空白开始写QC参数,即使是高手也不会自己写QC参数,因为这样不仅效率低还容易出错
因此我们一般都是复制一份最接近模型要求的QC参数,单纯修改自己想要的参数即可,其他的我们都会跳过
这些当我们慢慢深入理解模型制作后便会熟能生巧了
好的,此时我们CS起源与CSGO模型QC文件参数讲解到此结束,希望各位学有所成
如果你喜欢本期视频,请不要忘记分享给其他有需要的人,那么我们下期视频再见