-
Notifications
You must be signed in to change notification settings - Fork 2
Editor Guide
The editor is a custom Blender-style toolkit drawn through the renderer's own Vulkan (no external UI
libs). Everything is undoable (Ctrl+Z / Ctrl+Y), everything persists to saved/<env>.hsledit,
and a cook auto-saves first — you can't lose edits to a cook.
| Input | Action |
|---|---|
WASD + QE
|
Fly camera (scroll = speed) |
| Left-drag (viewport) | Look around |
| Click | Select mesh / item (outliner syncs) |
Tab / Shift+Tab, N / B
|
Cycle mesh selection |
F |
Wireframe |
P |
Screenshot (hsr_shot.png) |
Esc |
Cancel tool → deselect → quit |
The outliner has per-item / per-mesh visibility eyes, rename, multi-select (drag-paint the eyes to toggle rows quickly), and a right-click context menu (component from mesh, collision exclude, delete, …). Deleted meshes are gone from the cook too.
Move / Rotate / Scale gizmos (always-visible viewport toggles), with numeric Position / Rotation (euler) / Quat / Scale rows in the Object tab — the gizmo and the numbers edit the same state. The center square on the scale gizmo = uniform scale. X-ray mode helps grab buried things.
+ Add (or right-click a mesh → "Make component from mesh") places real Horizon components —
each shows the actual Meta class it cooks to:
| Item | Cooks to | Notes |
|---|---|---|
| Spawn Point | SpawnPointPlatformComponent |
≥1 local-start spawn required; auto-floor snap. |
| Chair / Seat | AvatarSittingPlatformComponent |
Haven-exact recipe: sittable, billboard icon, draggable exit handle (stand-up spot). |
| Box Collider | ColliderBoxPlatformComponent |
Invisible wall / path blocker; walk-sim respects it. |
| Navmesh | ColliderMeshPlatformComponent |
Bake walkable collision from selected meshes (Flat / Smart / Selection modes) — see below. |
| Wall Placement | hpi::WallPlacementComponent |
Where the Quest home lets you hang windows/posters. The viewport arrow shows the props side; auto-fit guesses it from your camera — if it guessed wrong, press "Flip facing (props on the OTHER side)" in the item panel (or rotate it 180°). |
| Locomotion Hotspot | hpi::LocomotionHotspotComponent |
Teleport dot (visible icon + trigger). |
| Kill Floor / Boundary | ColliderBoundaryPlanePlatformComponent |
Respawn plane; facing = UnitAxis. |
Navmesh: multi-select the floors you want walkable → + Add → Navmesh (from selection) → cook.
The green overlay (and slope coloring) previews exactly what cooks. Meshes can be collision-
excluded from the right-click menu.
Walk mode (Walk-sim toggle): drop into the env as a player — real floor collision, box/wall
blocking, stairs — to sanity-check the navmesh before cooking. P exits.
- Tint / flags per mesh (blend, additive, double-sided…) — WYSIWYG: preview and cook match.
- Adjust texture — brightness / saturation / hue baked into the texture, live preview.
- Remove baked shadows — large-scale luminance flatten for de-lightmapping a texture.
- Generate texture — procedural replacements.
-
Texture export (PNG next to
saved/) and one-step texture undo. -
Shader decompile → edit → hot-reload: dumps the mesh's active SPIR-V to GLSL
(
saved/shaders/), you edit it, "Compile + APPLY" hot-reloads it live in the viewport.
- Knife — cut the selected mesh (selection-scoped; it won't slice everything in the path).
- Slicer / hole inspector — visual "which hole to seal" picking, contour ear-clip rebuild.
-
Prefabs — save a selection as
.hsrprefab, drag-drop it into any env to spawn it. - Dome / skybox tools — sphere-fit dome completion (closes half-domes on the fitted sphere), "Make skybox backdrop" for far vistas (escapes the device's far-clip), far-fit.
- Scrub / pause / speed for every animation in the env; the playhead advances live.
- Quest sync: with the device bridge connected, pause/scrub mirrors to the headset — desktop and headset freeze on the same frame.
- Audio panel: play the env's background loop on PC, replace it with your own file (auto-converts), or export it. Cooks as an auto-starting FMOD bank.
Export → Blender: writes the whole env as glTF 2.0 (+ a .blendmeta.json sidecar).
Import ← Blender: re-imports the edited glTF as a fresh editor instance — edit meshes/UVs in
Blender, then cook from here.
"Preview cooked (HSL)" swaps the viewport to the just-cooked APK in the same window — you see the closest desktop approximation of what the device gets (verify on the headset — the preview can't always match it), then "Back to source" returns. Drag-and-drop any other env file to switch environments in place.