Як зробити свою 3D-гру в мистецтві ASCII?


19

Я намагаюся створити писанку для 3D-гри в Unity3D. Я хочу на мить перетворити свою гру в мистецтво ASCII.

Моя перша ідея - створити шейдер для цього, але я не впевнений, чи це правильно.


з libAA або libCACA ( link1 - link2 соотв.)
v.oddou

Відповіді:


20

Я не знаю ні включай і працюй рішень для нього, але ось алгоритм , який працює в піксельний шейдер тільки з текстурою в якості додаткових коштів .

Необхідний актив - це невелика текстура з одним рядом деякої кількості плиток, де ліва найбільше найтемніша, а права найлегша.

Що відбувається тоді (за кадр):

  • Візьміть буфер, який потрібно зробити для ASCII версії, і зменшіть його на розмір плитки (тому якщо у вас є плитки 8х8, зображення буде зменшено на 8 в обох вимірах).
  • Створіть нову ціль візуалізації оригінального буфера повного розміру.
  • Використовуйте піксельний шейдер із наступним:
    • Вхід для відбору проб для буфера (із встановленням вибірки для найближчого сусіда) та введення для вибірки для плитки.
    • Уніформа для розміру плитки, кількості плиток та кінцевої роздільної здатності
  • Піксельний шейдер повинен:
    • Отримайте значення сірого масштабу з зменшеного буфера ( (col.r+col.g+col.b) / 3.0мабуть, достатньо, навіть якщо це не зовсім так, як працюють очі)
    • Використовуйте цю інформацію, щоб отримати плитку, яку ви хочете відобразити ( floor(grayscale * TILE_COUNT))
    • Обчисліть координати пікселя X / Y на виході і візьміть для цього модуля розмір плитки (tileX / tileY).
    • Повернути як колір значення, відібране з буфера плитки на vec2( whichTile * TILE_WIDTH + tileX, tileY ) / vec2( TILE_WIDTH * TILE_COUNT, TILE_HEIGHT )

На пов'язаній сторінці є кілька зображень прикладів. Одне, що я вважаю, що додавання буде незначним шумом до обчисленого значення сірого масштабу, тому це не один великий блок MMMMMMMMMMMMMMMMs

Оновлено: @Lokkij в чаті gamedev розмістив більш повний підручник для Unity: http://pentahelix.github.io/ASCII-Tutorial-Revisited/


Просте рішення, яке може працювати досить добре (+1). Зараз я думаю про те, щоб реалізувати цей ефект сам.
Пол Манта

2
@Sata Посилаючись на коментар Кевіна, що "[це не зовсім так, як працюють очі", ось опис декількох способів перетворення кольорового зображення в відтінки сірого: johndcook.com/blog/2009/08/24/…
Пол Manta

1
Ви можете розширити це, щоб включити додаткові параметри, такі як виявлення ребер, щоб вибрати символи на основі їх форми на додаток до щільності / яскравості.
DMGregory

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.