Models
Introduction
Studio includes several built-in primitives—such as spheres, boxes, and planes—that can be quickly customized and positioned within the editor. For more intricate designs, Studio supports external 3D models in GLTF/GLB formats, ideal for web-based 3D content, and FBX files, which can be converted to GLB after upload. This setup allows for a rich range of 3D elements, whether creating streamlined or highly detailed virtual scenes.
Primitives
The following built-in Primitives are available:
Type | Attributes |
---|---|
SphereGeometry | {radius} |
BoxGeometry | {width, height, depth} |
PlaneGeometry | {width, height} |
CapsuleGeometry | {radius, height} |
ConeGeometry | {radius, height} |
CylinderGeometry | {radius, height} |
PolyhedronGeometry | {radius} |
CircleGeometry | {radius} |
RingGeometry | {innerRadius, outerRadius} |
Adding a Primitive
A 3D Model can be added to the entity via the Studio interface via the Mesh component, or in code. Adding them in Studio is done via the (+) button on the Hierarchy or by adding geometry to a Custom Component on the entity.
Example
ecs.SphereGeometry.set(world, eid, {radius: 5})
GLTF Component
Supported Formats
GLTF and GLB
GLTF and GLB models are supported and ideal when working with 3D on the web.
FBX
FBX upload is supported however, Niantic Studio requires models to be converted to GLB after upload. Ensure that textures are embedded in the FBX file before converting to GLB.
Setting a Model
The following example shows how to set a GLTF or GLB on a entity at runtime.
This method requires that you select your custom model from the component properties, once the component is applied to your entity
import * as ecs from '@8thwall/ecs'
ecs.registerComponent({
name: 'loaded-model',
schema: {
// @asset
model: ecs.string,
},
add: (world, component) => {
ecs.GltfModel.set(world, eid, {
url: component.schema.model,
})
}
})
Setting Model Properties
Model Properties
View properties here.
Example
The following example shows how to set a Model on an entity at runtime.
import * as ecs from '@8thwall/ecs'
ecs.registerComponent({
name: 'loaded-model',
schema: {
// @asset
model: ecs.string,
},
add: (world, component) => {
ecs.GltfModel.set(world, eid, {
url: component.schema.model,
animationClip: 'clip1',
loop: true,
paused: false,
time: 0,
timeScale: 1,
})
}
})
Setting Material Properties
Materials can be configured either through code or directly within the Mesh component in the editor.
Material Types
Material
A standard PBR material.
UnlitMaterial
Material unaffected by lighting or shadows.
ShadowMaterial
Material that only responds to shadows.
HiderMaterial
Specialty Material that hides any objects behind it.
Material Properties
View properties here.
Example
The following example shows how to set a Material on an entity at runtime.
// Setting the standard material
ecs.Material.set(world, component.eid, {r: 255, g: 0, b: 100, roughness: 1})
// Setting the shadow material
ecs.ShadowMaterial.set(world, component.eid, {r: 255, g: 0, b: 100})