Unixtopia

main/ artigos/

Modelo 3D

No mundo dos computadores, acima de tudo em computação gráfica, mas também em simulações físicas e impressão 3D, é uma representação de um objeto tridimensional de um objeto da vida real, como um carro, uma árvore ou um cachorro, mas também algo abstrato, como uma superfície fractal ou plotagem de função. Modelos 3D podem ser exibidos usando várias técnicas de renderização 3D e são usados principalmente para simular o mundo real em computadores, como em jogos, pois o mundo real é tridimensional. Modelos 3D podem ser criados de várias maneiras, manualmente com software de modelagem 3D, como o Blender, por artistas 3D, por escaneamento 3D de objetos do mundo real ou automaticamente por geração procedural. Há uma infinidade de diferentes tipos de modelos 3D, o tópico é muito amplo quando visto em todo o seu escopo porque os modelos 3D podem ser usados e representados de muitas maneiras, e tudo é ainda mais complexo ao lidar com diferentes métodos de renderização 3D, os modelos 3D de jogo convencionais que a maioria das pessoas está acostumada a ver são modelos 3D poligonais, feitos de triângulos, de representação de limites, gravando apenas a superfície, não o volume, texturizados com imagens em sua superfície, mas esteja ciente de que muitas maneiras diferentes de representação são possíveis e de uso comum pela indústria, várias representações de volume, modelos de voxel, nuvens de pontos, superfícies implícitas, superfícies de spline, geometria sólida construtiva e wireframe. Modelos podem conter informações e recursos extras adicionais, como material, rigs de ossos para animação, quadros-chave de animação, informações de densidade, LODs e até mesmo scripts.

A situação aqui não é tão simples quanto com imagens ou áudio, mas existem alguns formatos que na prática serão suficientes para a maioria dos seus modelos. Primeiro, o mais KISS é Wavefront .obj, suportado por quase todos os softwares 3D, é um formato de texto que é fácil de analisar e é legível e editável por humanos, obj suporta a maioria das coisas que você precisará, como mapas UV e normais, e você pode hackea-lo até mesmo para uma animação de quadro-chave primitiva. Então use obj como sua primeira escolha. Se precisar de algo mais avançado, use COLLAD, eextensão .dae, este é um pouco mais bloated do que obj, pois é um XML, mas ainda é legível por humanos e tem mais recursos como animação esquelética, instanciação, hierarquia de modelos e assim por diante. Outro formato notável é STL, visto na impressão 3D. Para modelos que não sejam poligonais, você pode ter que pesquisar um pouco ou apenas representar seu modelo de alguma forma sensata, o heightmap é naturalmente salvo como uma imagem em tons de cinza, o modelo voxel pode ser salvo em algum formato de texto simples. Certifique-se sempre de distribuir seu modelo em formato universal, não compartilhe apenas o arquivo de projeto do Blender ou algo assim, é como compartilhar imagens no formato do Photoshop ou enviar a alguém um documento do Word, apenas atrasos fazem isso, sim, você também deve compartilhar o arquivo do projeto, se possível, mas é mais importante lançar o modelo em um formato amplamente suportado, à prova do futuro e não discriminatório. Vamos agora dar uma olhada mais de perto em uma classificação básica de modelos 3D:

Por representação Por recursos Por detalhes, resolução e fidelidade Por estilo artístico Por uso pretendido:

As principais abordagens para animação são estas:

Mencionaremos brevemente a texturização, uma parte importante da criação de modelos 3D tradicionais. No sentido comum e mais restrito, a textura é uma imagem 2D que é esticada na superfície do modelo para dar mais detalhes ao modelo, assim como colocamos papel de parede em uma parede, sem texturas, nossos modelos têm superfícies de aparência plana com apenas uma cor constante, na melhor das hipóteses, podemos atribuir a cada polígono uma cor diferente, mas isso não criará um modelo muito realista.

Colocar textura no modelo é chamado de mapeamento de textura, você pode ouvir o termo mapeamento UV porque a texturização é essencial para fazer o que chamamos de mapa UV. Isso significa apenas que atribuímos a cada vértice do modelo coordenadas 2D dentro da textura; tradicionalmente chamamos essas duas coordenadas de U e V, daí o termo mapeamento UV. As coordenadas UV são apenas coordenadas dentro da imagem da textura, elas não estão em pixels, mas são normalmente normalizadas para um float no intervalo <0,1>, isso é para permanecer independente da resolução da textura, você pode depois trocar a textura por uma de resolução diferente e ela ainda funcionará. Ao atribuir a cada vértice suas coordenadas de textura UV, basicamente alcançamos o alongamento, dizemos qual parte da textura será mostrada no rosto do personagem. Se você quiser permitir rasgos na textura, você tem que atribuir coordenadas UV por triângulo, não por vértice. Agora, vamos mencionar também que um modelo pode ter várias texturas ao mesmo tempo, a mais básica, geralmente chamada de difusa, especifica a cor da superfície, mas texturas adicionais podem ser usadas para coisas como transparência, normais. Deslocamento, propriedades do material como metalicidade e assim por diante , veja PBR. O modelo pode até ter vários mapas UV, as coordenadas UV podem ser animadas e assim por diante.

Também diremos que existe texturização 3D que não usa imagens, texturas 3D são geradas principalmente de forma procedural, mas isso está além do nosso escopo. Podemos fazer muito, muito mais coisas com modelos 3D, subdividi-lo, dividir automaticamente os polígonos em mais polígonos para suavizá-los, aplicar operações booleanas a eles, esculpi-los,nfazê-los de argila virtual, otimizá-los, reduzir sua contagem de polígonos, criar melhor topologia, aplicar vários modificadores, imprimi-los em 3D, fazê-los de papel.

Exemplo

Vamos olhar um modelo 3D poligonal simples. O seguinte é um modelo primitivo de uma casa com polígonos muito baixos, basicamente apenas um cubo com telhado:

              I
             .:..
           .' :':::..
        _-' H.' '.   ''-.
      .'    .:...'.......''-.G
    .' ...'' :    '.    ..' :
  .::''......:.....'.-''    :
 E:          :      :F      :
  :          :      :       :
  :          :      :       :
  :          :......:.......:
  :        .' D     :     .' C
  :     .''         :   -'
  :  .''            : .'
  ::'...............:'
 A                   B

Em um computador, seria primeiramente representado por uma matriz de vértices:

-2 -2 -2 (A)
2 -2 -2 (B)
2 -2 2 (C)
2 -2 -2 (D)
-2 2 -2 (E)
2 2 -2 (F)
2 2 2 (G)
2 2 -2 (H)
0 3 0 (I)

Junto com triângulos, especificados como índices na matriz de vértices, aqui com letras:

ABC ACD (chão)
AFB AEF (parede frontal)
BGC BFG (parede direita)
CGH CHD (parede traseira)
DHE DEA (parede esquerda)
EIF FIG GIH HIE (teto)

O modelo consiste em 9 vértices e 14 triângulos. Observe que a ordem em que especificamos os triângulos segue a regra de que, olhando para a parte frontal do triângulo, seus vértices são especificados no sentido horário, ou anti-horário, dependendo da convenção escolhida, às vezes isso pode não importar, mas muitos mecanismos 3D realizam o chamado backface culling, eles desenham apenas as faces frontais e algumas faces ficariam invisíveis do lado de fora se o enrolamento estivesse incorreto, então é melhor seguir a regra. A seguir está o nosso modelo de casa no formato obj, veja como é simples, você pode copiar e colar isso em um arquivo chamado house.obj e abri-lo no Blender:

# modelo de casa simples
v 2.000000 -2.000000 -2.000000
v 2.000000 -2.000000 2.000000
v -2.000000 -2.000000 2.000000
v -1.999999 -2.000000 -2.000000
v 2.000001 2.000000 -2.000000
v 1.999999 2.000000 2.000000
v -2.000001 2.000000 2.000000
v -2.000000 2.000000 -2.000000
v -2.000001 2.000000 2.000000
v 0.000000 3.000000 0.000000
vn 1.0000 0.0000 0.0000
vn -0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 0.8944 0.4472
vn 0.4472 0.8944 0.0000
vn 0.0000 0.8944 -0.4472
vn -0.4472 0.8944 -0.0000
s off
f 6 2 5
f 2 1 5
f 6 9 3
f 3 2 6
f 4 1 3
f 2 3 1
f 5 1 8
f 4 8 1
f 8 4 9
f 4 3 9
f 9 6 10
f 6 5 10
f 8 10 5
f 8 9 10

E aqui está o mesmo modelo novamente, agora no formato COLLADA, é um XML, então é mais detalhado, novamente você pode copiar e colar isso em um arquivo house.dae e abri-lo no Blender:

<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <!-- simple house model -->
  <asset>
    <contributor> <author>drummyfish</author> </contributor>
    <unit name="meter" meter="1"/>
    <up_axis>Z_UP</up_axis>
  </asset>
  <library_geometries>
    <geometry id="house-mesh" name="house">
      <mesh>
        <source id="house-mesh-positions">
          <float_array id="house-mesh-positions-array" count="30">
             2  2 -2      2 -2 -2      -2 -2 -2      -2  2 -2
             2  2  2      2 -2  2      -2 -2  2      -2  2  2
            -2 -2  2      0  0  3
          </float_array>
          <technique_common>
            <accessor source="#house-mesh-positions-array" count="10" stride="3">
              <param name="X" type="float"/>
              <param name="Y" type="float"/>
              <param name="Z" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <vertices id="house-mesh-vertices">
          <input semantic="POSITION" source="#house-mesh-positions"/>
        </vertices>
        <triangles material="Material-material" count="14">
          <input semantic="VERTEX" source="#house-mesh-vertices" offset="0"/>
          <p>
            5 1 4   1 0 4    5 8 2    2 1 5    3 0 2    1 2 0    4 0 7
            3 7 0   7 3 8    3 2 8    8 5 9    5 4 9    7 9 4    7 8 9
          </p>
        </triangles>
      </mesh>
    </geometry>
  </library_geometries>
  <library_visual_scenes>
    <visual_scene id="Scene" name="Scene">
      <node id="house" name="house" type="NODE">
        <translate sid="location">0 0 0</translate>
        <rotate sid="rotationZ">0 0 1 0</rotate>
        <rotate sid="rotationY">0 1 0 0</rotate>
        <rotate sid="rotationX">1 0 0 0</rotate>
        <scale sid="scale">1 1 1</scale>
        <instance_geometry url="#house-mesh" name="house"/>
      </node>
    </visual_scene>
  </library_visual_scenes>
  <scene> <instance_visual_scene url="#Scene"/> </scene>
</COLLADA>

Modelagem 3D: aprendendo e fazendo direito

Quer começar a modelar em 3D? Ou já sabe um pouco sobre isso e só quer um conselho para melhorar? Então vamos compartilhar conselho aqui. Vamos começar mencionando a maneira hacker chad de fazer modelos 3D, a maneira SMR como modelos 3D devem ser feitos. Lembre-se, você não precisa de nenhum programa para criar modelos 3D, você não precisa ser uma putinha do Blender, você pode fazer modelos 3D sem o Blender ou qualquer programa similar, e até mesmo sem computador. Um certo tipo de modelos altamente artísticos, animados e de polígonos muito altos será muito difícil ou impossível de fazer sem uma ferramenta interativa como o Blender, mas você ainda pode fazer modelos 3D muito complexos, como o de uma cidade inteira, sem nenhuma ferramenta sofisticada. Pessoas estavam fazendo estátuas e tipos similares de modelos físicos 3D por milhares de anos, às vezes é realmente mais simples fazer o modelo à mão com argila e depois digitalizá-lo no computador, pode simplesmente fazer um modelo físico de wireframe, medir posições dos vértices, digitá-los manualmente em um arquivo e você tem um modelo 3D, você pode facilmente fazer um modelo poligonal de papel, mas mesmo modelos 3D virtuais podem ser feitos simplesmente com caneta e papel, são números, vértices e triângulos, muito gerenciáveis se você os mantiver simples e organizados.

Você pode escrever diretamente modelos em formatos de texto como obj e collada. Os primeiros modelos 3D de computador eram realmente feitos à mão, apenas com caneta e papel, porque simplesmente não havia computadores rápidos o suficiente para permitir a manipulação em tempo real de modelos 3D. Naquela época, os modeladores simplesmente mediam as posições dos pontos-chave, vértices, de um objeto no espaço 3D, o que pode ser feito simplesmente com ferramentas como réguas e cordas, sem a necessidade de scanners 3D complexos, mas se você tem uma câmera digital, já tem um scanner 3D bastante avançado.

Eles então alimentaram os modelos feitos manualmente no computador para visualizá-los, mas você nem precisa de um computador para desenhar um modelo 3D, há uma área inteira chamada geometria descritiva que é toda sobre desenhar modelos 3D no papel e que era usada por engenheiros antes de computadores surgirem. Você não precisa ir tão longe a ponto de evitar computadores, se você tem um computador programável, você já tem o luxo que primeiros artistas não tinham, um mundo totalmente novo se abre para você, agora você pode fazer modelos 3D muito complexos apenas com sua linguagem de programação de escolha. Imagine que você queira fazer o dito modelo 3D de uma cidade apenas usando a linguagem de programação C.

Você primeiro pode definir o terreno como heightmap simplesmente como uma matriz 2D de números, então você escreve um código simples que irá iterar sobre essa matriz e convertê-la para o formato obj, um formato 3D de texto simples muito simples, serão como 20 LOC, agora você tem o terreno básico, você pode renderizá-lo com qualquer ferramenta que possa carregar modelos 3D no formato obj, e você pode escrever seu próprio visualizador 3D, você nem precisa usar perspectiva, apenas desenhá-lo em projeção ortográfica. Agora você pode começar a adicionar casas ao seu terreno, faça uma matriz C de vértices e outra matriz de índices de triângulo, faça manualmente um modelo 3D simples de uma casa, uma forma básica terá menos de 20 vértices, você pode cortá-la do papel para ver como ficará. Essa é a geometria da sua casa, agora continue criando instâncias dessa casa e colocando-as no terreno, você cria algum tipo de estrutura que manterá a transformação da casa, sua posição, rotação e escala, e cada estrutura representará uma casa com a geometria que você criou, se você melhorar o modelo da casa posteriormente, todas as casas serão atualizadas como esta.

Você não precisa se preocupar em colocar as casas verticalmente, a altura delas será calculada automaticamente para que fiquem bem no terreno. Agora você pode atualizar seu exportador de modelos para levar em conta as casas, ele produzirá o modelo obj junto com elas e, novamente, você pode visualizar todo esse modelo em qualquer software 3D ou com suas próprias ferramentas. Você pode continuar adicionando árvores, estradas, materiais simples, talvez apenas algo como cores por triângulo, e assim por diante. Essa abordagem pode até ser superior para alguns projetos, assim como o script é superior a muitos programas de GUI, você pode colaborar neste modelo assim como pode colaborar em qualquer outro programa de texto, pode automatizar muito as coisas, será independente de formatos e plataformas proprietários

Ok, voltando ao mainstream agora. Hoje como um usuário de FOSS, você provavelmente fará modelagem 3D com o Blender, recomendamos para começar a aprender modelagem 3D, pois é poderoso, gratuito w tem muitos tutoriais. Não use nada proprietário, não importa o que digam a você. Depois que souber um pouco sobre a arte, você pode brincar com programas ou abordagens alternativas, como escrever programas que geram modelos 3D. Como um iniciante, comece com o Blender, que é de agora em diante neste artigo o software que vamos supor que você esteja usando.

Comece extremamente simples e aprenda de baixo para cima, aprenda sobre fundamentos e conceitos de baixo nível e comece com modelos muito simples, forma simples de baixo polígono sem textura de uma casa, caixa com um telhado, continue criando modelos mais complexos em pequenos passos. Não caia na armadilha da modelagem 3D mágica rápida e fácil, como escultura ou aplicativos inteligentes sem saber o que está acontecendo em low-level, você acabará criando modelos extremamente feios e ineficientes em formatos ruins, como alguém querendo criar foguetes espaciais sem aprender nada sobre matemática ou física primeiro. Lembre-se de praticar, e eventualmente você aprende fazendo, então tente fazer pequenos projetos e compartilhar seus resultados em sites como opengameart para obter feedback e satisfação mental por seu esforço. A seguir está um esboço de etapas que você pode seguir para se tornar um bom artista 3D:

Aprenda o que é um modelo 3D, detalhes técnicos básicos sobre como um computador o representa e aproximadamente como a renderização 3D funciona. É importante ter ao menos alguma ideia sobre os fundamentos, você deve aprender ao menos o seguinte:

Crie manualmente modelos não texturizados low-poly simples, de uma casa simples, laptop, martelo e garrafa. Mantenha a contagem de vértices e triângulos bem baixa, abaixo de 100, faça o modelo criando manualmente cada vértice e triângulo e concentre-se apenas em aprender bem essa manipulação de geometria de baixo nível, como criar um vértice, como dividir uma aresta, como girar um triângulo, fazendo o modelo estar de acordo com as boas práticas e familiarize-se com as ferramentas que você está usando, ou seja, aprenda as combinações de teclas, bloqueando a direção do movimento nos eixos principais, aprenda a manipular sua visualização 3D, configurando a visualização livre, lateral, frontal, superior com imagens de referência. Deixe o modelo belo, faça com que ele tenha triângulos corretamente voltados para frente, ative backface culling para verificar isso, evite triângulos que se cruzam, triângulos e vértices desnecessários, remova todos os vértices duplicados, não tenha vários vértices com a mesma posição, conecte tudo o que deve ser conectado, evite triângulos malformados, extremamente agudos e longos.

Mantenha a contagem de triângulos o mais baixa possível, lembre-se, sempre deve haver uma razão muito boa para adicionar um triângulo, não deve haver nenhum triângulo cujo propósito não seja justificado, ou seja, que não seja absolutamente necessário para obter algo sobre a aparência do modelo. Se você puder remover o triângulo e ainda fazer o modelo parecer mais ou menos o mesmo, o triângulo deve ser removido. Aprenda também sobre normais e torne-os bonitos.

Tente a geração normal automática, mexer com limites de ângulo para bordas afiadas e suaves, veja como eles afetam a aparência do modelo, tente marcar manualmente algumas bordas afiadas, tente suavizar grupos. Salve seus modelos finais no formato OBJ, um dos formatos mais simples e comuns que suportam tudo o que você precisa neste estágio. Tudo isso será muito para aprender, é por isso que você não deve tentar criar um modelo complexo neste estágio. Você pode se manter motivado visando criar uma coleção de modelos de baixo polígono que você pode compartilhar no opengameart ou em algum lugar.

Aprenda a texturizar, pegue modelos que você tem e tentar colocar uma textura simples neles desenhando uma imagem simples, então desembrulhando as coordenadas UV e editando manualmente o mapa UV para caber no modelo. O objetivo é se familiarizar com as ferramentas e conceitos agora, experimente com ajudantes como desembrulhar por projetar da vista 3D e desembrulhar UV. Deixe o mapa UV bonito. Assim como a geometria do modelo, os mapas UV também têm boas práticas, você deve utilizar o máximo de pixels de textura possível, caso contrário, você estará desperdiçando espaço na imagem, cuidado com o sangramento de cor, o mapeamento deve ter uma espécie de densidade de pixel uniforme, ou possivelmente densidade aumentada em triângulos onde mais detalhes devem estar, alguns pixels da textura podem ser mapeados para vários triângulos, se possível para utilizá-los de forma eficiente.

