Seperti yang ditulis dalam
posting blog
baru-baru ini , saya berjuang untuk mendapatkan detail garis pantai yang tepat di game
Dragons Abound saya. Kekecewaan saya muncul selama implementasi
pulau penghalang . Untuk membuat pulau tersempit mungkin, saya membuatnya satu lokasi lebar - pada gambar di bawah ini, setiap lokasi adalah segitiga Delaunay:
Ini agak tidak menyenangkan - keduanya karena pulau itu sangat rusak dan karena ukuran bagian terlalu besar. Tampaknya dengan peningkatan besar dalam jumlah segitiga Delaunay (yaitu, dengan penurunan yang kuat dalam ukuran mereka), masalah ini akan diselesaikan - tetapi kepadatan segitiga yang saya butuhkan menyebabkan browser crash.
Saya memecahkan masalah ini dengan memisahkan kontur tanah dari representasi internal lokasi. Ini memungkinkan saya untuk menggambar pulau dengan ukuran atau bentuk apa pun, terlepas dari kisi lokasi yang mendasarinya:
Jadi masalahnya selesai! Ini memungkinkan saya untuk menggambar pulau penghalang, dan karena garis pantai tidak lagi diperlukan untuk mengikuti kisi dasar, jika perlu, garis pantai yang lebih rinci dapat dibuat dengan cara biasa, dan kemudian menambahkan detail.
Tapi ... bagaimana kita menambahkan detail ke garis pantai? Ini tidak semudah yang Anda kira. Karena saya ingin membuat garis pantai fraktal, saya mempertimbangkan menggunakan
fraktal untuk menambahkan detail ke garis pantai:
Setelah bereksperimen dengan pengaturannya, saya dapat menambahkan banyak detail dan hal-hal menarik ke garis pantai. Namun, sistem tidak dapat membuat sesuatu yang menyerupai peta seperti itu:
Perlin noise
dapat membuat medan semacam ini jika ada kisi-kisi dasar yang cukup terperinci, tetapi dapatkah ini dilakukan
tanpa menyimpan ketinggian ketinggian di kisi-kisi dasar dengan resolusi yang diinginkan (karena saya tahu ini akan merusak kode saya)? Sampai saya menemukan cara untuk melakukannya. Garis pantai pada dasarnya adalah jalur melalui semua titik di mana fungsi kebisingan Perlin memiliki nilai nol. Meskipun kita dapat belajar langsung dari nilai fungsi Perlin fungsi di lokasi tertentu (X, Y), kita tidak dapat menemukan (katakanlah) "semua lokasi di mana fungsi memiliki nilai nol". Artinya, sulit untuk melihat cara menggambar kontur ketinggian tanpa kisi dasar.
Lebih buruk lagi, saya bertanya kepada
Amit bagaimana melakukan ini, dan dia juga tidak tahu jawabannya. Adalah satu hal ketika saya tidak bisa mengatakan ini, tetapi ketika orang yang sangat cerdas sekalipun tidak dapat memberikan jawaban, saya mulai berpikir bahwa ini tidak dapat dilakukan. Menyedihkan. Saya bisa memberikan garis pantai bentuk apa pun yang saya butuhkan, tetapi saya tidak bisa mendapatkan bentuk yang saya butuhkan tanpa garis dasar yang sangat rinci.
Jadi, bagaimana cara mendapatkan grid resolusi tinggi tanpa melanggar kode?
Salah satu solusi yang muncul di benak saya mengingatkan saya pada apa yang
Azgaar lakukan dalam sel-sel Voronoi-nya yang berukuran variabel. Gagasan utamanya adalah untuk meningkatkan kepadatan (dan mengurangi ukuran) mesh dasar di sepanjang garis pantai dan mempertahankan kepadatan yang lebih rendah di lautan dan area lain yang tidak memerlukan detail. Dengan opsi ini, saya akan memiliki banyak sel jala hanya di area di mana Anda membutuhkan detail. Perubahan ini akan sangat sulit untuk diterapkan di
Dragons Abound , tetapi saya ingin merenungkannya. Di sisi lain, Azgaar sendiri
tidak terlalu senang dengan pendekatan ini , jadi ini juga perlu diperhitungkan.
Secara paralel, saya ingin menyelidiki penyebab browser crash saat memproses tumpukan segitiga. Alat pengembang di Chrome memberi saya informasi kinerja terperinci. Saya sama sekali tidak ahli dalam menggunakan alat-alat ini, tetapi banyak fungsi yang cukup sederhana untuk dipahami oleh siapa pun. Jika Anda ingin mengetahui jumlah total memori yang digunakan dalam program, tab Memori berisi informasi tentang kapasitas yang digunakan saat ini:
Dalam hal ini, saya membuka halaman web Azgaar, dan membutuhkan 20 MB memori sederhana. Anda dapat menggunakan alat ini untuk mencari tahu berapa banyak memori yang diduduki oleh
Dragons Abound dan untuk menentukan kapan tab macet.
Parameter dasar yang mengontrol resolusi mesh di bawahnya di
Dragons Abound dinamai "npts" (Jumlah Poin). Untuk setiap unit area peta (peta wilayah yang biasanya saya gunakan sebagai contoh memiliki luas 1 unit)
Dragons Abound membuat sejumlah lokasi grid dasar. Saya biasanya menggunakan 16K (16384) untuk npts, yang berarti setiap lokasi grid sesuai dengan sekitar 70 piksel persegi layar pada skala zoom standar.
Tentu saja, jumlah persis memori yang digunakan tergantung pada kartu, tetapi untuk kartu yang ditunjukkan di atas dengan 16K poin Anda membutuhkan sekitar 92 MB:
Ini kurang dari yang saya harapkan, dan, jujur, angka yang cukup sederhana.
Jika Anda menggandakan jumlah titik dalam kisi dasar, kapasitas memori akan meningkat menjadi 138 MB:
Ukuran memori yang ditempati belum dua kali lipat, karena bagian dari memori ini ditempati oleh sumber daya dan struktur data lainnya yang ukurannya tidak berubah. 16K poin tambahan "menimbang" sekitar 50 MB memori, yaitu, setiap titik sebagai akibatnya menempati sekitar 3 KB memori. Ini lebih dari yang saya harapkan, tetapi secara umum volumenya masih cukup sederhana. Pada komputer dengan memori 64 GB, 150 MB nyaris tidak terlihat.
Setelah melakukan beberapa ganda, saya menemukan bahwa tab dengan
Dragons Abound biasanya crash di sekitar 128K poin. Jika kita menangkapnya sebelum terbang dan memeriksa memori, kita akan melihat yang berikut:
Saya berasumsi bahwa tab macet karena memori yang ditempati, tetapi biasanya masalahnya bukan di memori. Mengapa tab macet? Satu-satunya petunjuk adalah bahwa tab tidak crash sebelum peta selesai, dan ini mungkin merupakan indikasi bahwa crash terjadi selama rendering.
Adalah logis untuk berasumsi bahwa SVG yang saya buat membebani browser renderer karena ukuran atau kerumitannya. Untuk memulai, saya bisa mengetahui berapa banyak elemen SVG yang saya buat. Di D3, saya bisa mendapatkan jumlah elemen SVG yang dibuat menggunakan
svg.selectAll('*').size()
.
Berjalan dari titik 16K dan memeriksa jumlah elemen SVG menunjukkan kepada saya hal berikut:
Poin 32K memiliki 65457 elemen, dan 128K poin memiliki 258823. Setiap titik yang ditambahkan ke grid dasar menambahkan dua elemen ke peta. Saya pikir saya menemukan sumber kemalangan.
Setiap titik di grid dasar menambahkan elemen SVG karena cara
Dragons Abound merender tanah (dan air). Tanah diberikan dengan memberikan setiap lokasi basis sebagai poligon terisi, diikuti dengan mengaburkan semuanya. Ini memungkinkan
Dragons Abound untuk memberikan tanah pola yang indah atau menggunakan ketinggian tanah untuk membuat tanah dengan bayangan 3D, seperti yang ditunjukkan di sini:
Anda dapat mematikan visualisasi daratan dan lautan untuk memeriksa berapa banyak elemen SVG yang dibuat. Pada 256 ribu poin:
Wow, jumlah elemen SVG telah menurun secara signifikan. Seperti yang saya harapkan, sekarang peta dibuat tanpa menabrak! Artinya, jika Anda menghindari menggunakan kisi untuk membuat tanah dan air, Anda dapat membuat kisi yang jauh lebih padat dari sebelumnya.
Sekarang saya memiliki jaringan Voronoi yang jauh lebih padat, saya ingin memeriksa apakah itu memungkinkan saya untuk menghasilkan elemen bantuan lahan yang saya butuhkan, seperti pulau-pulau pesisir. Jejaring Voronoi yang padat menciptakan masalah lain (terutama dengan sungai), jadi saya akan mematikan semuanya kecuali garis pantai untuk mempercepat pengujian dan fokus pada mereka. Ini adalah render asli beberapa garis pantai pada 256 ribu piksel dan dengan noise standar:
Ternyata peta tersebut ditampilkan dengan baik, dan telah menciptakan garis pantai yang jauh lebih indah.
Bahkan tanpa penyetelan yang hati-hati, hasilnya jauh lebih baik. Kebisingan menciptakan jenis garis pantai fraktal dan pulau-pulau pantai yang saya tunjukkan pada peta di atas.
Berikut adalah pulau-pulau dengan peningkatan 300%:
Dengan peningkatan ini, Anda dapat melihat artefak segitiga dari kotak dasar, tetapi meskipun demikian, pulau-pulau dapat membuat bentuk yang menarik. Anda dapat menggunakan anti-aliasing (seperti yang saya lakukan pada versi peta saat ini) untuk menghilangkan beberapa artefak segitiga yang paling terlihat. Pada perbesaran standar, ini memberikan garis pantai yang kurang kasar, tetapi juga menghilangkan beberapa detail kecil:
Anda mungkin harus mendengarkan untuk mendapatkan jalan tengah.
Sebagian besar generator sushi prosedural menggunakan noise Perlin untuk membuat peta ketinggian. Kita perlu menemukan parameter kebisingan yang sesuai, memilih benih, dan kemudian menggunakan nilai kebisingan di setiap lokasi (x, y) untuk mengatur massa tanah. Salah satu aspek nyaman dari membuat tanah adalah bahwa jika Anda membutuhkan lebih banyak detail di garis pantai, Anda dapat dengan mudah menyesuaikan parameter kebisingan.
Namun,
Dragons Abound tidak menciptakan tanah dengan cara ini. (Atau setidaknya itu menciptakan lebih dari itu.)
Naga Abound menggunakan banyak metode berbeda untuk membuat sushi. Meskipun mereka semua menggunakan kebisingan sampai tingkat tertentu, sangat sedikit yang membuat tanah langsung dari kebisingan. Misalnya, gim ini memiliki prosedur untuk membuat pulau, yang membuat topeng untuk pulau (biasanya elips), menggunakan suara untuk membuat elips lebih alami, dan kemudian menerapkan suara yang berbeda untuk mendekati mengisi topeng. Setiap peta tertentu biasanya dibuat dengan kombinasi beberapa prosedur berbeda. Oleh karena itu, menambahkan rincian dengan menyesuaikan parameter kebisingan untuk
Dragons Abound tidak terlalu cocok.
Demi tujuan saya, lebih baik mendekati masalah dari sudut yang sedikit berbeda. Jika saya memiliki peta ketinggian khusus yang mendefinisikan massa tanah, lalu bagaimana cara menambahkan detail ke tepi massa tanah ini? Ini mungkin menuntun kita pada gagasan bahwa kita perlu mengenali tepi-tepi tanah dan menutupi sisa peta, dll. Tetapi, di sisi lain, saya sama sekali tidak menentang menambahkan rincian tambahan ke seluruh peta. Jika tanahnya sedikit lebih tidak rata atau dasar lautan sedikit lebih kasar, maka ini normal.
Apa artinya menambahkan detail ke garis pantai? Garis pantai hanyalah garis kontur di mana peta ketinggian memiliki nilai nol. (Nilainya sewenang-wenang, tetapi prinsip seperti itu digunakan dalam setiap generator lahan prosedural.) Untuk membuat garis ini lebih detail, Anda perlu sedikit menggeser lahan di sebelah garis kontur ini sedikit ke atas dan ke bawah, sehingga garis pantai sederhana menjadi lebih kompleks, bagian dari tanah menjorok ke lautan dan menjadi pulau, dan sebagainya. Tapi ini seharusnya tidak terjadi secara kebetulan, saya ingin perubahannya tampak alami. Kami merangkum semua ini, dan tampaknya Anda perlu menambahkan sedikit noise ke seluruh peta. Dan sebenarnya inilah yang saya lakukan pada contoh asli yang ditunjukkan di atas.
Tentu saja, ini harus dilakukan dengan hati-hati agar tidak menghapus massa tanah yang tercipta dan menciptakan masalah lain. Pada dasarnya, saya perlu mengkonfigurasi tiga parameter.
Yang pertama adalah skala kebisingan. Skala hanyalah interval nilai untuk noise ini. Dalam kasus kami, saya ingin menurunkan beberapa area, dan menaikkan beberapa area, sehingga kisaran nilai harus dari negatif ke positif. Namun, saya tidak ingin menambah gunung baru atau membuat lautan jauh dari garis pantai yang ada, jadi saya akan membuat nilai maksimum (absolut) dari kebisingan menjadi sebagian kecil dari ketinggian tanah standar.
Parameter kedua adalah frekuensi utama noise. Frekuensi menentukan seberapa cepat kebisingan berubah di dalam lokasi. Kebisingan frekuensi rendah berubah sangat lambat, sehingga area positif dengan kebisingan frekuensi rendah dapat (misalnya) menutupi seluruh peta. Kebisingan frekuensi tinggi berubah dengan cepat, sehingga wilayah positif dengan kebisingan frekuensi tinggi dapat (misalnya) memiliki ukuran pulau kecil. Dalam kasus kami, frekuensi kebisingan utama menentukan elemen bantuan terbesar yang akan kita lihat dalam kebisingan. Yaitu, jika saya ingin noise menambahkan (katakanlah) pulau-pulau kecil (tetapi tidak lebih besar dari mereka) ke peta, maka saya perlu memilih frekuensi utama ukuran pulau kecil.
Anda mungkin berpikir ini mudah dilakukan (cukup ukur pulau kecil dan tetapkan ukuran ini ke frekuensi utama). Namun, frekuensi diukur dalam koordinat fungsi noise, bukan koordinat peta! Fungsi noise tipikal dapat memiliki interval dari 0 hingga 255 di setiap koordinat, dan sebuah peta dapat memiliki interval dari -1 ke 1 di setiap koordinat. Lebih buruk lagi, koordinat noise tersebut runtuh, dan banyak pengguna yang menggunakan noise bahkan tidak menyadarinya. Terjemahan dari satu unit ke unit lain dan penentuan frekuensi yang sesuai membingungkan, sehingga biasanya paling mudah untuk hanya bereksperimen dengan interval frekuensi dan memilih yang membuat elemen kartu dengan ukuran yang tepat.
Parameter ketiga adalah jumlah oktaf kebisingan. Oktaf adalah lapisan kebisingan tambahan. Setiap lapisan biasanya menggandakan frekuensi dan membagi dua skala kebisingan. Artinya, setiap layer baru menambahkan elemen relief dua kali lebih sedikit dari layer sebelumnya, tetapi juga dua kali lebih lemah. Artinya, Anda harus memilih jumlah oktaf yang memberikan elemen terkecil yang kita butuhkan, dan untuk ini Anda mungkin perlu menyesuaikan skala kebisingan, karena masih cukup kuat di oktaf tertinggi untuk muncul di peta. Karena saya sengaja melakukan ini untuk membuat garis pantai sangat rumit, saya akan menggunakan beberapa oktaf suara.
Mari kita mulai dengan pengaturan. Untuk memulai, saya akan membuat contoh peta tanpa noise tambahan:
Jelas, ini adalah garis pantai yang membosankan, dengan garis-garis halus dan hanya beberapa pulau besar. Berikut adalah garis pantai yang sama dengan sampel kebisingan asli:
Kebisingan secara signifikan mengubah bentuk peta, mengubah fragmen tanah yang luas menjadi lautan, dan sebaliknya. Banyak pulau juga muncul, termasuk jauh ke laut. Semua ini menunjukkan bahwa skala kebisingan terlalu besar. Elemen-elemen bantuan individu terbesar yang ditambahkan oleh kebisingan harus seukuran pulau-pulau kecil dari peta asli. Ini mungkin ukuran maksimum elemen yang baru, membuktikan bahwa frekuensi utama noise kira-kira dipilih dengan benar. Akhirnya, banyak detail kecil muncul, hingga batas ukuran tampilan, dan ini menunjukkan bahwa ada cukup oktaf. (Namun, jumlah oktaf mungkin lebih dari yang diperlukan. Ini tidak mempengaruhi penampilan kartu, tetapi tidak efisien.) Tampaknya pada dasarnya Anda perlu menyesuaikan skala kebisingan.
Menyesuaikan kebisingan adalah operasi yang agak rumit karena saya ingin kebisingan ini terutama mempengaruhi tanah dan air pada sekitar garis kontur dengan ketinggian = 0. Yaitu, saya membutuhkan skala yang relatif kecil, tetapi tidak jelas bagaimana memilih nomor yang tepat, karena di peta yang berbeda, distribusi ketinggian bervariasi. Solusinya adalah menemukan skala yang tepat dengan cepat. Anda dapat mengambil semua nilai absolut dari ketinggian di peta, mengurutkannya, dan menemukan titik cutoff yang memilih (katakanlah) 10% dari lokasi di sekitar nol. Semua lokasi ini termasuk dalam interval (misalnya) [-0,05 0,05], dan kemudian saya dapat menggunakan nilai 0,05 untuk menentukan skala kebisingan yang ditambahkan.
(Saya menulis "definisi" karena karena berbagai alasan Anda tidak bisa hanya menggunakan 0,05. Pertama, Anda perlu mengubah lahan menjadi air dan sebaliknya. Menambahkan (katakanlah) 0,002 ke -0,05 tidak akan membuat perubahan yang terlihat pada peta. Artinya, intervalnya harus lebih dari 0,05 jika saya ingin mengubah proporsi lokasi yang signifikan dengan ketinggian -0,05 dari air ke darat.Kedua, fungsi kebisingan tidak
terdistribusi secara merata , sehingga dengan skala 0,05 fungsi kebisingan tidak akan pernah benar-benar kembali 0,05! Dalam prakteknya, kesulitannya adalah skalanya harus jauh lebih besar daripada nilai-nilai terbesar yang ingin kita lihat cukup sering.)
Setelah bereksperimen, saya menemukan nilai yang menambah kompleksitas garis pantai, sementara tidak mengubahnya secara signifikan, dan juga menciptakan sejumlah kecil pulau:
Seperti biasa, parameter-parameter ini dalam permainan dapat mengambil interval nilai, jadi saya bisa mendapatkan berbagai peta: dari peta dengan pantai yang cukup halus hingga peta dengan bank yang rusak dan rumit. Membiarkan program memilih nilai, saya mendapat hasil berikut:
Garis pantai berada di sisi yang lebih halus, tetapi masih ada sebagian besar kompleksitas tambahan skala menengah dan pulau-pulau baru yang cukup.
Ketika menerapkan garis pantai fraktal, saya menyadari kemampuan untuk mengontrol tingkat fraktalisasi menggunakan fungsi kebisingan, sehingga beberapa daerah akan memiliki pantai yang halus, sementara yang lain memiliki yang kompleks. Saya pikir ini akan sangat meningkatkan minat peta, dan itu akan terlihat kurang "dihasilkan", jadi saya akan menambahkan fitur ini di sini. Idenya cukup sederhana - sebelum menambahkan noise garis pantai ke peta, saya gandakan dengan output fungsi noise kedua, yang berkisar dari nol hingga 1. Jika fungsi ini kecil, detail kecil akan ditambahkan ke garis pantai. Jika mendekati 1, detail tambahan akan ditambahkan secara penuh. Memilih skala fungsi noise kedua, yang perlahan bervariasi di seluruh peta, saya akan mendapatkan beberapa area dengan garis pantai yang kompleks, beberapa dengan yang sederhana, dan transisi logis di antara mereka:

