Geometría

Los juegos 3D que se ejecutan bien en la mayoría de los dispositivos comienzan con arte 3D diseñado para aprovechar al máximo los procesadores de gráficos. En esta guía, se destacan optimizaciones y prácticas recomendadas para elementos 3D en dispositivos móviles para mejorar el rendimiento de tu juego y minimizar el consumo de energía.

Partes de este artículo se basan en el trabajo aportado y protegido por derechos de autor de Arm Limited.

Definición de geometría

La geometría, o malla de polígonos, es una colección de vértices, bordes y caras que componen la forma de un objeto 3D. Este objeto puede ser un vehículo, un arma, un entorno, un personaje o cualquier tipo de elemento visual de un juego.

Figura 1: Vértices, bordes y triángulos de un cubo.

La geometría está compuesta por las siguientes partes:

  • Vértices: Es el sustantivo plural de vértice. Estos puntos definen la estructura de un objeto en el espacio 3D.

  • Bordes: Son dos vértices unidos por una línea recta.

  • Triángulo: Son tres vértices unidos entre sí por tres bordes crean un triángulo. A menudo, este se denomina polígono o cara. Dentro del software 3D, como 3ds Max, Maya o Blender, por lo general, trabajarás con cuadrantes. Los cuadrantes son un tipo de polígono de cuatro lados fáciles de modificar y trabajar. Cuando se renderizan, estos polígonos se muestran en la pantalla como triángulos.

Usa las siguientes secciones a fin de obtener más información sobre la geometría:

Uso del triángulo y el polígono

En esta sección, se describen las prácticas recomendadas para el uso de triángulos y polígonos. Esto incluye las siguientes recomendaciones:

Reduce la cantidad de triángulos

Si incluyes demasiados triángulos, el rendimiento del juego se verá afectado.

Usa la menor cantidad posible de triángulos. Te recomendamos que uses la cantidad necesaria a fin de obtener la calidad que deseas. Considera el impacto en el rendimiento cuando crees contenido para un juego para dispositivos móviles. Procesar los vértices resulta costoso. Cuantos menos vértices haya, mejor será el rendimiento general del juego. Además, cuantos menos triángulos uses, mayor será la cantidad de dispositivos en los que se podrá ejecutar el juego sin una GPU potente.

La siguiente imagen muestra que puedes mantener la calidad con menos triángulos:

El objeto de la izquierda tiene 584 triángulos, mientras que el de la derecha tiene 704.

Figura 2: Comparación de dos objetos con diferente cantidad de triángulos que tienen el mismo aspecto en modo sombreado. En el objeto de la izquierda, se quitaron los bordes que no contribuyen a la silueta.

En plataformas móviles, la cantidad máxima frecuente de vértices para una malla individual es 65,535. A fin de garantizar la máxima compatibilidad, debes permanecer por debajo de este número.

El motivo de este límite es que las GPU solo garantizan compatibilidad con los índices de 16 bits, que pueden representar un rango de 0 a 65,535 vértices. La mayoría de las GPU modernas, aunque no todas, son compatibles con los índices de 32 bits, que representan un rango de 0 a 4,294,967,295 vértices. Si excedes el rango admitido cuando usas índices de 16 bits, la geometría no se renderizará bien o tendrá elementos faltantes.

Siempre consulta y prueba el juego en todos los dispositivos en los que lo quieras lanzar, en lugar de hacerlo en un monitor de PC. Algunos modelos con gran nivel de detalle pueden no renderizarse de forma correcta o incluso no ser visibles en un dispositivo móvil.

Te recomendamos que uses más triángulos en objetos en primer plano y menos en objetos en segundo plano. Esto es más beneficioso para los juegos que tienen un punto de vista (POV) de cámara estática. En el siguiente ejemplo, se muestra un uso adecuado de los detalles en diferentes objetos.

Los detalles en objetos en primer plano se crean con triángulos. Los detalles de segundo plano se preparan en superficies planas.

Figura 3: En este ejemplo, se muestra el nivel alto de detalle de los objetos en primer plano en comparación con aquellos objetos en segundo plano.

La cantidad máxima de triángulos que debes usar en un modelo varía según el dispositivo y el contenido. Si hay más objetos en pantalla, usa menos triángulos en cada modelo. Si solo se muestran dos o tres objetos, estos pueden incluir más triángulos.

