@hypersoniclabs/helix-cli 0.1.25-helix3.486 → 0.1.25-helix3.488
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/city/assemble/compose.d.ts +8 -0
- package/dist/city/assemble/compose.js +47 -3
- package/dist/city/assemble/compose.js.map +1 -1
- package/dist/city/assemble/create.d.ts +9 -0
- package/dist/city/assemble/create.js +8 -5
- package/dist/city/assemble/create.js.map +1 -1
- package/dist/city/assemble/glbParts.d.ts +12 -4
- package/dist/city/assemble/glbParts.js +39 -13
- package/dist/city/assemble/glbParts.js.map +1 -1
- package/dist/city/assemble/plan.d.ts +4 -0
- package/dist/city/assemble/plan.js +2 -0
- package/dist/city/assemble/plan.js.map +1 -1
- package/dist/city/assemble/roads.d.ts +11 -0
- package/dist/city/assemble/roads.js +29 -0
- package/dist/city/assemble/roads.js.map +1 -0
- package/dist/city/assemble/splat.d.ts +9 -0
- package/dist/city/assemble/splat.js +41 -2
- package/dist/city/assemble/splat.js.map +1 -1
- package/dist/city/assemble/terrain.d.ts +4 -1
- package/dist/city/assemble/terrain.js +15 -4
- package/dist/city/assemble/terrain.js.map +1 -1
- package/dist/city/import/osm/roads.js +9 -4
- package/dist/city/import/osm/roads.js.map +1 -1
- package/dist/city/import/osm/tags.d.ts +4 -1
- package/dist/city/import/osm/tags.js +6 -2
- package/dist/city/import/osm/tags.js.map +1 -1
- package/dist/city/roads/build.d.ts +8 -0
- package/dist/city/roads/build.js +35 -5
- package/dist/city/roads/build.js.map +1 -1
- package/dist/city/roads/command.js +1 -1
- package/dist/city/roads/command.js.map +1 -1
- package/dist/city/roads/constants.d.ts +55 -6
- package/dist/city/roads/constants.js +67 -21
- package/dist/city/roads/constants.js.map +1 -1
- package/dist/city/roads/elevation.d.ts +26 -0
- package/dist/city/roads/elevation.js +178 -25
- package/dist/city/roads/elevation.js.map +1 -1
- package/dist/city/roads/fixtures-interchange.js +12 -12
- package/dist/city/roads/fixtures-interchange.js.map +1 -1
- package/dist/city/roads/gore.d.ts +50 -0
- package/dist/city/roads/gore.js +336 -0
- package/dist/city/roads/gore.js.map +1 -0
- package/dist/city/roads/junctions.d.ts +4 -2
- package/dist/city/roads/junctions.js +58 -11
- package/dist/city/roads/junctions.js.map +1 -1
- package/dist/city/roads/markings.js +105 -10
- package/dist/city/roads/markings.js.map +1 -1
- package/dist/city/roads/medians.js +7 -1
- package/dist/city/roads/medians.js.map +1 -1
- package/dist/city/roads/network.d.ts +13 -0
- package/dist/city/roads/network.js +43 -6
- package/dist/city/roads/network.js.map +1 -1
- package/dist/city/roads/portals.d.ts +18 -0
- package/dist/city/roads/portals.js +80 -0
- package/dist/city/roads/portals.js.map +1 -0
- package/dist/city/roads/ribbons.d.ts +22 -1
- package/dist/city/roads/ribbons.js +119 -24
- package/dist/city/roads/ribbons.js.map +1 -1
- package/dist/city/source/schema.json +3 -0
- package/dist/city/source/types.d.ts +2 -0
- package/dist/city/source/types.js.map +1 -1
- package/dist/city/source/validate.js +2 -0
- package/dist/city/source/validate.js.map +1 -1
- package/dist/city/terrain/conform.d.ts +7 -1
- package/dist/city/terrain/conform.js +17 -6
- package/dist/city/terrain/conform.js.map +1 -1
- package/dist/sceneCreate/commands.js +4 -0
- package/dist/sceneCreate/commands.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/docs/city-roads.md +76 -45
- package/docs/scene-create.md +4 -4
- package/package.json +1 -1
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_abs.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_expression.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_jbeam.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_materials.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/beamng_stock_events.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fmod_studio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/fsb5.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_ac.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_beamng.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/sim_audio_fixtures.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_beamng_engine.cpython-312.pyc +0 -0
- package/plugins/beamng-vehicle/bin/__pycache__/test_sim_audio.cpython-312.pyc +0 -0
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { type HelixSceneV2 } from '@hypersoniclabs/helix-manifest';
|
|
2
2
|
import type { BuildingsManifest, CellEntry, FarEntry } from '../buildings';
|
|
3
|
+
import type { RoadCell } from '../roads';
|
|
3
4
|
import type { BundleFile, PackagedCityLibrary } from './materials';
|
|
4
5
|
export declare const CITY_HLOD_LAYER = "buildings";
|
|
6
|
+
/** P10: terrain collision must reach this far where streets are drivable and walkable. */
|
|
7
|
+
export declare const ROAD_TERRAIN_COLLIDER_RADIUS_M = 256;
|
|
5
8
|
export interface ComposeInput {
|
|
6
9
|
sceneId: string;
|
|
7
10
|
title: string;
|
|
@@ -13,6 +16,8 @@ export interface ComposeInput {
|
|
|
13
16
|
buildingsDir: string;
|
|
14
17
|
buildings: BuildingsManifest;
|
|
15
18
|
library: PackagedCityLibrary;
|
|
19
|
+
/** The road generator's 1 km cells (render GLB and collider each), streamed in their own distance groups. */
|
|
20
|
+
roads?: RoadCell[];
|
|
16
21
|
memoryBudgetMiB: number;
|
|
17
22
|
streamRadiusM: number;
|
|
18
23
|
spawn: {
|
|
@@ -22,6 +27,9 @@ export interface ComposeInput {
|
|
|
22
27
|
}
|
|
23
28
|
export interface ComposeStats {
|
|
24
29
|
buildingCells: number;
|
|
30
|
+
roadCells: number;
|
|
31
|
+
roadTriangles: number;
|
|
32
|
+
roadBytes: number;
|
|
25
33
|
colliderTriangles: number;
|
|
26
34
|
hlodClusters: number;
|
|
27
35
|
hlodTriangles: number;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// generator-written far layer sealed as a complete HLOD v2 layer, the city material library and the optional
|
|
5
5
|
// `web.city-materials/1` extension. Everything is content-addressed and the document is sealed and validated here.
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.CITY_HLOD_LAYER = void 0;
|
|
7
|
+
exports.ROAD_TERRAIN_COLLIDER_RADIUS_M = exports.CITY_HLOD_LAYER = void 0;
|
|
8
8
|
exports.composeCityScene = composeCityScene;
|
|
9
9
|
const node_fs_1 = require("node:fs");
|
|
10
10
|
const node_path_1 = require("node:path");
|
|
@@ -13,6 +13,8 @@ const compiler_1 = require("../../sceneElements/compiler");
|
|
|
13
13
|
const glbParts_1 = require("./glbParts");
|
|
14
14
|
const MIB = 1024 * 1024;
|
|
15
15
|
exports.CITY_HLOD_LAYER = 'buildings';
|
|
16
|
+
/** P10: terrain collision must reach this far where streets are drivable and walkable. */
|
|
17
|
+
exports.ROAD_TERRAIN_COLLIDER_RADIUS_M = 256;
|
|
16
18
|
const cellId = (cx, cz) => `${cx}.${cz}`;
|
|
17
19
|
function pad(bounds, y) {
|
|
18
20
|
const min = [bounds.min[0], bounds.min[1] - y, bounds.min[2]];
|
|
@@ -54,7 +56,7 @@ async function composeCityScene(input) {
|
|
|
54
56
|
const doc = {
|
|
55
57
|
format: 'helix.scene-elements', version: 2, id: input.sceneId, title: input.title,
|
|
56
58
|
spawn: { position: input.spawn.position, ...(input.spawn.rotationYDeg === undefined ? {} : { rotationYDeg: input.spawn.rotationYDeg }) },
|
|
57
|
-
terrain: { type: 'terrain', id: 'terrain', source: (0, node_path_1.basename)((0, node_path_1.resolve)(input.terrainDir)) },
|
|
59
|
+
terrain: { type: 'terrain', id: 'terrain', source: (0, node_path_1.basename)((0, node_path_1.resolve)(input.terrainDir)), ...(input.roads?.length ? { colliderRadiusM: exports.ROAD_TERRAIN_COLLIDER_RADIUS_M } : {}) },
|
|
58
60
|
...(input.placementsDir ? { placements: { source: relativeFrom(baseDir, input.placementsDir) } } : {}),
|
|
59
61
|
buildings: [],
|
|
60
62
|
runtimePolicy: { memoryBudgetMiB: input.memoryBudgetMiB, streamRadiusM: input.streamRadiusM },
|
|
@@ -109,6 +111,42 @@ async function composeCityScene(input) {
|
|
|
109
111
|
});
|
|
110
112
|
nodeByCell.set(cell.key, { node: nodeId, cell: `cell.building.${id}` });
|
|
111
113
|
}
|
|
114
|
+
// 2b. One node per road cell (1,024 m) with the cell's collider, in its own distance group. Roads are not in the HLOD layer:
|
|
115
|
+
// the terrain splat carries the street surface at distance.
|
|
116
|
+
let roadTriangles = 0, roadBytes = 0, roadBounds = null;
|
|
117
|
+
const roadMinX = Math.min(...(input.roads ?? []).map((c) => c.cx)), roadMinZ = Math.min(...(input.roads ?? []).map((c) => c.cz));
|
|
118
|
+
for (const cell of [...(input.roads ?? [])].sort((a, b) => a.cz - b.cz || a.cx - b.cx)) {
|
|
119
|
+
const id = cellId(cell.cx - roadMinX, cell.cz - roadMinZ); // ids are lowercase and never negative
|
|
120
|
+
const info = (0, glbParts_1.inspectGlb)(cell.glb);
|
|
121
|
+
const bounds = (0, glbParts_1.quantizedGlbWorldBounds)(cell.glb);
|
|
122
|
+
const render = table.add(`res.road.${id}`, 'model', 'model/gltf-binary', `roads/cell/${cell.glbSha256}.glb`, cell.glb);
|
|
123
|
+
const nodeId = `road.cell.${id}`, groupId = `stream.road.${id}`;
|
|
124
|
+
const members = [nodeId];
|
|
125
|
+
let decoded = cell.glb.length + 2 * info.accessorBytes;
|
|
126
|
+
nodes.push({
|
|
127
|
+
id: nodeId, resource: render, transform: identity, streamGroup: groupId,
|
|
128
|
+
components: [{ type: 'render.mesh', castShadow: false, receiveShadow: true, giContribute: false }],
|
|
129
|
+
});
|
|
130
|
+
if (cell.collider) {
|
|
131
|
+
const collider = await (0, glbParts_1.colliderFromQuantizedGlb)(cell.collider);
|
|
132
|
+
const collide = table.add(`res.road.collider.${id}`, 'collider', 'model/gltf-binary', `roads/collider/${(0, glbParts_1.sha256Hex)(collider.bytes)}.glb`, collider.bytes);
|
|
133
|
+
const carrierId = `road.collider.${id}`, setId = `collision.road.${id}`;
|
|
134
|
+
nodes.push({ id: carrierId, transform: identity, streamGroup: groupId, components: [{ type: 'collision.proxy-set', set: setId }] });
|
|
135
|
+
collisionSets.push({ id: setId, node: carrierId, static: [{ id: `collider.road.${id}`, shape: 'triangle-mesh', resource: collide, transform: identity }] });
|
|
136
|
+
members.push(carrierId);
|
|
137
|
+
decoded += collider.bytes.length * 6;
|
|
138
|
+
colliderBytes += collider.bytes.length;
|
|
139
|
+
colliderTriangles += collider.triangles;
|
|
140
|
+
}
|
|
141
|
+
groups.push({
|
|
142
|
+
id: groupId, mode: 'distance', priority: 50,
|
|
143
|
+
cells: [{ id: `cell.road.${id}`, bounds: pad(bounds, 0.5), nodes: members }],
|
|
144
|
+
dependencies: ['stream.root'], estimatedMemoryMiB: Math.max(1, Math.ceil(decoded / MIB)),
|
|
145
|
+
});
|
|
146
|
+
roadTriangles += cell.stats.trianglesRender;
|
|
147
|
+
roadBytes += cell.glb.length;
|
|
148
|
+
roadBounds = roadBounds ? { min: roadBounds.min.map((v, a) => Math.min(v, bounds.min[a])), max: roadBounds.max.map((v, a) => Math.max(v, bounds.max[a])) } : bounds;
|
|
149
|
+
}
|
|
112
150
|
// 3. The generator's far layer is the complete HLOD v2 layer: one cluster per far entry, sources in `cells` order.
|
|
113
151
|
const carrier = await (0, glbParts_1.facadeMaterialCarrierGlb)([0.62, 0.58, 0.52]);
|
|
114
152
|
const materialId = table.add('res.hlod.material', 'model', 'model/gltf-binary', `hlod-complete/${(0, glbParts_1.sha256Hex)(carrier.bytes)}.glb`, carrier.bytes);
|
|
@@ -140,6 +178,12 @@ async function composeCityScene(input) {
|
|
|
140
178
|
max: placementBounds.max.map((v, a) => Math.max(v, cell.bounds.max[a])),
|
|
141
179
|
};
|
|
142
180
|
}
|
|
181
|
+
if (roadBounds) {
|
|
182
|
+
placementBounds = {
|
|
183
|
+
min: placementBounds.min.map((v, a) => Math.min(v, roadBounds.min[a])),
|
|
184
|
+
max: placementBounds.max.map((v, a) => Math.max(v, roadBounds.max[a])),
|
|
185
|
+
};
|
|
186
|
+
}
|
|
143
187
|
scene.placement = { ...scene.placement, bounds: placementBounds };
|
|
144
188
|
scene.resources = [...scene.resources, ...table.resources, ...input.library.resources];
|
|
145
189
|
scene.nodes = [...scene.nodes, ...nodes];
|
|
@@ -186,7 +230,7 @@ async function composeCityScene(input) {
|
|
|
186
230
|
scene: sealed,
|
|
187
231
|
files: [...files.values()].sort((a, b) => (a.uri < b.uri ? -1 : 1)),
|
|
188
232
|
stats: {
|
|
189
|
-
buildingCells: groups.length, colliderTriangles, hlodClusters: clusters.length, hlodTriangles, hlodBytes, nearBytes, colliderBytes,
|
|
233
|
+
buildingCells: groups.length - (input.roads?.length ?? 0), roadCells: input.roads?.length ?? 0, roadTriangles, roadBytes, colliderTriangles, hlodClusters: clusters.length, hlodTriangles, hlodBytes, nearBytes, colliderBytes,
|
|
190
234
|
nodes: scene.nodes.length, streamGroups: scene.streamGroups.length, resources: scene.resources.length, documentBytes,
|
|
191
235
|
},
|
|
192
236
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/city/assemble/compose.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/city/assemble/compose.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,15 @@ export interface CreateCityResult {
|
|
|
34
34
|
terrain: Omit<CityTerrainResult, 'heightAt'>;
|
|
35
35
|
vegetation: VegetationResult['report'];
|
|
36
36
|
props: PropsResult['report'];
|
|
37
|
+
roads: {
|
|
38
|
+
enabled: boolean;
|
|
39
|
+
cells: number;
|
|
40
|
+
renderTriangles: number;
|
|
41
|
+
colliderTriangles: number;
|
|
42
|
+
junctions: number;
|
|
43
|
+
edges: number;
|
|
44
|
+
bytes: number;
|
|
45
|
+
};
|
|
37
46
|
buildings: BuildingsManifest['totals'] & {
|
|
38
47
|
cells: number;
|
|
39
48
|
};
|
|
@@ -6,9 +6,7 @@
|
|
|
6
6
|
// -> vegetation (street trees and park/forest trees as placements)
|
|
7
7
|
// -> props (Vault props by Continuum reference, none when nothing suitable exists)
|
|
8
8
|
// -> compose (nodes, stream groups, colliders, complete HLOD, materials, extension), seal, perf gate
|
|
9
|
-
//
|
|
10
|
-
// Roads are a seam until the road generator lands (`src/city/roads`): the terrain splat paints the street surface so the
|
|
11
|
-
// city reads as streets, and the composition has one place to add the road meshes and colliders.
|
|
9
|
+
// -> roads (1 km cells, colliders, and the terrain cut and filled under them) src/city/roads
|
|
12
10
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
11
|
if (k2 === undefined) k2 = k;
|
|
14
12
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -59,6 +57,7 @@ const terrain_1 = require("./terrain");
|
|
|
59
57
|
const vegetation_1 = require("../vegetation");
|
|
60
58
|
const props_1 = require("../props");
|
|
61
59
|
const spawn_1 = require("./spawn");
|
|
60
|
+
const roads_1 = require("./roads");
|
|
62
61
|
/** The activation radius at which a dense city cell stays within the mobile draw-call limit (P06, 150). */
|
|
63
62
|
exports.MOBILE_STREAM_RADIUS_M = 300;
|
|
64
63
|
exports.SCENE_REPORT_SCHEMA = 'helix.scene-create-report/1';
|
|
@@ -108,7 +107,8 @@ async function createCityScene(options) {
|
|
|
108
107
|
const built = await lap('buildings', () => (0, buildings_1.buildBuildingsFromSource)(loaded, identity, {
|
|
109
108
|
out: (0, node_path_1.join)(work, 'buildings'), cellM: plan.buildings.cellM, farCellM: plan.buildings.farCellM, groundFilter: plan.buildings.groundFilter === 'auto' ? undefined : plan.buildings.groundFilter,
|
|
110
109
|
}));
|
|
111
|
-
const
|
|
110
|
+
const roads = plan.roads.enabled ? await lap('roads', () => (0, roads_1.buildSceneRoads)(loaded, plan.terrain.metresPerSample)) : null;
|
|
111
|
+
const terrain = await lap('terrain', () => (0, terrain_1.buildCityTerrain)(loaded, (0, node_path_1.join)(work, 'terrain'), { metresPerSample: plan.terrain.metresPerSample, conformed: roads?.conformed }));
|
|
112
112
|
const spawn = (0, spawn_1.pickSpawn)(loaded, built.manifest, terrain.heightAt, plan.spawn);
|
|
113
113
|
log(`spawn: ${spawn.position.map((v) => v.toFixed(1)).join(', ')} (${spawn.reason})`);
|
|
114
114
|
const vegetation = plan.vegetation.enabled
|
|
@@ -117,7 +117,7 @@ async function createCityScene(options) {
|
|
|
117
117
|
const props = plan.props.enabled ? await lap('props', () => (0, props_1.resolveProps)(loaded, { log, offline: options.offline })) : null;
|
|
118
118
|
const composed = await lap('compose', () => (0, compose_1.composeCityScene)({
|
|
119
119
|
sceneId, title, terrainDir: (0, node_path_1.join)(work, 'terrain'), ...(vegetation?.placementsDir ? { placementsDir: vegetation.placementsDir } : {}),
|
|
120
|
-
buildingsDir: (0, node_path_1.join)(work, 'buildings'), buildings: built.manifest, library: (0, materials_1.packageCityLibrary)(), memoryBudgetMiB, streamRadiusM,
|
|
120
|
+
buildingsDir: (0, node_path_1.join)(work, 'buildings'), buildings: built.manifest, library: (0, materials_1.packageCityLibrary)(), ...(roads ? { roads: roads.cells } : {}), memoryBudgetMiB, streamRadiusM,
|
|
121
121
|
spawn: { position: spawn.position, rotationYDeg: spawn.rotationYDeg },
|
|
122
122
|
}));
|
|
123
123
|
await lap('write package', async () => {
|
|
@@ -149,6 +149,9 @@ async function createCityScene(options) {
|
|
|
149
149
|
terrain: { dir: terrain.dir, tilesX: terrain.tilesX, tilesZ: terrain.tilesZ, originX: terrain.originX, originZ: terrain.originZ, metresPerSample: terrain.metresPerSample, heightRangeM: terrain.heightRangeM, kind: terrain.kind },
|
|
150
150
|
vegetation: vegetation?.report ?? { enabled: false },
|
|
151
151
|
props: props?.report ?? { enabled: false },
|
|
152
|
+
roads: roads
|
|
153
|
+
? { enabled: true, cells: roads.cells.length, renderTriangles: roads.cells.reduce((n, c) => n + c.stats.trianglesRender, 0), colliderTriangles: roads.cells.reduce((n, c) => n + c.stats.colliderTriangles, 0), junctions: roads.report.junctions, edges: roads.report.renderedEdges, bytes: roads.cells.reduce((n, c) => n + c.glb.length, 0) }
|
|
154
|
+
: { enabled: false, cells: 0, renderTriangles: 0, colliderTriangles: 0, junctions: 0, edges: 0, bytes: 0 },
|
|
152
155
|
buildings: { ...built.manifest.totals, cells: built.manifest.cells.length },
|
|
153
156
|
packageBytes: size.bytes, files: size.files, perf, timingsMs: timings,
|
|
154
157
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/city/assemble/create.ts"],"names":[],"mappings":";AAAA,gHAAgH;AAChH,EAAE;AACF,mGAAmG;AACnG,iHAAiH;AACjH,4EAA4E;AAC5E,gGAAgG;AAChG,gHAAgH;AAChH,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/city/assemble/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,14 +22,22 @@ export declare function glbJson(bytes: Uint8Array): {
|
|
|
22
22
|
};
|
|
23
23
|
export declare function inspectGlb(bytes: Uint8Array): GlbInfo;
|
|
24
24
|
/**
|
|
25
|
-
* A static collider
|
|
26
|
-
* (`runtime/colliderAdmission.ts`), so the geometry is decoded and rewritten with
|
|
27
|
-
* (`KHR_mesh_quantization`), keeping the node's translation and
|
|
25
|
+
* A static collider rebuilt from a quantised, meshopt-compressed GLB (a building cell's box level, a road cell's collider).
|
|
26
|
+
* The engine refuses meshopt in a collider (`runtime/colliderAdmission.ts`), so the geometry is decoded and rewritten with
|
|
27
|
+
* plain 16-bit quantised positions (`KHR_mesh_quantization`), keeping the node's translation and scale so cell-local
|
|
28
|
+
* coordinates survive. Positions may be normalised (box level) or raw lattice units (road collider); the flag is kept.
|
|
28
29
|
*/
|
|
29
|
-
export declare function
|
|
30
|
+
export declare function colliderFromQuantizedGlb(source: Uint8Array): Promise<{
|
|
30
31
|
bytes: Uint8Array;
|
|
31
32
|
triangles: number;
|
|
32
33
|
}>;
|
|
34
|
+
/** A building cell's collider: the box level's triangles and nothing else. */
|
|
35
|
+
export declare const colliderFromBoxLevel: typeof colliderFromQuantizedGlb;
|
|
36
|
+
/** World bounds of a quantised cell GLB: the first mesh node's translation and scale over its POSITION accessor min/max. */
|
|
37
|
+
export declare function quantizedGlbWorldBounds(bytes: Uint8Array): {
|
|
38
|
+
min: [number, number, number];
|
|
39
|
+
max: [number, number, number];
|
|
40
|
+
};
|
|
33
41
|
/**
|
|
34
42
|
* The one shared HLOD material resource: a never-drawn carrier mesh whose single opaque PBR material carries
|
|
35
43
|
* `HELIX_materials_city {kind: "facade"}` over a plain base. It has the same vertex attributes as the far cells that borrow
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
// GLB plumbing the assembler needs: a collider derived from a building cell's box level, the shared HLOD material carrier,
|
|
3
3
|
// and header inspection (accessor counts for the decoded-memory estimates).
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.sha256Hex = void 0;
|
|
5
|
+
exports.colliderFromBoxLevel = exports.sha256Hex = void 0;
|
|
6
6
|
exports.glbJson = glbJson;
|
|
7
7
|
exports.inspectGlb = inspectGlb;
|
|
8
|
-
exports.
|
|
8
|
+
exports.colliderFromQuantizedGlb = colliderFromQuantizedGlb;
|
|
9
|
+
exports.quantizedGlbWorldBounds = quantizedGlbWorldBounds;
|
|
9
10
|
exports.facadeMaterialCarrierGlb = facadeMaterialCarrierGlb;
|
|
10
11
|
const node_crypto_1 = require("node:crypto");
|
|
11
12
|
const core_1 = require("@gltf-transform/core");
|
|
@@ -42,34 +43,59 @@ function inspectGlb(bytes) {
|
|
|
42
43
|
return { vertices, indices, accessorBytes };
|
|
43
44
|
}
|
|
44
45
|
/**
|
|
45
|
-
* A static collider
|
|
46
|
-
* (`runtime/colliderAdmission.ts`), so the geometry is decoded and rewritten with
|
|
47
|
-
* (`KHR_mesh_quantization`), keeping the node's translation and
|
|
46
|
+
* A static collider rebuilt from a quantised, meshopt-compressed GLB (a building cell's box level, a road cell's collider).
|
|
47
|
+
* The engine refuses meshopt in a collider (`runtime/colliderAdmission.ts`), so the geometry is decoded and rewritten with
|
|
48
|
+
* plain 16-bit quantised positions (`KHR_mesh_quantization`), keeping the node's translation and scale so cell-local
|
|
49
|
+
* coordinates survive. Positions may be normalised (box level) or raw lattice units (road collider); the flag is kept.
|
|
48
50
|
*/
|
|
49
|
-
async function
|
|
51
|
+
async function colliderFromQuantizedGlb(source) {
|
|
50
52
|
await meshoptimizer_1.MeshoptDecoder.ready;
|
|
51
53
|
const io = new core_1.NodeIO().registerExtensions([extensions_1.KHRMeshQuantization, extensions_1.EXTMeshoptCompression]).registerDependencies({ 'meshopt.decoder': meshoptimizer_1.MeshoptDecoder }).setLogger(new core_1.Logger(core_1.Logger.Verbosity.ERROR));
|
|
52
|
-
const
|
|
53
|
-
const node =
|
|
54
|
+
const decoded = await io.readBinary(source);
|
|
55
|
+
const node = decoded.getRoot().listNodes().find((candidate) => candidate.getMesh());
|
|
54
56
|
const primitive = node?.getMesh()?.listPrimitives()[0];
|
|
55
57
|
const position = primitive?.getAttribute('POSITION');
|
|
56
58
|
const index = primitive?.getIndices();
|
|
57
59
|
if (!node || !primitive || !position || !index)
|
|
58
|
-
throw new Error('
|
|
60
|
+
throw new Error('colliderFromQuantizedGlb: the source has no indexed mesh');
|
|
61
|
+
if (!(position.getArray() instanceof Uint16Array))
|
|
62
|
+
throw new Error('colliderFromQuantizedGlb: expected 16-bit quantised positions');
|
|
63
|
+
const normalized = position.getNormalized();
|
|
59
64
|
const positions = Uint16Array.from(position.getArray());
|
|
60
|
-
if (!position.getNormalized() || !(position.getArray() instanceof Uint16Array))
|
|
61
|
-
throw new Error('colliderFromBoxLevel: expected 16-bit normalised positions');
|
|
62
65
|
const indices = Uint32Array.from(index.getArray());
|
|
63
66
|
const count = positions.length / 3;
|
|
64
67
|
const doc = new core_1.Document();
|
|
65
68
|
const buffer = doc.createBuffer();
|
|
66
69
|
doc.createExtension(extensions_1.KHRMeshQuantization).setRequired(true);
|
|
67
|
-
const accessor = (array, type,
|
|
68
|
-
const mesh = doc.createMesh('collider').addPrimitive(doc.createPrimitive().setAttribute('POSITION', accessor(positions, 'VEC3',
|
|
70
|
+
const accessor = (array, type, normalised = false) => doc.createAccessor().setBuffer(buffer).setArray(array).setType(type).setNormalized(normalised);
|
|
71
|
+
const mesh = doc.createMesh('collider').addPrimitive(doc.createPrimitive().setAttribute('POSITION', accessor(positions, 'VEC3', normalized)).setIndices(accessor(count <= 65535 ? Uint16Array.from(indices) : indices, 'SCALAR')));
|
|
69
72
|
doc.createScene('collider').addChild(doc.createNode('collider').setMesh(mesh).setTranslation(node.getTranslation()).setScale(node.getScale()));
|
|
70
73
|
const bytes = await new core_1.NodeIO().registerExtensions([extensions_1.KHRMeshQuantization]).writeBinary(doc);
|
|
71
74
|
return { bytes, triangles: indices.length / 3 };
|
|
72
75
|
}
|
|
76
|
+
/** A building cell's collider: the box level's triangles and nothing else. */
|
|
77
|
+
exports.colliderFromBoxLevel = colliderFromQuantizedGlb;
|
|
78
|
+
/** World bounds of a quantised cell GLB: the first mesh node's translation and scale over its POSITION accessor min/max. */
|
|
79
|
+
function quantizedGlbWorldBounds(bytes) {
|
|
80
|
+
const json = glbJson(bytes);
|
|
81
|
+
const node = (json.nodes ?? []).find((candidate) => candidate.mesh !== undefined);
|
|
82
|
+
if (!node || node.mesh === undefined)
|
|
83
|
+
throw new Error('quantizedGlbWorldBounds: no mesh node');
|
|
84
|
+
const t = node.translation ?? [0, 0, 0], k = node.scale ?? [1, 1, 1];
|
|
85
|
+
const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity];
|
|
86
|
+
for (const primitive of json.meshes[node.mesh].primitives) {
|
|
87
|
+
const accessor = json.accessors[primitive.attributes.POSITION];
|
|
88
|
+
if (!accessor.min || !accessor.max)
|
|
89
|
+
throw new Error('quantizedGlbWorldBounds: POSITION has no min/max');
|
|
90
|
+
// Normalised 16-bit positions span [0, 1] of the node scale; raw lattice units are used as stored.
|
|
91
|
+
const unit = accessor.normalized ? 1 / 65535 : 1;
|
|
92
|
+
for (let axis = 0; axis < 3; axis += 1) {
|
|
93
|
+
min[axis] = Math.min(min[axis], t[axis] + accessor.min[axis] * unit * k[axis]);
|
|
94
|
+
max[axis] = Math.max(max[axis], t[axis] + accessor.max[axis] * unit * k[axis]);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return { min, max };
|
|
98
|
+
}
|
|
73
99
|
/**
|
|
74
100
|
* The one shared HLOD material resource: a never-drawn carrier mesh whose single opaque PBR material carries
|
|
75
101
|
* `HELIX_materials_city {kind: "facade"}` over a plain base. It has the same vertex attributes as the far cells that borrow
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glbParts.js","sourceRoot":"","sources":["../../../src/city/assemble/glbParts.ts"],"names":[],"mappings":";AAAA,2HAA2H;AAC3H,4EAA4E;;;AAmB5E,0BAKC;AAKD,gCAcC;
|
|
1
|
+
{"version":3,"file":"glbParts.js","sourceRoot":"","sources":["../../../src/city/assemble/glbParts.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,10 @@ export interface ScenePlan {
|
|
|
34
34
|
props: {
|
|
35
35
|
enabled: boolean;
|
|
36
36
|
};
|
|
37
|
+
/** Procedural roads (`helix city roads build`): per 1 km cell meshes and colliders, and the terrain cut/fill under them. */
|
|
38
|
+
roads: {
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
};
|
|
37
41
|
publish: {
|
|
38
42
|
world: string | null;
|
|
39
43
|
visibility: 'private' | 'unlisted' | 'public';
|
|
@@ -20,6 +20,7 @@ function defaultScenePlan(sourcePath) {
|
|
|
20
20
|
terrain: { metresPerSample: 2 },
|
|
21
21
|
vegetation: { enabled: true, maxTrees: 6000 },
|
|
22
22
|
props: { enabled: true },
|
|
23
|
+
roads: { enabled: true },
|
|
23
24
|
publish: { world: null, visibility: 'unlisted' },
|
|
24
25
|
};
|
|
25
26
|
}
|
|
@@ -38,6 +39,7 @@ function readScenePlan(file) {
|
|
|
38
39
|
terrain: { ...base.terrain, ...plan.terrain },
|
|
39
40
|
vegetation: { ...base.vegetation, ...plan.vegetation },
|
|
40
41
|
props: { ...base.props, ...plan.props },
|
|
42
|
+
roads: { ...base.roads, ...plan.roads },
|
|
41
43
|
publish: { ...base.publish, ...plan.publish },
|
|
42
44
|
};
|
|
43
45
|
if (!merged.source.path)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/city/assemble/plan.ts"],"names":[],"mappings":";AAAA,mHAAmH;AACnH,oHAAoH;AACpH,8CAA8C;;;
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/city/assemble/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CitySource } from '../source';
|
|
2
|
+
import { type ConformedTerrain } from '../terrain';
|
|
3
|
+
import { type RoadBuildReport, type RoadCell } from '../roads';
|
|
4
|
+
export interface SceneRoads {
|
|
5
|
+
cells: RoadCell[];
|
|
6
|
+
/** The ground with the roads cut and filled into it, and the per-sample road roles; null when the terrain is not a DEM. */
|
|
7
|
+
conformed: ConformedTerrain | null;
|
|
8
|
+
report: RoadBuildReport;
|
|
9
|
+
}
|
|
10
|
+
/** Null when the source has no road graph (a city without streets still assembles). */
|
|
11
|
+
export declare function buildSceneRoads(source: CitySource, metresPerSample: number): Promise<SceneRoads | null>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Roads for a city scene: the procedural road generator (`src/city/roads`) run over the source, plus the terrain cut and
|
|
3
|
+
// fill under the finished ribbons. The cells (one meshopt GLB and one collider per 1,024 m) go into the composition; the
|
|
4
|
+
// conformed height raster and the asphalt / pavement roles go into the terrain, so distant ground still reads as streets
|
|
5
|
+
// once the road cells are evicted.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.buildSceneRoads = buildSceneRoads;
|
|
8
|
+
const terrain_1 = require("../terrain");
|
|
9
|
+
const roads_1 = require("../roads");
|
|
10
|
+
/** Null when the source has no road graph (a city without streets still assembles). */
|
|
11
|
+
async function buildSceneRoads(source, metresPerSample) {
|
|
12
|
+
if (!source.roads?.edges.length)
|
|
13
|
+
return null;
|
|
14
|
+
const ground = (0, terrain_1.buildGroundModel)(source);
|
|
15
|
+
const result = await (0, roads_1.generateRoads)({ source, ground, collectSurfaces: true });
|
|
16
|
+
if (!result.cells.length)
|
|
17
|
+
return null;
|
|
18
|
+
let conformed = null;
|
|
19
|
+
if (source.terrain && source.terrain.kind !== 'flat') {
|
|
20
|
+
const surfaces = [];
|
|
21
|
+
for (const surface of result.surfaces) {
|
|
22
|
+
surfaces.push({ positions: surface.asphalt.positions, indices: surface.asphalt.indices, role: 'asphalt' });
|
|
23
|
+
surfaces.push({ positions: surface.pavement.positions, indices: surface.pavement.indices, role: 'pavement' });
|
|
24
|
+
}
|
|
25
|
+
conformed = (0, terrain_1.conformCityTerrain)(ground, source.manifest.frame.boundsXZ, surfaces, { metresPerSample });
|
|
26
|
+
}
|
|
27
|
+
return { cells: result.cells, conformed, report: result.report };
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=roads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roads.js","sourceRoot":"","sources":["../../../src/city/assemble/roads.ts"],"names":[],"mappings":";AAAA,yHAAyH;AACzH,yHAAyH;AACzH,yHAAyH;AACzH,mCAAmC;;AAcnC,0CAeC;AA1BD,wCAA+G;AAC/G,oCAA8E;AAS9E,uFAAuF;AAChF,KAAK,UAAU,eAAe,CAAC,MAAkB,EAAE,eAAuB;IAC/E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAA,0BAAgB,EAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAa,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,SAAS,GAA4B,IAAI,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3G,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAChH,CAAC;QACD,SAAS,GAAG,IAAA,4BAAkB,EAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -5,6 +5,15 @@ export interface CitySplatOptions {
|
|
|
5
5
|
originZ: number;
|
|
6
6
|
spanM: number;
|
|
7
7
|
metresPerPixel: number;
|
|
8
|
+
/** The road generator's per-sample roles (0 natural, 1 asphalt, 2 pavement, 3 bank); when given they replace the painted street strokes. */
|
|
9
|
+
roads?: {
|
|
10
|
+
roles: Uint8Array;
|
|
11
|
+
samplesX: number;
|
|
12
|
+
samplesZ: number;
|
|
13
|
+
originX: number;
|
|
14
|
+
originZ: number;
|
|
15
|
+
metresPerSample: number;
|
|
16
|
+
};
|
|
8
17
|
}
|
|
9
18
|
/** Channel weights are exclusive per pixel (255 on one channel), so the preset's role rules never fight the authored picture. */
|
|
10
19
|
export declare const CITY_SPLAT_ROLES: {
|