Staging en camera's
Gevorderd Laatst bijgewerkt 10 jul 2026
Op deze pagina
Zonder enige staging zet Questwright simpelweg elke spreker met het gezicht naar zijn gesprekspartner en kadreert het de scène automatisch; veel quests hebben nooit meer nodig. Staging is er voor blocking met meerdere NPC’s, gespawnde figuranten, verplaatsingen tijdens de dialoog en handmatig geplaatste camera’s.
Het staging-canvas
De rechterzone van de Studio is een canvas met bovenaanzicht van de scène rond haar anker (een geplaatste dialoogmarker, of de transform van de questgever zelf als je er geen plaatst). Sleep marks om personages te positioneren, draai ze, voeg waypoints toe en plaats camera’s. Zet de cursor in een dialoogregel en het canvas markeert wie er op dat moment waar staat: de bezetting wordt regel voor regel door de hele scène heen bijgehouden.

Alles wat je op het canvas bewerkt, wordt weggeschreven naar het staging:-blok van het
questbestand. Net als bij de rest van de Studio is met de hand schrijven gelijkwaardig:
staging:
anchor: DialogueMarker_Barn # a placed BP_QW_DialogueMarker; omit → the giver's transform
settle_timeout: 4.0 # seconds a walk may take before falling back to teleport
marks:
- { id: giver, actor: Bran, pos: [-100, -30], face: hero, keep: true }
- { id: hero, actor: Player, pos: [-100, 60], face: giver }
- { id: m1, actor: Mira, pos: [ 140, 30], face: anchor, appear: arrive }
- { id: m2, actor: Mira, pos: [ 40, -80], face: anchor } # waypoint
De belangrijkste velden van een mark:
| Veld | Functie |
|---|---|
id | Stabiele id; line.stage.to en camera’s verwijzen met de id naar marks |
actor | Speaker key; laat weg voor een puur waypoint |
pos | [x, y] in cm, ten opzichte van het anker; de hoogte wordt tijdens runtime op de grond vastgezet |
face / yaw | Automatisch draaien naar het anker / een spreker / een mark, of een handmatige hoek |
appear | placed (staat er al bij het begin van de scène) of arrive (spawnt buiten beeld en loopt binnen; zijn eerste regel wacht op aankomst) |
keep | Of een gespawnde deelnemer blijft staan nadat de dialoog eindigt (standaard: despawnen) |
Deelnemers die al in het level staan (en de Player) worden verplaatst; alle anderen worden gespawnd vanuit de cast en automatisch opgeruimd.
Verplaatsen tijdens de dialoog
Hang een stage:-overgang aan een willekeurige regel; de regel wacht tot de verplaatsing klaar is
(met een teleport als terugval na settle_timeout):
- { by: Mira, id: step, text: "Let me see the tracks.",
stage: [ { who: Mira, to: m2, approach: walk } ] }
Eén mark houdt één deelnemer tegelijk vast: de validator markeert twee mensen op dezelfde mark op hetzelfde moment als een fout, en het canvas toont het conflict.
Automatische camera’s
Standaard kadreert de compiler elke scène met een shotgrammatica: een establishing wide op de
eerste regel, close-ups na meerdere opeenvolgende regels van dezelfde spreker en
over-the-shoulder framing op basis van de geadresseerde in to: van elke regel. Per regel
overschrijf je dat met shot: (wide, ots, cu, reaction), en het beleid per quest is
instelbaar:
camera:
cu_run_threshold: 2 # close-up after N consecutive lines from one speaker (default 3)
establishing: true # establishing wide on the first line (default true)
choice_shot: wide # shot while the player is choosing (default wide)
Eigen cameramarks
Voor volledige regie zet je camera’s op het canvas; elke camera krijgt een live frustumvoorbeeld, zodat je precies ziet wat hij kadreert:

staging:
cameras:
- { id: cam_quick, class: dynamic, pos: [200, 0], height: 200, look_at: anchor }
- { id: cam_window, class: BP_MyCam_Voyeur, pos: [-320, 90], height: 150, look_at: giver, fov: 28 }
- { id: cam_dutch, class: BP_MyCam_Dutch, pos: [140, 200], height: 120, yaw: -135, pitch: -8 }
# on a line: shot: cam_window
# while choices unfold: camera: { choice_shot: cam_high }
Hoe het in elkaar past:
- De mark is een instantie: een stabiele id, een positie ten opzichte van het anker en een
richting. Regels verwijzen via
shot:naar de id van de mark, nooit naar een klasse of naar coördinaten. - De herbruikbare optiek (lens / DOF / filmback) zit in een cameraklasse, oftewel in elke
Blueprint-subklasse van
QuestwrightDialogueSceneCamera. Het ingebouwdeclass: dynamicheeft helemaal geen Blueprint nodig (standaardoptiek; combineer metfov:voor een snelle eigen hoek). look_atricht op het anker, een spreker of een mark en wordt op het moment van de cut opgelost, zodat een camera zijn onderwerp in beeld houdt, ook na verplaatsingen tijdens de dialoog.- De automatische grammatica kiest nooit eigen marks; die gelden alleen als expliciete
overschrijving per regel (of via
choice_shot). - Laadt een cameraklasse tijdens runtime niet, dan valt de regel terug op een wide shot met een waarschuwing; de scène breekt nooit.
Ontwerpnotities
Camera’s snijden direct (SetViewTargetWithBlend met blend nul) en personages bewegen met de
eigen AI-locomotie van de engine. Er is geen Sequencer en er zijn geen gebakken cinematics, en
daarom blijven scènes werken wanneer je level, personages of animaties veranderen. Alle
verwijzingen gaan naar stabiele id’s (marks, regels, quests), nooit naar coördinaten of naar de
binnenkant van klassen.