Informe de Desarrollo en Consolas #3

Hola a todos:

¡Estamos de vuelta con un nuevo informe de desarrollo de consola! Esta semana, vamos a hablar sobre los distintos tipos de LOD, su significado y por qué son tan importantes para el rendimiento.

LOD significa nivel de detalle y hay diferentes tipos para los numerosos objetos presentes en PUBG. Según la situación, se utiliza un LOD más o menos detallado para conseguir un equilibrio óptimo entre rendimiento y calidad visual, y de este modo proporcionar la mejor experiencia de juego posible. PUBG utiliza 3 niveles de LOD diferentes dependiendo de la situación: LOD 2, LOD 1 o LOD 0, siendo este último el más detallado de los tres. Cuanto mayor es el LOD, mayor es el impacto en el rendimiento. Aunque el rendimiento es importante, también debemos evitar que la jugabilidad se vea perjudicada por el uso de un LOD inferior.

Un ejemplo de LOD en acción es el aspecto de “plastilina” que tienen algunos edificios cuando los veis desde lejos al caer en paracaídas. Esto se debe al uso del primer LOD, el menos detallado de todos. Al comienzo de una partida, los edificios cercanos también pueden tener este aspecto, ya que hay muchos objetos diferentes que procesar a la vez. Se pasa a LOD 0 (máximo detalle) tan pronto como es posible, pero la velocidad de procesamiento depende del hardware empleado.

También se aplican tres tipos de LOD diferentes a los personajes: Mesh LOD, Bone LOD y AnimNode LOD. Primero vamos a hablar del Mesh LOD y del Bone LOD, para después meternos de lleno en la pieza central de este informe: el AnimNode LOD.

 

Mesh LOD y Bone LOD

El Mesh LOD determina el LOD del modelo de personajes. Cuando os acercáis a un personaje, este se muestra como LOD 0 (máximo detalle). Pero cuanto más os alejáis de él, menor será su nivel de detalle. Esto sucede en etapas, pasándose de LOD 2 a LOD 1 y a LOD 0. Por lo general no notaréis estas transiciones, ya que suceden a una distancia en la que los personajes aparecen muy pequeños en pantalla.

El Bone LOD funciona de la misma manera, pero determina el número de huesos activos durante las animaciones de los personajes. Esto significa que, a grandes distancias, el juego no necesita procesar animaciones muy detalladas que podrían reducir el rendimiento. Un LOD inferior implica un uso reducido de vértices y menos datos óseos que procesar. Esto supone una gran mejora en el rendimiento en comparación con la ausencia de LOD optimizados.

El uso de niveles adicionales de LOD (3, 4, etc.) aumentaría el rendimiento y reduciría el impacto en la CPU, pero la carga adicional para la memoria, E/S, etcétera, sería excesiva para el hardware de una consola, así que no se puede implementar en esta etapa.

 

AnimNode LOD

Las animaciones también tienen sus propios LOD, llamados AnimNode LOD, pero no se pueden aplicar igual que el Mesh LOD o el Bone LOD, ya que los cambios visuales son muy aparentes.

Animaciones como correr, mirar a un lado o apuntar con la mira de un arma son parte del control óseo de un personaje. Las animaciones óseas de un personaje se calculan en función de cada uno de sus miembros, lo que requiere cálculos y animaciones independientes para los brazos, las piernas, el cuello, etc.  

Hemos desarrollado un método LOD adicional basado en el tamaño del modelo de los personajes en proporción a la pantalla. Hecho esto, establecemos parámetros que seleccionan de forma automática y dinámica un AnimNode LOD menos detallado para los modelos que estén a una distancia a la que no se note el cambio visual. Esto supone un mayor rendimiento sin afectar negativamente al juego o a la experiencia visual.

Para que entendáis mejor el funcionamiento, tened en cuenta que, para los ejemplos visuales que se muestran a continuación, los cambios en el AnimNode LOD se producen a distancias muy cortas. Al jugar a PUBG, el AnimNode LOD solo tiene efecto a grandes distancias. 

Este es el primer ejemplo de cómo funciona un AnimNode LOD en el juego:

image.png.9a1a2ed1632c1f9efb30810a198d7b90.png

(Esta imagen forma parte de un entorno de desarrollo y solo tiene fines ilustrativos. El AnimNode LOD solo se desactiva a grandes distancias al jugar a PUBG)

En la imagen de arriba, podéis ver las diferencias entre tener un AnimNode LOD activado y desactivado.

Cuando el AnimNode LOD está completamente deshabilitado, se desactivan las animaciones del personaje y no se reflejan en el modelo, lo que implica un mayor rendimiento. Sin embargo, cuando un jugador está agachado, la parte inferior del cuerpo necesita un AnimNode LOD activado, o parecería que está de pie.

Para el siguiente ejemplo, en nuestro entorno de desarrollo hemos establecido que el AnimNode LOD se desactive cuando el modelo del personaje ocupe un 10 % de toda la pantalla. Esto os ayudará a entender mejor lo que sucede cuando el AnimNode LOD está desactivado. 

Durante el juego, el AnimNode LOD solo se desactivará cuando el modelo sea demasiado pequeño como para ver estos cambios.

image.png.d8fef94d251b33aa5b8a79963ee2dd52.png

image.png.b5c74ac0751db2ac29ad43193bbcfedb.png

(Esta imagen forma parte de un entorno de desarrollo y solo tiene fines ilustrativos. El AnimNode LOD solo se desactiva a grandes distancias al jugar a PUBG)

Puede que os estéis preguntando: “¿Qué sucede cuando acerco la vista sobre un enemigo lejano?”.

Al observar de cerca un jugador lejano, el modelo que veis llena más la pantalla y el AnimNode LOD se activa dinámicamente según la proporción del modelo de personaje respecto a la pantalla. Así se evita un impacto negativo en el juego.

Aquí podéis ver un ejemplo gráfico del AnimNode LOD que utilizamos en nuestro entorno de desarrollo. Está diseñado para que se desactive cuando el modelo ocupe el 10 % de la pantalla. Esto os ayudará a entender lo que está sucediendo.

 

image.png.155b31c34dacc6a5921070e8344ae0fa.png

(Esta imagen forma parte de un entorno de desarrollo y solo tiene fines ilustrativos. El AnimNode LOD solo se desactiva a grandes distancias al jugar a PUBG)

Al jugar a PUBG, estos cambios solo tienen efecto cuando el modelo de personaje está muy lejos y ocupa una pequeña parte de toda la pantalla. Pero no podréis apreciar los cambios.

 

Rendimiento del AnimNode LOD

El siguiente gráfico mide el rendimiento del AnimNode LOD activado (azul) y desactivado (rojo) con 10 personajes en pantalla. Al desactivar el AnimNode LOD, se aprecia una mejora aproximada del 10 % en el rendimiento.

 image.png.afc041a918a168e684ae0b3a734f3d96.png

* Resultados gráficos obtenidos con una Xbox One X.

Cuantos más modelos en una zona tengan el AnimNode LOD desactivado, mayor será el rendimiento en comparación con el AnimNode LOD activado. 

En resumen, algunas animaciones de personajes se desactivan o se reducen cuando se encuentran a una distancia suficiente como para que no se note ningún cambio. Esto supone un menor uso de recursos y un aumento en el rendimiento.

 

Discutir artículo
Compartir artículo