Video wird geladen...

Video konnte nicht geladen werden

Zur Startseite

As promised, more insights on the webgl raytracer. It is based on this article/paper by Tero Karras: It uses Morton code to build a BVH binary radix tree on the GPU in realtime. #webgl #bvh #raytracing

44,019 Aufrufe • vor 3 Jahren •via X (Twitter)

10 Kommentare

Profilbild von Nicolas Riciotti
Nicolas Riciottivor 3 Jahren

The test scene is 3,1 million triangles and apart from the ordered Morton code atlas, it builds a single BVH in few milliseconds on a M1 mac.

Profilbild von 𝚋𝚞𝚝𝟶𝚗
𝚋𝚞𝚝𝟶𝚗vor 3 Jahren

Amazing! I thought Morton code requires bit operation that is not supported in webgl/glsl 3.0.

Profilbild von Nicolas Riciotti
Nicolas Riciottivor 3 Jahren

thanks ! I though it too but ES 3.0 shaders support at least some bit operations. Here's the code I use (adapted from:

Profilbild von Jesper Mosegaard
Jesper Mosegaardvor 3 Jahren

Very nice work!

Profilbild von Nicolas Riciotti
Nicolas Riciottivor 3 Jahren

Thanks ! :)

Profilbild von tamat
tamatvor 3 Jahren

Interesting, how do you build data in the GPU? Do you use FBOs or Transform Feedback? AFAIK WebGL2 doesnt support Compute Shaders.

Profilbild von Nicolas Riciotti
Nicolas Riciottivor 3 Jahren

Hey! Yes I use FBO. basically I use vertex shader, instead of compute shader, to draw a large atlas where 1pixel corresponds to 1 vertex and I store position,normal and uvs as packed data in a frame buffer.then use that for Morton code atlas

Profilbild von chris
chrisvor 3 Jahren

Awesome! Maybe you could help me with the morton BVH construction, i‘m stuck at the morton code determination: it only uses decimal bits within the unit cube, but how are coordinates above 1.0 handled? Wouldn‘t coord morton codes repeat for each „unit cube“ block of geometry? 😅

Profilbild von Nicolas Riciotti
Nicolas Riciottivor 3 Jahren

For Morton code you need to use ints instead 0-1 range floats. With 30 bits Morton code you can get up to 1024^3 precision. So you take your scene max size and split it in 1024 units and round to the closest int on x, y and z axis :)

Profilbild von mattebb.bsky.social
mattebb.bsky.socialvor 3 Jahren

@Thebadlament That is so impressive!

Ähnliche Videos