Render of Paved plaza tile (4 m)
The 3D view loads a preview copy of this asset with the SDK.
Ground tiles

Paved plaza tile (4 m)

4 m paved square with slab joints and a terracotta centre slab; ground-edge connectors on all four sides and a 3 x 3 grid of prop sockets (1 m apart) for benches, lamps, stalls and trees.

Placed as is: this asset has no customization options. Requests to change it are refused.

Size (W × H × D)
4.00 × 0.26 × 4.00 m
Triangles
504
GLB
29 KB

Part of the Stylized Town kit

Install with the CLI
npx agent-ready-assets add stylized-town/plaza-tile-01@0.1.0 --to public/assets

Renders from 6 views

Paved plaza tile (4 m), front view
front
Paved plaza tile (4 m), back view
back
Paved plaza tile (4 m), left view
left
Paved plaza tile (4 m), right view
right
Paved plaza tile (4 m), top view
top
Paved plaza tile (4 m), perspective view
perspective

No customization options

Load and place it as is. Every customization request is refused with a structured error that names the alternatives.

Details

Specifications504 triangles · 29 KB
Dimensions (W × H × D)
4.00 × 0.26 × 4.00 m
Triangles
504
Materials / textures
2 / 0
GLB file
29 KB
Package download
32 KB
Animation clips
None
Engines
Three.js, React Three Fiber
Tested with
three 0.186.1; no decoders
In the tested scenes
Explorable town (4×)
Connectors13 connectors

In a scene, a connector of this asset snaps to a compatible connector of another piece, so pieces are placed without coordinates.

ConnectorTypeSnaps to
anchor-edge-northground-edgeground-edge and road-side
anchor-edge-southground-edgeground-edge and road-side
anchor-edge-eastground-edgeground-edge and road-side
anchor-edge-westground-edgeground-edge and road-side
anchor-prop-nwprop-socketprop-base
anchor-prop-ncprop-socketprop-base
anchor-prop-neprop-socketprop-base
anchor-prop-mwprop-socketprop-base
anchor-prop-mcprop-socketprop-base
anchor-prop-meprop-socketprop-base
anchor-prop-swprop-socketprop-base
anchor-prop-scprop-socketprop-base
anchor-prop-seprop-socketprop-base
Compatibility2 of 10 supported
FeatureStatusDetail
Placement (position / rotation in a scene)Supportedscene.json position_m (meters) and rotation_euler_rad (XYZ radians); free scene scaling is not supported
Connector snapping (scene 1.1.0 attach_to)Supported
typed connectors: anchor-edge-north (ground-edge -> ground-edge/road-side), anchor-edge-south (ground-edge -> ground-edge/road-side), anchor-edge-east (ground-edge -> ground-edge/road-side)… Show alltyped connectors: anchor-edge-north (ground-edge -> ground-edge/road-side), anchor-edge-south (ground-edge -> ground-edge/road-side), anchor-edge-east (ground-edge -> ground-edge/road-side), anchor-edge-west (ground-edge -> ground-edge/road-side), anchor-prop-nw (prop-socket -> prop-base), anchor-prop-nc (prop-socket -> prop-base), anchor-prop-ne (prop-socket -> prop-base), anchor-prop-mw (prop-socket -> prop-base), anchor-prop-mc (prop-socket -> prop-base), anchor-prop-me (prop-socket -> prop-base), anchor-prop-sw (prop-socket -> prop-base), anchor-prop-sc (prop-socket -> prop-base), anchor-prop-se (prop-socket -> prop-base); mates within 1 mm, opposed outward, aligned up
Material recolor (runtime, Blender-free)Not supportedno material-color capability is advertised for this version
Uniform scale (runtime, Blender-free)Not supportedno uniform-scale capability; scene uniform_scale must stay 1
Node visibility togglesNot supportedno node-visibility capability is advertised for this version
Modular part swapNot supportedno modular-swap capability is advertised for this version
AnimationsNot supportedstatic asset: no animation clips
Custom mesh editing / parametric geometry (e.g. slat count)Advanced onlyL4 authoring in Blender or another DCC; not possible with the SDK. declared.recipe_parameters are publisher-only knobs.
Baked texture recolorNot supportedtexture pixels are never edited by the SDK
GLB re-export of a customized assetNot supportedcustomization is a declarative JSON config applied at runtime; no modified GLB is written
Integration codeThree.js and React Three Fiber

The entry file your agent writes, generated from the catalog. Run the commands inside your project, where the SDK is installed.

Three.js

src/main.ts
// stylized-town/plaza-tile-01@0.1.0 in a plain Three.js scene
// Generated by the Agent-Ready Assets integration guide (target: plain Three.js, SDK 0.5.1, tested with three 0.186.1).
// The files are served from this project's own public/ folder (installed with `npx agent-ready-assets ...`):
// no CDN at runtime, no decoders, no Blender.
import * as THREE from 'three';
import { AssetLibrary, isCustomizationError } from '@agent-ready-assets/runtime-three';

