El activo requerido es una textura pequeña con una sola fila de cierto número de mosaicos, donde el más a la izquierda es el más oscuro y el más claro a la derecha.
Lo que sucede entonces es (por cuadro):
Tome el búfer del que desea crear una versión ASCII y reduzca su tamaño según el tamaño del mosaico (por lo tanto, si tiene mosaicos de 8x8, la imagen se reducirá 8 en ambas dimensiones).
Cree un nuevo destino de representación del búfer de tamaño completo original.
Use un sombreador de píxeles con lo siguiente:
Una entrada de muestra para el búfer (con muestreo establecido en el vecino más cercano) y una entrada de muestra para los mosaicos.
Uniformes para el tamaño de mosaico, cantidad de mosaicos y resolución de salida final
El sombreador de píxeles debería entonces:
Obtenga el valor de escala de grises del búfer reducido ( (col.r+col.g+col.b) / 3.0probablemente sea suficiente, aunque no es así como funcionan los ojos)
Use esta información para obtener desde qué mosaico desea renderizar ( floor(grayscale * TILE_COUNT))
Calcule las coordenadas X / Y del píxel de la salida y tome a esos módulos el tamaño de mosaico (tileX / tileY).
Devuelva como color el valor muestreado del búfer de mosaico en vec2( whichTile * TILE_WIDTH + tileX, tileY ) / vec2( TILE_WIDTH * TILE_COUNT, TILE_HEIGHT )
La página vinculada tiene varias imágenes de ejemplos, una cosa que consideraría agregar sería un poco de ruido al valor de escala de grises calculado, por lo que no es un gran bloque de MMMMMMMMMMMMMMMMs
Solución simple que podría funcionar bastante bien (+1). Ahora estoy pensando en implementar este efecto yo mismo.
Paul Manta
2
@Sata En referencia al comentario de Kevin de que "[esto] no es exactamente cómo funcionan los ojos", aquí hay una descripción de varias formas de convertir una imagen en color a escala de grises: johndcook.com/blog/2009/08/24/…
Paul Manta
1
Puede ampliar esto para incluir parámetros adicionales como la detección de bordes, para seleccionar caracteres en función de su forma, además de la densidad / brillo.
Respuestas:
No conozco ninguna solución plug and play para ello, pero aquí hay un algoritmo que funciona en el sombreador de píxeles con solo una textura como activos adicionales .
El activo requerido es una textura pequeña con una sola fila de cierto número de mosaicos, donde el más a la izquierda es el más oscuro y el más claro a la derecha.
Lo que sucede entonces es (por cuadro):
(col.r+col.g+col.b) / 3.0
probablemente sea suficiente, aunque no es así como funcionan los ojos)floor(grayscale * TILE_COUNT)
)vec2( whichTile * TILE_WIDTH + tileX, tileY ) / vec2( TILE_WIDTH * TILE_COUNT, TILE_HEIGHT )
La página vinculada tiene varias imágenes de ejemplos, una cosa que consideraría agregar sería un poco de ruido al valor de escala de grises calculado, por lo que no es un gran bloque de
MMMMMMMMMMMMMMMM
sActualizado: @Lokkij en la sala de chat de gamedev publicó un tutorial más completo para Unity: http://pentahelix.github.io/ASCII-Tutorial-Revisited/
fuente