Como configurar a colisão de veículo no Sollumz

Por Nilo3D · Atualizado:

A colisão de um veículo do GTA V é um Bound Composite dentro do .yft, com uma forma de colisão por peça funcional, cada uma seguindo um bone. No Sollumz um bound funciona quando duas coisas são verdade: o bone está com Fragment Physics ligado, e o objeto do bound segue esse bone por uma constraint. Um veículo exportado sem bounds atravessa o mapa.

Onde fica a colisão do veículo?

Um veículo não tem arquivo de colisão separado. A colisão dele faz parte do fragment, ao lado do modelo visível:

mycar                  Armature, Sollumz type: Fragment (bones = the car's parts)
  mycar.mesh           Empty, Sollumz type: Drawable
    chassis            Mesh, Drawable Model (skinned to the bone "chassis")
    bodyshell          Mesh, Drawable Model
    door_dside_f       Mesh, Drawable Model
    wheel_lf           Mesh, Drawable Model, "Is Wheel Mesh" on
    ...
  mycar.col            Empty, Sollumz type: Bound Composite
    chassis.col        Bound Geometry, follows the bone "chassis"
    wheel_lf.col       Bound Disc, follows the bone "wheel_lf"
    door_dside_f.col   Bound Geometry, follows the bone "door_dside_f"
    ...

O Bound Composite é um contêiner. As formas embaixo dele fazem o trabalho, e cada uma pertence a um bone, então a colisão de uma porta abre junto com a porta e a colisão de uma roda fica onde a roda está. Para ver as colisões enquanto trabalha, use Sollumz Tools > General > View > Show Collisions.

Qual tipo de bound vai em qual peça?

Adicione formas em Sollumz Tools > Collisions > Create Bounds com Create Bound e o menu de tipo ao lado. Os veículos originais usam um bound por peça funcional, nunca uma forma única juntando o carro inteiro.

PeçaTipo SollumzForma
Carroceria (chassis)Bound GeometryUm casco simples e fechado em volta da carroceria.
Cada rodaBound DiscUm disco do tamanho do pneu.
Portas, capô, porta-malas, para-choquesBound GeometryUm casco em volta de cada peça.
VidrosBound GeometryUma forma fina sobre o vidro, com um material de colisão de vidro.
Blocos simplesBound Box, Bound Sphere, Bound Capsule, Bound CylinderDimensionados pelos valores do painel Shape do bound.

O começo certo mais rápido é copiar os bounds do veículo original que você importou como referência. A cópia mantém o tipo, o material e a massa. Depois troque a malha de cada casco por uma que encaixe na sua peça. A malha do casco é gravada em relação ao bone dela, então monte com a peça na posição do bone.

Quais materiais os bounds usam?

Bounds só aceitam materiais de colisão. Eles decidem o som, as faíscas e o comportamento das balas na superfície. Escolha um em Sollumz Tools > Collisions > Create Collision Material e aperte Create Collision Material. Para a carroceria de um carro o usual é Car Metal; também existem o Car Plastic e os materiais Car Glass para os vidros.

Nunca deixe um material normal de render em um bound. Em um dos nossos carros, um material visível em um bound de roda bastou para a exportação falhar.

Como a massa é definida?

Cada bound tem a própria massa, mostrada no objeto do bound, e as massas somadas dão o peso do modelo. Sollumz Tools > Fragments > Set Mass grava um valor em todos os objetos selecionados. Copiar os bounds de um veículo original parecido já dá números sensatos de início.

A massa também define o centro de gravidade. Quando adicionamos bounds auxiliares de 200 kg cada a um carro, eles deslocaram o centro de massa e mudaram o jeito de ele andar. Bounds extras que só estão ali para colidir devem pesar cerca de 1 kg. A massa que a física de direção usa continua sendo o fMass do handling.meta.

Os bounds de veículo precisam de flags de colisão?

Cada bound tem um painel Composite Flags com duas fileiras de opções: o que a forma é, e com o que ela colide. Nos veículos originais que abrimos, elas estão vazias nos bounds do veículo, e isso é normal. Bounds de veículo não precisam das flags de mapa.

Com objetos de mapa e props é diferente. Neles, um bound sem flags é exportado sem nenhum aviso e não colide com nada no jogo. Para esses, aplique um preset de flags em todos os bounds; o Sollumz vem com um chamado General (Default). Se você alterna entre props e veículos, não leve a regra de um para o outro.

Por que meu veículo atravessa o mapa?

SintomaCausaSolução
Atravessa a rua assim que dá spawnO fragment não tem Bound Composite, ou ele não foi exportadoAdicione os bounds como filhos da armature e exporte com a armature selecionada.
Fica apoiado na barriga, com as rodas dentro do chãoSem bounds de roda, ou eles não seguem os bones das rodasUm Bound Disc por bone de roda, do tamanho do pneu.
A exportação avisa sobre um bone sem colisãoFragment Physics está ligado mas nenhum bound segue o boneAdicione a constraint, ou desligue a física desse bone.
A colisão está deslocada em relação ao modeloO bound foi movido à mão e também pela constraintZere a posição própria do bound e deixe a constraint posicioná-lo.
Os jogadores atravessam uma peça andandoEssa peça não tem um bound próprioAdicione um bound no bone dessa peça.
O carro anda com a frente baixa ou capotaBounds extras pesados deslocaram o centro de massaDiminua a massa deles.

Se o modelo está certo e só a altura do carro está errada, isso é suspensão, não colisão: veja a solução de problemas de veículos.

Como confiro a colisão antes de testar no jogo?

Exporte uma vez com CW XML marcado em Target Formats e abra o .yft.xml em um editor de texto. Na seção de física, a lista de groups deve trazer o nome de cada bone ao qual você deu física, e a lista de children deve ter uma entrada por bound. Se os groups estiverem faltando, nenhum bone estava com Fragment Physics ligado.

O resto do processo do modelo está em como fazer um veículo de FiveM no Blender com o Sollumz.

Perguntas frequentes

Por que meu carro atravessa o mapa no FiveM?
O .yft não tem colisão. No Sollumz o veículo precisa de um Bound Composite com bounds embaixo da armature, cada bound seguindo um bone que está com Fragment Physics ligado.
Como adiciono colisão a um veículo no Sollumz?
Crie os bounds em Sollumz Tools > Collisions > Create Bounds, marque Fragment Physics no bone de cada peça e adicione uma bone constraint a cada bound com Bone Tools > Add Bone Constraint.
Qual tipo de bound as rodas usam?
Um Bound Disc em cada bone de roda, do tamanho do pneu.
Os bounds de veículo precisam de flags de colisão no Sollumz?
Nos veículos originais que abrimos, as flags dos bounds de veículo estão vazias, e isso é normal. Objetos de mapa e props precisam, sim, de flags em todos os bounds.
O que significa "Bone has physics enabled, but no associated collision"?
Um bone está com Fragment Physics ligado mas nenhum bound o segue. Adicione um bound com uma bone constraint nesse bone, ou desligue a física do bone.

Fontes

Produtos deste guia

Todos os guias