Iluminacion en un mundo de Minecraft


10

Minecraft es un juego que se basa en gran medida en un mapa de altura y utiliza esa información de mapa heigt para inundar el mundo de luz. Según tengo entendido, el punto más alto en el mapa de altura es el final del área influenciada por la luz solar. Todo lo que está arriba está iluminado por la luz solar, todo lo que está debajo solo está influenciado por la luz cercana en un radio de 8 bloques.

Por lo tanto, si tiene una isla flotante en la cima de su mundo, todo lo que se encuentre debajo se verá esencialmente como una cueva. Cuando dos luces influyen en el mismo punto, la luz más brillante gana (no estoy seguro de eso).

De cualquier manera, hay un par de problemas con el modelo de iluminación de minecrafts: en primer lugar, si su mundo no tiene un mapa de altura, es más difícil descubrir qué se supone que emite exactamente la luz solar y qué no. Una forma simple sería asumir que el mundo es (en mi caso) una roca flotante y luego atravesar cada eje desde ambas direcciones y descubrir dónde comienza y termina la roca. Pero esto no elimina completamente el problema, ya que no se supone que las abolladuras en la roca estén en la oscuridad.

Minecraft en sí almacenará en caché la información de la luz en sus fragmentos junto con la información sobre el material de un bloque. Por lo tanto, solo si se modifica el mundo, la iluminación debe actualizarse. Desafortunadamente, ese proceso sigue siendo bastante lento en las actualizaciones y en los cambios rápidos de luz, uno puede ver el retraso de la iluminación. Eso es especialmente cierto si cambian muchos bloques (TNT, puesta de sol, etc.) y no está ejecutando la computadora más rápida (o Java en Mac).

Desde mi comprensión aún limitada de la iluminación de gráficos en 3D, un mundo como Minecraft no debería ser el mayor problema. ¿Cómo abordarías el problema?

Creo que los requisitos básicos para la iluminación en un mundo vóxel serían

  1. actualizar lo suficientemente rápido como para que pueda suceder en un solo cuadro. Uno podría hacer la iluminación en el dispositivo de gráficos y descargar la información de luz cambiada a la RAM principal.
  2. la información de la luz debe estar disponible rápidamente para la lógica principal del juego, por lo que no se basa completamente en el dispositivo gráfico: razonamiento: la luz afecta el crecimiento de la hierba, el desove de monstruos, etc.
  3. las actualizaciones ligeras tendrían que ser locales para un fragmento o tener algún otro límite para que uno no tenga que volver a encender todo el mundo, que podría ser de gran tamaño.

La idea principal sería hacer que las actualizaciones ligeras sean rápidas, no necesariamente más bellas. Para las mejoras generales del rendimiento de la representación de la luz, se podría agregar fácilmente SSAO además de lo que debería dar como resultado mundos mucho más agradables.

Respuestas:


7

La iluminación en Minecraft se calcula de forma asincrónica y se integra en la geometría. No se hace en tiempo real.

Cada vóxel almacena la iluminación para ese vóxel, probablemente como un solo byte (o 2, la muesca utiliza un enfoque por capas para hacer posibles los ciclos diurnos y nocturnos). Solo hay 16 niveles de luz. Para iluminar el mundo, Minecraft hace 2 pases. Uno para la luz del sol, y otro para propagar o inundar la luz en cuevas y tal. La iluminación está localizada porque cualquier fuente de luz solo puede propagar su luz como máximo a 16 cuadras de distancia. El agua y la lava funcionan casi de la misma manera.

Más información está disponible en su blog: http://notch.tumblr.com/post/434902871/per-request-this-is-how-the-new-lighting-will-work


Lo sé. Creo que escribí eso arriba (menos la resolución de brillo de 4 bits).
Armin Ronacher

1

¿No puede usar GPU Render para texturizar y duplicar sus resultados para que siempre tenga disponible la información de iluminación calculada para volver a leer cada fotograma?

La forma en que organizaría estos datos para la iluminación depende totalmente de usted, pero no veo por qué esta no debería ser la primera opción de investigación si todo lo que está buscando es mejorar la velocidad de su algoritmo de iluminación ...


Exactamente lo que estaba pensando. Casi todas las GPU, a diferencia de la mayoría de las CPU, están DISEÑADAS para este tipo de ejercicio computacional paralelo masivo.
Grant Peters

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.