Apa yang dimaksud dengan ray tracing, dan bagaimana Nvidia's GeForce RTX menangani teknologi ini?



Apa yang dimaksud dengan ray tracing? Pertanyaan itu menjadi jauh lebih relevan bagi para gamer PC, seperti Nvidia GeForce RTX 2080, GeForce RTX 2080 Ti, dan GeForce RTX 2070 yang menambahkan perangkat keras khusus untuk mempercepat pelacakan sinar. Semua kartu grafis itu menggunakan arsitektur Turing baru Nvidia, yang menjanjikan untuk menjadi lompatan paling revolusioner dalam GPU yang telah kita lihat dalam waktu yang lama — mungkin pernah. Apakah ini menjadi kartu grafis terbaik baru saat tersedia, atau harganya terlalu tinggi?

Kami akan segera tahu, karena GeForce RTX 2080 dan 2080 Ti mulai dijual pada 20 September. Nvidia telah memberikan informasi mendalam tentang semua teknologi yang masuk ke kartu sebelum peluncuran. Berbekal pengetahuan itu, inilah ikhtisar pelacakan sinar, rasterisasi, grafis hibrida, dan sekarang kartu Nvidia GeForce RTX diatur untuk mengubah apa yang bisa kita harapkan dari GPU kita.

Primer singkat pada grafik komputer dan rasterisasi
Menciptakan simulasi maya dari dunia di sekitar Anda yang terlihat dan berperilaku dengan baik adalah tugas yang sangat rumit — sangat kompleks sehingga kami tidak pernah benar-benar berusaha melakukannya. Lupakan hal-hal seperti gravitasi dan fisika sesaat dan pikirkan saja bagaimana kita melihat dunia. Sejumlah foton (berkas cahaya) yang efektif tak terbatas mengelilingi, memantulkan permukaan dan melewati objek, semua berdasarkan pada sifat molekuler masing-masing objek. Mencoba mensimulasikan 'infinity' dengan sumber daya yang terbatas seperti kekuatan komputasi komputer adalah resep untuk bencana. Kami membutuhkan pendekatan yang cerdas, dan begitulah cara kerja grafis modern saat ini.

Kami menyebut proses rasterisasi ini, dan bukannya melihat objek, permukaan, dan foton yang tak terbatas, ini dimulai dengan poligon. Upaya awal mungkin hanya menggunakan ratusan poligon pada satu waktu, tetapi jumlah itu terus meningkat seiring kartu grafis dan prosesor kami menjadi lebih cepat. Sekarang, game memiliki jutaan poligon, tetapi bagaimana Anda mengubah semua segitiga ini menjadi sebuah gambar? Rasterisasi.

Ini melibatkan banyak matematika, tetapi versi singkat adalah bahwa viewport (layar) didefinisikan dan kemudian rendisi 2D dunia 3D akan dibuat. Mengubah poligon menjadi gambar 2D pada layar melibatkan penentuan bagian mana dari tampilan yang diliputi objek. Dari dekat, satu segitiga dapat menutupi seluruh layar, sementara jika lebih jauh dan dilihat pada sudut mungkin hanya mencakup beberapa piksel. Setelah piksel ditentukan, hal-hal seperti tekstur dan pencahayaan harus diterapkan juga.

Melakukan hal ini untuk setiap poligon untuk setiap bingkai akhirnya menjadi sia-sia, karena banyak poligon mungkin tidak terlihat. Berbagai teknik seperti Z-buffer (buffer sekunder yang melacak kedalaman setiap piksel) dan Z-culling (membuang objek yang diblokir dari tampilan) membantu mempercepat proses. Pada akhirnya, mesin permainan akan mengambil jutaan poligon yang berpotensi terlihat, mengurutkannya, dan kemudian mencoba memprosesnya seefisien mungkin.

Itu bukan tugas kecil, dan selama beberapa dekade terakhir kita telah pergi dari poligon primitif dengan sumber cahaya 'palsu' (misalnya, Quake asli), ke lingkungan yang lebih kompleks dengan peta bayangan, bayangan lembut, oklusi ambient, tessellation, layar pantulan ruang, dan teknik lain yang berusaha menciptakan pendekatan yang lebih baik tentang cara hal-hal yang harus dilihat. Ini dapat membutuhkan jutaan atau bahkan miliaran perhitungan untuk setiap frame, tetapi dengan GPU modern yang dapat memproses teraflops kerja (triliunan kalkulasi per detik), ini adalah masalah yang bisa diatasi.

