Design de Jogos


Tutorial: Importar Modelos para Source Engine
maio 1, 2008, 5:00 pm
Filed under: Tutorial | Tags: , ,

Este tutorial lhe ensinará a compilar e importar seus modelos para props e personagens para qualquer jogo que utilize a Source engine e o Source SDK através do Steam. Ele é voltado para quem possui um bom conhecimento em modelagem 3D e está interessado em criar objetos para esta engine, ou mesmo iniciar um trabalho de Level design para Half-Life 2, Orange Box e outros jogos com a Source Engine.

Para saber mais sobre o Source SDK, visite o site oficial de desenvolvimento da Valve.

Criar props especiais para seu mapa pode significar a diferença entre um bom mapa e um ótimo mapa. Os modelos podem ser usados para dar aquele toque único que evidencia a personalidade e a dedicação do designer em seu projeto.

O processo, no entanto, não é muito fácil, mas com este tutorial você vai poder colocar seus props feitos em qualquer programa 3D no hammer e usá-lo em seu projeto.

Os passos a serem seguidos são os seguintes:

  • Modelagem do prop em um programa 3D (3Ds max, Maya, XSI…)
  • Criação dos diversos modelos para o bom funcionamento do prop (LoDs, Shadow e Phys)
  • Exportação dos modelos no formato para compilação (no formato SMD)
  • Setagem dos materiais e a configuração para compilação (criação dos VMTs e .QC)
  • Compilação do modelo (no studiomdl)
  • Uso no seu mapa! \o/

Planejamento

É bom saber:

1 metro = 52 unidades no hammer
1 unidade no hammer = 1 unidade o 3Dmax, Maya ou XSI

Faça um pequeno modelo do seu objeto no hammer antes de ir modelando, daí tire as medidas básicas em unidades e faça o seu rascunho ou planejamento.

Para modelos simples como uma placa ou uma mesa, você pode ir direto para o pacote 3D, mas para modelos complexos, como o do exemplo, que é um avião, eu recomendo fazer as vistas superior, lateral e frontal para auxiliar na modelagem.

Modelagem

Modele seu prop no programa 3D de sua escolha. O ideal seria usar o XSI mod tools, mas sinceramente eu acho ele muito bugado se comparado com o pacote completo do XSI. Eu uso o 3Ds Max 9 comercial e um plug-in especial para exportar para o hammer. Porém, desde que o programa possa exportar o modelo no formato .OBJ já estará bom, pois você poderá importar os OBJs no XSI e salvar para o formato da valve.

Esteja atento para colocar o objeto no centro da cena e bem em cima do plano, pois assim ele aparecerá corretamente no hammer.

Para isso, coloque o ponto Pivot do objeto nas coordenadas 0 0 0 no pacote 3D. Se o seu objeto for alto (como uma lâmpada de teto) coloque-o no chão mesmo assim, pois senão a bounding box dele no hammer vai ficar muito grande e poderá te atrapalhar na hora de fazer o mapa.

Fique atento ao número de polígonos do modelo final e considere quantos LoDs você irá fazer. LoDs são os “Level of Detail”, que são modelos com menos detalhes que serão exibidos de acordo com a distância do objeto que o jogador esteja. Segundo o Minotaur0, do fórum Made in Brasil, “nao importa muito a contagem do model final, e sim o quao eficientes sao teus LODs, (…) 4 estágios é o ideal, nao passe disso. (o prop de humvee do Insurgency por exemplo tem em torno de 8 mil polys, enquanto o ultimo lod stage tem apenas 300).” Este artigo é excelente para saber mais sobre LoDs.

Porém, antes de criar os LoDs, você precisa dar textura ao seu modelo. Crie sua textura no Photoshop ou de outra maneira que você preferir. O padrão do Orange Box para o mapeamento de modelos e props é:

  • color maps ($basetexture)
  • diffuse maps ($basetexture)
  • normal maps ($bumpmap)
  • specular maps ($envmapmask)
  • luminosity maps ($selfillum)
  • opacity maps ($translucent)

Porém, você também pode utilizar o Phong shader do Orange box e usar mapas de especularidade e glossiness com o “$phongexponenttexture”. Mais informações sobre isso aqui.

Detalhes a serem lembrados:

  • Todo model precisa de um mapeamento UVW
  • Todo model deve ser um único objeto inteiro
  • Tenha quantos LoDs quanto achar necessário, mas não faça LoDs com pouca redução de polígonos (menos de 25% é o limite)

Quando for modelando os diferentes LoDs você pode salvar uma cópia do modelo original, ou copiar o modelo em diferentes camadas, apenas lembre-se de mantê-los todos no mesmo exato lugar para evitar problemas, como o modelo “tremendo” quando o jogador passa de um LoD a outro olhando para o objeto. O ideal é fazer cópias dos arquivos para facilitar na hora de exportar os SMDs.

