--- order: 2 title: 3D Workflows --- # 3D Workflows 3D in GDLink uses the same shape as everything else — a **listener** notices something, a **gate** decides whether it counts, an **executor** makes it happen — but the bricks target `Node3D`-based content: characters, cameras, vehicles, lights, and physics. Many bricks are shared with 2D; the ones below are the 3D specialists. ## Moving characters and objects **[Motion3D](../reference/generated/executors/motion3d_executor.md)** is the 3D workhorse. It provides character physics with configurable gravity, jump force, fall acceleration, and multi-jump — tuned for platformers, first-person games, and physics-based movement. **Move** — drive a `CharacterBody3D` forward while a key is held: ![Keyboard W set to While Held, through an AND gate, into a Motion3D Character-mode move executor](https://gdlink.solventech.ca/guide/assets/images/gdlink-assembly-move3d.png) **Jump** — Motion3D handles gravity, jump force, and multi-jump: ![Keyboard Space set to On Press, through an AND gate, into a Motion3D jump executor](https://gdlink.solventech.ca/guide/assets/images/gdlink-assembly-jump3d.png) **[Transform3D](../reference/generated/executors/transform3d_executor.md)** manipulates position, rotation, and scale directly — *Set* for instant changes, *Animate* for smooth transitions, driving several transform channels from one brick. It is also the canonical way to teleport in 3D (`operation = Set`, `loc_mode = Absolute`): ``` Collision(group=Teleporter) -> AND -> Transform3D(Set, loc=Absolute, target=ExitPad) ``` ## Cameras **[Camera](../reference/generated/executors/camera_executor.md)** controls switching, properties, and cinematic moves — cutscene and security cameras, death cams, FOV zoom, hit-feedback shake, and follow cams. Pair it with a listener to drive the cut: ``` Collision(group=DeathZone) -> AND -> Camera(switch=OverviewCam) Near(target=Player, range=3) -> AND -> Camera(switch=SecurityCam_2) ``` ## Vehicles and spring arms **[Vehicle3D](../reference/generated/executors/vehicle3d_executor.md)** is one brick for land, air, and water travel — land mode uses Godot's `VehicleBody3D` + `VehicleWheel3D` stack, air and water use GDLink's `RigidBody3D` kernels — so a transforming vehicle stays on one logic surface without swapping scene nodes. **[SpringArm3D](../reference/generated/executors/springarm3d_executor.md)** drives a `SpringArm3D` node's collision-aware length, automating third-person "zoom" via variable binding with a native smoothing kernel for catch-up movement. ## Lighting and materials **[Light](../reference/generated/executors/light_executor.md)** is a compact gameplay control surface for `Light2D`/`Light3D` — flicker, switch, pulse — a convenience layer, not a full mirror of the Godot inspector. For surfaces, **[Material](../reference/generated/executors/material_executor.md)** targets the common `StandardMaterial3D` properties, while **[Advanced Material Shader](../reference/generated/executors/advanced_material_shader_executor.md)** sets *arbitrary* `ShaderMaterial` uniforms by name — terrain blending, scrolling lava/water UVs, time-of-day and weather state. ``` Timer(every=0.1s) -> AND -> Light(mode=Flicker, energy_range=0.6..1.0) ``` ## Sensing the 3D world 3D logic leans on spatial listeners: **[Collision](../reference/generated/listeners/collision_listener.md)** — damage, pickups, trigger zones, ground detection, with filtering by name, group, material, or property. **[Near](../reference/generated/listeners/near_listener.md)** — a spherical radius for proximity triggers, AI awareness, and interaction range. **[Ray](../reference/generated/listeners/ray_listener.md)** — a cast in a direction for ground checks, line-of-sight, wall avoidance, and targeting. **[Radar](../reference/generated/listeners/radar_listener.md)** — a cone-shaped FOV for vision cones and security sweeps. **[Gravity](../reference/generated/listeners/gravity_listener.md)** — reacts to gravity state for zero-G animation and wall-walking. ``` Ray(direction=Down, length=1.2) -> AND -> Motion3D(set_grounded=true) Radar(fov=60, range=12, filter=Player) -> AND -> State(add=alerted) ``` ## Putting it together — a 3D character ``` Keyboard(WASD, While Held) -> AND -> Motion3D(move, Character mode) Keyboard(Space, On Press) -> AND -> Motion3D(jump) Ray(Down, 1.2) -> AND -> Animation(name=land) Mouse(delta) -> AND -> SpringArm3D(orbit) -> Camera(follow=Player) ``` Input drives motion, a downward ray confirms grounding, the mouse orbits a collision-aware spring arm, and the camera follows — every link visible in the graph. ## Where to go next - The full [Logic Reference](../reference/index.md) for every 3D brick - [Core Concepts → States](../concepts/states.md) for state-driven 3D animation - The **XR** guide for headset projects, and **Debugging** for proving 3D graphs