Di sini saya membuat parameter pesisir besar, sehingga perbedaannya lebih terlihat. Kita melihat pantai-pantai liar dan terjal di timur laut, dan pantai-pantai yang lebih halus di barat.
Jadi, kami telah meningkatkan generasi garis pantai secara signifikan, tetapi saya masih belum dapat sepenuhnya menghasilkan peta dengan banyak segitiga Delaunay. Saya hanya menampilkan garis besar peta karena banyak elemen peta lainnya rusak. Itu perlu diperbaiki.
Sisa program tidak bekerja dengan baik dengan begitu banyak segitiga Delaunay (dengan pengaturan 256 ribu saat ini). Masalah utama adalah bahwa
Dragons Abound menarik tanah dan air dengan menggambar semua segitiga individu, dan begitu banyak elemen SVG menyebabkan peramban mogok. Jadi saya harus sepenuhnya menonaktifkan rendering sushi. Mungkin ada jalan keluar masalah ini, tetapi memiliki begitu banyak segitiga menciptakan masalah lain. Sebagai contoh, beberapa bagian dari program harus memproses seluruh peta. Masing-masing dari mereka menjadi enam belas kali lebih lambat di 256 ribu lokasi daripada di 16 ribu lokasi. Juga dalam kode ada bagian (misalnya, model curah hujan baru) yang pecah ketika bekerja dengan begitu banyak segitiga. Dan dari penciptaan kisi-kisi lokasi yang sedemikian rinci, kami tidak mendapatkan apa-apa - setelah menghasilkan garis pantai, tidak ada yang membaik dari kompleksitas yang ditambahkan. Oleh karena itu, walaupun saya dapat meninjau program dan memperbaiki area-area di mana sejumlah besar lokasi memperlambat atau memecah kode terlalu banyak, tampaknya lebih mudah untuk mengurangi resolusi kisi-kisi peta setelah membuat garis pantai.
Seperti yang dinyatakan di atas, Azgaar telah melakukan
pekerjaan untuk mengubah resolusi grid Voronoi yang mendasari peta. Dia menyadari kemungkinan mengubah resolusi grid dengan cepat dalam proses pembuatan, yaitu, dia bisa (misalnya) meningkatkan kepadatan lokasi di sepanjang pantai. Namun, perubahan lokal dalam kepadatan memiliki kelemahan - khususnya, ia menciptakan segitiga aneh di sepanjang perbatasan. Azgaar kemudian
menyarankan bahwa sistemnya terlalu kompleks dan tidak sepadan dengan usaha. Azgaar biasanya tahu apa yang dia bicarakan, jadi saya akan mengambil kata-katanya untuk itu dan tidak akan mencoba untuk mengemas kembali jala jadi.
Sebagai gantinya, saya membuat grid kedua dengan resolusi yang diinginkan (lebih rendah), dan kemudian menyalin peta elevasi ke grid baru ini. (Jangan lupa bahwa
Dragons Abound sekarang menyimpan garis pantai secara terpisah dari kisi, jadi setelah dibuat, mereka tidak lagi bergantung pada kecocokan kisi yang tepat. Untuk melakukan ini sedikit rumit. Karena kisi asli memiliki resolusi yang jauh lebih tinggi daripada yang baru, banyak lokasi dalam dokumen asli. kisi akan ditumpangkan pada satu lokasi di kisi baru. Setiap lokasi sumber ini memiliki ketinggian berbeda pada peta ketinggian, bagaimana saya bisa menyalinnya? Gunakan rata-rata? Atau ketinggian maksimum (minimum)?
Untuk memulai, saya cukup pilih satu lokasi acak untuk melihat apakah kisi baru berfungsi dengan seluruh program:
Semuanya ternyata sangat baik. Bug minor terjadi ketika lokasi baru tidak ditandai dengan benar sebagai daratan, pantai atau air, tetapi setelah menyelesaikan masalah ini, pembuatan peta bekerja dengan baik. Anda perlu membersihkan kekurangan kecil (misalnya, tag Palmanor yang keluar di atas air), tetapi secara keseluruhan terlihat bagus. Bahkan pulau-pulau kecil itu ternyata indah.
Pada akhirnya, saya memutuskan bahwa dengan penurunan resolusi grid Voronoi, setiap lokasi akan menjadi rata-rata lokasi dasar. Ini sepertinya keputusan yang bijaksana, dan jika perlu selalu bisa diubah. Gambar ini menunjukkan bagaimana, sebagai akibatnya, garis pantai dipisahkan dari jala jadi:
Untuk meringkas: di
Dragons Abound , grid segitiga Delone resolusi sangat tinggi digunakan saat membuat peta ketinggian. Setelah selesai,
Dragons Abound mendefinisikan garis pantai dengan melacak transisi dari nilai negatif ke positif di peta ketinggian. Kemudian gim ini menyalin kisi resolusi tinggi ke kisi resolusi lebih rendah, rata-rata lokasi yang jatuh ke satu lokasi kisi baru. Selanjutnya, grid resolusi tinggi dibuang, dan sisa generasi prosedural dan visualisasi berlanjut pada grid resolusi rendah. Pertanyaan yang menarik adalah apakah penggunaan mesh Delaunay memiliki nilai pada tahap ini; mungkin hanya layak disalin ke kisi segi enam atau yang serupa.