Shadow model e Collision model

O modelo em alta definição não deve ser usado para projetar a sombra do objeto. Se você criou alguns LoDs, pode usar um deles, geralmente o com menos polígonos possível, para usar como o Shadow model.

Este é o Shadow Model do Avião:

Dentre algumas simplificações estão: A redução drástica de 5000 polys para 2000. Os canos das metralhadoras são sólidos, o motor (que não vai criar quase nenhuma sombra no ambiente por ser profundo) é praticamente liso. e a forma geral do avião é mais retona. Quando o jogo for projetar a sombra do avião nos brushes do mapa, vai usar este modelo como referência, salvando muita capacidade do processador e o jogador nunca vai perceber as diferenças. O Shadow model precisa de um mapeamento UVW (só ter o mapeamento, não precisa estar certinho pois nunca é exibido).

O modelo Collision é o que será usado para calcular a física do seu modelo. Ele determinará onde os jogadores colidirão no seu modelo e por onde as balas e granadas não passam. Ele é um modelo especial pois deve seguir as seguintes características:

  • Pode ser composto de vários objetos convexos (vários boxes por exemplo)
  • Cada objeto deve pertencer a um Smoothing group diferente (eu explico)
  • Deve ser extremamente simples, use apenas boxes e não mais do que 20
  • Precisa de um mapeamento UVW (só ter o mapeamento, n~~ao precisa estar certinho pois nunca é exibido)

Veja o exemplo do Collision Model do avião:

Como você pode ver ele é bem simples. É muito difícil dos jogadores perceberem as falhas durante o jogo. O meu maior problema aí é não ter as duas hastes centrais do avião, portanto os tiros por ali irão passar direto, mas devido à sua posição eu acho difícil algum jogador tentar atirar por ali para acertar outro, pois o avião possui uma inclinação que dificultaria isso.

Cada objeto separado deve pertencer a um Smoothing Group diferente. Isso é algo aleatório que tem alguma importância na maneira com o o modelo é compilado. Portanto, abra seu model e selecione cada objeto de uma vez a coloque-os em um Smoothing Group diferente:

Exportando os modelos

Se não usar o Max: Exporte os modelos como arquivos .OBJ e importe-os no XSI mod tools e exporte-os como SMDs. (eu não uso este processo portanto não sei se funciona 100%)

