Fitur gunung Terracing

10

Saya ingin meniru efek medan prosedural yang saya temukan di situs portofolio / blog beberapa hari yang lalu.

Medan bertingkat

Mengutip situs, terasering dihasilkan melalui, "mengalikan [ketinggian akhir] dengan beberapa nilai redaman dalam rentang ketinggian tertentu, untuk membuat fitur ngarai yang indah."

Saya bertanya-tanya, apakah ada yang bisa memberikan contoh atau prosedur yang lebih teknis untuk melakukan ini? Selama seminggu terakhir, saya telah meneliti dan belajar banyak tentang medan prosedur / metode tekstur dan praktik tetapi saya masih belum menemukan apa pun yang menjelaskan secara rinci apa 'penjepitan' itu, dan saya mulai frustrasi.

Juddily
sumber
Hah, itu sangat rapi. Saya juga tidak tahu apa maksudnya. Sudahkah Anda mencoba mengirim surel kepada Bung (itu tersedia di bawah "kontak")?
Draco18s tidak lagi mempercayai SE
FYI: Dalam kutipan & sumber Anda, istilahnya adalah 'redaman', tetapi kemudian dalam pertanyaan Anda, Anda menggunakan 'penjepitan'.
Pikalek

Jawaban:

11

Saya tidak tahu apa proyek mereka tetapi Anda dapat menerapkan fungsi membentuk kembali ke ketinggian. Berikut ini contoh yang mengambil hdari 0,0 hingga 1,0 dan mengembalikan tinggi baru dari 0,0 ke 1,0:

function R(h) {
    var W = 0.4; // width of terracing bands
    var k = Math.floor(h / W);
    var f = (h - k*W) / W;
    var s = Math.min(2 * f, 1.0);
    return (k+s) * W;
}

Ini adalah fungsi yang terlihat seperti ini ketika diplot - sumbu x adalah ketinggian asli dan sumbu y adalah ketinggian baru:

Fungsi pembentukan kembali tinggi

Saya menerapkannya pada kode saya sendiri dan mendapatkan ini:

Output dari fungsi terasering

Anda dapat memasukkan fungsi pembentukan kembali, atau menyatukannya, untuk mendapatkan efek yang rapi. Anda mendapatkan teras ketika ada bagian datar dari output.

amitp
sumber
Aku bersumpah ada jalan yang mulus dalam pertanyaan si penanya yang naik ke teras, tapi melihatnya lagi, aku cukup yakin itu ilusi. Tapi mata saya masih bersikeras bahwa tidak, ada perubahan ketinggian di sana (tengah gambar ke sudut atas / tepi kiri atas). Jika tidak ada kenaikan, maka jawaban ini benar.
Draco18s tidak lagi mempercayai SE
1

Redaman adalah istilah fisika untuk pengaruh dalam atau pada sistem osilasi yang memiliki efek mengurangi, membatasi, atau mencegah osilasi.

Saya menduga artikel sumber Anda mungkin memiliki kesalahan ketik & penjepit berarti , yang umumnya mengacu pada membatasi nilai ke rentang tertentu.

Sedangkan untuk mencapai efek visual, Anda mungkin bisa mendapatkan sesuatu yang serupa dengan menjepit band-band kebisingan saat medan dibangun, tetapi solusi yang diberikan oleh @amitp lebih cocok dengan deskripsi asli & mungkin lebih mudah diimplementasikan & disetel.

Pilihan ketiga mungkin menggunakan teknik erosi. Ini satu untuk membuat kombinasi tebing & pantai dengan menjatuhkan bagian tanah yang miring. Berikut ini yang dapat mengikis puncak menjadi dataran tinggi .

Pikalek
sumber
0

Setelah istirahat yang sangat lama, saya sekarang mengerti bagaimana efeknya dicapai, dan itu sangat sederhana. Ada 4 bagian untuk efek ini:

  • Peta ketinggian awal medan
  • Mendefinisikan teras 'range', dengan ketinggian terendah dari teras adalah h1 dan ketinggian tertinggi teras adalah h2
  • Nilai redaman yang meratakan tanah dalam kisaran ketinggian teras
  • Peta ketinggian kedua yang lebih panjang untuk memodifikasi nilai h1 dan h2, yang merupakan cara ramp yang terus menerus di antara teras (peta ketinggian ketiga dapat digunakan untuk menambah atau mengurangi h1 dan h2 yang tidak tergantung satu sama lain, menciptakan teras yang lebih besar atau lebih kecil)

Berikut adalah prosedur untuk membuat efek:

h1 = 1
h2 = 2
damp = .01

h = gen_noise(position)
hm = heightmod_noise(position)
if h1+hm <= initial_terrain_height =< h2+hm
  th = h * damp
elseif h2+hm < h
  th = h - (h2-h1) * damp
else
  th = h

(th, tentu saja, adalah ketinggian medan setelah efek terasering diterapkan)

Juddily
sumber