Forums » 3D Game Builder

Tutorial 16 – Oficial – Criando um Cenário Completo

    • 467 posts
    19 de setembro de 2012 20:55:36 ART

    TUTORIAL 16 - CRIANDO UM CENÁRIO COMPLETO

            Neste tutorial aprenderemos como criar um cenário completo, com um terreno que leva a uma casa de dois andares.

            Para começar crie um novo projeto do tipo “Dynamic Câmera Game” e selecione MD3 como formato do ator principal, após adicionar o primeiro mapa ao projeto, vamos cria um Heightmap mapa o nosso terreno, um Heightmap consiste em uma superfície 3D formada a partir de uma imagem 2D, esta imagem é constituída por tons de cinza e a variação de cor é usada para a formação da superfície, onde tons claros representam os locais de maior elevação e os escuros os de menor elevação. Para criar um Heightmap pode ser utilizando o “Photoshop” ou outra ferramenta de edição de imagens. Para criar o Heightmap no Photoshop crie uma nova imagem com o tamanho de 512 x 512, em seguida selecione como cor primária a cor preta e como cor secundaria a cor branca e aplique o efeito “Difference Clouds”, caso não tenha gostado do resultado aplique o efeito novamente, é importante que exista uma área de tamanho razoável na mesma cor, este local será plano e poderemos criar a casa, em seguida aplique duas ou três vezes o efeito “Blur More” para diminuir a variação brusca de tonalidades. Ou caso deseje criar um terreno especifico desenhe-o manualmente para obter um melhor resultado. A minha imagem do heightmap ficou assim:

            Após concluir a imagem, não a salve diretamente pelo Photoshop, copie-a e crie uma nova imagem no Paint e cole-a nesta imagem, em seguida salve a imagem no formato Bitmap (BMP). Isto foi feito porque o 3D Game Builder não interpreta corretamente as imagens salvas pelo Photoshop.

          Agora volte ao 3D Game Bulder e acesse o menu “Banco de Dados -> Heightmaps”, crie um novo heightmap e chame-o de “Mapa”, selecione a imagem que criamos, mude a propriedade “Infinite Warp” para “False” e selecione o material “Grass” como textura. Para finalizar salve o heightmap criado. Caso queira um terreno com um grau de realismo maior você pode utilizar a ferramenta "Terrain Texture Builder", com ele é possível criar uma textura para um determinado terreno, definindo como será o terreno em determinadas elevações e depressões, o que ajuda a dar um maior grau de realismo.

          Agora volte a edição do mapa e adicione o heightmap que acabamos de criar no mapa, posicione-o para que a área que deixamos plana fique no centro do mapa, será ali que criaremos a casa de dois andares.

          Para criarmos a casa vamos utilizar os objetos do próprio 3D Game Builder, mas também seria possível modelá-la em outra ferramenta de modelagem como o 3D Studio Max ou o Blender.

          Primeiramente crie uma fonte de luz para o ambiente, para saber como criar esta fonte consulte os tutoriais anteriores, em seguida adicione um objeto do tipo “Cubo” da paleta “Basic Geometry” ao mapa na região plana do heightmap que criamos anteriormente, este será o chão do primeiro andar da casa, altere a propriedade “Scale” dele para X = 20 Y = 0,1 e Z = 20 e a propriedade “Position” para Y = 0 posicione o objeto do tipo heightmap no eixo Y próximo a ele, em seguida clique com botão direito do mouse sobre o cubo que acabamos de adicionar e selecione a opção “Copiar” em seguida clique novamente com o botão direito do mouse e selecione a opção “Colar”, a copia do objeto aparecera sobre o objeto anterior, mas você não simplesmente fez uma copia do objeto, você criou um objeto por referencia, isto significa que a copia não ira ocupar espaço em memória, será apenas um ponteiro para o objeto que ele referencia, porém não é possível alterar algumas propriedades deste objeto como, por exemplo, a textura, mas a textura que for aplicada ao objeto que deu origem será aplicada também ao objeto ponteiro, como os dois objeto representarão o chão, um do primeiro andar e o outro do segundo, então não termos problemas, e deixaremos o programa mais rápido.

          Em seguida selecione a copia do objeto, você não o verá, mas ele está sobre o objeto copiado, então selecione o objeto anterior que a copia será selecionada, e altere a propriedade “Position” dele para Y = 4. Faça mais uma copia do mesmo objeto repetindo o processo anterior, selecione a outra copia e altere a propriedade “Position” dele para Y = 8. O seu mapa deve estar parecido com este:

          Agora vamos criar as paredes internas para a casa, vamos dividi-la em dois cômodos para cada andar, para isso adicione um novo objeto do tipo “Cubo” ao mapa, altere a propriedade “Scale” dele para X = 20 Y = 4 e Z = 0,1, posicione-o no meio do primeiro andar, como uma parede divisora, faça uma copia deste objeto e cole-a, em seguida posicione esta copia no andar de cima, também como uma parede divisora. Para entender melhor como fazer isto veja como ficou o exemplo:

          Agora ainda temos que adicionar as paredes externas da casa, o processo é o mesmo que acabamos de fazer com as paredes internas, vamos até copiar a mesma parede que usamos internamente e colocarmos elas em volta da casa. Copie a parede interna e adicione em volta de toda a casa, tanto no andar superior como no andar inferior. É aconselhável fazer a movimentação do objeto diretamente nas propriedades dele para ter um grau de precisão maior. No final a casa deve estar parecida com esta:

          Eu deixei um dos lados sem parede para termos uma melhor visão do interior, mas também irei adicionar as paredes deste lado. Ainda será necessário alterar um pouco a estrutura da casa para adicionarmos as postas, janelas, escada e o elevador.

          Agora vamos criar as portas, a escada e um elevador para a casa, primeiramente vamos mudar a estrutura da casa para que possamos adicionar as portas, janelas e o elevador, começaremos pelas portas, selecione uma das paredes do lado de baixo, altere a propriedade “Scale” dela para X=15, os outros valores podem ser mantidos, em seguida posicione-a para o canto esquerdo até que ela fecha completamente a parede do lado esquerdo, você entenderá melhor vendo como ficou a imagem a seguir, agora faça uma copia desta parede e cole-a novamente no mapa, ou então adicione outro cubo a cenário, altere as propriedades “Scale” dela para X=2,5 e mantenha as outras propriedades iguais à parede anterior, movimente a totalmente para o canto direito da casa para completar o outro canto da parede, você já poderá ver onde será a porta principal, mas ainda copie novamente esta parede, cole ela no mapa e altere as propriedades “Scale” dela para X=2,39 e Y=0,9, e posicione-a na parte superior do buraco da porta. O resultado deve ter ficado parecido com este:

    Agora vamos adicionar mais um porta ligando os dois cômodos do andar inferior, o processo é o mesmo que acabamos de realizar, selecione a parede central da casa do andar inferior, altere a propriedade “Scale” dela para X=15, os outros valores podem ser mantidos, em seguida posicione-a para o canto esquerdo até que ela fecha completamente a parede do lado esquerdo, agora faça uma copia desta parede e cole-a novamente no mapa, ou então adicione outro cubo a cenário, altere as propriedades “Scale” dela para X=2,5 e mantenha as outras propriedades iguais à parede anterior, movimente a totalmente para o canto direito da casa para completar o outro canto da parede, copie novamente esta parede, cole ela no mapa e altere as propriedades “Scale” dela para X=2,39 e Y=0,9 e posicione-a na parte superior do buraco da porta. O resultado desta segunda porta deve ter ficado parecido com este:

          Faça também uma terceira porta interligando os cômodos superiores, o processo é exatamente o mesmo que foi feito com esta porta que interliga os cômodos do andar inferior.

          Agora vamos fazer uma abertura no chão do segundo andar para colocarmos a escada e o elevador. Para isso selecione o chão do segundo andar e altere a propriedade “Scale” dele para X=17,5 e Z=17,5 e movimente-o para a parte frontal da casa e para a direita, para que o espaço aberto fique na parte oposta a porta de entrada da casa que criamos por primeiro. Agora faça uma copia do chão, note que não é possível fazer uma copia de um objeto que já uma copia, então localize o chão que é objeto pai dos outros para fazer a copia dele, ou então adicione um novo cubo ao mapa e altere as sua propriedade para que ele fique com as mesmas características do chão, em seguida altere a propriedade “Scale” dele para X=2,5 e Z=15 e posicione-o na parte oposta à entrada da casa no espaço que ficou vazio após o redimensionamento do chão do andar superior, deverá ficar dois buracos, um em cada canto do andar superior, em um deles será colocado a escada e no outro o elevador, no espaço a direita que ficou totalmente aberto copie novamente um objeto do chão altere a propriedade “Scale” dele para X=15 e Z=2,5 e posicione-o para fechar o buraco porem dando prioridade a parte próxima a porta de entrada, como neste buraco será a escada é necessário q ele seja maior que o do elevador. O buraco do elevador deve ter ficado parecido com este:

          Agora vamos criar a estrutura da escada que levará ao segundo andar, crie um novo cubo e altere as propriedades “Scale” dele para X=0,5 Y=0,5 e Z=2,5 este cubo representará um degrau, em seguida posicione-o no buraco maior que fica no mesmo cômodo da porta de entrada da casa, vamos começar a montar a escada, deve ser começar colocando os degraus pela parte de cima, posicione-o para que ele fique na mesma altura do chão do andar superior, em seguida faça uma copia deste cubo e mova-o um pouco para baixo e um pouco para frente, este será o segundo degrau, faça o mesmo processo para os demais degraus até chegar no chão, o resultado deve ser parecido com este:



          Como você pode notar as paredes, o chão e a escada estão todos iguais, e não tem um aspecto muito bonito, no próximo passo iremos adicionar texturas a esta casa para tornar os objetos mais realistas e em seguida colocaremos as portas nos seus determinados lugares e programaremos os scripts para abri-las e fechá-las, e também os scripts para mover o elevador.

          Antes de começarmos o a adicionar as texturas a casa devemos antes selecionar as texturas que utilizaremos, eu selecionei uma textura de tijolos para as paredes e de piso para o chão, caso deseje é possível utilizar outras texturas, as texturas selecionadas são as seguintes:


    (Parede)
    (Parede2)
    (Parede3)
    (Chao)
    (Chao2)
    (Chao3)
    (Escada)  

          Você pode notar que foram criadas variações das texturas do chão e das paredes, a textura é mesma, porém foi alterado o seu tamanho e forma, isto foi feito para manter as paredes de tamanho menor, como é o caso das utilizadas sobre as portas, com a mesma aparência das paredes maiores.

          O próximo passo é importar estas texturas para o 3D Game Builder, para isso acesse o menu “Banco de Dados -> Materiais”, crie todas as texturas acima utilizando o mesmo nome que foi especificado junto a imagem acima. Na textura “Parede” altere a propriedade “TextureScale” para X=3 Y=1 e Z=1, esta propriedade é utilizada para determinar o tamanho da textura, e é utilizado para posicionar uma textura pequena em um objeto grande sem que ela perca a sua qualidade. Na textura “Parede2” e “Parede3” mantenha as propriedades padrão, apenas importe as imagens. Na textura “Chao” altere a propriedade “TextureScale” para X=3 Y=3 e Z=1. Na textura “Chao2” altere a propriedade “TextureScale” para X=2 Y=1 e Z=1. Na textura “Chao3” altere a propriedade “TextureScale” para X=1 Y=2 e Z=1. E na textura “Escada” altere a propriedade “TextureScale” para X=2 Y=1 e Z=1. Note que dependendo do eixo utilizado para posicionar a casa pode ser necessário inverter alguns valores na propriedade “TextureScale” para se obter um bom resultado.

          Após concluir a importação das texturas já é possível iniciar o processo de texturização da casa. Nos cubos grandes que ocupam a maior parte da parede deve ser colocado a textura “Parede”, para isto basta alterar a propriedade “Material” do objeto, note que objetos copiados não possuem esta propriedade, isto porque a textura aplicada no objeto que deu origem a ele será aplicada a ele também, dependendo da maneira que você fez as copias ao aplicar a textura na parede pai todas as outras paredes já estarão com a textura. No pequeno cubo colocado como parede sobre as portas deve-se aplicar a textura “Parede3” e nos outros cubos menores que representam a parede que ficam ao lado da porta deve ser aplicar a textura “Parede2”. No chão deve se aplicar a textura “Chao”, no chão do segundo andar também, porem somente no cubo maior, nos outros dois que foram colocados para completar o buraco deixado pela escada e pelo elevador deve ser aplicar a textura “Chao2” no cubo que completa o buraco da escada e “Chao3” no que completa o buraco do elevador. Na escada aplique a textura “Escada”, se você fez sempre uma copia do cubo pai da escada ao aplicar a textura ao cubo pai toda a escada já estará texturizada.

          Basicamente a casa já esta com as suas devidas texturas, pode ser necessário fazer alguns ajustes no posicionamento dos objetos após a aplicação da textura para que eles fiquem mais bem posicionados, o resultado da aplicação da textura deve ter ficado parecido com este:

          Como você pode notar as texturas ficaram da mesma cor, sem nenhuma variação de tonalidade ao serem expostas a luz do ambiente, para torná-las mais realistas deve ser alterar a propriedade “TextureMode” do material para “Modulate”, volte ao menu “Banco de Dados->Material” e altere a propriedade “TextureMode” de todas as texturas utilizadas na casa para “Modulate”. Ao retornar a edição de mapas você já poderá ver o resultado:

          Ao utilizar texturas no modo “Modulate” é necessário prestar mais atenção nas luzes utilizadas no ambiente, para se ter o resultado desejado deve-se criar uma fonte de luz adequada para o ambiente.

          Após ter feito a estrutura da casa é necessário programar os scripts para alguns eventos que podem ser executados nela, como é o casa da abertura das portas.

          Vamos começar com as portas, como ainda não colocamos as portas fisicamente vamos importar o modelo de uma porta para o 3D Game Builder, o modelo utilizado foi este:

          Faça o download do arquivo do modelo no seguinte link: Porta.rar, ele esta no formato 3ds e foi modelado utilizando o Milkshape3D, porém poderia ter sido criando em qualquer outro software de modelagem 3D, só é importante lembrar que como a porta ira girar na hora de abrir devemos modelar ela com o a parte das dobradiças da porta diretamente no seu eixo Y, pois será neste eixo em que ela será rotacionada quando for aberta.

          Para importar o objeto para o mapa vá até o menu “Banco de Dados -> Objetos”, crie um novo objeto, importe o arquivo do modelo, em seguida altere a propriedade “Scale” dele para X=0,1 Y=0,1 e Z=0,1 e a propriedade “PitchAngle” para 90, em seguida salve o objeto. Agora copie o arquivo “Tex21.jpg” que acompanha o tutorial para a pasta “Textures” do seu projeto, é necessário fazer isso porque o modelo da porta possui esta textura que foi aplica sobre ele no programa de modelam, então para que na próxima vez que o modelo for carregado ele possa encontrar a sua textura, a pasta base para texturas externas é sempre a pasta “Textures”, então sempre que importar um modelo que possua uma imagem como textura este arquivo deve ser copiado para a pasta “Textures”.

          Agora retorne para a edição de mapa e selecione a categoria de objeto “Objetos” na paleta de objetos, para adicionar a porta ao mapa de um duplo clique sobre a porta que você acabou de criar. Em seguida posicione-a para que ela feche completamente o buraco que foi criado para a porta de entrada da casa, será necessário alterar o tamanho dela para que ela seja encaixada no buraco. Após concluir o posicionamento ela ficará parecida com esta:

          Agora vamos criar o script para abertura desta porta, faremos com que o ator principal possa empurrar a parta para que ela se abra, selecione a porta, em seguida vá até a aba eventos e selecione o evento “OnCollision”. O script para abertura da porta ficou assim:

          if GetObjectRollAngle('Objeto33') > 0 then
              SetObjectRollAngle('Objeto33', GetObjectRollAngle('Objeto33')+1);

          O “Objeto33” é nome da minha porta, caso a sua possua outro nome altere no script para o nome correto, no script é verificado inicialmente a rotação da porta com o comando “GetObjetRollAngle” coso ele seja maior que 0 então quer dizer que a porta ainda não atingiu o ponto maximo de abertura, dependendo da orientação em que você criou a sua casa pode ser necessário alterar este valor, caso ela ainda não tenha atingido o maximo de rotação então é utilizado o comando “SetObjectRollAngle” para incrementar o ângulo atual em mais um, por isso é utilizado novamente o comando “GetObjetRollAngle” e ao valor retornado é acrescentado mais 1. É importante lembrar que este script será executado sempre que o ator principal tocar na porta.

          Na segunda porta, que interliga os dois cômodos do primeiro andar o processo de abertura é o mesmo, o script desta porta ficou assim:

          if GetObjectRollAngle('Objeto32') > -90 then
              SetObjectRollAngle('Objeto32', GetObjectRollAngle('Objeto32')-1);

          O “Objeto32” é o nome da minha porta, como você pode notar a única coisa que mudou neste script foi o ângulo maximo e também que neste ao invés de incrementar o ângulo eu decremento ele, como eu disse anteriormente este ângulo depende da orientação em que as paredes foram fitas, pode ser necessário alterara-lo caso você tenha feito elas em outra orientação, a melhor maneira de encontrar o ângulo maximo de abertura é durante a edição do mapa rotacionar a porta até chegar ao ângulo maximo desejado e utilizar este ângulo no script. O processo é o mesmo para a porta que interliga os dois cômodos do segundo andar.

          Ao concluir todas as portas já será possível executar o jogo, andar pela casa e abrir todas as portas, dependendo das escalas utilizadas na casa pode ser necessário alterar o tamanho do ator principal para que ele fique em um tamanho proporcional a casa, para alterar o tamanho dele acesse o menu “Projeto -> Ator Principal”, altere as propriedades “Scale” e “Collision Scale” para deixar o ator proporcional ao cenário, a propriedade “Scale” do meu ator ficou sendo a seguinte X=0,044 Y=0,044 e Z=0,044 e “CollisionScale” ficou X=1 Y=1 e Z=1. Também pode ser necessário ajustar a distancia da câmera principal em relação ao ator, como foi aumentado o seu tamanho será necessário que a câmera que o acompanha fica mais distante, para alterar esta distancia acesso o menu “Projeto->Câmera Principal” e altere a propriedade “DistanceToActor” para o valor desejado, eu utilizei uma distancia de 3. Executando o jogo você verá o resultado:

          Agora vamos adicionar o elevador que irá do primeiro andar, para o elevador utilize um cubo normal, altere a propriedade “Scale” dele para X= 2,3 Y=0,2 e Z=2,4 e posicione-o no primeiro andar embaixo do buraco deixado para ele de maneira que quando ele subir ele passe perfeitamente pelo espaço deixado no chão do segundo andar, em seguida importe a seguinte textura para o 3D Game Builder:


    (Elevador)

          Altere a propriedade “TextureScale” deste material para X=2 Y=2 e Z=2 e aplique-a no cubo criado para o elevador. Agora vamos criar o script que fará o elevador subir e descer. Selecione o elevador e vá até o seu evento “OnInteract” faremos um script para que quando o jogador pressionar a tecla “Enter” o elevador suba/desça. O script para movimentação do elevador ficou assim:

          if Round(GetObjectPositionY('Objeto34')) = 0 then
              WriteGlobalVar('ElevadorUp', true);
          if GetObjectPositionY('Objeto34') > 4 then
              WriteGlobalVar('ElevadorDown', true);

          Em seguida explicarei como funciona este script, mas antes vamos criar mais um script que fará parte da movimentação do elevador, acesse o menu “Mapa->Eventos->MainLoop”, o evento “MainLoop” é um evento que ocorrerá em loop enquanto o mapa estiver caregado. O script “MainLoop” ficou assim:

          if ReadGlobalVar('ElevadorUp') = true then
          begin
              SetObjectPosition('Objeto34', 
                 GetObjectPositionX('Objeto34'), 
                 GetObjectPositionY('Objeto34')+0.1, 
                 GetObjectPositionZ('Objeto34'));
              SetObjectPosition('Player', 
                 GetObjectPositionX('Player'),
                 GetObjectPositionY('Player')+0.1, 
                 GetObjectPositionZ('Player'));
              if GetObjectPositionY('Objeto34') > 4 then
                 WriteGlobalVar('ElevadorUp', false);
          end 
          else if ReadGlobalVar('ElevadorDown') = true then
          begin
              SetObjectPosition('Objeto34', 
                 GetObjectPositionX('Objeto34'), 
                 GetObjectPositionY('Objeto34')-0.1, 
                 GetObjectPositionZ('Objeto34'));
              SetObjectPosition('Player', 
                 GetObjectPositionX('Player'), 
                 GetObjectPositionY('Player')-0.1, 
                 GetObjectPositionZ('Player'));
              if Round(GetObjectPositionY('Objeto34')) = 0 then
                 WriteGlobalVar('ElevadorDown', false);
          end;

          O script de movimento do elevador funciona da seguinte maneira, primeiramente o script “OnInteract” do elevador aguarda o pressionamento da tecla “Enter” pelo jogador quando ele estiver sobre o elevador, quando a tecla for pressionada o script “OnInteract” será executado, nele o comando GetObjectPositionY verifica se o elevador esta na posição 0 do eixo Y, é utilizado o comando “Round” pare arredondar o valor da posição. Caso o elevador esteja na posição 0 quer dizer que ele esta na primeiro anda, então é utilizado o comando “WriteGlobalVar” para criar uma variável global chamada “ElevadorUp” e nela é colocada o valor boleando “true”, enquanto isto o evento “MainLoop” do mapa já estava sendo executado e nele estava sendo utilizado a função “ReadGlobalVar” tentando ler a variável “ElevadorUp”, no momento que ela foi criado e o seu valor definido como “true” o evento “MainLoop” conseguira ler esta variável e então será utilizado o comando “SetObjectPossition” para fazer com que o elevador suba para o segundo andar gradativamente juntamente com o ator principal, e quando o elevador chegar na posição 4 no seu eixo Y, isto siginifica que o elevador chegou ao segundo andar, então é utilizado novamente o comando “WriteGlobalVar” para alterar o valor da variável global “ElevadorUp” para “false” isto fará com que o elevador pare de subir. O mesmo processo é feito para fazer com que o elevador desça e é utilizado a variável global “ElevadorDown”. É importante lembrar que o “Objeto34” no meu script é o elevador, caso o seu possua outro nome altere o script. Executando o jogo será possível ver o funcionamento do elevador.

          Agora vamos concluir o tutorial decorando o ambiente para deixá-lo mais bonito, primeiramente vamos adicionar um telhado a casa, para isso adicione a textura que utilizaremos neste telhado.


    (Telhado)

          Após cadastrar a textura para o telhado altere tambem a propriedade “TextureScale” dela para X=2 Y=2 e Z=2. Agora vamos inseri-lo no mapa, utilize um objeto “Trapézio” da paleta “Basic Geometry”, altere o propriedade “Scale” dele para X=20 Y=8 e Z=20, e a propriedade “Collision->Solid” para False, em seguida posicione-o em cima da casa, e aplique o material que acabamos de criar para o telado nele.

          Agora vamos adicionar as janelas para a casa, poderíamos fazer da mesma maneira que as portas para podermos abrilas, mas como elas serão estáticas então vamos utilizar apenas uma textura que ira representar as janelas, cadastre a seguinte textura aos materiais do projeto:


    (Janela)

          Retorne para a edição de mapas e adicione um novo cubo ao ambiente, altere a propriedade “Scale” dele para X=0,2 Y=2 e Z=3 e aplique a textura da janela neste cubo, agora posicione-o no local onde você desejar um janela, e caso queira mais janelas basta copiar e colar e posicionar a copia no local desejado.

          Agora adicione o Skybox default que acompanha o 3D Game Builder para termos um céu no ambiente, caso queira também pode adicionar outro skybox.

          Vamos também adicionar algumas arvores próximas a casa para termos um ambiente de floresta, adicione arvore default e altere a propriedade “Scale” dela para X=2 Y=2 e Z=2 e também a propriedade “Collision->Scale” para X=1 Y=1 e Z=3, agora basta copiar esta arvore e colar ela quantas vezes você quiser para formar uma ambiente com algumas arvores, posicione elas próximas a casa. O resultado deve ter ficado parecido com este:

          Lembre-se de alterar a propriedade “TextureMode” para “Modulate” na maioria dos materiais para se ter um resultado visual mais realista, mas lembre-se também que utilizando os materiais no modo “Modulate” é necessário ter uma fonte de luz configurada e posicionada corretamente.

          Para finalizar vamos ativar o Fog que consiste em uma neblina no ambiente, para isso vamos antes alterar algumas propriedades dele, acesse o menu “Mapa->Fog” e altere a propriedade “Color” para Alpha=0,01 Red=0,8 Green=0,8 e Blue=0,8 salve as alterações e acesse o menu “Mapa->Propriedades” e altere a propriedade “FogEnabled” para True e salve as alterações. A valor de Alpha na cor do Fog determina a sua intensidade, utilizamos um valor bem baixo pois o uso de um Skybox com o Fog não tem um efeito muito bom, o idéia seria utilizar somente o Fog, mas como colocamos um valor baixo de Alpha então não tem muito problema em se ter um skybox no mesmo ambiente.

          Retornando para a edição de mapa e selecionando a opção “Visualizar Efeitos” no menu “Opções->Visualizar Efeitos” é possível visualizar como ficou o efeito do Fog nas montanhas mais distantes que agora estão com uma tonalidade esbranquiçada.

          Caso você queira alterar a posição inicial da câmera basta criar um script no evento “OnCreate” e adicionar o seguinte script:

    SetObjectPosition('MainCamera', -10, 5, 0);

          O comando “SetObjectPosition” alterar a posição do objeto “MainCamera” que representa a câmera principal criada automaticamente e os outros 3 parâmetros são referentes as coordenadas x y e z da posição onde a câmera será colocada.

          Agora basta salvar o mapa e está concluído o cenário.





     

     

    Créditos: Retirado do Site Oficial: http://www.3dgamebuilder.com.br

    • 125842 posts
    • 125842 posts
    4 de novembro de 2020 00:50:50 ART
    инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинйоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфоинфо инфоинфоинфоинфоtuchkasинфоинфо
    • 125842 posts
    • 125842 posts
    1 de março de 2021 23:52:19 ART
    audiobookkeepercottageneteyesvisioneyesvisionsfactoringfeefilmzonesgadwallgaffertapegageboardgagrulegallductgalvanometricgangforemangangwayplatformgarbagechutegardeningleavegascauterygashbucketgasreturngatedsweepgaugemodelgaussianfiltergearpitchdiametergeartreating generalizedanalysisgeneralprovisionsgeophysicalprobegeriatricnursegetintoaflapgetthebouncehabeascorpushabituatehackedbolthackworkerhadronicannihilationhaemagglutininhailsquallhairyspherehalforderfringehalfsiblingshallofresidencehaltstatehandcodinghandportedheadhandradarhandsfreetelephonehangonparthaphazardwinding hardalloyteethhardasironhardenedconcreteharmonicinteractionhartlaubgoosehatchholddownhaveafinetimehazardousatmosphereheadregulatorheartofgoldheatageingresistanceheatinggasheavydutymetalcuttingjacketedwalljapanesecedarjibtypecranejobabandonmentjobstressjogformationjointcapsulejointsealingmaterialjournallubricatorjuicecatcherjunctionofchannels justiciablehomicidejuxtapositiontwinkaposidiseasekeepagoodoffingkeepsmthinhandkentishglorykerbweightkerrrotationkeymanassurancekeyserumkickplatekillthefattedcalfkilowattsecondkingweakfishkinozoneskleinbottlekneejointknifesethouseknockonatomknowledgestatekondoferromagnetlabeledgraphlaborracketlabourearnings labourleasinglaburnumtreelacingcourselacrimalpointlactogenicfactorlacunarycoefficientladletreatedironlaggingloadlaissezallerlambdatransitionlaminatedmateriallammasshootlamphouselancecorporallancingdielandingdoorlandmarksensorlandreformlanduseratiolanguagelaboratorylargeheartlasercalibrationlaserlenslaserpulse latereventlatrinesergeantlayaboutleadcoatingleadingfirmlearningcurveleavewordmachinesensiblemagneticequatormagnetotelluricfieldmailinghousemajorconcernmammasdarlingmanagerialstaffmanipulatinghandmanualchokemedinfobooksmp3listsnameresolutionnaphtheneseriesnarrowmouthednationalcensusnaturalfunctornavelseed neatplasternecroticcariesnegativefibrationneighbouringrightsobjectmoduleobservationballoonobstructivepatentoceanminingoctupolephononofflinesystemoffsetholderolibanumresinoidonesticketpackedspherespagingterminalpalatinebonespalmberrypapercoatingparaconvexgroupparasolmonoplaneparkingbrakepartfamilypartialmajorantquadrupleworm qualityboosterquasimoneyquenchedsparkquodrecuperetrabbetledgeradialchaserradiationestimatorrailwaybridgerandomcolorationrapidgrowthrattlesnakemasterreachthroughregionreadingmagnifierrearchainrecessionconerecordedassignmentrectifiersubstationredemptionvaluereducingflangereferenceantigenregeneratedproteinreinvestmentplansafedrillingsagprofile salestypeleasesamplingintervalsatellitehydrologyscarcecommodityscrapermatscrewingunitseawaterpumpsecondaryblocksecularclergyseismicefficiencyselectivediffusersemiasphalticfluxsemifinishmachiningspicetradespysalestunguntacticaldiametertailstockcentertamecurvetapecorrectiontappingchucktaskreasoningtechnicalgradetelangiectaticlipoma telescopicdampertemperateclimatetemperedmeasuretenementbuildingtuchkasultramaficrockultraviolettesting
    • 4052 posts
    27 de maio de 2021 04:23:55 ART

    superslot เทคนิคการเล่นสล็อตออนไลน์ โปร 100 คือตัวช่วยในการเล่นสล็อตของผู้เล่น northbristol ที่ต้องการเข้าใกล้คำว่า herbalpertpresents โบนัสให้ได้มากที่สุด ทั้งนี้มันคือ xopg.net ตัวช่วยสำคัญที่ทำให้เรา mavoixtavoie ชนะรางวัลได้ง่ายขึ้นมา สมัคร super ต้องบอกว่า เทคนิคการเล่นสล็อตใช้แล้วมันคือตัวช่วยสำหรับผู้ที่ชอบเล่นเกมการพนันเท่านั้น ทดลองเล่นสล็อต ซึ่งเทคนิคต่าง ๆ ไม่ เทคนิคสล็อต เพียง reeffutures2018 เป็นตัวช่วยการทำเงินอย่างเดียวเท่านั้น gclub ยังช่วยสอนให้ slotsuper เรารู้จักและเข้าใจเกมการพนันมากขึ้น

    • 901 posts
    27 de maio de 2021 05:53:34 ART

    เราคือผู้ให้บริการ superslot เกมสล็อตออนไลน์ northbristol สำหรับบนมือถือ reeffutures2018อันดับ 1 ของประเทศไทย โปร 100 รองรับทั้ง iPhone หรือระบบ IOS และ Android เทคนิคสล็อต เว็บ สล็อต herbalpertpresents ของเรามีเกมส์ให้เลือกเล่นกว่า 200 เกมส์ mavoixtavoie ไม่ว่าจะเป็น xopg.net/ สล็อตยิงปลา เสือมังกร รูเล็ท  แข่งม้า ไฮโล เกมคาสิโน Casino และ gclubอีกมากมาย ทดลองเล่นสล็อต  เติมเงิน ถอนเงินผ่านระบบอัตโนมัติ. เพื่อนๆ slotsuper สามารถ ดาวน์โหลด ผ่านทาง QR Code ข้างล้างนี้ได้เลย สมัคร super

    • 19 posts
    20 de março de 2022 22:46:58 ART

    If you have any questions about the safe eat-and-run guarantee company provided by Eat Tiger, 먹튀 검증 please contact the customer center at any time! We will recommend and introduce each Toto site that suits the characteristics of each company and members. 먹튀타이거 Make high profits through our eating tiger.

    • 18 posts
    17 de outubro de 2022 23:55:21 ART
    • If you have any questions about the safe eat-and-run guarantee company provided by Eat Guide, 먹튀 검증 please contact the customer center at any time! We will recommend and introduce each Toto site that suits the characteristics of each company and members. 먹튀가이드 Make high profits through our eating guide.

     
     
    • 230 posts
    27 de fevereiro de 2023 23:28:39 ART

    I am very impressed with your writing baccaratcommunity I couldn't think of this, but it's amazing! I wrote several posts similar to this one, but please come and see!

    • 230 posts
    27 de fevereiro de 2023 23:29:18 ART

    Hello ! I am the one who writes posts on these topics casinocommunity I would like to write an article based on your article. When can I ask for a review?