GameDev

Aprendendo a programar jogos em Unity: teto, malhas e conceitos iniciais sobre iluminação

Continuaremos a elaborar o cenário de nosso projeto, analisando aspectos interessantes da iluminação interna do consultório.

Seja bem-vindo(a) ao GameDev: Aprendendo a programar jogos em Unity de hoje! Dando continuidade ao processo de elaboração das estruturas básicas do cenário de nosso game, iremos inserir e posicionar o teto, além de começar a planejar fatores que irão impactar na iluminação interna do ambiente tridimensional.


Caso seja a primeira vez que você acessa esta série, sinta-se à vontade para juntar-se a nós e aprender muitos conceitos interessantes sobre o processo de desenvolvimento de jogos utilizando a ferramenta Unity. A partir do primeiro tópico da série, você terá acesso a interessantes tópicos sobre codificação e desenvolvimento de games por meio da realização de projetos práticos. Mesmo que você não tenha experiência prévia na área, é uma grande oportunidade de aprender na prática temas que poderão te auxiliar a transformar em realidade os games que sempre sonhou em fazer.

No tópico anterior da série, realizamos a inserção de elementos importantes ao cenário tridimensional do projeto em que estamos trabalhando no momento, o game Consultório do Dr. Tratanildo. Posicionamos no ambiente itens como paredes, janelas e entrada do consultório em questão.


Progredindo nessa montagem, logo teremos um ambiente tridimensional adequado ao que estamos planejando. Venha conosco e vamos juntos nesta caminhada rumo a novos conhecimentos!

Iniciando a construção

Agora que já temos posicionados os elementos relacionados ao chão do consultório e aos itens presentes nas laterais do cenário (paredes, janelas, dentre outros), o próximo passo lógico é a inserção de um teto, fechando o processo de “construção civil” de nossa cena.

Vamos iniciar esta nova etapa abrindo o Unity Hub e clicando duas vezes sobre o item referente ao projeto Consultório do Dr. Tratanildo. Na interface inicial do Unity, na aba Project, abra a pasta Assets, Scenes e, por fim, clique duas vezes no ícone da cena ConsultorioScene. Certifique-se de que a aba Scene está selecionada para darmos prosseguimento à montagem do consultório.

Embora tenhamos diversos elementos de construção prontos, derivados do modelo de cenário tridimensional que utilizamos (cenarioModular.fbx), em relação ao teto iremos criá-lo utilizando as estruturas básicas do Unity, como forma de aprendermos mais sobre os elementos que a própria ferramenta nos dá para trabalharmos em ambientes 3D.

Na aba Hierarchy, clique com o botão direito sobre o objeto CenarioFixo. No menu suspenso, selecione a opção 3D Object e, em seguida, Cube, para criarmos um GameObject subordinado a CenarioFixo que irá representar nosso teto.


Dê o nome de Teto ao objeto. Na aba Hierarchy, clique duas vezes sobre seu elemento para que o Unity aplique um zoom na visualização da janela da aba Scene, focando no novo elemento inserido.

Podemos perceber que, em relação ao chão de nosso cenário, Teto ainda é um elemento bem pequeno. Em princípio, ajustando os parâmetros Scale de seu componente Transform poderemos solucionar essa questão. 

Sabendo que os parâmetros Scale X e Y do componente Transform de Chao apresentam valor igual a 100, vamos experimentar fazer o mesmo para o objeto Teto, modificando os dois parâmetros em questão de seu Transform via aba Inspector:

Veja que, mesmo apresentando valores iguais, as dimensões físicas dos dois objetos não são iguais. Isso ocorre pois cada objeto tridimensional deriva de malhas diferentes. Mas o que seria isso, afinal?

Malhas e meshes

Uma malha, mais comumente citada pelo termo em inglês mesh, é a estrutura-base que indica o posicionamento dos polígonos em um modelo tridimensional. Internamente, cada mesh é uma composição de coordenadas matemáticas que indicam o posicionamento dos vértices de cada polígono.

A partir dessas coordenadas é que um jogo ou aplicação 3D saberá posicionar os elementos que compõem um objeto tridimensional adequadamente na tela, em associação com outros parâmetros também importantes, tais como materiais, texturas, iluminação, cores, dentre outros.


A imagem anterior consegue ilustrar bem o que seria um mesh. Cada pontinho rosa é um vértice dos polígonos (retângulos e quadrados) que compõem a face humana representada. O mesh armazena as coordenadas matemáticas desses “pontinhos” para que um programa possa desenhar em tela o rosto humano adequadamente.

Portanto, especificamente em relação aos GameObjects Teto e Chao, embora sejam semelhantes, por derivarem de meshes diferentes suas estruturas também apresentam dimensões diferentes.

Iremos realizar novamente ajustes nos parâmetros Scale X e Y do componente Transform de Teto para que o Unity compense essa diferença, “esticando” ou “encolhendo” as distâncias entre as coordenadas do mesh de nosso teto.

Trabalhando sob um teto

