Toast Engine
Loading...
Searching...
No Matches
toast::ReflectionProbe Class Reference

A volume in which reflections are reprojected onto local geometry instead of infinity. More...

#include <reflection_probe.hpp>

Inheritance diagram for toast::ReflectionProbe:
Collaboration diagram for toast::ReflectionProbe:

Public Member Functions

auto influenceRadius () const noexcept -> float
auto boxExtents () const noexcept -> const glm::vec3 &
auto intensity () const noexcept -> float
auto usesBoxProjection () const noexcept -> bool
auto resolution () const noexcept -> uint32_t
auto isPrebaked () const noexcept -> bool
Public Member Functions inherited from toast::Node3D
auto raycast (glm::vec3 dir, glm::vec3 offset=glm::vec3(0.0f), float max_distance=-1.0f, bool ignore_self=true, const std::vector< int > &layers=std::vector< int > {}) const -> std::optional< physics::RayHit >
 The nearest thing a ray from this node hits.
auto raymulticast (glm::vec3 dir, glm::vec3 offset=glm::vec3(0.0f), float max_distance=-1.0f, int max_hits=-1, bool ignore_self=true, const std::vector< int > &layers=std::vector< int > {}) const -> std::vector< physics::RayHit >
 Up to max_hits things collisions.
auto linecast (glm::vec3 from, glm::vec3 to, int max_hits=-1, bool ignore_self=true, const std::vector< int > &layers=std::vector< int > {}) const -> std::vector< physics::RayHit >
 Everything on the line between two points, nearest to from first.
void lookAt (glm::vec3 target, glm::vec3 up={0.0f, 0.0f, 1.0f})
 Orients the node so its forward axis points at a world-space target.
void lookAtZ (glm::vec3 target)
 lookAt() constrained to the XY plane; the node faces the target with no roll
auto up () const -> glm::vec3
auto forward () const -> glm::vec3
void syncTransform () const
void syncWorldTransform () const
void refreshTransformParent ()
auto getTransform () const noexcept -> const glm::mat4 &
auto getWorldTransform () const noexcept -> const glm::mat4 &
virtual void onEditorTransformChanged ()
Public Member Functions inherited from toast::Node
auto uid () const noexcept -> const UID &
 Stable unique identifier, assigned at construction or deserialization. Never changes.
auto rid () const noexcept -> std::uintptr_t
 Runtime identifier for this node, guaranteed to be unique but changes every time.
auto name () const noexcept -> std::string_view
 Display name. Siblings may share one - this is not an identifier.
void name (std::string_view name) noexcept
 Sets the display name.
auto enabled () const noexcept -> bool
 Whether this node is currently active.
auto participatesIn (NodeOwnerParticipation use) const noexcept -> bool
auto owner () const noexcept -> INodeOwner *
 The World or Workspace this node belongs to.
void enabled (bool value) noexcept
 Sets the local enabled flag and propagates the change to all children.
auto box () const noexcept -> Box< Node >
 Returns an owning handle to this node.
auto info () const -> const NodeInfo *
 Reflection metadata registered by the code generator.
auto sourcePrefab () const noexcept -> const assets::Handle< assets::Prefab > &
 The prefab this node was instantiated from.
auto isInstanceRoot () const noexcept -> bool
 Whether this node is the root of a prefab instance.
auto root () const noexcept -> Box< Node >
 The topmost ancestor that is not the world root.
auto state () const noexcept -> NodeState
auto type () const noexcept -> NodeType
auto listener () noexcept -> event::Listener &
 The event Listener owned by this node. Lazy-allocated, freed only with the node.
auto parent () noexcept -> Box< Node >
 The immediate parent of this node.
auto children () const noexcept -> const std::vector< Box< Node > > &
 The ordered list of direct children.
auto childrenSnapshot () const -> std::vector< Box< Node > >
auto create (std::string_view type="toast::Node") noexcept -> Box< Node >
 Creates a new child node of the given type and attaches it to this node.
auto spawn (UID uid) noexcept -> Box< Node >
 Asynchronously instantiates a prefab as a child of this node.
auto spawn (std::string_view uri) noexcept -> Box< Node >
 Asynchronously instantiates a prefab as a child of this node.
auto find (std::string_view query) -> Box< Node >
 Depth-first search for a single descendant.
auto find (const UID &uid) -> Box< Node >
 Looks up a node by UID within this node's local root.
auto search (std::string_view query) -> std::vector< Box< Node > >
 Depth-first search for all matching descendants.
auto childrenOfType (const NodeInfo *type) const -> std::vector< Box< Node > >
auto searchType (const NodeInfo *type) const -> std::vector< Box< Node > >
void addDependsOn (Node &other)
void removeDependsOn (Node &other)
void interactsWith (Node &other)
 Declares that the scripts of this node and of other call each other.