En el siguiente ejemplo, se muestran dos modelos de diferentes demostraciones. La demostración de Circuit VR solo tiene un personaje robot. Dado que solo hay un único objeto, el modelo de robot tiene una mayor cantidad de triángulos. El otro modelo es el de la demostración de los ejércitos. En esta, hay cientos de soldados en cada fotograma, por lo que cada soldado tiene menos triángulos.

Figura 4: Comparación de la cantidad de triángulos en dos casos de uso diferentes. A la izquierda, el robot de CircuitVR tiene 11,000 triángulos. A la derecha, el soldado de los ejércitos tiene 360 triángulos.

Ejemplo de uso de un triángulo

La siguiente figura es un ejemplo de la cantidad de triángulos utilizados en la demostración de tecnología de los ejércitos.

En esa demostración de tecnología móvil de 64 bits compilada en Unity, la cámara es estática con muchos personajes animados. En total, cada fotograma renderiza unos 210,000 triángulos. Esta cantidad de triángulos permite que la demostración se ejecute de manera estable a unos 30 fotogramas por segundo (FPS).

Figura 5: Ejemplo de renderización de la demostración de tecnología de los ejércitos que muestra la cantidad de triángulos que se usan.

Los objetos más grandes de la escena, las torres de cañón, contienen unos 3,000 triángulos, ya que ocupan una gran parte de la pantalla.

Los personajes usan cerca de 360 triángulos cada uno. Dado que hay una gran cantidad de ellos y que solo se ven a la distancia, no se usan tantos triángulos. Desde el POV de la cámara, se ven adecuados.

Figura 6: Una vista de los soldados con pocos triángulos de la demostración de tecnología de los ejércitos.

Usa triángulos en áreas importantes

Los vértices resultan muy costosos en las plataformas móviles. A fin de evitar desperdiciar tu presupuesto de procesamiento, coloca los vértices en áreas que contribuyan a la calidad visual del juego. Es posible que detalles pequeños de un objeto 3D no sean visibles en la pantalla final del juego. Es posible que no se puedan ver los detalles diminutos debido al tamaño de pantalla pequeño y a la colocación de objetos 3D.

En lugar de detalles sutiles, enfócate en las formas grandes que contribuyen a la silueta. La siguiente imagen es un ejemplo de enfoque en la silueta:

Figura 7: La línea roja que rodea al robot representa su silueta.

Te recomendamos que uses menos triángulos en áreas que no se vean muy seguido desde el POV de la cámara. Por ejemplo, la parte inferior de un automóvil o la parte posterior del guardarropas. Si nunca se verá una parte de un objeto, bórrala.

La eliminación de parte de un objeto debe realizarse con cuidado y puede limitar su reutilización. Por ejemplo, si borras la parte inferior de una malla de mesas, el usuario notará la sección que se borró si la mesa se da vuelta.

No modeles pequeños detalles con mallas de triángulo de alta densidad. Usa texturas y mapas normales a fin de obtener detalles sutiles. En el siguiente ejemplo, se muestra la misma malla con un mapa normal y sin él.

Figura 8: Comparación de un modelo con un mapa normal aplicado y otro sin él.

Quita los microtriángulos

Los microtriángulos son triángulos muy pequeños que no contribuyen a las imágenes finales de una escena.

Todos los objetos 3D con gran cantidad de polígonos tienen problemas de microtriángulos cuando se alejan de la cámara. No hay una definición estándar en la industria para los microtriángulos, pero estos se suelen considerar como triángulos más chicos, de 1 a 10 píxeles, en la imagen final. No te recomendamos que uses los microtriángulos, ya que la GPU debe realizar el procesamiento de todos estos triángulos aunque no contribuyan a la imagen final.

Los microtriángulos se originan por dos cosas:

  • Detalles que son demasiado pequeños y constan de muchos triángulos
  • Objetos más allá de la cámara con muchos triángulos

Figura 9: Efecto de distancia en microtriángulos.

En la Figura 9, el robot ubicado en primer plano no tiene microtriángulos. El robot ubicado en segundo plano sí los tiene porque cada triángulo tiene un tamaño de 1 a 10 píxeles.

