道具类型概述
注意:本篇文章中文译文来自MODchina,更详细资料,请访问其论坛
Source里道具这个词通常等于低面模型,有许多种不同的道具实体类型,每一种模型都有特定的功能,每一种模型都在特定的情况下适用,各自对于系统性能的消耗也不同。下面是关卡设计师使用的主要道具模型种类的列表,以及他们所有的特点:
模型实体
道具描述
prop_detail
细节模型-那些不会移动的静态模型,不包含任何物理道具或者碰撞数据,不能被破坏,不显示阴影。一般来说都不是由关卡设计者手动的一个一个放置的,而是通过对于特定表面制定材质使其被自动放置。最不消耗渲染资源的模型,在低端机器上甚至都不会渲染。
例子: , 石头, 植物.
prop_static
静态道具-不移动的模型,不包含任何物理道具或者碰撞数据,不能打破,不能和其他物体关联或者动画。产生光照贴图阴影,渲染不太费资源。
例子: 管道, 固定灯, 石头, 电线杆.
prop_physics
具有动力学的模型,可通过刚体动力学系统产生碰撞和移动,可被其他动力学物体铰链或约束,当受到足够伤害时还能被破坏。产生动态阴影,渲染比较费资源。
例子: , 小碎片, 家具.
prop_ragdoll
具有玩具娃娃(ragdoll) 动力学骨架的动力学道具,具有所有物理属性,玩具娃娃系统也适用于它,可以用来做互相连接的部分。渲染和动力学计算非常耗资源。 例子: 猎头蟹寄生体,combine特种兵, 打开的纸板盒, 床垫.
prop_dynamic
可以表演动画、可设置层级关系以及具有关联作用的模型,受到足够伤害时可被破坏,可附在其他物体上并有层级关系,产生动态阴影。相对静态道具而言,他非常消耗资源,但又比prop_physics动力学物体节省资源。
例子:机器人手臂, 机械, 场景中的模型动画
prop_physics_multiplayer
为多人游戏模式所设计,使用单一动力学碰撞系统的动力学道具,相比标准动力学模型而言,他更节省网络带宽资源,是多人游戏模式低带宽环境所必须的。
prop_physics_override
一个特殊的道具类型,可用于把不是为了prop_physics设计的模型强制指定为prop_physics模型,资源耗费情况和和prop_physics一样.
DogKarl)注意:这里所说的可能有一点难于理解,因此在此加入一点说明。
Half-life2中,prop模型在设计时就被指定了其实体属性。例如其表面性质,质量,质心等等重要的物理参数。例如:在你创建prop_physics实体时,你选定的模型的物理属性就被读入了。但是某一些模型,例如机车模型,它本身并不是为prop_physics设计的模型,如果你强行在一个prop_physics实体中指定一个火车头做模型,你会发现只有一个后果:你的模型在游戏中根本就不会出现。
为了解决这个矛盾,把不是为了prop_physics设计的模型强制指定为prop_physics模型,就有了这样的一个实体类型。仍然用火车头的例子,因为火车头本来是作为prop_dynamic模型而设计的,因此如果你想把它变成prop_physics实体,就必须使用prop_physics_override来覆盖模型本身的内在属性。
prop_dynamic_override
一个特殊的道具类型,可用于把不是为了prop_dynamic设计的模型强制指定为prop_dynamic模型,,资源耗费情况和 prop_dynamic一样
注意:这和上面提到的prop_physics_override的情况是一样的
道具类型深层详述
这个部分讲述了不同道具类型的更多详细情况,下面的表格说明了道具类型不同之处的情形
模型实体
在关卡中的最多数量
总是被渲染
碰撞检测
灯光
投影
动力学
prop_detail
10,000
没有
cs怎么加机器人点光源Point
不产生
静态
No 
动力学
No 
层级
No animation
prop_static
1,000
是的
是的
天光
Vertex
静态 (lightmap)
静态
No 
动力学
No 
层级
No animation
prop_dynamic
100
是的
是的
天光Vertex
动态 (projected)
层级
  + animation
prop_physics
10个到100
是的
是的
天光Vertex
动态 (projected)
层级 
+ animation + physics
prop_ragdoll
少于 10
是的
是的
天光Vertex
动态 (projected)
层级
  + 动画
  + ragdoll 动力学
表格说明: 在关卡中的最多数量: 如果不想死机的话,你可以在一个关卡中使用的最大数目。
总是被渲染: 是否无论有多少面,都会被渲染。
碰撞检测: 道具类型是否能被其他物体碰撞的性能
光照计算方式: 物体如何被灯光照射/产生阴影.
是否投影: 是否产生静态lightmap阴影,或者产生动态dynamic projected阴影
动力学计算:物体动力学计算和骨骼动画的属性
 prop_detail特性:
可在一个关卡内放置10000
可以是 .MDLs sprites Sprites .MDLs.渲染速度快
通过给表面材质指定detail类型,编辑器会自动放置。一般来说不是由关卡设计师手动来使用。最不耗资源的方法,在低端机器上面甚至都不会被渲染。.
无法碰撞.
照射的光线颜是固定不变的 (为了最优化资源).
不会对光照贴图的计算产生影响.
根据玩家距离自动衰减(淡出)(通过控制台命令来实现:cl_detaildist 以及 cl_detailfade变量)
在低配置电脑上可能无法渲染.
调用的模型必须是静态道具的.qc 文件编译而成的
不会让你的网络过载 + 内存使用极低
不是一个真正意义的实体,没有输入输出
没有动画.
无法附在另一个实体上.
从可视化的角度来说,它们就像是点模型
prop_static特性:
可在关卡中放置1000.
可在Hammer editor中放置.
可与为它们设置碰撞和关联.
可对光照贴图产生影响,可以产生静态光照贴图阴影
对投射到上面的光线使用的是标准顶点着方法。
可以使用细节控制系统( LOD system.,就是根据距离远近不同决定其渲染精度)
在低配置电脑上用户可选择是否显示(渲染)该道具
衰减距离(淡出)可在Hammmer编辑器中设置.
必须使用通过静态道具的qc文件编译成的模型.
不会让你的网络过载 + 内存使用极低
不是一个真正意义的实体,没有输入输出.
没有动画或者连接.
无法附加到其他实体上.
从可视化的角度来说,他们是物体的凸起近似外轮廓
prop_dynamic特性:
在关卡中可放置100
可在 Hammer editor中放置.
可与他们产生碰撞和关联.
无法和lightmaps产生影响,但可产生动态阴影.
对投射到上面的光线使用的是标准顶点着方法。
可以使用细节控制系统
可在低配置电脑上显示(渲染).
衰减距离(淡出)可在Hammmer编辑器中设置.
使用不是静态道具编译的模型.
可以有动画.
占用非常低的网络带宽(但不是0!) +稍高的内存需求(和实体一样)
这是一个真正意义的实体,具有输入输出.
可以带层级关系的附加到其他实体上.
Optimal from a visibility standpoint, it uses the convex hull of the object.
从可视化的角度来说,它们就像是盒子
prop_physics特性:
关卡中可放置几千个, 或者更少,主要取决于模型的复杂程度。
可在Hammer编辑器中放入.
必须具有与之对应的碰撞检测数据
不和lightmaps互相产生影响, 但可以产生动态阴影.
对投射到上面的光线使用的是标准顶点着方法。
可以使用细节控制系统
衰减距离(淡出)可在Hammmer编辑器中设置.
在低配置机器上衰减距离更小,除非作了特殊设置。
可以使用不是加了 $staticprop参数编译的模型。
可以有动画.
占用非常低的网络带宽(但不是0!) +稍高的内存需求(和实体一样)
这是一个真正意义的实体,具有输入输出..
无法带分级关系的附加到其他实体上
可以使用多种动力学约束与其他物体联结。
Optimal from a visibility standpoint, it uses the convex hull of the object.
从可视化的角度来说,它们就像是盒子
具有某些附加特性。
prop_ragdoll特性:
除了具有自身的骨骼系统以外,和prop_physics其他方面都是相似的。
占用大量的网络带宽
如何使用材质系统自动
在固体表面放置 prop_details 模型
通过对固体表面制定一个特定的材质,可以实现prop_detail 模型的随机布置(例如,把草随机放到地面上)。detail.vbsp 文件定义了 detail prop 的分组。每一个分组都制定了该组将会随即生成何种prop_detail 模型。通过在 .vmt 文件中加入如下一行,你可以把某个分组于某种材质对应起来:
%detailtype = "detail_group_name"
detail_group_name 一项就是你在 detail.vbsp 中定义的组名。
这里有从detail.vbsp中摘抄出来的简单的例子:
swamp_grass_and_rocks
{
"density" "800.0" Group1
{
"alpha" "1.0" Model1
{
"model" "models/junk/rock1.mdl" "amount" "0.3"
}
Model2
{ "model" "models/junk/rock2.mdl" "amount" "0.3" }
}
Group2
{ "alpha" "0.0" Model1
{ "model" "models/foliage/Grass_tuft_003a.mdl" "amount" "0.1" }
Model2
{ "model" "models/foliage/Grass_tuft_004b.mdl" "amount" "0.3"
}
}
}