Mataleone.com








    Tutorial 4: Guia de Compilacao

OBS: Para o entendimento deste tutorial, eh necessario que voce tenha lido os tutoriais de introducao, configuracao e criacao de sala.

Introducao

A maioria das pessoas acha que depois de terminar de modelar um mapa no Half-Life, masta dar um Salvar Como BSP e ja ta pronto pra jogar, mas a coisa eh um pouco mais complicada. Eh importante entender como funciona todo o processo de geracao do mapa final para entender melhor o que eh possivel e o que nao eh possivel fazer no Half-Life, quais os erros que voce pode encontrar e como melhorar a velocidade do seu mapa.

Em cada frame do Half-Life, estao sendo desenhandos centenas de poligonos que juntos dao a impressao de ser um lugar palpavel. O jogo desenha tudo o que eh visivel na sua posicao atual, descartando o resto, afinal, pra que se preocupar em calcular uma area que nao sera vista? Alem disso, ilumina cada poligono com as luzes que incidem sobre ele. Se esses calculos fossem feitos durante o jogo, se gastaria um poder de processamento tremendo, ficando impossivel jogar. A compilacao serve para dar de bandeja todos estes calculos, assim, o jogo apenas passa para a placa de video exatamente os poligonos que devem ser desenhados, a placa de video faz o seu trabalho de sesenha-los, e o computador fica livre para pensar no jogo em si, nao em como desenhar cada frame.

O arquivo de mapa final do Half-Life, o BSP (Binary Space Partition tree, ou Arvore de Particao Espacial Binaria), consiste em uma arvore de informacoes dizendo para o Half-Life, para cada posicao possivel no mapa, quais os poligonos que devem ser desenhados e quais as luzes incidentes sobre eles.

As Etapas da Compilacao

Etapa 1: CSG (Constructive Solid Geometry, ou Geometria Solida Contrutiva)

O CSG valida todos os brushes do mapa, verificando se estao dentro da area limite, se todas as suas superficies sao planas e se sao todos convexos. Depois ele separa cada textura que serao usadas dos arquivos WAD e todas as entidades e separa tudo isso para o BSP.

Etapa 2: BSP (Binary Space Partition, ou Particao Espacial Binaria)

O BSP pega cada brush e pica em triangulos de acordo com os lugares onde eles se encostam e com as texturas que utilizam e entao verifica se alguma parte de dentro do mapa toca a parte de fora, ou seja, se nao tem nenhum buraco (LEAK). Se houver algum leak, o BSP para por aqui mesmo e nao eh possivel continuar enquanto nao se corrigir o leak (veja este tutorial para saber como encontrar e prevenir leaks). Por fim, o BSP divide o mapa inteiro em portais de acordo com os triangulos criados. Cada portal eh como uma pequena sala, um espaco confinado do mapa. Agora o mapa ja esta num estagio jogavel, mas o Half-Life ainda nao sabe que portais sao visiveis de cada portal, portanto desenhara tudo (lagggg) e tambem nao tem informacoes de luz ainda.

Etapa 3: VIS (de Visibilidade)

O VIS anda pelo mapa inteiro e determina quais poligonos sao visiveis de cada ponto do mapa, em cada direcao. Essa etapa eh uma das mais demoradas e pode levar desde alguns segundos ate varias horas, dependendo do tamanho e da complexidade do mapa. Ha uma opcao (-fast) que faz o VIS rodar mais rapido, porem o resultado eh muito ruim (desenha mais do que seria realmente necessario), e deve ser usado apenas fazer compilacoes de testes, nunca para compilacoes finais.

Etapa 4: RAD (de Radiosidade, ou iluminacao)

O RAD finalmente ilumina o mapa de acordo com as entidades de luz que ele contem (light, light_spot, and light_environment) e das texturas que emitem luz (veja mais sobre isso aqui). Ele usa as informacoes do VIS para fazer as sombras (se um portal ve o outro, uma luz dentro dele vai iluminar o outro portal). Para comoilacoes finais, existe uma opcao (-extra) que melhora a qualidade da iluminacao, mas aumenta o tempo dela tambem.

O RAD tambem pode levar de alguns minutos a algumas horas para compilar, dependendo do tamanho e da complexidade do mapa. Ele consome muita memoria, portanto se voce tem pouca e o RAD atingir o limite de memoria e comecar a fazer swap, a compilacao vai ficar incrivelmente lenta e pode nao terminar nunca (eh serio). Para ter uma ideia de quanta memoria livre que ele vai precisar, multiplique o visibility matrix que o RAD informa quando comeca a compilar por 1,5.

Compilando o Mapa

Ha quem recomende que nunca se use o WorldCraft para compilar, mas sim algum outro front-end de compilacao como o Tool Box Compilation Controller, que eh muito bom, roda mais rapido e da menos pau. Mas o WorldCraft nao eh tao mau assim.

O WorldCraft vem com um conjunto de programas para compilacao (csg.exe, bsp.exe, vis.exe e rad.exe) desenvolvido pela Valve quando o Half-Life foi lancado. Mas tem uma cara muito legal chamado Sean 'Zoner' Cavanaugh que pegou eles e melhorou muito, tanto em velocidade quanto em qualidade, portanto voce deve primeiro baixar o ZHLT, e instala-lo para compilar o seu mapa. Veja como instala-lo no Tutorial de Instalacao.

Eh recomendavel que se feche todos os programas antes de compilar, para liberar o maximo de memoria, que vai ser necessaria para a compilacao. Clique no botao de compilacao () e voce vera uma das das telas:

Modo "Smart":

Modo "Expert":

Eu sugiro usar sempre o modo Expert. Se voce estiver no modo Smart, clique no botao Expert. Voce tem varios esquemas de compilacao pre-definidos (lista Configurations) como para o Half-Life, Counter-Strike e TFC, e voce pode criar outros clicando no botao Edit do lado desta lista. Estes esquemas descrevem cada etapa da compilacao, que podem variar de acordo com o que voce esta fazendo. Voce pode criar etapas novas (botao New), remover etapas (botao Remove), alterar a ordem de execucao (botoes Move Up e Move Down) e ligar ou desligar etapas sem remove-las do esquema ligando ou desligando o radio box da etapa.

Para uma compilacao normal de um mapa pequeno como o do Tutorial 3, selecione o esquema Half-Life (full) e clique em Go!. Se a ultima etapa ($game_exe...) estiver ligada, e a compilacao for bem-sucedida, o WorldCraft vai rodar o Half-Life com o seu mapa automaticamente assim que a compilacao terminar (No meu computador isso nao funciona no WC 3.3, mas funcionava no 2.0).

Em caso de erro na compilacao, conserte-o e rode novamente. Ha uma lista (em ingles) de erros possiveis e suas solucoes no diretorio do ZHLT com o nome de zhltproblems.html.

Definindo Esquemas de Compilacao

