¿Cómo puedo generar mapas de calor basados ​​en los datos informados por el jugador?


17

Para un ejemplo realmente bueno de lo que estoy hablando, vea cómo el desarrollador de Replica Island lo hace basado en las muertes de jugadores: http://www.youtube.com/watch?v=7-62tRHLcHk&feature=player_embedded#t= 37m

¿Cómo puedo producir fácilmente mapas de calor basados ​​en los datos que paso?

Halo 3 es otro buen ejemplo del uso de mapas de calor en los informes de datos del juego: http://www.bungie.net/Online/Heatmaps.aspx


Respuestas:


9

Suponiendo que ya tiene el conjunto de datos que desea trazar y el mapa en el que desea trazarlo, puede comenzar creando un mapa de intensidad: una cuadrícula de valores de coma flotante que sea proporcional en los límites del mapa final (si los mapas son lo suficientemente pequeños, 1: 1 probablemente está bien). Inicialice toda la matriz a 0.

Luego camina a través de cada punto que desea trazar, mapearlo en el espacio de coordenadas del mapa de intensidad (que debería ser una operación de escala simple, normalmente), y luego trazar un "punto" en el mapa de intensidad centrado en esa posición.

Un "blip" básico podría consistir en aumentar la intensidad en el punto blip más un poco de radio. Las implementaciones más complejas podrían leer la intensidad existente, y usar un radio de caída más grande cuanto más intenso sea el punto de falla. Puede experimentar con el plotter blip para encontrar una implementación que le guste.

Una vez que tenga un mapa de intensidad, puede usar la intensidad en cada punto individual como una búsqueda 1D en un gradiente de color, lo que le permitirá lograr el impacto visual deseado (así es como puede obtener los resultados multicolores que son más comúnmente visto). Debe realizar esta búsqueda de color a medida que transfiere el mapa de intensidad a su gráfico final (obviamente, reescalando, según sea necesario para tener en cuenta las diferencias de tamaño en el mapa de intensidad frente a la imagen final).

Esto debería ser suficiente para una implementación básica, pero hay espacio para la optimización. Por ejemplo, el mapa de intensidad no se normalizará, por lo que es posible que deba volver a formalizarlo (probablemente lento) o realizar un seguimiento de la intensidad máxima a medida que traza cada señal, para que pueda realizar la renormalización de una intensidad individual al mismo tiempo Estás haciendo la recolorización. Además, es posible que la distribución de sus valores sea tal que no sea eficiente para la memoria almacenar todo el espacio de coordenadas del mapa, y es posible que desee utilizar una solución alternativa que no implique la asignación previa de una gran parte de la memoria eso estará casi vacío.

Si tiene suficientes datos de antemano para consultar las intensidades mínimas y máximas que espera ver en el conjunto de datos, puede evitar tener que renormalizar en absoluto, básicamente si tiene algún mapa entre (X, Y, Z) con el número de " aciertos "de los datos trazados que ocurrieron en ese punto; eso es algo que puede incorporar al sistema que recopila los datos que lo ayudarán a optimizar la porción de mapeo.

Dado que el mapa de intensidad es, esencialmente, una imagen en escala de grises, una forma realmente fácil de crear un prototipo de este tipo de sistema para usar un mapa de bits para el mapa de intensidad y su API de dibujo de elección (por ejemplo, System.Drawingen C #) para trazar círculos parcialmente transparentes para producir un mapa de intensidad. No se ve mejor, pero es funcional.


3

Echo Chamber es una herramienta gratuita de registro y visualización diseñada específicamente para juegos.

Visualice archivos de datos basados ​​en SQL que contienen información generada por una aplicación c ++. La información puede ser declaraciones de registro, llamadas a funciones, capturas de pantalla o listas de parámetros.

Vea métricas de juegos en 2D y 3D, como las posiciones de muerte, qué armas se usan con mayor frecuencia y el uso de memoria en diferentes partes del nivel.

El sistema de registro tiene una interfaz C ++ (que es como un printf () que sale a una base de datos SQL, opcionalmente a través de una red), pero Echo Chamber debería poder visualizar cualquier base de datos SQL (o debería ser simple crear una base de datos en el formato que espera Echo Chamber). La navegación del sitio web es un poco obtusa; manual de Echo Chamber relevante y función de registro Raknet asociada .

Desafortunadamente no hay una captura de pantalla de los mapas de calor en acción, pero Echo Chamber definitivamente admite mapas de calor:

ingrese la descripción de la imagen aquí


2

Por ejemplo, obtenga coordenadas en un evento designado en el juego. Por ejemplo, cuando el jugador muere, obtienes coordenadas en tu escena donde el jugador murió.

Entonces, una vez que tenga los valores que necesita en su base de datos, enumere cada coordenada cuántas veces aparece en su lista / base de datos. Tendrás una lista algo así como:

  • 15: 1,5
  • 10: 6.15
  • 3: 27,58

o cualesquiera que sean tus valores. Tendrá una frecuencia emparejada con coordenadas como un par clave-> valor. Luego puede cuantificar la escala clave a un color. Por ejemplo, la clave de 0 es negra y la clave máxima que tiene en su lista de valores clave es roja, y todo lo que hay entre ellas es un gradiente entre negro, punto medio amarillo y punto máximo rojo. Cuantifique cada resultado a un color y ahí lo tiene.


1
Para un juego en 3D, o incluso uno sin posiciones integrales, esto puede expandirse aún más al representar gradientes de círculo o esfera de cierto radio.
dash-tom-bang

2

No estoy seguro de si estás buscando algún tipo de aplicación o un algoritmo para esta. De hecho, he tenido el placer de crear un software de visualización de mapas de calor personalizado y es muy divertido.

Una búsqueda rápida en Google reveló la API HeatMap, que podría ser una solución adecuada si no desea crear la suya.

Tal vez, si explica exactamente lo que está buscando (en cuanto a la aplicación o la programación), ¿podemos ayudarlo mejor?


0

Algo más que podría hacer es simplemente enviar los datos relevantes a un archivo CSV o algo así, luego importarlo con un software estadístico (como Microsoft Excel, LibreOffice Calc, R o GNUPlot) y hacer que escupe un gráfico. Si conoce un poco de scripting de shell (o Batch si usa Windows), probablemente podría automatizar todo.

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.