Figura 10: Comparación de microtriángulos en modelos muy detallados. La mayoría de los triángulos del área destacada son demasiado pequeños para verlos en pantallas de teléfonos.

En el caso de un objeto que se encuentre más lejos de la cámara, utiliza el nivel de detalle (LOD). Esto reduce la complejidad de un objeto y lo simplifica. El resultado es un objeto menos denso con triángulos.

No modeles los detalles con muchos triángulos. Usa texturas y mapas normales para este tipo de detalle sutil. Puedes fusionar los vértices y los detalles del triángulo que son demasiado pequeños y no contribuyen a la imagen final.

Es importante reducir la cantidad de microtriángulos, ya que pueden afectar el ancho de banda de la memoria. Una mayor cantidad de triángulos generan más datos que se envían a la GPU. En un dispositivo móvil, esto puede afectar la duración de batería. Un mayor consumo de energía puede provocar un mecanismo de regulación térmica, lo que limitará el rendimiento máximo de la GPU.

Evita los triángulos largos y estrechos

Estos son triángulos que, cuando se renderizan en la imagen final, tienen menos de 10 píxeles en una dimensión y se extienden a lo largo de la pantalla. Por lo general, los triángulos largos y estrechos resultan más costosos que los de otro tipo.

En la siguiente imagen, el bisel del pilar tiene un triángulo largo y estrecho cuando se mira desde la distancia. Este biselado no es un problema si se lo mira de cerca.

Figura 11: El bisel del pilar es un triángulo largo y estrecho.

De ser posible, te recomendamos que quites los triángulos largos y estrechos de todos los objetos.

En el caso de los objetos brillantes, los triángulos largos y estrechos pueden provocar que la luz parpadee a medida que se mueve la cámara. El nivel de detalle puede ayudar a quitar este tipo de triángulos cuando un objeto esté lejos de la cámara.

En la medida de lo posible, trata de que los triángulos sean equiláteros. De esta forma, los triángulos tendrán un área mayor y menos bordes. En general, los triángulos largos y estrechos tienen un peor rendimiento que los triángulos más grandes. Si deseas obtener más información sobre el área del triángulo, consulta Triangulación.

Nivel de detalle

El nivel de detalle es una técnica que reduce la complejidad a medida que los objetos se encuentran más lejos del espectador. La forma más común incluye varias versiones de una malla, con una cantidad de vértices que disminuye de forma progresiva. El nivel de detalle no solo reduce la cantidad de vértices que se procesarán, sino que también evita el problema de los microtriángulos. También se ve mejor si el objeto se coloca más lejos en la escena.

Te recomendamos que uses el nivel de detalle siempre que sea posible. Enfócate en la silueta del objeto. Te recomendamos que te enfoques en las áreas planas a fin de lograr la reducción del vértice. En la siguiente imagen, se muestra el uso del nivel de detalle, aplicado al modelo del robot.

En el lado izquierdo, se encuentra el robot con el mayor nivel de detalle y la mayor cantidad de triángulos. A la derecha, el robot se encuentra más lejos, tiene menos detalles y usa menos triángulos.

Figura 12: Comparación entre la cantidad de vértices usados a medida que el nivel de detalle cambia.

En la Figura 12, resulta difícil ver la diferencia entre el mismo objeto con 200 triángulos o con 2,000 triángulos pero observado a distancia. Un objeto con más triángulos agrega un alto costo de recursos, pero no mejora la apariencia cuando se lo visualiza a distancia.

Figura 13: Comparación de modelos distantes con una cantidad diferente de triángulos.

El nivel de detalle como concepto también puede aplicarse a la complejidad del sombreador y a la resolución de la textura. En un nivel más bajo, se pueden usar distintos materiales con más sombreadores y menos texturas. También debes asegurarte de que las texturas tengan mipmaps, de modo que los niveles de textura de menor resolución se apliquen a objetos distantes. Estas medidas mejorarán el rendimiento a cambio del aumento del tamaño de tus datos.

No recomendamos el nivel de detalle para juegos en los que la cámara y los objetos sean estáticos. Su mayor beneficio se da para objetos que se mueven hacia la cámara y que se alejan de ella. Los objetos estáticos no se mueven, por lo que no hay ningún beneficio en términos de nivel de detalle.

Figura 14: Escena de cámara estática de la demostración de tecnología de los ejércitos que no usa nivel de detalle.

