Jawaban lain di sini menyarankan menggunakan tekstur. Inilah teknik yang tidak menggunakan tekstur.
Anda ingin batas antara segi enam menjadi menarik. Lebih mudah untuk membuat batas-batas yang menarik ketika Anda memindahkannya ke tengah apa yang Anda gambar. Alih-alih menggambar ubin secara langsung, Anda menggambar "dual" ubin. Teknik ini disebut "ubin sudut" (di sini dan di sini dan di sini ). Ganda dari segi enam adalah segitiga, jadi kita akan menggambar segitiga ini bukannya segi enam:
Batas antara segi enam sekarang di tengah segitiga yang diberikan, sehingga akan memungkinkan kita melakukan lebih banyak hal menarik dengan mereka. Bonus: Anda hanya perlu menggambar dua segitiga per segi enam, bukan enam (atau dua puluh empat seperti yang Anda lakukan sekarang).
Di dalam masing-masing segitiga itu kita ingin shader fragmen untuk menggambar segi enam. Kita bisa melakukannya dengan koordinat barycentric . Letakkan (1,0,0), (0,1,0), dan (0,0,1) di setiap sudut segitiga. Di dalam segitiga, koordinat tersebut akan diinterpolasi. Shader fragmen akan menerima (a, b, c) dan dapat melihat untuk melihat nilai mana yang terbesar - yang akan memberi tahu kita yang mana dari tiga segi enam yang harus ditarik pada titik ini.
float max_n = max(barycentric.r, max(barycentric.g, barycentric.b));
if (max_n == barycentric.r) { color = v_color0; }
else if (max_n == barycentric.g) { color = v_color1; }
else if (max_n == barycentric.b) { color = v_color2; }
Itu untuk garis lurus.
Jika Anda ingin tepi yang bising, Anda dapat menambahkan noise ke koordinat barycentric:
Dengan bermain dengan panjang gelombang amplitudo / frekuensi noise, Anda bisa mendapatkan beberapa efek keren:
Anda harus berhati-hati dengan kebisingan, memastikan itu konsisten melintasi batas segitiga. Salah satu cara untuk melakukannya adalah dengan memasukkan hex id dan menggunakannya sebagai nilai seed untuk masing-masing dari tiga nilai noise yang ditambahkan ke koordinat barycentric.
Saya membuat demo interaktif di sini . (Untuk demo saya tidak menerapkan hex id atau beberapa hal lain yang mungkin Anda perlukan jika Anda membuat ini berfungsi dalam proyek nyata - itu hanya demo cepat & kotor)