auto scriptRuntime () noexcept -> scripting::ScriptRuntime *
auto hasTickFunction (TickFunctionList mask) const noexcept -> bool
auto scriptVm (TickFunctionList func) const noexcept -> std::optional< size_t >
 The interpreter this node runs Lua on while it executes func, empty when it runs none.
auto scriptVmAny () const noexcept -> std::optional< size_t >
 The interpreter the scripts of this node live on whatever phase they define.
auto hasCallable (std::string_view name) const noexcept -> bool
void reloadScripts () noexcept
 Rebuilds the script runtime after a script asset changed (hot reload or attach).
auto scripts () const noexcept -> const std::vector< assets::Handle< assets::Script > > &
void setScripts (std::vector< assets::Handle< assets::Script > > scripts) noexcept
void addScript (const assets::Handle< assets::Script > &script) noexcept
template<typename R = void, typename... Args>
auto call (std::string_view name, Args &&... args) -> R
 Invokes all C++ reflected implementations of name (base→derived) and all same-named Lua functions across every attached script, forwarding args.
template<typename T>
auto get (std::string_view name) const -> T
 Reads a named value: reflected C++ field first, then the first matching Lua instance variable.
template<typename T>
void set (std::string_view name, const T &value)
 Writes a named value: reflected C++ field if present and every Lua instance variable of that name that already exists.
auto isRecursivePrefab () const noexcept -> bool

Additional Inherited Members

Public Attributes inherited from toast::Node3D
glm::vec3 position = glm::vec3(0.0f)
glm::quat rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f)
glm::vec3 scale = glm::vec3(1.0f)
glm::vec3 world_position = glm::vec3(0.0f)
glm::quat world_rotation = glm::quat(1.0f, 0.0f, 0.0f, 0.0f)
glm::vec3 world_scale = glm::vec3(1.0f)
Public Attributes inherited from toast::Node
signals::Signal< Box< Node > > on_enable
signals::Signal< Box< Node > > on_disable
signals::Signal< Box< Node > > on_begin
signals::Signal< Box< Node > > on_end
Static Public Attributes inherited from toast::Node3D
static const glm::vec3 world_up = {0.0f, 0.0f, 1.0f}
static const glm::vec3 world_forward = {0.0f, 1.0f, 0.0f}
 Z axis.
static const glm::vec3 world_right = {1.0f, 0.0f, 0.0f}
 Y axis.
Protected Member Functions inherited from toast::Node3D
void init ()
 X axis.
Protected Member Functions inherited from toast::Node
virtual void onReflectedFieldChanged (std::string_view)
virtual void onScriptsReloaded ()
virtual void onScriptsReloading ()
virtual auto luaAffinity () const noexcept -> std::optional< size_t >
virtual void onScriptVarChanged (std::string_view path)
virtual void updateInspectorMessages ()
void addInspectorMessage (const NodeMessage &message)
void removeInspectorMessage (const NodeMessage &message)
Protected Attributes inherited from toast::Node
INodeOwner * m_owner = nullptr

Detailed Description

A volume in which reflections are reprojected onto local geometry instead of infinity.

An environment cubemap is infinitely distant by construction: every surface in the world reflects it as though the room were unbounded, so a wall two metres away and the sky behind it arrive from the same direction. Indoors that reads as wrong immediately - reflections slide across surfaces as the camera moves rather than staying attached to the geometry that should be producing them

A probe fixes that by describing the shape of the space it covers. The reflection ray is intersected against that shape and re-aimed at the hit point, so a reflection lands on the wall it belongs to. Where probes do not reach, shading falls back to the global environment, which is why the whole thing degrades gracefully rather than popping

Note
A probe reprojects its own captured cubemap once baked, and the global environment until then - so an unbaked probe still corrects the shape of reflections, just not their content

Member Function Documentation

◆ boxExtents()

auto toast::ReflectionProbe::boxExtents ( ) const -> const glm::vec3 &
inlinenodiscardnoexcept
Returns
half-extents of the box the reflection ray is intersected against

◆ influenceRadius()

auto toast::ReflectionProbe::influenceRadius ( ) const -> float
inlinenodiscardnoexcept
Returns
radius at which this probe stops contributing entirely

◆ isPrebaked()

auto toast::ReflectionProbe::isPrebaked ( ) const -> bool
inlinenodiscardnoexcept
Returns
true when this probe loads its capture from disk rather than baking it each run

◆ resolution()

auto toast::ReflectionProbe::resolution ( ) const -> uint32_t
inlinenodiscardnoexcept
Returns
face resolution of this probe's cubemap, clamped to what the pass supports

The documentation for this class was generated from the following files: