Rhodonite is a Web3D(WebGL2/WebGPU) library written in TypeScript.
With the Blittable Memory Architecture, Rhodonite stores almost all of its data in a large pre-allocated ArrayBuffer. Data storage for matrix or vector classes in Rhodonite's component classes and materials are assigned from the memory pool, which means most of the data are on that memory pool, transferred to the GPU every frame as a floating-point texture. This architecture allows all shaders always to access a vast amount of data.
For example, Rhodonite can handle and blend all morph targets (38 targets) of VRM characters simultaneously in the shader.
You can try our library via https://editor.librn.com/. This viewer supports glTF/VRM files Drag & Drop to display. (Drag & Drop all files if glTF data consists of multiple files.)
Poly model
Advanced PBR
VRM avatar model and VRMA animation
Shader Node Editor
WebXR(VR) with multiview extension
Google Chrome, Firefox, Safari, Microsoft Edge (chromium-based), and other modern browsers are supported. IE11 is not supported.
You can install Rhodonite easily.
$ npm install rhodonite
If you get an error like "webxr-input-profiles not found" when building a project using Rhodonite, Try "npm install" or "yarn install" again.
<body>
<canvas id="world"></canvas>
<script src="../../../dist/umd/rhodonite.min.js"></script>
<script>
// Init Rhodonite
await Rn.System.init({
approach: Rn.ProcessApproach.DataTexture,
canvas: document.getElementById('world'),
});
// create a Plane mesh
const planeEntity = Rn.MeshHelper.createPlane();
planeEntity.eulerAngles = Rn.Vector3.fromCopy3(Math.PI * 0.5, 0, 0);
// Render Loop
Rn.System.startRenderLoop(() => {
Rn.System.processAuto();
});
</script>
</body>
There are two package versions of Rhodonite: ESModule and IIFE.
You don't need any bundler.
<script type="module" src="main.js">
// main.ts
import Rn from 'rhodonite/dist/esm/index.js';
// import Rn from 'rhodonite/dist/esmdev/index.js'; // use this if you want to display the source map or step through the library
// Init Rhodonite
await Rn.System.init({
approach: Rn.ProcessApproach.DataTexture,
canvas: document.getElementById('world') as HTMLCanvasElement,
});
// create a Plane mesh
const planeEntity = Rn.MeshHelper.createPlane();
planeEntity.eulerAngles = Rn.Vector3.fromCopy3(Math.PI * 0.5, 0, 0);
// Render Loop
Rn.System.startRenderLoop(() => {
Rn.System.processAuto();
});
// tsconfig.json
{
...
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "node",
"esModuleInterop": true,
...
}
...
}
If you use bundler, you can simply import rhodonite, like
import Rn from 'rhodonite';
See the last part of https://github.com/actnwit/RhodoniteTS/wiki/Install .
$ yarn install
You can use yarn instead.
$ yarn build
$ yarn build-samples
After building Rhodonite, try:
$ yarn watch-samples
Then, access http://localhost:8082/ with your web browser. When you are finished, press ctrl + c.
$ yarn doc
The following command runs unit tests and E2E tests.
$ yarn test
The E2E test uses a headless browser for rendering. Because the results are GPU hardware-dependent rather than software-dependent, results will vary depending on your environment. Since the correct images were run in the library author's environment, it is likely that many tests will fail in your environment.
You can execute a part of tests like this.
$ yarn test-unit-part -- ./src/foundation/core
$ yarn test-unit-part -- ./src/foundation/core/Entity.test.ts
$ yarn test-e2e-part -- ./samples/test_e2e/DataTextureInstancedDrawing
This project supports the VSCode devcontainer for any docker-installed OS.
Input the following command in the VSCode command palette.
> Remote-Containers: Reopen in Container
After a new dev container window opens, You can work in the Debian Linux container environment. All dependencies (node, npm, yarn, typescript, chromium, and all packages for Rhodonite) are already set up.
$ yarn start
.If you use the VSCode devcontainer environment, You should open another RhodoniteTS VSCode window locally and do debug ops on it instead of the devcontainer VSCode window.
MIT License
This library includes portions of code originally developed by the Khronos Group. Some of these portions have been translated and modified for use in the RhodoniteTS library.
See LICENSES/glTF-Sample-Renderer.LICENSE for details.
This library uses the following libraries.
This library also uses the following assets.