Структура модели
Свойства/особенности модели
Отображаемые поверхности
В конечном итоге, на экране отображается только внешний вид (облик) модели. Двумерные текстуры, представляющие собой облик, проецируются на сетку в трёхмерное пространство с учётом UV-разметки. Геометрия сетки, в свою очередь, деформируется движениями скелета модели.
- Отображаемая модель/сетка : (aka Renderbox, Render geometry) includes Rendered Geometry: 3D Vertices, $origin, UV-разметка)
- Параметры сетки : $bodygroups allow optional add-on sub-meshes to be included in the Render model.
- Облик (Skin) : (aka Texture, Material, Surface Properties) VMT (specifies VTFs & $surfaceprops)
- Параметры облика : $texturegroup allows alternate skins
- Набор останков : $collisiontext, propdata - подмодели, появляющиеся после события "break".
- Прикрепляемые модели : Точки крепления, Иерархия движений
Поверхности столкновений
Существует довольно много компонентов модели, используемых исключительно для моделирования физических взаимодействий при столкновениях.
- Ограничивающий короб (Bounding box) : used for "early-out" proximity tests, including LOS-traces, Render-traces, Bullet-traces, and Movement Collision.
- Габарит столкновений (Collision model): (aka Physbox, Collision Hull, Physics Model, Collision Mesh) used for Movement Collision tests
- Жёсткий (Rigid) $collisionmodel, $concave (vphysics $mass & $centerofmass)
- Сочленённый (Jointed) (для куклы трупа) $collisionjoints (vphysics $mass & $centerofmass for each bone-hull)
- Объектный (Entity) Габарит НИП (NPC Hull), Габарит игрока (Player Hull), (/ Weapon Hull? eg Rockets, SMG grenade, Crossbow bolt, etc)
- $cbox ?
- Короб воздействий (Hit box) : used for Bullet-trace hit-tests.
- Центр масс : используется для расчёта прямолинейных и угловых движений под действием сил виртуальной физики.
Габарит столкновений используется для движения скелета под действием сил столкновений виртуальной физики (vphysics). Для жёсткой модели это ограничивается смещением и/или вращением всей модели вокруг её центра масс (по умолчанию, её точки отсчёта $origin ? ... центр масс = центр вращения).
Анимация
Система скелетных движений
When a bone is moved any hitbox and mesh vertices "parented" to it moves with it. Unlike hitboxes, mesh vertices may be "parented" to more than one bone. When the parent bones move apart, the "joint mesh" is stretched, when the joint is closed, the mesh compresses. The Skeleton deforms the Mesh which deforms the rendered skin.
The skeleton can be articulated by either a prescribed (aka canned or keyframe) kinematic sequence applied directly to the bone positions, or by runtime-calculated kinetic (aka ragdoll or vphysics) forces (including jointconstraints) acting through the collision model, in which case we can say that the collision model articulates the Skeleton which then deforms the mesh which deforms the rendered Skin in the normal way. Without the collision model as a deformer, vphysics forces have no effect on the model's skeleton or position. The collision model cannot be deformed in any way by kinematic sequences, they belong to different movement systems. The entity dictates which system is applied to the model, whether it is moved by vphysics or kinematics.
Таким образом, физическая SMD является особым видом подвижной SMD, поскольку в обоих случаях к исходной SMD применяется движение скелета. Физическая SMD - это оснащение виртуальной физикой, которая используется для управления движениями скелета с кукольной физикой. Скелетом перемещаются только исходная SMD и облик.
- FK : последовательная кинематика = самостоятельные действия, без реакции на столкновения
- IK : обратная кинематика = самостоятельные действия, ограниченная реакция на столкновения - смотрите $ikchain
- RP : кукольная физика = зависимые действия, полная реакция на столкновения и взаимодейтвия виртуальной физики.
- Физические ограничения :
- $collisionjoints: ragdoll.smd = jointed collision model convex bone-hulls & skeleton
Примечание: A joint is where a bone attaches to its parent bone. All bones (except the root bone) must have only one joint, so the "bonename" is also used to specify its joint. bone's position is offset from joint - Ограничения физических объектов и func_physbox
- Покадровые ограничения : eg func_door motion ?
- Обратная кинематика : $ikchain: used for "collision" modifiers to $sequences
- Развесовка вершин : $weightlist: Rigging? can be "modified" by other properties, eg iklock ... blend anims
- Keyframe Animation controllers $sequence, Activities, Events
- Ограничения/движение функциональных объёмных объектов (func_rotating, func_conveyor, etc)
Взаимное позиционирование объектов
- $origin keys/offsets all of the Model's Vertex Coordinates (mesh, physbox, animations, etc) to the Entity's World Position.
- $root = корень (верхний уровень) древа костей
- $attachment : Прикрепляемые модели : Точки крепления, Иерархия движений
- $root = корень (верхний уровень) древа костей
- События нанесения ущерба: - подмодели, создаваемые по событию "разрушение (break)"
- Останки (Gibs) : $collisiontext, propdata
- Куклы трупов (Ragdoll)
- Взрывы (Explode)
Движения поверхностей
Тип анимации, применяемый к вершинам сетки без использования облачения на скелет. Она смешивает переходные состояния (например, выражений лица) для создания плавных переходов между каждым состоянием/выражением. Для правильной работы анимации начальное и конечное состояния должны иметь одинаковое количество вершин. Также называется лицевой анимацией. [Нужно сделать] (смотрите анимация поверхности)
Словарь моделирования
Подмодели
- $collisionmodel or $collisionjoints specifies a very important sub-model which is used for vphysics animation. Almost all World Models must have a 3D "physics shadow" of their Mesh. The collision model's geometry, smoothing group and envelope data are defined in the Physics.smd which is usually a pared-down version of the Default Mesh. The collision model is Rigged (if necessary) using the QC $collisionjoints configuration, and compiled to the model's PHY file. A Jointed Collision Model causes skeletal articulation resulting only from vphysics forces (ie passive or "Ragdoll" animation). Models under active or "Dynamic" animation use an Entity-specific Collision Hull and the IK system for collision detection.
- $attachment points allow many world prop models, such as the character's "current weapon", to be constrained to a specific bone or bones on the main model. These sub-models will move relative to the bone they are attached to, but will not deform like the Meshes. They are essentially prop-constraints used for skeletal or movement hierarchy animation.
- $bonemerge submodels include w_weapons enveloped to reference skeleton.
- $bodygroup submodels include clothing enveloped to reference skeleton.
- $collisiontext specifies a list of Custom gib.mdls that will replace the main model in game when it "breaks" (see propdata). Gibs are physics-prop models in their own right.
Геометрия столкновений
Ограничивающий (размерный) короб
Ограничивающий (размерный) короб - это простой выпуклый параллелепипед, который охватывает все Материальные и Видимые части модели, то есть её гарабарит столкновений, короба воздействий и т.д.
- Любая геометрия за пределами ограничивающего короба будет считаться нематериальной (NotSolid) для пуль, линии видимости (LOS) и материальных (Solid) объектов.
- Он используется только для простых проверок присуствия, так как нет необходимости проводить сложные (затратные) проверки на столкновения с объектами, которые не попадают в ограничивающий короб.
- По умолчанию ограничивающий короб дублируется из габарита столкновений, который может быть слишком маленьким. Для его корректировки используется QC-команда
$bbox. - Смотреть также раздел Surrounding Bounds статьи CollisionProperty.
- Смотреть также Габарит столкновений.
Габарит столкновений
- Каждый материальный(Solid) объект имеет какой-либо Габарит столкновений (Collision Hull). Это может быть
- Жесткий габарит (Rigid Hull) (смотрите $collisionmodel),
- Кукла трупа (Ragdoll) (смотрите $collisionjoints),
- или простой, но эффективный Габарит НИП.
- (Габарит столкновений элементов карты определяется просто геометрией их поверхности)
- Sometimes called a Physbox or Movement Hull, it is used for vphysics collisions between one or more moving objects; even Static Solid objects can collide with Moving Solid objects. Смотрите CollisionProperty.
Короб воздействий
Типы моделей
- Неподвижный реквизит (prop_static) (worldspawn-related models ?)
- Мелкий реквизит (prop_detail) (sprites &/ models spawned rather than placed)
- Физический реквизит (prop_physics) (vphysics models)
- Оружие (weapon_) (worldmodel (vphysics_model), + viewmodel)
- Предметы (item_) (worldmodel (vphysics_model))
- Куклы трупов (prop_ragdoll) (ragdoll models)
- размер/вес моделей: player_pick-up, player_push, physgun_pickup, physgun_push ?
- Подвижный реквизит (prop_dynamic) (animated models)
- Неигровые персонажи (npc_) (ai_animated_models)
- ? (io_animated_models = scripted & triggered?)
- Транспортные средства (prop_vehicle_) (player driveable vehicles, for APC, see (ai_animated_models))
- Studiomodels
- Видовые модели (Viewmodels)
- Модели небосвода (Skyboxmodels) и мелкие модели (Detailmodels)
- Модели мира игры (Worldmodels)
- Неподвижные модели (Static models)
- Физические модели (Physics models)
- Модели машин/механизмов (Machine models)
- Модели персонажей (Character models)
- Элементные модели (Brush models) и заготовки (prefabs)
VTF слои
Текстуры VTF (via VMT Skin)
| Основная текстура VTF | Описание | VMT-команды |
|---|---|---|
| modelname_clr.vtf | Массив цветности КЗС | $basetexture |
| modelname_clr_t.vtf | Массив цветности КЗС с маской сплошности (Opacity) в альфа-канале | $basetexture $translucent |
| modelname_clr_s.vtf | Массив цветности КЗС с маской бликов (Specular) в альфа-канале | $basetexture $basealphaenvmapmask |
| modelname_clr_l.vtf | Массив цветности КЗС с маской свечения (Luminosity) в альфа-канале | $basetexture $selfillum |
| modelname_clr_h.vtf | Массив цветности КЗС с маской рельефа (Heightmap) в альфа-канале | (только для хранения : используется для редактирования нормалей normalmap) |
| Маска рельефа (Bumpmap) VTF | Описание | VMT-команды |
| modelname_nrm.vtf | Массив нормалей КЗС | $bumpmap |
| modelname_nrm_s.vtf | Массив нормалей КЗС с маской бликов (Specular) в альфа-канале | $bumpmap $normalmapalphaenvmapmask |