Proporciones del nivel de detalle

Usa una proporción coherente cuando reduzcas la cantidad de triángulos para el nivel de detalle. Te recomendamos que reduzcas los triángulos un 50% para cada nivel.

No uses nivel de detalle en objetos simples. Los objetos que ya tienen una cantidad baja de triángulos no se benefician de él. En el siguiente ejemplo de la demostración de tecnología de los ejércitos, se muestra cómo se ve el juego con una imagen estática y objetos con poca cantidad de triángulos.

Figura 18: Una comparación entre modelos a medida que el nivel de detalle disminuye.

Verifica el cambio de los niveles de detalle a las distancias apropiadas desde la cámara. Basa tu análisis en cómo se usan estos en el juego.

Figura 16: Comparación de la apariencia de un modelo de nivel de detalle 3 visto de cerca y a la distancia prevista.

No hay una cantidad exacta que indique la medida razonable de detalle que debería tener un objeto. Dependerá del tamaño del objeto y de su importancia. Por ejemplo, un personaje en un juego de acción o un vehículo en un juego de carreras podrían tener más un mayor nivel de detalle que objetos pequeños en segundo plano, como un árbol.

Ten en cuenta que un nivel de detalle muy alto consume recursos de CPU. Se requiere mayor poder de procesamiento para que la CPU decida qué nivel mostrar. Esta técnica también consume memoria, lo que aumenta el tamaño del archivo y el uso de VRAM. Además, crear y verificar los modelos de nivel de detalle lleva tiempo adicional.

Existen dos maneras de crear mallas de nivel de detalle: manual y automáticamente.

  • Puedes crear estas mallas de forma manual con cualquier software 3D.
    • Para ello, quita los bucles de borde o reduce la cantidad de vértices del objeto 3D.
    • Esto le brinda al artista el máximo control sobre el producto final, aunque puede tomar más tiempo.
  • Las mallas de nivel de detalle se pueden crear automáticamente.
    • Puedes usar una tecla modificadora dentro de un paquete 3D, como ProOptimizer en 3ds Max o Generate LOD Meshes en Maya.
    • Por otro lado, puedes usar software de generación de nivel de detalle, como Simplygon o InstaLOD.
    • Algunos motores de juegos tienen una función de generación automática de nivel de detalle que te permite crear y aplicar mallas.

Recomendaciones

Existen técnicas adicionales a fin de reducir los recursos requeridos para tu juego que también mantienen el realismo de los gráficos.

Grupos de suavizado o normalización personalizada de vértices

Usa grupos de suavizado o la normalización personalizada de vértices a fin de definir la solidez de un borde y alterar el aspecto de un modelo. Un grupo de suavizado ayuda a crear un mejor sombreado en la dirección artística baja de un polígono. Un grupo de suavizado también afecta la división de las islas UV y la calidad de los mapas normales cuando realizas la preparación.

Ejemplo de un grupo de suavizado. A la izquierda, el robot tiene aplicado un grupo de suavizado.

Figura 17: Comparación de un modelo con grupo de suavizado y sin él.

Si implementas un grupo de suavizado en un modelo 3D, debes exportarlo del software 3D e importarlo al motor.

Topología de malla

Cuando crees un nuevo elemento 3D, asegúrate de que tenga una topología prolija. Una topología limpia resulta esencial para los personajes y otros objetos animados y cambiantes. No es necesario que esta sea perfecta. Recuerda que los usuarios finales no verán el wireframe y que las texturas y los materiales tendrán un mayor impacto sobre la apariencia del modelo.

Figura 18: La topología, el wireframe y la versión final de una roca de la demostración de tecnología de los ejércitos.

Exageración de formas

Puedes exagerar algunas formas de modo que tus modelos sean más fáciles de interpretar. Esto depende en gran medida del tipo y estilo de tu juego. Como las pantallas de los dispositivos móviles son pequeñas, puede resultar difícil capturar ciertas formas que sean muy pequeñas. La exageración de estas formas puede ayudar a los usuarios a verlas, incluso a gran distancia.

Por ejemplo, puedes crear personajes con las manos más grandes para que sean más fáciles de ver.

Figura 19: Modelo de ejemplo que muestra proporciones exageradas a fin de obtener una mejor visibilidad.