Apa itu Ray Marching? Apakah Sphere Tracing hal yang sama?


31

Banyak demo ShaderToy membagikan algoritma Ray Marching untuk membuat adegan, tetapi mereka sering ditulis dengan gaya yang sangat kompak dan saya tidak dapat menemukan contoh langsung atau penjelasan.

Jadi apa itu Ray Marching? Beberapa komentar menunjukkan bahwa ini adalah variasi dari Sphere Tracing. Apa keunggulan komputasi dari pendekatan semacam itu?

Jawaban:


34

TL; DR

Mereka termasuk dalam keluarga pemecah yang sama, di mana pelacakan bola adalah salah satu metode ray marching, yang merupakan nama keluarga.

Raymarching sebuah definisi

Raymarching adalah teknik yang agak mirip raytracing tradisional di mana fungsi permukaan tidak mudah dipecahkan (atau tidak mungkin tanpa metode iteratif numerik). Dalam raytracing, Anda hanya melihat persimpangan ray, sedangkan pada ray march Anda berbaris maju (atau bolak-balik) sampai Anda menemukan persimpangan, memiliki cukup sampel atau apa pun yang Anda coba pecahkan. Cobalah untuk memikirkannya seperti metode newton-raphson untuk menemukan permukaan, atau menjumlahkan untuk mengintegrasikan berbagai fungsi.

Ini bisa bermanfaat jika Anda:

  • Perlu membuat volumetrik yang tidak seragam
  • Merender fungsi implisit, fraktal
  • Rendering permukaan parametrik jenis lain di mana persimpangan tidak diketahui sebelumnya, seperti pemetaan paralax
  • Dll

Raymarching tradisional

Gambar 1 : Marching sinar tradisional untuk penemuan permukaan

Pos terkait:

Pelacakan bola

Sphere tracing adalah salah satu kemungkinan algoritma marching Ray. Tidak semua raymarching menggunakan manfaat dari metode ini, karena mereka tidak dapat dikonversi ke skema semacam ini.

Sphere tracing digunakan untuk merender permukaan implisit . Permukaan implisit terbentuk pada beberapa tingkat fungsi kontinu. Intinya memecahkan persamaan

F(X,Y,Z) = 0

Karena bagaimana fungsi ini dapat diselesaikan pada setiap titik, seseorang dapat melanjutkan dan memperkirakan bola terbesar yang mungkin sesuai dengan langkah pawai saat ini (atau jika tidak cukup aman). Anda kemudian tahu bahwa jarak pawai berikutnya setidaknya sebesar ini. Dengan cara ini Anda dapat memiliki langkah-langkah berbaris ray adaptif mempercepat proses.

Sphere tracing memiliki ukuran langkah adaptif

Gambar 2 : Sphere tracing * dalam aksi perhatikan bagaimana ukuran langkah adaptif

Untuk info lebih lanjut, lihat:

* Mungkin dalam 2d itu harus disebut circle tracing :)


1
Saya akan merekomendasikan artikel ini dari Scratchapixel untuk penjelasan mendalam: scratchapixel.com/lessons/advanced-rendering/…
user18490

Tautan @ user18490 ke Scratchapixel telah pindah ke scratchapixel.com/lessons/advanced-rendering/… . Sisa situs ( scratchapixel.com/index.php ) juga terlihat bermanfaat.
WillC

15

Ray marching adalah tes persimpangan sinar berulang di mana Anda melangkah di sepanjang ray dan menguji persimpangan, biasanya digunakan untuk menemukan persimpangan dengan geometri padat , di mana tes dalam / luar cepat.

masukkan deskripsi gambar di sini
Gambar dari Rendering Geometry dengan Relief Textures

Ukuran langkah tetap cukup umum jika Anda benar-benar tidak tahu di mana persimpangan dapat terjadi, tetapi terkadang metode pencarian root seperti pencarian biner atau garis potong digunakan sebagai gantinya. Seringkali ukuran langkah tetap digunakan untuk menemukan persimpangan pertama, diikuti oleh pencarian biner. Saya pertama kali menemukan ray berbaris dalam teknik pemetaan perpindahan per-pixel. Pemetaan Relief untuk Permukaan Non-Tinggi-Lapangan adalah bacaan yang bagus!

masukkan deskripsi gambar di sini

Ini biasanya digunakan dengan space leaping, teknik akselerasi di mana beberapa preprocessing memberikan jarak aman yang dapat Anda bergerak sepanjang sinar tanpa memotong geometri, atau lebih baik lagi, tanpa memotong dan kemudian meninggalkan geometri sehingga Anda kehilangannya. Misalnya, pemetaan langkah kerucut, dan pemetaan langkah kerucut santai.

Sphere tracing dapat merujuk pada tes persimpangan ray-sphere implisit, tetapi itu juga nama teknik melompat ruang oleh John Hart, sebagaimana @joojaa menyebutkan, dan digunakan oleh William Donnelly ( Pemetaan Pemindahan Per-Pixel dengan Fungsi Jarak ), di mana Tekstur 3D mengkodekan bola jari-jari di mana tidak ada geometri.


Ha, begitulah, mengambil gambar dari orang lain lebih efisien daripada menggambar sendiri.
joojaa

@ joojaa Ya, lebih cepat jika Anda ingat di mana mereka berada, tetapi tanpa perasaan memuaskan melakukannya sendiri: P. Saya juga memiliki bug rendering sub-pixel bodoh ini di chrome sehingga teksnya berwarna-warni.
jozxyqk

1
Nah rendering subpixel itu adalah sesuatu yang belum ditanyakan. Namun.
joojaa

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.