Atenção:
Este tutorial é um resumo de passos, não é um tutorial detalhado. É esperado que você já tenha certa noção de trabalhar com estas ferramentas.
Do que se trata este tutorial?
Isto considera que não seja só um objeto, mas sim dezenas de objetos, um mapa cortado em chunks. Se você tem somente 1 modelo (por exemplo só 1 casa), é muito mais simples, é só converter aquele modelo para .dff e posicionar no mapa de alguma maneira. Neste caso, o
tutorial de como adicionar objetos no GTA pode te ajudar e é bem mais simples. Ele é excelente para iniciantes.
Estes passos são para se você tem um total novo mapa pro jogo, com muitos objetos, como criar uma conversão total / reforma total ou extensão para o mapa do GTA.
Como criar um mod de mapa a partir de um modelo
Modele tudo em unidade de metros. O centro do projeto do seu modelo será o centro do mapa do jogo (você também pode mover depois de alguma forma, mas tenha isso em mente). Ou seja, se você criar um objeto no centro e mover ele
1000.0
para o X, no jogo, este objeto ficará na coordenada
1000.0 0.0 0.0
. Você inclusive pode usar isso para importar um objeto do jogo original ao seu projeto, posicionar este objeto na coordenada do jogo original (
Euryopa é um bom visualizador de mapa) e assim você terá a noção de coordenadas e posição de tudo. Um plano de 6000x6000 metros (no caso do SA) com o desenho do mapa do jogo é bom também.
Cada objeto não pode ter mais de 255 metros em algum eixo (mas considere 240m para evitar dores de cabeça), e pivot centralizado.
O limite de tamanho (dimensão) é por causa do limite de modelo de colisão, e ainda no momento há o limite de tamanho do .dff para objetos de mapa (provavelmente 65 mil vértices ou algo assim, bem, são em torno de 2 MB de .dff).
Você provavelmente usará 3DS Max (o ano da versão não é tão importante) com o
Kam's Max Script atualizado pelo Gold Fish, e EMAP Tool. Há alternativas, mas este é um passo que eu usei.
ATUALIZAÇÃO: É extremamente recomendado usar o
rwio do aap para importar e exportar arquivos .dff pro 3DS Max, foi totalmente confirmado que ele é a única ferramenta de importação e exportação de dff que é estável e não causa problemas no jogo ou no modelo. No entanto é necessário certos scripts para automatizar a exportação e importação de múltiplos arquivos e editar levemente o script do Kams para poder importar .ipls usando a importação do rwio em vez do Kams (caso for necessário pra você em algum momento). Com um pouco de esforço você consegue isso tudo no nosso Discord. Também é importante entender do que se trata as configurações de exportação de .dff com ele, pois ele é mais completo e modular.
Basta ter o mapa dentro do 3DS Max (seja criado nele ou importado de outro programa, eu recomendo .fbx ou .dae). Provavelmente você terá que dar attach nos objetos separados por materiais, deve haver métodos automáticos para isto, mas eu uso
Attach list
. Também verifique se o tamanho está correto, configure o seu 3DS Max para metros e nas opções de importação configure para outra unidade caso importar errado.
Tendo o mapa completamente pronto como você quis (lembre-se de salvar o projeto em .max para não perder nada!), com cada mesh nomeada corretamente para um nome único (para evitar conflitos com outros mods)(use no máximo 16 caracteres, o limite é 20 caracteres se eu não me engano, mas o objeto de lod começa com "lod" então são mais 3), tenha certeza de que o pivot está centralizado em cada objeto, selecionando todos no
Scene Explorer
, e no Kam's Max Script em
Align Pivot To Center
(há outros métodos). Se a rotação e posição ficar errada, pode ter sido causado pelo
X Form
, não é objetivo deste tutorial explicar como 3DS Max funciona, então pesquise e peça ajuda à alguém. Mas verifique no objeto se tem vários
X Form
aplicados ou você simplesmente está trabalhando num modifier embaixo dele ou não etc. Pode ser confuso para iniciantes.
Também no
Scene Explorer
tenha certeza de que cada objeto (geometria) está deslinkada de um pai, você pode só arrastar pra fora ou usar botão direito e unlink. Você pode apagar todo o resto deixando somente o que você precisa.
Se o modelo foi criado no Sketchup, é altamente recomendado (e essencial, para o modelo de colisão) que você corrija as faces criadas nos T Vertices, isto otimiza e corrige paredes invisíveis no modelo de colisão. Veja o tutorial:
[GTA] Como corrigir paredes invisíveis em COL do Sketchup. Eu também recomendo:
Como usar Sketchup para GTA / desenvolvimento de jogos.
Alguns softwares pintam a cor do material, seja na cor da textura ou em cinza. O correto para o GTA SA é que todos os materiais estejam na cor branca no diffuse. Há opção no Kam's Max Script,
ou baixe este script que eu editei, que também corrige opacidade 0 (pois há casos que alguns materiais abrem em opacidade 0).
Se você precisa de uma solução rápida para LOD, e assim os objetos também aparecerem de longe, use
Copy Obs as LODs
na guia
Utilities
do do EMAP Tool, os objetos normais serão copiados como um LOD. Isto não é otimizado, mas você pode depois editar os objetos de LOD para otimizar eles. Eu recomendo isto pois se o seu mapa tem chão, o chão será copiado, e sinceramente, você não precisa otimizar o chão caso ele não seja tão highpoly. Então você pode fazer assim e depois otimizar somente os objetos que precisam ser otimizados, diminuindo a quantidade de triângulos/vértices e texuras usadas nestes objetos. Simplygon é excelente para automatizar isto, explicarei em seguida.
Tudo finalizado, abra o
EMAP Tool
(no novo Kam's Max Script há um botão para abrí-lo no
Map IO
, ou use
Run Script
manualmente).
Não é o objetivo deste tutorial explicar o que cada coisa faz, mas é auto explicativo, você entende. Se você não sabe quais IDs escolher, use alguma ferramenta de gerar IDs livres, ou
esta minha lista que considera mods atuais.
Esta ferramenta irá gerar as linhas para o IDE (seção
objs
) e posições para o IPL (seção
inst
). Você precisa colocar manualmente estas linhas num arquivo IDE e IPL, de preferência no ModLoader. Eu recomendo baixar qualquer mod de mapa na MixMods para se inspirar em configurar o seu mod de mapa dentro do ModLoader.
Caso o seu mapa tenha objetos controlados por tempo, por exemplo, janelas acesas nas casas, você tem que configurar a linha do objeto de janela acesa não no
objs
mas sim no
tobj
. Abra um .ide original do jogo para ver como funciona.
Use Kam's Max Script para exportar todos os .dff de uma só vez.
Você pode querer usar Radiosity para gerar um prelighting, e assim ter sombreados e luzes realistas no seu modelo, mas vamos ignorar por enquanto, faremos isso depois, ao exportar os arquivos .dff há opção de prelight por vertex color onde você define o padrão para dia e noite. Usar uns 80 para dia e 30 para noite parece ok.
NVCMerge do Ryosuke839 é uma ferramenta útil para trocar e misturar vertex color também. Para o objeto de janela acesa, 200 para dia e noite parece bom.
Há opção de usar "Normals" em vez de "Vertex color" para o prelight, assim o modelo será sombreado com base na direção das faces de maneira mais dinâmica, e suporta "smoothing", é recomendado para objetos como props. "Vertex color" desconsidera o smoothing do seu objeto, no entanto, os métodos de prelighting, como Radiosity, consideram o smooth ao calcular o sombreado. Ou seja, o smooth ficará no prelight, não no normals.
Para exportar a colisão, menu
GTA Tools > Collision > Export to CST
para exportar os selecionados como arquivos .cst que podem ser facilmente importados no Coll Editor, só arrastando ou em Add.
Se nenhum arquivo .cst foi gerado, ou algum não foi, é porque atingiu o limite de 255 metros em algum eixo, pode ter sido causado pela falta de alinhar o pivot no centro do objeto como explicado antes. Verifique se a quantidade de .dff e .cst está certa para evitar dores de cabeça depois.
No Coll Editor, selecione todos os objetos de LOD e vai com o botão direito e
Collision Mesh > Clear Mesh
para limpar o modelo de colisão, afinal, LOD não tem colisor. NÃO use
Optimize
, pois isto irá ajustar o bounding, que é a caixa que indica se o objeto deve ou não ser renderizado, se fizer isso o bounding ficará zero e o objeto irá sumir quando a câmera não estiver focado no centro dele. Só use o
Optimize
se você sabe o que está fazendo.
Para ter certeza de que o modelo de colisão está no tamanho certo você pode clicar com o botão direito num objeto e ir em
Show Details
, se o tamanho dele faz sentido (em metros), deve estar certo, senão você terá que ajustar o tamanho do objeto antes de exportar, ou você importou em unidades erradas, o seu 3DS Max está configurado com unidades erradas (configure-o para metros) etc.
Monte o .txd com
Magic.TXD, lembrando de usar texturas com resolução potência de 2, compressão DXT1 para texuras sem transparência e DXT5 para com transparência.
Mipmaps também é excelente. Você pode usar
Ferramentas > Compilação em Massa
para criar um .txd com todas as imagens de uma pasta.
Configure corretamente o nome do .txd no .ide, você normalmente vai querer otimizar o seu mapa separando em vários .txd e colocando cada objeto, ou conjunto de objeto, num .txd diferente. Usando a compilação em massa numa pasta onde você exportou o seu objeto junto com texturas, pode ser útil para saber quais texturas cada objeto usa. Mas lembre-se que nem sempre usar um .txd para cada objeto é a melhor escolha, pois pode haver muita duplicação de texturas carregadas em cada .txd. Portanto, se você quer otimizar isso, use a cabeça, e
txdp no IDE pode ser útil também para as texturas mais genéricas que são compartilhadas em vários objetos (por exemplo, grama).
Você já pode testar o seu mod, caso problemas, veja a
Lista de Crash e verifique bem cada passo. A lista há vários crashes relacionados com mapa, ajuda muito.
Tendo o seu mapa corretamente instalado e funcionando, você agora pode fazer os ajustes finais.
Prelight / Vertex colors / Radiosity
Não cabe a mim fazer um tutorial de radiosity e vertex color aqui, mas basicamente, assim como já foi resumido acima, o jogo usa vertex colors pré-calculado para o sombreamento e luzes estáticas dos modelos do mapa. Vertex Color é a cor de dia, e Vertex Illumination é a cor de noite. Siga algum tutorial de radiosity para isso, há alguns aqui no fórum.
Lembre-se que você pode precisar suavizar as transições do vertex color entre os objetos, o plugin Vertex Color Smooth resolve isso automaticamente nos objetos selecionados (já incluso no pack de plugins do GoldFish). É um processo lento e pode não funcionar em 3DS Max novos, você pode querer procurar outros scripts pra isso se necessário.
E lembre-se também que o prelight, principalmente noturno, requer muito trabalho manual, você precisará usar muito a Vertex Paint Tool para realizar ajustes manuais.
Otimizar LOD (Level Of Detail)
Como explicado anteriormente, há objetos que você precisa otimizar o LOD para ficar mais leve, principalmente quando é objetos mais complexos e detalhados, como uma casa, mas não é muito importante para o chão. Há duas maneiras de otimizar o seu modelo de LOD, a automática e manual.
Manualmente, não há mistério, simplesmente faça um modelo parecido, mas mais low e simplificado, e salve ele no lugar do .dff de LOD que você gerou anteriormente.
Automaticamente, eu recomendo Simplygon, usado por jogos AAA, como The Witcher 3, e há versão grátis. Nele há extensões para 3DS Max, Blender, Unity, Unreal, e até mesmo batch, onde você pode usar linhas de comando. Eu tenho familiaridade com Unity, testei e realmente gostei do resultado. No caso da Unity eu gerei o LOD lá e exportei em FBX usando FBX Exporter. Não testei o plugin para 3DS Max, mas parece ser uma melhor opção para este caso. Aproveitando, se você teve o erro
ArgumentException: An item with the same key has already been added.
no Simplygon, e então o LOD gerado fica com uma só textura, separe em mais de um objeto e gere o LOD selecionando o objeto pai. Eu não encontrei nada sobre isso no Google, então está aí.
Otimizar COL (modelo de colisão / colisor)
Literalmente o processo que mais pesa num gameplay do GTA SA é o processamento de colisão. Otimizar o seu arquivo .col é extremamente importante para o desempenho. Por exemplo, uma casa normalmente tem o corte na face para colocar o material de janela, ou até mesmo profundidade. Edite o projeto do seu modelo, agora num projeto para criar o modelo de colisão, eu recomendo que você selecione todas as faces com material de grama e separe numa mesh que indique que é grama daquele objeto, por exemplo,
object_1
e
object_1_grass
, no final você remove completamente todos os materiais para limpar todo o UV map da sua mesh, e limpe todas as vértices/arestas inúteis, deixando cada parte reta, cada parede, com menos triângulos possível. Lembrando que, no caso do Sketchup, é necessário realizar correções citadas anteriormente para evitar paredes invisíveis.
Você exporta novamente estes modelos de colisão pelo 3DS Max, mas aqui você tem que tomar um grande cuidado para não alterar a posição do pivot do modelo de colisão, afinal, se você apaga uma face para um lado, o centro do objeto vai ser diferente de antes, e você não quer isso. Se algo deu errado, importe o seu modelo de colisão por cima do seu mapa original e alinhe o seu modelo com o original, há um botão
Align
no menu de cima, e em
Hierarchy > Align Pivot > Affect Pivot Only
você pode alinhar o pivot dos dois objetos, ou centralizar de novo etc. Outra forma de re-ajustar a posição do objeto é com
snap to vertex. Evite ter que passar por isso de novo. Em alguns casos é muito mais simples simplesmente apagar as faces dentro do Coll Editor, assim você tem certeza de que o centro da mesh não desalinhará.
Por fim, tendo tudo pronto dentro do Coll Editor, no modo Edit selecione as faces e coloque os materiais corretos em cada uma. Por isso eu recomendei você criar uma separação de mesh para tudo que é grama etc, pois você pode importar tudo no Coll Editor, abrir por exemplo o
object_1_grass
(que é a parte da grama do
object_1
), selecionar tudo (há um botão para isso) e aplicar grama em tudo, no final, você seleciona tanto o
object_1
quanto o
object_1_grass
e com o botão direito vai em
Merge
, vai gerar um novo no final da lista, renomeie para o nome original (neste caso,
object_1
) e apague os anteriores. Assim eles ficarão juntos num só, e será muito mais fácil de aplicar os materiais para cada parte da colisão.
Eu notei que o modo de exportar colisão (provavelmente só no Kam's Max antigo? Não sei) coloca automaticamente o ID do material de colisão com base no ID do material. Ou seja, se o primeiro material da sua mesh é
grass1
e o segundo é
road1
, no .col, todas as faces com
grass1
usará o material de colisão de ID 0, e
road1
usará o ID 1. Com isto dá para simplificar como você cria um .col, sem precisar ficar colocando manualmente no Coll Editor. É só uma dica.
Outras ferramentas úteis para debug em mods de mapa
Draw Cols SA (modo debug para modelos de colisão)
View Models Info (ver ID de objetos)