const KIT_URL = '/assets/stylized-town/kit.json';
const ASSET = 'stylized-town/plaza-tile-01@0.1.0';

const renderer = new THREE.WebGLRenderer({ antialias: true, preserveDrawingBuffer: true });
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.outputColorSpace = THREE.SRGBColorSpace;
document.body.style.margin = '0';
document.body.appendChild(renderer.domElement);

const scene = new THREE.Scene();
scene.background = new THREE.Color('#e9e4da');
scene.add(new THREE.HemisphereLight(0xffffff, 0x8d7c64, 1.4));
const sun = new THREE.DirectionalLight(0xffffff, 2.0);
sun.position.set(4, 8, 5);
scene.add(sun);
const camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 0.05, 400);

/** Points the camera at everything that was loaded (3/4 view). */
function frame(target: THREE.Object3D): void {
  const box = new THREE.Box3().setFromObject(target);
  const center = box.getCenter(new THREE.Vector3());
  const radius = Math.max(box.getSize(new THREE.Vector3()).length() / 2, 0.5);
  const dist = radius / Math.sin(THREE.MathUtils.degToRad(camera.fov / 2));
  camera.position.copy(center).add(new THREE.Vector3(0.55, 0.5, 1).normalize().multiplyScalar(dist * 0.95));
  camera.lookAt(center);
  camera.updateProjectionMatrix();
}

window.addEventListener('resize', () => {
  camera.aspect = window.innerWidth / window.innerHeight;
  camera.updateProjectionMatrix();
  renderer.setSize(window.innerWidth, window.innerHeight);
  renderer.render(scene, camera);
});

async function main(): Promise<void> {
  const library = await AssetLibrary.fromKit(KIT_URL); // verifies every file against the sha256 pins first
  const original = await library.loadAsset(ASSET);
  scene.add(original.object);
  // stylized-town/plaza-tile-01@0.1.0 is L1 (load as-is): it advertises no customization capabilities, so any customize request is refused.
  frame(scene);
  renderer.render(scene, camera);
  renderer.domElement.dataset.ready = 'true'; // handy for tests: the scene finished loading
}

main().catch((error: unknown) => {
  // Unsupported or invalid customizations are refused with a structured error instead of being approximated.
  const message = isCustomizationError(error) ? `${error.code}: ${error.message}` : String(error);
  renderer.domElement.dataset.error = message;
  console.error(message);
});

React Three Fiber

src/main.tsx
// stylized-town/plaza-tile-01@0.1.0 with React Three Fiber
// Generated by the Agent-Ready Assets integration guide (target: React Three Fiber, SDK 0.5.1, tested with three 0.186.1).
// Assets are served from this project's own public/ folder; no CDN, no Blender.
import { StrictMode, useEffect, useState } from 'react';
import { createRoot } from 'react-dom/client';
import { Canvas } from '@react-three/fiber';
import { Asset, AssetLibraryProvider } from '@agent-ready-assets/runtime-r3f';
import { AssetLibrary } from '@agent-ready-assets/runtime-three';

const KIT_URL = '/assets/stylized-town/kit.json';
const ASSET = 'stylized-town/plaza-tile-01@0.1.0';

/** Marks the canvas once every <Asset> reported onReady (handy for tests). */
function useReadyFlag(expected: number): () => void {
  const [count, setCount] = useState(0);
  useEffect(() => {
    if (count >= expected) document.querySelector('canvas')?.setAttribute('data-ready', 'true');
  }, [count, expected]);
  return () => setCount((n) => n + 1);
}

function App({ library }: { library: AssetLibrary }) {
  const onReady = useReadyFlag(1);
  return (
    <Canvas camera={{ position: [5.2, 3.6, 7.6], fov: 40 }} gl={{ preserveDrawingBuffer: true }}>
      <color attach="background" args={['#e9e4da']} />
      <hemisphereLight args={[0xffffff, 0x8d7c64, 1.4]} />
      <directionalLight position={[4, 8, 5]} intensity={2} />
      <AssetLibraryProvider library={library}>
        <Asset assetId={ASSET} position={[-2.5, 0, 0]} onReady={onReady} onError={(e) => console.error(e)} />
      </AssetLibraryProvider>
    </Canvas>
  );
}

AssetLibrary.fromKit(KIT_URL).then(
  (library) => createRoot(document.getElementById('root')!).render(<StrictMode><App library={library} /></StrictMode>),
  (error: unknown) => console.error(error),
);
Quality reportAutomated checks passed

Every automated check that applies passed on this exact file, including glTF validity, scale and pivots, materials and a Three.js render in Chromium. The asset was released after review.

These are the publisher's own automated checks, not an independent certification.

Read the full report