Faça apenas uma textura difusa simples, não faça PBR ou texturas de material, isso é avançado agora. Experimente pintura de textura e criação manual de textura em um programa de imagem 2D, familiarize-se com ambos. Aprenda modificadores e ferramentas avançadas. Os modificadores ajudam você, por exemplo, com a criação de modelos simétricos: você modela apenas um lado e o outro é espelhado. O modificador Subdivide criará automaticamente uma versão de polígono mais alto do seu modelo, mas você precisa ajudá-lo dizendo quais lados são nítidos. As operações booleanas permitem que você aplique operações de conjunto como unificação ou subtração de formas, mas geralmente criam uma geometria confusa que você precisa consertar. Existem muitas ferramentas, experimente e aprenda sobre seus prós e contras, tente incorporá-las à sua modelagem.

Aprenda retopologia e possivelmente escultura. Topologia é um conceito importante, ela diz qual é a estrutura de triângulos e polígonos, como eles são distribuídos, conectados, quais curvas suas bordas seguem. Uma boa topologia tem certas regras, idealmente ser composta apenas de quadrantes, ser mais densa onde a forma tem mais detalhes e mais esparsa onde é plana, ter bordas para que a animação não deforme o modelo muito. A topologia é importante para eficiência, você utiliza bem seu orçamento de polígonos, texturização e especialmente animação, boa deformação do modelo. A criação de modelos complexos é quase sempre feita nas duas etapas a seguir:

Aprenda sobre materiais e shaders. Você pode aprender sobre como criar shaders personalizados, como criar materiais transparentes, aplicar várias texturas, como fazer pele realista, shaders PBR. Deve pelo menos estar ciente dos conceitos básicos de sombreamento e técnicas comumente encontradas, como sombreamento Phong, dispersão de subsuperfície, efeitos de espaço de tela porque você os encontrará em editores de shader e deve saber quais penalidades de desempenho esperar.

Aprenda animação. Aprenda sobre quadros-chave e interpolação e tente animar transformações básicas de um modelo, como animar um carro dirigindo por uma cidade por meio de quadros-chave de sua posição e rotação. Em seguida, aprenda sobre como animar a geometria do modelo, primeiro a maneira simples e antiga de transformar entre diferentes formas, chaves de forma no Blender. Aprenda o tipo mais difícil de animação: esquelética. Aprenda sobre ossos, armaduras, rigging e cinemática inversa.

Agora você pode enlouquecer e aprender todos os recursos uber, como cabelo, simulação física, superfícies NURBS e física de peitos.

Não se esqueça de seguir os princípios SMR, isso é importante para que seus modelos sejam amigáveis à boa tecnologia. Mesmo que desktops modernos não se importem mais com contagem de polígonos, ainda assim faça um esforço para otimizar seu modelo para não usar mais polígonos do que o necessário. Seus modelos podem ser potencialmente usados em computadores pequenos e não consumistas com renderizadores de software e pouca RAM. Low-poly é melhor do que high-poly, você ainda pode preparar seu modelo para subdivisão automática para que seja possível obter um modelo de polígono mais alto dele automaticamente. Não use coisas complexas como PBR ou animação esquelética, a menos que seja necessário, você deve conseguir se safar com uma textura difusa simples e animação de transformação de quadro-chave simples, assim como em jogos antigos. Se usar coisas complexas, torne-as opcionais, faça um mapa normal, mas não confie que ele será usado no final.

Vamos a alguns conselhos:


Impulsionado por nada. Todo conteúdo é disponível sob CC0 1.0 domínio público. Envie comentários e correções para Mr. Unix em victor_hermian@disroot.org.