Os esquemas pre-definidos executam os seguintes comandos:

  • Muda para o diretorio do Half-Life (nao sei porque)
  • Roda o CSG
  • Roda o BSP
  • Roda o VIS
  • Roda o RAD
  • Copia o arquivo final (.bsp) para o diretorio de mapas do Half-Life
  • Copia o arquivo pointfile (.pts) para o diretorio de mapas do Half-Life. Este arquivo pode ser usado para encontrar leaks, usando um metodo descrito neste tutorial.
  • Roda o Half-Life com o seu mapa
  • Diferentes esquemas de compilacao sao muito uteis quando se esta desenvolvendo um mapa. Eu normalmente uso 3, de acordo com o que eu estou fazendo no momento:

    Compilacao de testes: Eu crio um esquema fast. O CSG e BSP ficam iguais ao full. Na janeta Parameters, acrescento o parametro -fast no VIS e -chop 128 no RAD (fica muuuuito mais rapido e consome 1/4 da memoria, mas as sombras ficam mais quadradas). Este esquema eh util para mapas que estao ficando grandes ou para uma compilacao rapida. Se o mapa estiver pequeno, voce pode fazer uma compilacao completa que nao vai ser muito lenta, mas conforme o mapa e o tempo de compilacao for aumentando de tamanho, comece a usar estes paramentros. O RAD nao eh necessario para rodar o mapa, ele apenas "deixa bonito", e se deixar de roda-lo, o mapa ficara inteiro iluminado com uma luz forte, sem sombras. Portanto voce pode desliga-lo para testar qualquer coisa que nao seja luz.

    Compilacao de completa: Nunca use o -fast no VIS para compilacoes finais ou para testes de velocidade, pois o -fast faz o mapa ficar muito lento (desenha mais poligonos do que necessario). Para compilacoes finais, eh recomendavel usar o parametro -extra no RAD para melhorar a qualidade da luz, porem o RAD fica mais lento.

    Compilacao para encontrar leaks: Caso voce esteja se debatendo tentando encrontrar leaks no seu mapa, rode apenas o CSG e BSP, acrescente o parametro -leakonly no BSP. Assim, o BSP ira rodar mais rapido com a unica funcao de verificar se ha leaks, mas o mapa nao ficara jogavel. Quando o leak for encontrado, mude para o equema que voce quiser para fazer uma compilacao decente e jogavel.

    Esquema para encontrar leaks:

    Rodando e Testando Mapas

    Os esquemas de compilacao ja copiam o arquivo final do mapa (nomedomapa.bsp) para o diretorio de mapas correto do mod, (valve\maps para Half-Life normal ou nomedomod\maps para mods). Todos os arquivos WAD que voce configurar no WorldCraft deverao estar disponiveis no diretorio valve ou no diretorio do mod, senao nao vai rodar!

    Para rodar o mapa manualmente, crie um atalho para o Half-Life com a seguinte linha de comando: hl.exe -console -dev -particles 10000. O -console serve para liberar o console, o -dev serve para liberar funcoes de extras de desenvolvimento e -particles 1000 ajuda a achar leaks (mais sobre isso depois). Rode o Half-Life por este atalho, clique em Console e escreva: map nomedomapa.bsp.

    Se voce estiver fazendo um para para algum mod ao inves de um mapa para o Half-Life normal, voce tem duas opcoes. Uma eh criar um jogo en LAN para testa-lo (LAN Games, Create Game, selecione o seu mapa na lista e de OK). A outra eh copiar o .bsp do seu mapa para o diretorio valve\maps (dentro do diretorio do Half-Life), copiar os arquivos WAD especificos do mod e que voce estiver usando para o diretorio valve, e rodar o mapa como se fosse do Half-Life normal (como descrito acima). Eu recomendo usar este segundo metodo para testar qualquer coisa que nao tenha a ver com a jogabilidade do mod (tipo testar se os refens podem ser salvos no Counter-Strike), pois roda muito mais rapido. Eh uma boa ideia acrescentar 2 comandos no seu esquema de compilacao para copiar os arquis .bsp e .pts para o diretorio valve\maps.

    O Half-Life possui alguns comandos que sao uteis para desenvolvedores de mapas que sao acionados a partir do console (para abrir o console, tecle ~ (til)). Os mais usados sao estes:

  • noclip: Voce pode atravessar paredes e sair voando.
  • god: Voce fica invencivel (nao perde energia). Funciona para o Half-Life normal, e alguns mods single-player.
  • r_drawflat 1: Desenha as paredes com cores solidas ao inves de usar texturas. Util para saber como os poligonos estao sendo picotados pelo BSP e otimiza-los. (mais sobre isso num tutorial futuso sobre velocidade). Funciona somente em modo Software, nao funciona em DirectX ou GL
  • gl_wireframe 1 ou 2: gl_wireframe 1 desenha linhas onde os poligonos estao cortados e gl_wireframe 2 faz o mesmo mas monstra tambem linhas de poligonos que voce nao ve mas estao sendo desenhados. Funciona somente em modo GL, driver Default, nao funciona com o driver 3dFX.
  • r_fullbright 1: Ignora a iluminacao do RAD e ilunina o mapa inteiro com uma luz forte, sem sombras.
  • pointfile nomedomapa: Quando estiver procurando leaks, este comando carrega o arquivo .pts (do diretorio maps) gerado pelo BSP quando eh leak eh encontrado e mostra linhas que te direcionam ao leak. Veja este tutorial para saber como encontrar e prevenir leaks.
  • gl_clear 1: Quando voce usa o noclip e sai voando atraves de paredes ou fora do mapa, ao inves de preencher o que nao faz parte do mapa com aquela zona (chamada de HOM, Hall Of Mirrors, ou Hall de Espelhos, porque parece o efeito de se botar um espelho contra o outro), preenche este espaco com cores chapadas. Isso eh util para se achar leaks, em conjunto com o pointfile. Funciona apenas em modo OpenGL.
  • por - Mataleone -

    Copyright � 2001-2021 by Studio Avante