|
@@ -106,6 +106,7 @@ ReflectionProbe::ReflectionProbe()
|
|
mDirty = false;
|
|
mDirty = false;
|
|
|
|
|
|
mRadius = 10;
|
|
mRadius = 10;
|
|
|
|
+ mProbeRefScale = Point3F::One*10;
|
|
|
|
|
|
mUseCubemap = false;
|
|
mUseCubemap = false;
|
|
mUseHDRCaptures = true;
|
|
mUseHDRCaptures = true;
|
|
@@ -130,7 +131,7 @@ ReflectionProbe::ReflectionProbe()
|
|
mPrefilterMap = nullptr;
|
|
mPrefilterMap = nullptr;
|
|
mIrridianceMap = nullptr;
|
|
mIrridianceMap = nullptr;
|
|
|
|
|
|
- mProbePosOffset = Point3F::Zero;
|
|
|
|
|
|
+ mProbeRefOffset = Point3F::Zero;
|
|
mEditPosOffset = false;
|
|
mEditPosOffset = false;
|
|
|
|
|
|
mProbeInfoIdx = -1;
|
|
mProbeInfoIdx = -1;
|
|
@@ -160,13 +161,14 @@ void ReflectionProbe::initPersistFields()
|
|
&_setEnabled, &defaultProtectedGetFn, "Regenerate Voxel Grid");
|
|
&_setEnabled, &defaultProtectedGetFn, "Regenerate Voxel Grid");
|
|
|
|
|
|
addField("radius", TypeF32, Offset(mRadius, ReflectionProbe), "The name of the material used to render the mesh.");
|
|
addField("radius", TypeF32, Offset(mRadius, ReflectionProbe), "The name of the material used to render the mesh.");
|
|
- addField("posOffset", TypePoint3F, Offset(mProbePosOffset, ReflectionProbe), "");
|
|
|
|
|
|
|
|
//addProtectedField("EditPosOffset", TypeBool, Offset(mEditPosOffset, ReflectionProbe),
|
|
//addProtectedField("EditPosOffset", TypeBool, Offset(mEditPosOffset, ReflectionProbe),
|
|
// &_toggleEditPosOffset, &defaultProtectedGetFn, "Toggle Edit Pos Offset Mode", AbstractClassRep::FieldFlags::FIELD_ComponentInspectors);
|
|
// &_toggleEditPosOffset, &defaultProtectedGetFn, "Toggle Edit Pos Offset Mode", AbstractClassRep::FieldFlags::FIELD_ComponentInspectors);
|
|
endGroup("Rendering");
|
|
endGroup("Rendering");
|
|
|
|
|
|
addGroup("Reflection");
|
|
addGroup("Reflection");
|
|
|
|
+ addField("refOffset", TypePoint3F, Offset(mProbeRefOffset, ReflectionProbe), "");
|
|
|
|
+ addField("refScale", TypePoint3F, Offset(mProbeRefScale, ReflectionProbe), "");
|
|
addField("ReflectionMode", TypeReflectionModeEnum, Offset(mReflectionModeType, ReflectionProbe),
|
|
addField("ReflectionMode", TypeReflectionModeEnum, Offset(mReflectionModeType, ReflectionProbe),
|
|
"The type of mesh data to use for collision queries.");
|
|
"The type of mesh data to use for collision queries.");
|
|
|
|
|
|
@@ -319,7 +321,7 @@ void ReflectionProbe::setTransform(const MatrixF & mat)
|
|
if (!mEditPosOffset)
|
|
if (!mEditPosOffset)
|
|
Parent::setTransform(mat);
|
|
Parent::setTransform(mat);
|
|
else
|
|
else
|
|
- mProbePosOffset = mat.getPosition();
|
|
|
|
|
|
+ mProbeRefOffset = mat.getPosition();
|
|
|
|
|
|
mDirty = true;
|
|
mDirty = true;
|
|
|
|
|
|
@@ -338,7 +340,8 @@ U32 ReflectionProbe::packUpdate(NetConnection *conn, U32 mask, BitStream *stream
|
|
{
|
|
{
|
|
mathWrite(*stream, getTransform());
|
|
mathWrite(*stream, getTransform());
|
|
mathWrite(*stream, getScale());
|
|
mathWrite(*stream, getScale());
|
|
- mathWrite(*stream, mProbePosOffset);
|
|
|
|
|
|
+ mathWrite(*stream, mProbeRefOffset);
|
|
|
|
+ mathWrite(*stream, mProbeRefScale);
|
|
}
|
|
}
|
|
|
|
|
|
if (stream->writeFlag(mask & ShapeTypeMask))
|
|
if (stream->writeFlag(mask & ShapeTypeMask))
|
|
@@ -387,7 +390,8 @@ void ReflectionProbe::unpackUpdate(NetConnection *conn, BitStream *stream)
|
|
|
|
|
|
setTransform(mObjToWorld);
|
|
setTransform(mObjToWorld);
|
|
|
|
|
|
- mathRead(*stream, &mProbePosOffset);
|
|
|
|
|
|
+ mathRead(*stream, &mProbeRefOffset);
|
|
|
|
+ mathRead(*stream, &mProbeRefScale);
|
|
}
|
|
}
|
|
|
|
|
|
if (stream->readFlag()) // ShapeTypeMask
|
|
if (stream->readFlag()) // ShapeTypeMask
|
|
@@ -487,7 +491,6 @@ void ReflectionProbe::updateProbeParams()
|
|
mProbeInfo->mTransform = getWorldTransform();
|
|
mProbeInfo->mTransform = getWorldTransform();
|
|
|
|
|
|
mProbeInfo->mPosition = getPosition();
|
|
mProbeInfo->mPosition = getPosition();
|
|
-
|
|
|
|
mObjScale.set(mRadius, mRadius, mRadius);
|
|
mObjScale.set(mRadius, mRadius, mRadius);
|
|
|
|
|
|
// Skip our transform... it just dirties mask bits.
|
|
// Skip our transform... it just dirties mask bits.
|
|
@@ -500,7 +503,8 @@ void ReflectionProbe::updateProbeParams()
|
|
|
|
|
|
mProbeInfo->mIsSkylight = false;
|
|
mProbeInfo->mIsSkylight = false;
|
|
|
|
|
|
- mProbeInfo->mProbePosOffset = mProbePosOffset;
|
|
|
|
|
|
+ mProbeInfo->mProbeRefOffset = mProbeRefOffset;
|
|
|
|
+ mProbeInfo->mProbeRefScale = mProbeRefScale;
|
|
|
|
|
|
mProbeInfo->mDirty = true;
|
|
mProbeInfo->mDirty = true;
|
|
mProbeInfo->mScore = mMaxDrawDistance;
|
|
mProbeInfo->mScore = mMaxDrawDistance;
|
|
@@ -742,7 +746,7 @@ void ReflectionProbe::prepRenderImage(SceneRenderState *state)
|
|
mat.scale(Point3F(1, 1, 1));
|
|
mat.scale(Point3F(1, 1, 1));
|
|
|
|
|
|
Point3F centerPos = mat.getPosition();
|
|
Point3F centerPos = mat.getPosition();
|
|
- centerPos += mProbePosOffset;
|
|
|
|
|
|
+ centerPos += mProbeRefOffset;
|
|
mat.setPosition(centerPos);
|
|
mat.setPosition(centerPos);
|
|
|
|
|
|
GFX->setWorldMatrix(mat);
|
|
GFX->setWorldMatrix(mat);
|
|
@@ -786,21 +790,23 @@ void ReflectionProbe::_onRenderViz(ObjectRenderInst *ri,
|
|
ColorI color = ColorI::WHITE;
|
|
ColorI color = ColorI::WHITE;
|
|
color.alpha = 25;
|
|
color.alpha = 25;
|
|
|
|
|
|
|
|
+ const MatrixF worldToObjectXfm = getTransform();
|
|
if (mProbeShapeType == ProbeRenderInst::Sphere)
|
|
if (mProbeShapeType == ProbeRenderInst::Sphere)
|
|
{
|
|
{
|
|
draw->drawSphere(desc, mRadius, getPosition(), color);
|
|
draw->drawSphere(desc, mRadius, getPosition(), color);
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
- const MatrixF worldToObjectXfm = getTransform();
|
|
|
|
-
|
|
|
|
- Box3F cube(-Point3F(mRadius, mRadius, mRadius),Point3F(mRadius, mRadius, mRadius));
|
|
|
|
- Box3F wb = getWorldBox();
|
|
|
|
- cube.setCenter(getPosition()+mProbePosOffset);
|
|
|
|
- wb.setCenter(getPosition() + mProbePosOffset);
|
|
|
|
- draw->drawCube(desc, cube, color, &worldToObjectXfm);
|
|
|
|
- draw->drawCube(desc, wb, color, &worldToObjectXfm);
|
|
|
|
|
|
+ Box3F projCube(-Point3F(mRadius, mRadius, mRadius),Point3F(mRadius, mRadius, mRadius));
|
|
|
|
+ projCube.setCenter(getPosition());
|
|
|
|
+ draw->drawCube(desc, projCube, color, &worldToObjectXfm);
|
|
}
|
|
}
|
|
|
|
+ Box3F refCube = getWorldBox();
|
|
|
|
+ refCube.set(mProbeRefScale);
|
|
|
|
+ refCube.setCenter(getPosition() + mProbeRefOffset);
|
|
|
|
+ color = ColorI::BLUE;
|
|
|
|
+ color.alpha = 25;
|
|
|
|
+ draw->drawCube(desc, refCube, color, &worldToObjectXfm);
|
|
}
|
|
}
|
|
|
|
|
|
void ReflectionProbe::setPreviewMatParameters(SceneRenderState* renderState, BaseMatInstance* mat)
|
|
void ReflectionProbe::setPreviewMatParameters(SceneRenderState* renderState, BaseMatInstance* mat)
|