Na aba Hierarchy, selecione novamente o objeto Teto. Na aba Inspector, vamos alterar os parâmetros do componente Transform descritos a seguir:
  • Position X = 7.25, Y = 13 e Z = -4.5; e
  • Scale X = 45, Y = 1 e Z = 38.
Embora não esteja com dimensões 100% equivalentes ao chão, agora temos um teto de dimensões mais adequadas ao que necessitamos, sobretudo pois a ação do game irá ocorrer majoritariamente dentro do consultório.

Porém, agora temos outro desafio a considerar: iremos trabalhar, daqui em diante, sob um teto e, portanto, a “luz solar” que incidia sobre o cenário já não está mais presente em sua totalidade dentro do consultório.

Para verificarmos isso, experimente clicar sobre a aba Game, a fim de observarmos sob a ótica da câmera principal do game (objeto Main Camera) como ficou o cenário internamente:

Veja que, agora, tudo está um pouco mais escuro dentro do ambiente. Volte à aba Scene e, ajustando a visualização, você poderá perceber até o efeito da iluminação externa sobre os elementos que representam as janelas de nossos consultório:

Na aba Hierarchy, encontraremos um objeto de nome Directional Light. Embora o GameObject esteja fisicamente posicionado dentro do cenário, veja que não há iluminação suficiente do ambiente interno:

Esse objeto, na verdade, é o controlador da luz ambiente total da cena ConsultorioScene. Os parâmetros de seu componente Light estão configurados para impactar na iluminação global da cena, por meio do parâmetro Type = Directional. Posicionar o GameObject dentro ou fora do consultório não irá impactar em nada nos aspectos de iluminação do ambiente interno do consultório.

Como poderemos, então, fazer com que haja uma iluminação eficiente dentro do ambiente interno do cenário que estamos elaborando? Iremos solucionar esta questão utilizando outros elementos de iluminação que o Unity nos oferece.

Pontos de luz

Vamos iniciar inserindo um objeto em nosso cenário que irá influenciar localmente a iluminação em uma parte interna do consultório. Para isso, na aba Hierarchy, clique com o botão direito sobre CenarioFixo. No menu suspenso, selecione a opção Light e, em seguida, Point Light.


Dê o nome de Lampada1 ao objeto e, via aba Inspector, altere os parâmetros de seu componente Transform conforme descrito a seguir:
  • Position X = -8, Y = 8 e Z = 8.
Observe que interessante é o elemento que inserimos: ele está posicionado próximo a uma das quinas do consultório e sua presença exerce influência de iluminação na área delimitada pela esfera amarela que pudemos observar na imagem anterior.

Note que o teto e as paredes estão levemente mais iluminados agora do que antes da inserção do GameObject, devido à influência do componente Light, presente em Lampada1. O componente Light também está presente no GameObject Directional Light, mas operando em outro modo, controlando a iluminação global.

No caso de Lampada1, observe que o parâmetro Type está configurado como Point, ou seja, está exercendo influência no cenário como um “ponto de luz”, que irradia iluminação dentro da área de influência do objeto.


A esfera em questão que delimita a área de impacto do objeto tem suas dimensões alteradas por meio do parâmetro Range do componente Light, e a intensidade da iluminação é controlada pelo parâmetro Intensity do mesmo componente.

Vamos alterar os valores desses parâmetros para o objeto Lampada1. Altere o valor de Range para 15 e o valor de Intensity para 1.25. Veja o que irá acontecer:

Além de a esfera de influência do ponto luminoso ter crescido, a intensidade luminosa aumentou, culminando em uma maior percepção de iluminação naquele local.

Posteriormente iremos analisar outros parâmetros e fatores que impactarão o funcionamento do componente Light. Não se esqueça de salvar a cena (menu File, opção Save) e o projeto (menu File, opção Save Project) antes de fechar o editor.

Próximos passos

Após inserirmos um teto para nosso consultório, começamos a avaliar os aspectos de iluminação interna do ambiente por meio do uso de GameObjects que contenham o componente Light atrelado. Além disso, revisamos o importante conceito de malhas (meshes), essencial ao entendimento sobre o funcionamento de modelos 3D para jogos e aplicações tridimensionais.

Em nosso próximo encontro daremos sequência ao processo de iluminação interna do cenário do jogo, avançando pouco a pouco rumo à elaboração de um cenário completo, apto às interessantes atividades laborais do doutor Tratanildo Doencita.

Nosso próximo texto já encontra-se disponível, continue conosco nessa jornada de conhecimento e fique ligado sempre aqui no GameBlast!

Revisão: Ives Boitano
Fonte imagem mesh: Wikimedia

Entendo videogames como sendo uma expressão de arte e lazer e, também, como uma impactante ferramenta de educação. No momento, doutorando em Sistemas da Informação pela EACH-USP, desenvolvendo jogos e sistemas desde 2020. Se quiser bater um papo comigo, nas redes sociais procure por @RodrigoGPontes.
Este texto não representa a opinião do GameBlast. Somos uma comunidade de gamers aberta às visões e experiências de cada autor. Escrevemos sob a licença Creative Commons BY-SA 3.0 - você pode usar e compartilhar este conteúdo desde que credite o autor e veículo original.


Disqus
Facebook
Google