Remix.run Logo
Keyframe 3 days ago

i got a few questions:

- you say it's built with three.js but you also use rapier. How does that work / integrate? I see one is JS frontend thing, the other rust engine

- how did you design levels, with what?

franck 3 days ago | parent | next [-]

The rendering engine is using Three.js which is a WebGL library. The physics/collision detection code is using Rapier through a WebAssembly module available on npm [1], which means that it can be used on the web even though it's originally written in Rust.

The levels were built inside the Unity Editor, then exported to FBX, then went through a pipeline based on Blender python scripting that optimized their geometry, assigned materials and exported them to GLTF (the final format that we load in the browser).

[1] https://rapier.rs/docs/user_guides/javascript/getting_starte...

ivanjermakov 3 days ago | parent | next [-]

How did you assemble Rapier colliders from GLTFs?

franck 3 days ago | parent [-]

Nothing complicated, we simply have initialization code that parses the GLTF scene on startup by iterating over the children of a specific group, and creating Rapier colliders for each of them (Triangle Mesh Colliders to be specific, in order to allow things such as curved ramps). Since their geometry is very simple, we can use directly the rendering geometry for the collider geo.

Keyframe 3 days ago | parent | prev [-]

thanks for answering! Interesting you used unity for level layout. Interested to hear the advantage here. Considering you already use Blender down the pipe, how come you haven't used Blender for it or any other dcc app lile maya, max, whatever?

franck 3 days ago | parent [-]

The main draw of the Unity Editor for us is how it auto-reloads assets, like 3D models, as soon as the asset file is updated. So the workflow is having your DCC app open in which you model things and export assets from, and Unity Editor to design your level where every model is always up-to-date.

This is not possible with Blender because it contains all models inside a single .blend file, so assets must be manually re-imported each you change them. There is a Link feature in Blender but in my experience it's not as good as what Unity does out of the box.

Keyframe 3 days ago | parent [-]

interesting! I haven't got much into blender, but sounds rather basic functionality. FWIW Maya has that since forever.

skydhash 3 days ago | parent | prev [-]

Not the dev, but Rapier has a JavaScript binding through WASM. And you can design the levels with a 3d tool like Blender, then script out the animation.