Como prometido, estou abrindo esse tópico em resposta à questão aberta pelo meu amigo de fórum Zulmar Junior. EU me reservei o direito de fazer algumas ressalvas ao que eu mesmo propus em favor de uma melhor introdução do tema. Esse não é um tutorial passo a passo, ainda, com o desenrolar deste mesmo tópico vamos chegar a esse ponto.
Eu não disponho de tanto tempo quanto quero para vir aqui contar tudo o que eu sei, e como eu quero. Mas isso é o de menos, vamos ao que importa.
O que são lightmaps?
São imagens com a informação luminosa de um ou mais objetos de um cenário 3D, ou até mesmo uma cena inteira. Os lightmaps dependem do mapeamento adequado da malha de todos os objetos na cena em canais extras, que diferem dos canais de cor, para serem aplicados corretamente e permitirem que nos canais de cor haja repetição de texturas e que possam usar texturas menores.
E qual é a utilidade? ( Essa seria uma pergunta besta ehim.. )
Geralmente são usados em jogos eletrônicos, são a forma mais prática e leve (em termos de memória e processamento) de se obter uma boa iluminação de todo o ambiente em tempo real, mas eles podem ser aplicados a muitos outros casos.
Para produzi-los basta iluminar a cena da forma usual e usar o “render to texture” para exportar essa iluminação em forma de textura.
Assim, uma cena com 100 objetos, cada um com uma ou mais texturas de cor com mapeamento no canal 1 poderá compartilhar o mesmo lightmap no canal 3 gerando toda a informação luminosa necessária em tempo real, por meio de uma composição entre o canal 1 e o canal 3. Em jogos os lightmaps não precisam ter grandes dimensões, se bem planejados, é possível obter qualidade na iluminação de um objeto simples usando uma área, por exemplo, de 5px por 5px, isso ocorre por que quando esse mapa é composto junto aos mapas de cor seus pixels se mesclam e não ficam evidentes, gerando um efeito de luz suave.
Um simples exemplo:
Aqui as duas imagens nos mostra os mapas de cor aplicados com shading tipo "flat", e o lightmap ja simulado e aplicado aos objetos.
Aqui os dois canais ja mesclados.
Aqui o layout do lightmap (512x512px), essa malha foi aberta com o modificador unwrap uvw antes de usar o "render to texture".
Pô, legal... mas, como usar isso por exemplo, em um passeio de maquete eletrônica?
:lol:
Esse é o ponto interessante, pode-se usar essa técnica em animação perfeitamente, para criar uma iluminação global sem flicker, uma vez que está informação não será calculada frame por frame, estará fixada nas texturas de cada objeto.
A grande vantagem desse uso é que não existe um limite para os tamanhos das texturas, pode-se usar uma textura de boa qualidade para cada objeto, e depois compor o resultado com passes de cor, reflexo, refração... O render feito só com os lightmaps no canal diffuse servirá como um pass de iluminação direta e indireta, para quem já leu o tutorial do André aqui mesmo na 3d1 sobre composição e renderização em elementos vai entender bem do que estou falando, pra quem não leu eis o link:
http://www.tresd1.com.br/conteudotutoriais.php?t=27912
O resultado final disso tudo pode ser mesclado no combustion, mas existem alternativas, pode mesclar o lightmap com materiais do mental ray com um shader de composição do mental ray para mesclar diversos materiais com os mesmos modos de composição do photoshop, como por exemplo o shader “JS_Multilayers”, que pode ser baixado gratuitamente na internet.
Um exemplo simples de composição:
Temos essa cena simples, com a iluminação já configurada.
Esse abaixo é o lightmap da cena completa, gerado pelo “render to texture” e Final Gather do mental ray. No exemplo a cena toda recebe o mesmo mapeamento, que foi editado para tirar o máximo proveito do mesmo mapa.
Essa abaixo é a cena na viewport com o lightmap aplicado no canal diffuse, essas partes escuras nas arestas ocorrem devido ao mipmapping que a viewport faz da textura, para que isso não ocorra deve-se fazer uma edição do mapa no photoshop, adicionando uma faixa de 1 pixel da mesma cor da emenda da textura, mas isso só para uso em tempo real, para usar isso em animação essa edição na maioria das vezes não é necessária, já que se pode usar imagens maiores que não apresentarão esse defeito no render, ficará perfeito, se ocorrer, basta usar um local supersampling que o problema é resolvido.
Abaixo uma exemplificação simples do pass de cor, iluminação, e resultado final da composição.
Agora, use a imaginação... O que deve se ter em mente é que esse é só um exemplo simples, a complexidade que se pode dar a essa técnica é ilimitada.
Para aguçar a curiosidade, uma coisa interessante nessa técnica é que se pode criar lightmaps diferentes para a iluminação direta e indireta, para isso basta ir em “render to texture>output>add...(add texture element)>lightingmap>select element unique settings> ...”, onde se pode desligar qualquer tipo de iluminação que desejar, deixando só a restante.
Na próxima parte vamos deixar os lightmaps de lado por enquanto, e explicarei alguns macetes sobre shadowmap no mental ray, depois um breve passo a passo de como utilizar as duas técnicas, botão por botão. Espero que gostem.
PS. Estou usando o imageshack para upar as imagens, por isso desses ads aí, desculpem por esse detalhe... :D
Abraço.