Bagaimana cara membuat game 3D saya dalam seni ASCII?

19

Saya mencoba membuat telur Paskah untuk game 3D di Unity3D. Saya ingin membuat permainan saya sebentar dalam seni ASCII.

Ide pertama saya adalah membuat shader untuk melakukan itu, tapi saya tidak yakin apakah itu cara yang benar.

Sata
sumber
dengan libAA atau libCACA ( link1 - link2 resp.)
v.oddou

Jawaban:

20

Saya tidak tahu ada solusi plug and play untuk itu, tapi di sini ada algoritma yang bekerja di pixel shader hanya dengan tekstur sebagai aset tambahan .

Aset yang diperlukan adalah tekstur kecil dengan satu baris dari beberapa ubin, di mana yang paling kiri adalah yang paling gelap dan paling kanan paling terang.

Apa yang terjadi kemudian adalah (per frame):

  • Ambil buffer yang ingin Anda buat versi ASCII dan turunkan dengan ukuran ubin (jadi jika Anda memiliki 8x8 ubin gambar akan diperkecil oleh 8 di kedua dimensi).
  • Buat target render baru dari buffer berukuran penuh asli.
  • Gunakan pixel shader dengan yang berikut ini:
    • Input sampler untuk buffer (dengan set sampling ditetapkan ke tetangga terdekat), dan input sampler untuk ubin.
    • Seragam untuk ukuran ubin, jumlah ubin dan resolusi keluaran akhir
  • Maka pixel shader harus:
    • Dapatkan nilai skala abu-abu dari buffer downscaled ( (col.r+col.g+col.b) / 3.0mungkin cukup, meskipun itu tidak cukup bagaimana mata bekerja)
    • Gunakan informasi ini untuk mendapatkan ubin yang ingin Anda render dari ( floor(grayscale * TILE_COUNT))
    • Hitung koordinat piksel X / Y dari output dan ambil modul itu dengan ukuran ubin (tileX / tileY).
    • Kembali sebagai warna, nilai sampel dari buffer ubin di vec2( whichTile * TILE_WIDTH + tileX, tileY ) / vec2( TILE_WIDTH * TILE_COUNT, TILE_HEIGHT )

Halaman yang ditautkan memiliki beberapa gambar contoh, satu hal yang saya pertimbangkan untuk menambahkan akan sedikit kebisingan untuk nilai skala abu-abu yang dihitung sehingga bukan satu blok besar MMMMMMMMMMMMMMMMs

Diperbarui: @Lokkij di chatroom gamedev memposting tutorial yang lebih lengkap untuk Persatuan: http://pentahelix.github.io/ASCII-Tutorial-Revisited/

Elva
sumber
Solusi sederhana yang bisa bekerja dengan baik (+1). Sekarang saya berpikir tentang menerapkan efek ini sendiri.
Paul Manta
2
@Sata Mengacu pada komentar Kevin bahwa "[ini] tidak cukup bagaimana mata bekerja", berikut ini adalah deskripsi beberapa cara untuk mengubah gambar berwarna menjadi skala abu-abu: johndcook.com/blog/2009/08/24/…
Paul Manta
1
Anda dapat memperluas ini untuk memasukkan parameter tambahan seperti deteksi tepi, untuk memilih karakter berdasarkan bentuknya selain kepadatan / kecerahan.
DMGregory
Selain itu, ada artikel tentang melakukan sesuatu yang serupa di XNA .
XNargaHuntress