Eu prefiro usar um plug-in especial para exportar os SMDs direto do 3Ds Max. Você pode baixar este plug-in aqui (coloque-o na pasta /plugins/ do max e reinicie o programa). Tenha certeza de possuir apenas o objeto colapsado para uma mesh com o mapa UVW aplicado na cena e exporte no formato .SMD (que agora deverá estar disponível no final da lista. Exporte todos os modelos, os LoDs, Shadow e Collision com uma nomenclatura simples. Eu uso, por exemplo:

mymodel_1.smd
mymodel_2.smd
mymodel_3.smd
mymodel_colli.smd
mymodel_shadow.smd

Preparando os materiais

Prepare o material do seu modelo como se fosse uma textura normal, siga o tutorial do Minotaur0, mas mude a primeira linha  do arquivo VMT para “VertexLitGeneric”, pois os props do hammer são iluminados pelos vértices.

"VertexLitGeneric"
{
 "$basetexture" "redbaron"
 "model" 1
 "surfaceprop" "metal"
}

Coloque todos os materiais na pasta adequada para o jogo que estiver criando o modelo.

As características dos materiais são as mesmas que para serem usados em um Brush, o tuto do Minotaur0 explica bem esta parte.

Compilação

Agora você deve ter o seu modelo principal, os LoDs, o Shadow model e o Collision model no formato SMD, além do material pronto e na pasta do jogo. Chegou a hora de compilar o modelo para ser usado pelo hammer.

Vamos usar os seguintes nomes de arquivo:

mymodel_1.smd <– Modelo de alta resolução
mymodel_phys.smd <– Modelo de colisão
mymodel_shadow.smd <– Modelo de sombra

Coloque todos os arquivos em uma mesma pasta, e então crie um arquivo de texto com a extensão .QC e cole o código abaixo. O arquivo QC é como se fosse uma “receita” de como fazer o seu model, que será interpretado pelo programa de compilação e irá gerar o seu model pronto.

/*
----------------
My model (object)
----------------
*/
 $modelname mymodel.mdl
 $origin 0 0 0 90
 $scale 1.0
 $body "Body" "mymodel_1.smd"
 $staticprop
 $surfaceprop "metal"
 $upaxis Z
 $cdmaterials "mymodel/"
 $sequence "idle" "mymodel_1.smd" fps 30
 $collisionmodel "mymodel_colli.smd"
{
    //Mass in kilograms
     100.0
   
}

Este código acima detemina o seguinte:

  • $modelname mymodel.mdl – O modelo compilado se chamará mymodel.mdl, mude o nome para o que você quiser.
  • $origin 0 0 0 90 – A origem do seu model poderá ser consertada aqui se vc fez diferente, mas é mais fácil acertar isso no Max.
  • $scale 1.0 – Mesma coisa com o tamanho do model, mas se vc achar que ficou grande ou pequeno depois de ver no mapa, você pode alterar aqui que é mais fácil que mudar todos os models no Max.
  • $body “Body” “mymodel_1.smd” – Esta linha indica qual o modelo será usado como modelo principal, é o modelo em alta resolução.
  • $staticprop – Identifica o modelo como estático, se fosse animado não teria esta linha.
  • $surfaceprop “metal” – terá propriedades de metal, veja esta lista para as possibilidades daqui.
  • $cdmaterials “mymodel/” – Usará os materiais na pasta mymodel/, tenha certeza que seus VMTs e VTFs estejam corretos.
  • $collisionmodel “mymodel_colli.smd” – Terá como colisão o modelo mymodel_phys.smd pesando 100Kg.

Para adicionar LoDs:

mymodel_2.smd <– Modelo com LoD 1 para 50 metros
mymodel_3.smd <– Modelo com LoD 2 para 100 metros

Basta adicionar o código:

$lod 50
{
     replacemodel "mymodel_1" "mymodel_2"
}
$lod 100
{
     replacemodel "mymodel_1" "mymodel_3"
}

Para compilar seu modelo, você deve usar o programa studiomdl.exe

Este programa é um programa criado pela Valve para compilar os modelos. Ele usa uma interface de prompt, portanto para facilitar a sua vida, crie um atalho para ele e coloque o código abaixo na linha “alvo” das propriedades do atalho:

C:\WINDOWS\system32\cmd.exe /K
C:\steam\steamapps\seunome\sourcesdk\
bin\orangebox\bin\studiomdl.exe

Só lembre de mudar o diretório C: para outro se o Steam ou o Windows estiverem instalados em outra pasta, e também mude a pasta “seunome” para o seu login no Steam.

A maneira “tradicional” de compilar o modelo pode ser encontrada aqui.

Agora tenha certeza que o Source SDK está setado para o jogo que vc está fazendo o modelo para, e arraste o arquivo .QC para o atalho do studiomdl.exe. Se tudo der certo, seu modelo estará na pasta certa e pronto para ser inserido no seu mapa!

Abra o Model Viewer do Hammer e busque o seu model:

Vá na aba “Model” e selecione o box “Auto LOD” e vá afastando a visão do modelo. Voc?ê deve ver ele mudando antre os diversos LoDs automaticamente.

Agora vá na aba “Physics” e clique em “Highlight”. Devem aparecer umas linhas vermelhas representando o modelo de colisão do seu prop!

Parabéns! Seu model pode ser inserido no mapa, coloque uma prop_static no seu mapa, abra as propriedades dela (alt+enter) e clique em “World Model” e depois no botão “Browse”, espere um pouco para a janela de models abrir e selecione seu model:

Dê OK em tudo e pronto, seu prop único está no mapa!

Links úteis:

Anúncios

4 Comentários so far
Deixe um comentário

po muito bom!
consegui fazer tudo
o melhor tutorial!!

valew! feliz ano novo!

Comentário por eds

Cara… muito bom denovo!
O mesmo pode ser feito para desenvolver mapas de CounterStrike Source??

Comentário por Lima Junior

Salve Junior!

Obrigado pelos elogios. O modelo do avião foi feito no 3DSMax, mas acredito que possa ser feito no Blender sem problemas também. QUanto à fazer mapas completos para CSS ou quaisquer outro jogo da Valve, você deve usar o Hammer, editor de mapas que vem com o jogo. Dê uma olhada nos links ao lado e visite o MiB – Made in brasil, comunidade brasileira de Level Designers. Em especial este tutorial é o mais indicado pra começar: Tutorial básico de source engine.

Comentário por arhurt

Pois é, ótimo tutorial, muita gente não consegue compilar os mdl justamente pelos LODs e as linhas da qc, este problema é resolvido aqui. Pena que as equipes não se organizam para MODs de Half Life sendo que tudo está tão claro e disponivel no wiki deles e sendo uma engine tão poderosa e ‘modificável’… Além de pular várias etapas que geralmente fazem os projetos de pouco investimento falharem… =/
espero um dia ver sair um bom projeto de source ainda com hdr e tudo que tem direito daqui do Brasil =D

Comentário por Bruno




Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s



%d blogueiros gostam disto: