Página 1 de 1

3. Dummy, coordenada, rotação

Enviado: 14 Ago 2018, 05:11
por Junior_Djjr
Atenção: É recomendado que você leia as partes anteriores do meu tutorial de converter/adaptar carros pro GTA.

Agora que você já conhece os dummies e suas funções, vamos começar a entender melhor sobre o posicionamento deles.


Como criar um dummy e deixá-lo visível no ZModeler

Se você esconder todos os nodes com mesh/malha visível, deixando somente os dummies, você verá o carro desta maneira:

Imagem

Nota: Recomendo que veja o carro utilizando a câmera "perspective":

Imagem

O cubo azul é a indicação do centro do arquivo. Os verdes menores são os dummies de utilidades do jogo.
Você pode ver o nome de cada dummy posicionando o mouse em cima deles:

Imagem

No entanto, as cores, tamanhos e o fato de existir os cubos visíveis é algo totalmente do ZModeler; é só uma conveniência.

Clique com o botão direito em cima de um dummy na visualização, ou na hierarquia, e vai em Properties:

Imagem

Perceba que você pode escolher a cor e tamanho da visualização do dummy:

Imagem

Isto é muito útil, veja:

Você facilmente cria um novo dummy no ZModeler utilizando este botão:

Imagem

Para abrir este menu, clique na seta pra baixo do lado do botão. Se não abrir, vá em View > Redraw All e tente novamente.
Após selecionar Dummy Helper, clique no mesmo botão, agora no ícone do cubo.
Criará um node chamado Dummy Helper na hierarquia.

Imagem

Se você esconder o dummy landstal.dff, toda a nossa Landstalker ficará escondida e assim conseguiremos visualizar o nosso dummy:

Imagem

Ele é azul grande, se você quiser, faça os passos ensinados acima para deixá-lo pequeno e numa cor desejada.

Você também pode criar um novo dummy tirando uma cópia de um existente:

Imagem

Lembre-se de sempre clicar no quadradinho do lado do Copy e conferir as configurações. Deixe-as como na imagem.

Agora basta clicar em algum dummy e arrastar o mouse.
Como dito anteriormente, eu recomendo que você faça isso na visualização Perspective, mas também funciona em outras.

Imagem

Será criado um clone, igual, incluindo o mesmo nome.
Vá na hierarquia na posição onde está o dummy que você usou para clonar, o dummy clonado será um irmão do dummy de origem, e ele estará no fim da lista.

Nota: Esta ferramenta não é só para clonear dummies, mas qualquer tipo de node. Utilizando a configuração "With children", como o nome diz, clona também todos os filhos contidos.


Coordenadas e rotações

Uma coisa que você deve ter percebido quando clicou e arrastou o dummy para ser clonado, é que a posição não reagiu exatamente ao movimento do mouse, foi um tanto "estranho".

Por padrão o ZModeler fica configurado em "screen space" movendo somente o eixo X, ou seja, somente horizontalmente na tela.
Para trabalhar na câmera Perspective eu recomendo deixar em Local:

Imagem

Assim, se você deixar configurado em X, ao mover algo, moverá no eixo local X.

Para entender melhor, vamos utilizar outras ferramentas do ZModeler, como a Move:
Imagem

Agora experimente clicar e arrastar algum dummy (ou peça do carro, não importa). Se moverá somente para os lados (eixo X; setas vermelhas).

Se você marcar Move Pivot only, moverá somente o pivot, ou seja, as setas, a origem do node, não o modelo dele. No caso do dummy não existe nenhum modelo, portanto não tem diferença.

Troque o modo para Y e Z, e Screen e World, e veja as diferenças.

No World é igual ao Local quando a peça está com rotação padrão, mas experimente mudar a rotação de algum dummy ou peça utilizando a ferramenta Rotate:

Imagem
Imagem

No exemplo acima, agora o eixo Y (verde) e Z (azul) estão na diagonal, se eu movê-los com Local Y ou Z, eles andarão na direção que estão apontados, diferente de World que moverão para a direção "do mundo", ou seja, o Y continua sendo para cima mesmo que localmente ele esteja na diagonal.

As configurações da ferramenta Rotate é melhor testar na prática do que explicar, especialmente Base to Pivot, que muda a reação da rotação por parte do node pai. O Rotate Matrix é basicamente rotacionar o pivot (o que é bem comum usar), enquanto o Rotate Geometry rotaciona também a geometria do que será o atomic do nosso frame, ou seja, toda a malha do modelo da peça.

Informação importante: 
GTA SA usa sistema de coordenada left-hand (mão esquerda):
Imagem
No entanto, enquanto o ZModeler utiliza Y para "cima", no GTA SA é Z.
Lembre-se: Y no ZModeler é Z no GTA SA. Ambos querem dizer "para cima".
O Z do ZModeler é a profundidade (ou "frente-atrás"), enquanto no GTA SA a profundidade é o Y.

Isto pode causar confusões de diversas maneiras, como em explicações e ao converter modelos — há alguns modelos que você baixa na net ou faz rip de outros jogos que usa um sistema de coordenada diferente, e se não trocar o lado dos eixos, o carro, peças etc ficarão virados 90°.


Pivot sendo resetado in-game

E aqui a gente entra em algo que pode ser confuso para muita gente, inclusive, eu só aprendi realmente como isto funciona há menos de 1 semana atrás.

Se você já trabalhou com modelos no ZModeler antes, sabe que é necessário usar Reset do parent nas peças.

Imagem

Mas em quais peças? E por quê?

Eu pensava ser alguma limitação de modelos 3D em geral, depois pensei que fosse só algo do ZModeler ou do GTA, mas mais especificamente, é uma "economia de memória" que a Rockstar fez nos GTAs da Era 3D.

Os filhos dos dummies de damage, como portas e para-choque, têm o seu frame deletado e o atomic é copiado para o frame dummy (lembra o que é frame e atomic?).

Vendo que as informações de posição, rotação, escala etc estão no frame e não no atomic, tudo será perdido, e agora o atomic usará as informações do frame do dummy.

Para ver o problema na prática, vá no bump_front_dummy, perceba que este dummy e os seus filhos têm o pivot na exata mesma posição e orientação — quando você passa o mouse em cima do bump_front_ok, a origem das setas é exatamente igual; em cima do dummy:
Imagem
Experimente mover um pouco pro lado (não ative o Move Pivot only)
Imagem
Não fará alteração in-game!
Imagem
É porque você moveu o node, o frame, e como expliquei, este frame será deletado pelo jogo, portanto esta informação será perdida. O atomic usará o frame do bump_front_dummy.

É por isto que é necessário usar Reset do Parent, pois deixará a posição (Offset) e orientação (Orientation) do node (no nosso caso, bump_front_ok) sendo igual ao seu dummy (bump_front_dummy), assim não fará diferença quando o jogo remover o frame de um, pois ambos são iguais.

O jogo apaga tais frames pois normalmente eles são iguais ao dummy, então são inúteis e só servem para gastar um pouco de memória RAM (164 bytes cada node para ser mais exato), uma economia importante na época do PS2.

Ou seja, todos os nodes dentro destes dummies é necessário usar Reset to parent, tanto com Offset quanto com Orientation para o resultado visualizado dentro do ZModeler ficar ao resultado dentro do GTA SA.

Também é necessário fazer a mesma coisa em nodes adaptados ao Improved Vehicles Features e Active Dashboard, não pelo mesmo motivo, mas pelo método que os tais mods funcionam. Isto é, o node do volante terá o pivot resetado pelo mod e ficará na mesma posição e orientação do seu pai, assim é necessário fazer a mesma solução.
Curiosamente, o meu VehFuncs não precisa disso. Eu fiz uma solução que deixa mais conveniente para quem modela — você não precisa se preocupar com tudo isto :daora:

E falando nele, se você usar VehFuncs, nodes dentro de tais dummies, caso o node não inicie com a primeira palavra do nome do pai, o frame dele será preservado.
Isto quer dizer que se você instalar um node chamado exemplo dentro do bump_front_dummy, o frame será preservado e não precisará disto acima, mas se o node se chamar bump_exemplo, precisará.


Próxima parte:
(em breve)

Re: 3. Dummy, coordenada, rotação

Enviado: 23 Nov 2018, 14:30
por Legacy
Em relação ao pivot sendo resetado in-game, eu descobri algo recentemente: caso você use o Blender para criar modelos para o GTA, é necessário usar CTRL+A para fazer algo parecido. Aplicar as propriedades do objeto na malha.

Exemplo:
1- Você cria um cubo
2- Você deixa a escala dele em 2.0
3- Você dá CTRL+A
4- A escala dele ficará 1.0, mas ele continuará com o tamanho dobrado.

Isso é útil para diminuir o tamanho de objetos criados! Muitas vezes a escala se perde por causa da conversão ou ao usar programar que fazem ripping de modelos de jogos.

Anotei aqui para me lembrar no futuro e outros usuários visualizarem. Quando tiver vários fragmentos de informação como esses, farei algum tutorial. Mas daqui a muito tempo.