Skip to content

Repository files navigation

KScene

KScene is an imperative Kotlin Multiplatform 3D scene runtime.

It provides a shared scene graph, camera and lifecycle API, with SceneView / Filament on Android and SceneKit on iOS.

Install

KScene is published as a Kotlin Multiplatform library. Add Maven Central to your repositories and depend on it from commonMain:

// settings.gradle.kts or dependencyResolutionManagement
repositories {
    mavenCentral()
}
// shared/build.gradle.kts
kotlin {
    sourceSets {
        commonMain.dependencies {
            implementation("io.github.bvin:kscene:0.1.0")
        }
    }
}

Minimal usage

KScene is intentionally imperative: create a controller, keep your node tree, and attach it when the platform renderer is ready.

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import foto.go.scene.SceneController
import foto.go.scene.SceneView
import foto.go.scene.mesh.MeshData
import foto.go.scene.node.SceneNode

@Composable
fun SceneDemo() {
    val controller = remember { SceneController() }
    val root = remember {
        SceneNode("root").apply {
            addChild(
                SceneNode(
                    id = "triangle",
                    mesh = MeshData(
                        positions = floatArrayOf(
                            0f, 1f, 0f,
                            -1f, -1f, 0f,
                            1f, -1f, 0f,
                        ),
                        indices = intArrayOf(0, 1, 2),
                    ),
                ),
            )
        }
    }

    SceneView(
        modifier = Modifier.fillMaxSize(),
        controller = controller,
        onReady = { controller.attachNode(root) },
    )
}

SceneNode changes are synchronized incrementally after the root is attached:

root.addChild(anotherNode)
anotherNode.setVisible(false)
anotherNode.setTransform(newTransform)
root.removeChild(anotherNode)

About

An imperative Kotlin Multiplatform 3D scene runtime with direct, predictable control of scene graphs, cameras, and lifecycle—independent of UI composition.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages