diff --git a/Source/Engine/Level/Actors/EnvironmentProbe.cpp b/Source/Engine/Level/Actors/EnvironmentProbe.cpp
index 229266567..af22e7a4e 100644
--- a/Source/Engine/Level/Actors/EnvironmentProbe.cpp
+++ b/Source/Engine/Level/Actors/EnvironmentProbe.cpp
@@ -218,6 +218,12 @@ void EnvironmentProbe::OnDebugDrawSelected()
// Draw influence range
DEBUG_DRAW_WIRE_SPHERE(_sphere, Color::CornflowerBlue, 0, true);
+ // Draw capture point (if offset)
+ if (!CaptureOffset.IsZero())
+ {
+ DEBUG_DRAW_WIRE_SPHERE(BoundingSphere(_transform.LocalToWorld(CaptureOffset), 10.0f), Color::Blue, 0, false);
+ }
+
// Base
Actor::OnDebugDrawSelected();
}
@@ -243,6 +249,7 @@ void EnvironmentProbe::Serialize(SerializeStream& stream, const void* otherObj)
SERIALIZE(SortOrder);
SERIALIZE(UpdateMode);
SERIALIZE(CaptureNearPlane);
+ SERIALIZE(CaptureOffset);
SERIALIZE_MEMBER(IsCustomProbe, _isUsingCustomProbe);
SERIALIZE_MEMBER(ProbeID, _probe);
}
@@ -258,6 +265,7 @@ void EnvironmentProbe::Deserialize(DeserializeStream& stream, ISerializeModifier
DESERIALIZE(SortOrder);
DESERIALIZE(UpdateMode);
DESERIALIZE(CaptureNearPlane);
+ DESERIALIZE(CaptureOffset);
DESERIALIZE_MEMBER(IsCustomProbe, _isUsingCustomProbe);
DESERIALIZE_MEMBER(ProbeID, _probe);
diff --git a/Source/Engine/Level/Actors/EnvironmentProbe.h b/Source/Engine/Level/Actors/EnvironmentProbe.h
index 5481e0bab..62bca7ed5 100644
--- a/Source/Engine/Level/Actors/EnvironmentProbe.h
+++ b/Source/Engine/Level/Actors/EnvironmentProbe.h
@@ -69,6 +69,12 @@ public:
API_FIELD(Attributes="EditorOrder(25), Limit(0, float.MaxValue, 0.01f), EditorDisplay(\"Probe\")")
float CaptureNearPlane = 10.0f;
+ ///
+ /// Probe position offset to apply before capturing which can be used to adjust reflections.
+ ///
+ API_FIELD(Attributes = "EditorOrder(40), EditorDisplay(\"Probe\")")
+ Float3 CaptureOffset = Float3(0, 0, 0);
+
public:
///
/// Gets the probe radius.
diff --git a/Source/Engine/Renderer/ProbesRenderer.cpp b/Source/Engine/Renderer/ProbesRenderer.cpp
index 4c0a43cb6..8c8e2bc14 100644
--- a/Source/Engine/Renderer/ProbesRenderer.cpp
+++ b/Source/Engine/Renderer/ProbesRenderer.cpp
@@ -448,7 +448,7 @@ void ProbesRendererService::OnRender(RenderTask* task, GPUContext* context)
if (_current.Type == ProbeEntry::Types::EnvProbe)
{
auto envProbe = (EnvironmentProbe*)_current.Actor.Get();
- Vector3 position = envProbe->GetPosition();
+ Vector3 position = envProbe->GetTransform().LocalToWorld(envProbe->CaptureOffset);
float radius = envProbe->GetScaledRadius();
float nearPlane = Math::Max(0.1f, envProbe->CaptureNearPlane);