Apa yang dimaksud dengan ray tracing?
Ray tracing adalah pendekatan yang berbeda, yang secara teoritis telah ada selama hampir 50 tahun sekarang, meskipun itu lebih seperti 40 tahun aplikasi praktis. Turner Whitted menulis sebuah makalah pada tahun 1979 berjudul "Sebuah Model Penerangan yang Ditingkatkan untuk Tampilan Berbayang" (versi PDF Online), yang menguraikan bagaimana menghitung secara rekursif ray tracing untuk berakhir dengan gambar yang mengesankan yang mencakup bayangan, pantulan, dan banyak lagi. (Bukan kebetulan, Turner Whitted sekarang bekerja untuk divisi riset Nvidia.) Masalahnya adalah bahwa melakukan hal ini memerlukan perhitungan yang lebih kompleks daripada rasterisasi.

Ray tracing melibatkan penelusuran jalur sinar (seberkas cahaya) mundur ke dunia 3D. Implementasi paling sederhana akan menelusuri satu ray per piksel. Cari tahu poligon apa yang terkena sinar terlebih dahulu, lalu hitung sumber cahaya yang bisa mencapai titik itu pada poligon (lebih banyak sinar), ditambah hitung sinar tambahan berdasarkan sifat poligon (apakah itu sangat reflektif atau sebagian reflektif, warna apa material, apakah itu permukaan datar atau melengkung, dll.).

Untuk menentukan jumlah cahaya yang jatuh ke satu piksel, rumus ray tracing perlu mengetahui seberapa jauh cahaya itu, seberapa terangnya, dan sudut permukaan pemantul relatif terhadap sudut sumber cahaya, sebelum menghitung seberapa panas sinar pantul seharusnya. Proses ini kemudian diulang untuk sumber cahaya lainnya, termasuk iluminasi tidak langsung dari cahaya memantul dari objek lain di TKP. Perhitungan harus diterapkan pada materi, ditentukan oleh tingkat reflektivitas difus atau spekulatif — atau keduanya. Permukaan transparan atau semi-transparan, seperti kaca atau air, sinar bias, menambahkan sakit kepala rendering, dan semuanya tentu memiliki batas pantulan buatan, karena tanpa satu, sinar dapat dilacak hingga tak terbatas.

Algoritma ray tracing yang paling umum digunakan, menurut Nvidia, adalah BVH Traversal: Bounding Volume Hierarchy Traversal. Itu nama besar untuk proses yang rumit, tetapi idenya adalah untuk mengoptimalkan perhitungan persimpangan sinar / segitiga. Ambil gambar dengan ratusan objek, masing-masing dengan potensi jutaan poligon, dan kemudian cobalah untuk mencari tahu poligon mana yang berpotongan. Ini adalah masalah pencarian dan akan membutuhkan waktu yang sangat lama untuk kekuatan brute. BVH mempercepat hal ini dengan membuat pohon objek, di mana setiap objek diapit oleh kotak.

Nvidia mempresentasikan contoh sinar yang memotong model kelinci. Di tingkat atas, BVH (kotak) berisi seluruh kelinci, dan perhitungan menentukan bahwa sinar memotong kotak ini - jika tidak, tidak ada lagi pekerjaan yang diperlukan pada kotak / objek / BVH tersebut. Selanjutnya, algoritma BVH mendapatkan koleksi kotak yang lebih kecil untuk objek berpotongan-dalam hal ini, menentukan sinar yang bersangkutan telah memukul objek bunny di kepala. Traversal BVH tambahan terjadi sampai akhirnya algoritma mendapatkan daftar pendek poligon aktual, yang kemudian dapat diperiksa untuk menentukan bagaimana sinar berinteraksi dengan kelinci.

Semua ini dapat dilakukan dengan menggunakan perangkat lunak yang berjalan di CPU atau GPU, tetapi dapat mengambil ribuan slot instruksi per ray. Inti RT disajikan sebagai kotak hitam yang mengambil struktur BVH dan array, dan siklus melalui semua pekerjaan kotor, meludahkan hasil yang diinginkan. Penting untuk dicatat bahwa ini adalah operasi non-deterministik, yang berarti tidak mungkin untuk mengatakan dengan tepat berapa banyak sinar RT dapat menghitung per detik-yang bergantung pada struktur BVH. The Giga Rays per detik angka dalam arti lebih merupakan pendekatan, tetapi dalam prakteknya inti RT dapat menjalankan algoritma BVH sekitar sepuluh kali lebih cepat dari core CUDA.

Menggunakan satu sinar per piksel dapat menghasilkan puluhan atau bahkan ratusan perhitungan sinar, dan hasil yang lebih baik dicapai dengan memulai dengan lebih banyak sinar, dengan agregat di mana setiap ray berakhir digunakan untuk menentukan warna akhir untuk pixel. Berapa banyak sinar per pixel yang 'cukup'? Jawaban terbaik adalah bervariasi — jika permukaan pertama benar-benar tidak reflektif, beberapa sinar mungkin sudah cukup. Jika sinar memantul di antara permukaan yang sangat reflektif (misalnya, aula efek cermin), ratusan atau bahkan ribuan sinar mungkin diperlukan.

Perusahaan seperti Pixar — dan benar-benar, hampir setiap film besar akhir-akhir ini — menggunakan pelacakan sinar (atau pelacakan jalur, yang serupa kecuali cenderung menggunakan lebih banyak sinar per piksel) untuk menghasilkan gambar komputer yang sangat detail. Dalam kasus Pixar, film 90 menit pada 60fps akan membutuhkan 324.000 gambar, dengan setiap gambar berpotensi mengambil jam waktu komputasi. Bagaimana Nvidia berharap dapat melakukannya secara real-time pada satu GPU? Jawabannya adalah bahwa Nvidia tidak berencana melakukan itu. Setidaknya bukan pada resolusi dan kualitas yang mungkin Anda lihat dalam film Hollywood.

Masukkan perenderan hibrid
Perangkat keras grafis komputer telah difokuskan untuk melakukan rasterisasi lebih cepat selama lebih dari 20 tahun, dan desainer game serta seniman sangat baik dalam menghasilkan hasil yang mengesankan. Tetapi hal-hal tertentu masih menghadirkan masalah, seperti pencahayaan yang tepat, bayangan, dan refleksi.

Refleksi ruang layar menggunakan hasil dari apa yang terlihat di layar untuk memalsukan refleksi — tetapi bagaimana jika Anda melihat ke cermin? Anda bisa melakukan proyeksi kedua dari cermin ke dunia game, tetapi ada batasan untuk berapa banyak proyeksi yang dapat Anda lakukan dalam satu frame (karena setiap proyeksi memerlukan banyak pekerjaan rasterisasi dari sudut pandang baru). Peta bayangan biasanya digunakan dalam permainan, tetapi mereka membutuhkan banyak memori untuk mendapatkan hasil berkualitas tinggi, ditambah waktu yang dihabiskan oleh seniman yang mencoba menempatkan lampu di tempat hanya untuk menciptakan efek yang diinginkan, dan mereka masih belum sepenuhnya akurat.

Masalah pencahayaan lain adalah oklusi ambient, bayangan yang terbentuk di area di mana dinding berpotongan. SSAO (oklusi ambient ruang layar) adalah pendekatan yang membantu, tetapi sekali lagi itu cukup tidak akurat. Kelompok SEED EA menciptakan demo Pica Pica menggunakan DXR (DirectX Ray Tracing), dan pada satu titik itu menunjukkan perbedaan antara SSAO dan RTAO (ray dilacak ambient oklusi). Bukan berarti SSAO terlihat buruk, tetapi RTAO terlihat lebih baik.

Render hibrida menggunakan teknologi rasterisasi tradisional untuk membuat semua poligon dalam bingkai, dan kemudian menggabungkan hasilnya dengan bayangan, refleksi, dan / atau refraksi sinar-traced. Pelacakan sinar akhirnya menjadi kurang kompleks, memungkinkan framerate yang lebih tinggi, meskipun masih ada tindakan penyeimbangan antara kualitas dan kinerja. Pengecoran lebih banyak sinar untuk suatu adegan dapat meningkatkan hasil keseluruhan dengan biaya framerate, dan sebaliknya.


Nvidia memiliki berbagai pengembang game yang menunjukkan upaya pelacakan sinar mereka di Gamescom, tetapi semuanya sejauh ini masih dalam proses. Lebih penting lagi, kami tidak memiliki kesempatan untuk melakukan pengujian kinerja atau menyesuaikan pengaturan dengan cara apa pun. Dan semua demonstrasi berjalan di kartu RTX 2080 Ti, yang bisa melakukan> 10 Giga Rays per second (GR / s) —tapi apa yang terjadi jika Anda 'hanya' memiliki RTX 2080 dengan 8 GR / s, atau RTX 2070 dan 6 GR / s? Baik permainan yang menggunakan efek ray tracing akan berjalan 20 persen dan 40 persen lebih lambat pada kartu-kartu itu, atau game-game itu akan menawarkan pengaturan yang dapat disesuaikan untuk mencapai keseimbangan antara kualitas dan kinerja — sama seperti pengaturan grafis lainnya.

Mengambil 2080 Ti dan 10 GR / s sebagai baseline, jika kita membuat game di 1080p, itu sekitar 2 juta piksel, dan 60fps berarti 120 juta piksel. Melakukan matematika, permainan bisa melakukan 80 sinar per piksel pada 1080p60, jika GPU tidak melakukan apa-apa lagi — dan pada 4k60 itu akan dibatasi hingga 20 sinar per piksel. Tetapi permainan tidak melakukan pelacakan sinar murni, karena mereka masih menggunakan rasterisasi untuk banyak lingkungan. Ini membawa kita pada dilema yang menarik: berapa banyak sinar per frame yang cukup?

Nvidia's Optix denoising algorithm di tempat kerja

Nvidia's Optix denoising algorithm di tempat kerja

Denoising dan AI untuk menyelamatkan
Di sinilah arsitektur Turing Nvidia benar-benar pintar. Seolah-olah inti RT dan inti CUDA yang disempurnakan tidak cukup, Turing memiliki inti Tensor yang dapat secara dramatis mempercepat perhitungan pembelajaran mesin. Dalam beban kerja FP16, Tensor core T-16RT XX Ti bekerja pada 114 TFLOPS, dibandingkan dengan hanya 14,2 TFLOPS FP32 pada core CUDA. Itu pada dasarnya seperti sepuluh kartu GTX 1080 Ti menunggu angka krisis.

Tapi mengapa inti Tensor bahkan penting untuk pelacakan sinar? Jawabannya adalah bahwa AI dan pembelajaran mesin menjadi semakin kuat, dan beberapa algoritme telah dikembangkan dan dilatih di jaringan pembelajaran dalam untuk meningkatkan grafis. Nvidia's DLSS (Deep Learning Super Sampling) memungkinkan game untuk merender pada resolusi yang lebih rendah tanpa AA, dan kemudian core Tensor dapat menjalankan jaringan yang terlatih untuk mengubah setiap frame menjadi gambar anti-aliased resolusi yang lebih tinggi. Denoising dapat menjadi alat yang sangat ampuh untuk pekerjaan pelacakan sinar.

Pixar telah berada di garis terdepan dalam menggunakan grafik yang dihasilkan komputer untuk membuat film, dan upaya awalnya sangat bergantung pada model rendering hibrida — model yang lebih kompleks mungkin daripada apa yang direncanakan permainan RTX / DXR untuk dijalankan, tetapi mereka tidak sepenuhnya dirunut atau jalurnya dilacak. Alasannya: itu hanya butuh waktu terlalu lama. Di sinilah denoising ikut bermain.

Banyak aplikasi pelacakan jejak dapat memberikan tingkat detail yang kasar dengan sangat cepat — tampilan cepat dan kotor dari output yang diberikan — dan kemudian setelah viewport berhenti bergerak, lintasan tambahan dapat meningkatkan pratinjau untuk mengirimkan sesuatu yang lebih dekat ke hasil akhir yang dimaksudkan. Render kasar awal adalah 'berisik', dan Pixar dan perusahaan lain telah meneliti cara-cara untuk membatalkan adegan tersebut.

Pixar melakukan penelitian dalam menggunakan pembelajaran jaringan saraf convolutional (CNN), melatihnya dengan jutaan frame dari Finding Dory. Setelah dilatih, Pixar dapat menggunakan jaringan yang sama untuk meniru adegan lain. Denoising memungkinkan Pixar dilaporkan mencapai urutan kecepatan besar dalam waktu rendering. Ini memungkinkan Pixar melakukan render yang sepenuhnya dilacak untuk film-film terbarunya, tanpa membutuhkan waktu tanam yang cukup lama, dan baik Cars 3 maupun Coco menggunakan denoising ekstensif.

Jika algoritme cukup bagus untuk film-film terbaru Pixar, bagaimana menggunakannya dalam game? Dan yang lebih penting, bagaimana dengan menggunakan denoising algoritma hanya pada pencahayaan, bayangan, dan refleksi dalam model rendering hibrida? Jika Anda melihat kualitas bayangan yang dihasilkan menggunakan teknik pemetaan bayangan saat ini, tekstur resolusi yang lebih rendah dapat terlihat sangat hampa, tetapi seringkali diperlukan untuk mencapai kinerja yang dapat diterima pada GPU yang lebih lambat — dan sebagian besar gamer tidak masalah dengan kompromi.

Ambil konsep yang sama dan terapkan pada pelacakan sinar RTX. Semua demonstrasi yang kita lihat sejauh ini memiliki kita

ed beberapa bentuk denoising, tetapi karena dengan semua algoritma pembelajaran mendalam, pelatihan tambahan dari model dapat meningkatkan hasil. Kita tidak tahu apakah Battlefield V, Metro Exodus, dan Shadow of the Tomb Raider menghasilkan jumlah sinar maksimum yang mungkin saat ini, tetapi penyetelan lebih lanjut tentu mungkin. Bayangkan alih-alih menggunakan GeForce RTX 2080 Ti 10 GR / s, gunakan hanya 1-2 GR / s dan biarkan denoising membuat perbedaan. Akan ada kerugian dalam kualitas, tetapi harus membuatnya layak untuk menerapkan efek ray ray real-time bahkan pada perangkat keras tingkat yang lebih rendah. Jika Anda melihat gambar di atas goblet, hasil yang diperkirakan di sebelah kanan masih terlihat cukup kuning, tetapi jika itu hanya memengaruhi kualitas bayangan, pantulan, dan pembiasan, seberapa detail dan akurasi yang benar-benar kita butuhkan? Dan karena inti RT di Turing tampaknya dapat berjalan sejajar dengan core CUDA, tidak masuk akal untuk berpikir kita bisa mendapatkan peningkatan yang jelas dalam kesetiaan visual tanpa membunuh framerates. Menyambut masa depan graphicsBig nama dalam rendering telah melompat di papan ray yang mengikuti jejak, termasuk Epic dan Unreal Engine, Unity 3D, dan Frostbite milik EA. Microsoft telah menciptakan API Pelacakan DirectX Ray yang benar-benar baru. Ray pelacakan dari beberapa bentuk selalu menjadi tujuan yang diinginkan grafis komputer real-time. The RTX 20-series GPU adalah implementasi pertama dari percepatan pelacakan sinar dalam perangkat keras konsumen, dan GPU Nvidia masa depan dapat dengan mudah menggandakan atau melipat-lipatkan jumlah inti RT per SM. Dengan meningkatnya jumlah inti, kinerja 10 GR / detik mungkin berakhir sangat menyedihkan. Tapi lihatlah di mana GPU berasal dari dalam dekade terakhir. Iklan GPU Nvidia pertama dengan core CUDA adalah kartu 8800 GTX, yang berakhir pada 128 core CUDA kembali pada akhir tahun 2006. 12 tahun kemudian, kami memiliki GPU hingga 40 kali karena banyak core CUDA (Titan V), dan perangkat keras sederhana seperti GTX 1070 masih memiliki 15 kali lebih banyak core — ditambah clockspeed yang lebih tinggi. Pelacakan sinar real-time penuh untuk setiap piksel mungkin tidak mungkin dilakukan pada RTX 2080 Ti hari ini, tetapi kami telah dengan jelas memulai perjalanan itu. Jika diperlukan lima atau sepuluh tahun sebelum menjadi praktis di perangkat keras mainstream, saya bisa menunggu. Dan pada saat itu kita akan melihat ke arah lompatan berikutnya dalam grafik komputer.

Sumber : PCGamer


Post a Comment