mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 00:24:40 +00:00
Corrections to make it use the correct transform, as well as passing along the scale as our extents in the bbMax.
Adjusts the box influence logic to try the bsf method.
This commit is contained in:
parent
3afbdff871
commit
2bf67f7fa5
5 changed files with 65 additions and 188 deletions
|
|
@ -556,19 +556,24 @@ void ReflectionProbe::updateProbeParams()
|
||||||
|
|
||||||
mProbeInfo->mProbeShapeType = mProbeShapeType;
|
mProbeInfo->mProbeShapeType = mProbeShapeType;
|
||||||
|
|
||||||
mProbeInfo->mTransform = getWorldTransform();
|
MatrixF transform = getTransform();
|
||||||
|
|
||||||
|
|
||||||
mProbeInfo->mPosition = getPosition();
|
mProbeInfo->mPosition = getPosition();
|
||||||
|
|
||||||
if(mProbeShapeType == ProbeRenderInst::Sphere)
|
if (mProbeShapeType == ProbeRenderInst::Sphere)
|
||||||
mObjScale.set(mRadius, mRadius, mRadius);
|
mObjScale.set(mRadius, mRadius, mRadius);
|
||||||
|
|
||||||
|
transform.scale(getScale());
|
||||||
|
mProbeInfo->mTransform = transform.inverse();
|
||||||
|
|
||||||
// Skip our transform... it just dirties mask bits.
|
// Skip our transform... it just dirties mask bits.
|
||||||
Parent::setTransform(mObjToWorld);
|
Parent::setTransform(mObjToWorld);
|
||||||
|
|
||||||
resetWorldBox();
|
resetWorldBox();
|
||||||
|
|
||||||
mProbeInfo->mBounds = mWorldBox;
|
mProbeInfo->mBounds = mWorldBox;
|
||||||
|
mProbeInfo->mExtents = getScale();
|
||||||
mProbeInfo->mRadius = mRadius;
|
mProbeInfo->mRadius = mRadius;
|
||||||
|
|
||||||
mProbeInfo->mIsSkylight = false;
|
mProbeInfo->mIsSkylight = false;
|
||||||
|
|
|
||||||
|
|
@ -346,7 +346,7 @@ void RenderProbeMgr::_setupStaticParameters()
|
||||||
|
|
||||||
probeWorldToObjData[mEffectiveProbeCount] = curEntry.getTransform();
|
probeWorldToObjData[mEffectiveProbeCount] = curEntry.getTransform();
|
||||||
Point3F bbMin = refPos - curEntry.mProbeRefScale/2;
|
Point3F bbMin = refPos - curEntry.mProbeRefScale/2;
|
||||||
Point3F bbMax = refPos + curEntry.mProbeRefScale/2;
|
Point3F bbMax = curEntry.mExtents/4;
|
||||||
probeBBMinData[mEffectiveProbeCount] = Point4F(bbMin.x, bbMin.y, bbMin.z, 0);
|
probeBBMinData[mEffectiveProbeCount] = Point4F(bbMin.x, bbMin.y, bbMin.z, 0);
|
||||||
probeBBMaxData[mEffectiveProbeCount] = Point4F(bbMax.x, bbMax.y, bbMax.z, 0);
|
probeBBMaxData[mEffectiveProbeCount] = Point4F(bbMax.x, bbMax.y, bbMax.z, 0);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,7 @@ struct ProbeRenderInst : public SystemInterface<ProbeRenderInst>
|
||||||
bool mDirty;
|
bool mDirty;
|
||||||
|
|
||||||
Box3F mBounds;
|
Box3F mBounds;
|
||||||
|
Point3F mExtents;
|
||||||
Point3F mPosition;
|
Point3F mPosition;
|
||||||
Point3F mProbeRefOffset;
|
Point3F mProbeRefOffset;
|
||||||
Point3F mProbeRefScale;
|
Point3F mProbeRefScale;
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ new SimGroup(MissionGroup) {
|
||||||
canSaveDynamicFields = "1";
|
canSaveDynamicFields = "1";
|
||||||
};
|
};
|
||||||
new Skylight() {
|
new Skylight() {
|
||||||
enabled = "0";
|
enabled = "1";
|
||||||
ReflectionMode = "Baked Cubemap";
|
ReflectionMode = "Baked Cubemap";
|
||||||
StaticCubemap = "sky_day_hdr_cubemap";
|
StaticCubemap = "sky_day_hdr_cubemap";
|
||||||
position = "0 0 -0.0560153";
|
position = "0 0 -0.0560153";
|
||||||
|
|
@ -130,7 +130,7 @@ new SimGroup(MissionGroup) {
|
||||||
refOffset = "0 0 0";
|
refOffset = "0 0 0";
|
||||||
refScale = "10 10 10";
|
refScale = "10 10 10";
|
||||||
ReflectionMode = "Baked Cubemap";
|
ReflectionMode = "Baked Cubemap";
|
||||||
position = "0 0.261914 4.84266";
|
position = "0.130544 0.492826 4.70918";
|
||||||
rotation = "1 0 0 0";
|
rotation = "1 0 0 0";
|
||||||
scale = "10 10 10";
|
scale = "10 10 10";
|
||||||
canSave = "1";
|
canSave = "1";
|
||||||
|
|
@ -138,13 +138,13 @@ new SimGroup(MissionGroup) {
|
||||||
persistentId = "8072e1be-2846-11e7-9f56-abd46b190c60";
|
persistentId = "8072e1be-2846-11e7-9f56-abd46b190c60";
|
||||||
};
|
};
|
||||||
new BoxEnvironmentProbe() {
|
new BoxEnvironmentProbe() {
|
||||||
enabled = "0";
|
enabled = "1";
|
||||||
refOffset = "0 0 0";
|
refOffset = "0 0 0";
|
||||||
refScale = "10 10 10";
|
refScale = "10 10 10";
|
||||||
ReflectionMode = "Baked Cubemap";
|
ReflectionMode = "Baked Cubemap";
|
||||||
position = "0 0 0";
|
position = "-26.7509 2.50947 1.94424";
|
||||||
rotation = "1 0 0 0";
|
rotation = "0 0 -1 27.2465";
|
||||||
scale = "10 10 10";
|
scale = "10 5 10";
|
||||||
canSave = "1";
|
canSave = "1";
|
||||||
canSaveDynamicFields = "1";
|
canSaveDynamicFields = "1";
|
||||||
persistentId = "f281a5ff-1ae9-11e9-9c9a-df9135416cc7";
|
persistentId = "f281a5ff-1ae9-11e9-9c9a-df9135416cc7";
|
||||||
|
|
@ -157,166 +157,6 @@ new SimGroup(MissionGroup) {
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
reflectionPath = "levels/probeTest/probes/";
|
||||||
SkyColor = "0.5 0.5 1 1";
|
SkyColor = "0.5 0.5 1 1";
|
||||||
};
|
};
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "e9c2eed2-1ae9-11e9-9c9a-df9135416cc7";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "f4db4dde-1ae9-11e9-9c9a-df9135416cc7";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "9b2db461-3291-11e9-8898-df29fd75d18c";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "9850277f-3291-11e9-8898-df29fd75d18c";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "9752cd1f-3291-11e9-8898-df29fd75d18c";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "9536f9d8-3291-11e9-8898-df29fd75d18c";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "8f479759-3291-11e9-8898-df29fd75d18c";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new BoxEnvironmentProbe() {
|
|
||||||
enabled = "0";
|
|
||||||
refOffset = "0 0 0";
|
|
||||||
refScale = "10 10 10";
|
|
||||||
ReflectionMode = "Baked Cubemap";
|
|
||||||
position = "0 0 0";
|
|
||||||
rotation = "1 0 0 0";
|
|
||||||
scale = "10 10 10";
|
|
||||||
canSave = "1";
|
|
||||||
canSaveDynamicFields = "1";
|
|
||||||
persistentId = "8856e1d2-3291-11e9-8898-df29fd75d18c";
|
|
||||||
GroundColor = "0.8 0.7 0.5 1";
|
|
||||||
IndirectLight = "1 1 1 1";
|
|
||||||
IndirectLightMode = "Spherical Harmonics";
|
|
||||||
Intensity = "1";
|
|
||||||
posOffset = "0 0 0";
|
|
||||||
radius = "5";
|
|
||||||
reflectionPath = "levels/probeTest/probes/";
|
|
||||||
SkyColor = "0.5 0.5 1 1";
|
|
||||||
};
|
|
||||||
new ConvexShape() {
|
new ConvexShape() {
|
||||||
Material = "Grid512_Orange_Mat";
|
Material = "Grid512_Orange_Mat";
|
||||||
position = "0.487092 0.454657 9.4951";
|
position = "0.487092 0.454657 9.4951";
|
||||||
|
|
@ -327,7 +167,7 @@ new SimGroup(MissionGroup) {
|
||||||
|
|
||||||
surface = "0 0 0 1 0 0 0.5";
|
surface = "0 0 0 1 0 0 0.5";
|
||||||
surface = "0 1 0 0 0 0 -0.5";
|
surface = "0 1 0 0 0 0 -0.5";
|
||||||
surface = "0.707107 0 0 0.707107 0 0.5 0";
|
surface = "0.707107 0 0 0.707106 0 0.5 0";
|
||||||
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
||||||
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
||||||
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
||||||
|
|
@ -342,7 +182,7 @@ new SimGroup(MissionGroup) {
|
||||||
|
|
||||||
surface = "0 0 0 1 0 0 0.5";
|
surface = "0 0 0 1 0 0 0.5";
|
||||||
surface = "0 1 0 0 0 0 -0.5";
|
surface = "0 1 0 0 0 0 -0.5";
|
||||||
surface = "0.707107 0 0 0.707107 0 0.5 0";
|
surface = "0.707107 0 0 0.707106 0 0.5 0";
|
||||||
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
||||||
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
||||||
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
||||||
|
|
@ -357,7 +197,7 @@ new SimGroup(MissionGroup) {
|
||||||
|
|
||||||
surface = "0 0 0 1 0 0 0.5";
|
surface = "0 0 0 1 0 0 0.5";
|
||||||
surface = "0 1 0 0 0 0 -0.5";
|
surface = "0 1 0 0 0 0 -0.5";
|
||||||
surface = "0.707107 0 0 0.707106 0 0.5 0";
|
surface = "0.707107 0 0 0.707107 0 0.5 0";
|
||||||
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
||||||
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
||||||
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
||||||
|
|
@ -372,7 +212,7 @@ new SimGroup(MissionGroup) {
|
||||||
|
|
||||||
surface = "0 0 0 1 0 0 0.5";
|
surface = "0 0 0 1 0 0 0.5";
|
||||||
surface = "0 1 0 0 0 0 -0.5";
|
surface = "0 1 0 0 0 0 -0.5";
|
||||||
surface = "0.707107 0 0 0.707106 0 0.5 0";
|
surface = "0.707107 0 0 0.707107 0 0.5 0";
|
||||||
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
||||||
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
||||||
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
||||||
|
|
@ -387,7 +227,7 @@ new SimGroup(MissionGroup) {
|
||||||
|
|
||||||
surface = "0 0 0 1 0 0 0.5";
|
surface = "0 0 0 1 0 0 0.5";
|
||||||
surface = "0 1 0 0 0 0 -0.5";
|
surface = "0 1 0 0 0 0 -0.5";
|
||||||
surface = "0.707107 0 0 0.707106 0 0.5 0";
|
surface = "0.707107 0 0 0.707107 0 0.5 0";
|
||||||
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
||||||
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
||||||
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
||||||
|
|
@ -402,7 +242,7 @@ new SimGroup(MissionGroup) {
|
||||||
|
|
||||||
surface = "0 0 0 1 0 0 0.5";
|
surface = "0 0 0 1 0 0 0.5";
|
||||||
surface = "0 1 0 0 0 0 -0.5";
|
surface = "0 1 0 0 0 0 -0.5";
|
||||||
surface = "0.707107 0 0 0.707107 0 0.5 0";
|
surface = "0.707107 0 0 0.707106 0 0.5 0";
|
||||||
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
||||||
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
||||||
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
||||||
|
|
@ -417,7 +257,7 @@ new SimGroup(MissionGroup) {
|
||||||
|
|
||||||
surface = "0 0 0 1 0 0 0.5";
|
surface = "0 0 0 1 0 0 0.5";
|
||||||
surface = "0 1 0 0 0 0 -0.5";
|
surface = "0 1 0 0 0 0 -0.5";
|
||||||
surface = "0.707107 0 0 0.707106 0 0.5 0";
|
surface = "0.707107 0 0 0.707107 0 0.5 0";
|
||||||
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
surface = "0 0.707107 -0.707107 0 0 -0.5 -2.84217e-14";
|
||||||
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
surface = "0.5 0.5 -0.5 0.5 -0.5 0 -9.93411e-08";
|
||||||
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
surface = "0.5 -0.5 0.5 0.5 0.5 0 -9.93411e-08";
|
||||||
|
|
@ -485,13 +325,13 @@ new SimGroup(MissionGroup) {
|
||||||
canSaveDynamicFields = "1";
|
canSaveDynamicFields = "1";
|
||||||
};
|
};
|
||||||
new SphereEnvironmentProbe() {
|
new SphereEnvironmentProbe() {
|
||||||
enabled = "0";
|
enabled = "1";
|
||||||
radius = "10";
|
radius = "5";
|
||||||
refOffset = "0 0 0";
|
refOffset = "0 0 0";
|
||||||
refScale = "10 10 10";
|
refScale = "10 10 10";
|
||||||
ReflectionMode = "Baked Cubemap";
|
ReflectionMode = "Baked Cubemap";
|
||||||
StaticCubemap = "HdrSkyCubemap";
|
StaticCubemap = "HdrSkyCubemap";
|
||||||
position = "0 -0.0355076 0";
|
position = "-25.5075 8.33063 1.52035";
|
||||||
rotation = "1 0 0 0";
|
rotation = "1 0 0 0";
|
||||||
canSave = "1";
|
canSave = "1";
|
||||||
canSaveDynamicFields = "1";
|
canSaveDynamicFields = "1";
|
||||||
|
|
|
||||||
|
|
@ -62,21 +62,49 @@ float defineSphereSpaceInfluence(Surface surface, ProbeData probe, float3 wsEyeR
|
||||||
return contribution;
|
return contribution;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float getDistBoxToPoint(float3 pt, float3 extents)
|
||||||
|
{
|
||||||
|
float3 d = max(max(-extents - pt, 0), pt - extents);
|
||||||
|
return length(d);
|
||||||
|
}
|
||||||
|
|
||||||
float defineBoxSpaceInfluence(Surface surface, ProbeData probe, float3 wsEyeRay)
|
float defineBoxSpaceInfluence(Surface surface, ProbeData probe, float3 wsEyeRay)
|
||||||
{
|
{
|
||||||
float3 surfPosLS = mul(probe.worldToLocal, float4(surface.P, 1.0)).xyz;
|
float3 surfPosLS = mul(probe.worldToLocal, float4(surface.P, 1.0)).xyz;
|
||||||
|
|
||||||
float3 boxMinLS = mul(probe.worldToLocal, float4(probe.boxMin, 1.0)).xyz;
|
//float3 boxMinLS = mul(probe.worldToLocal, float4(probe.boxMin, 1.0)).xyz;
|
||||||
float3 boxMaxLS = mul(probe.worldToLocal, float4(probe.boxMax, 1.0)).xyz;
|
//float3 extents = mul(probe.worldToLocal, float4(probe.boxMax, 1.0)).xyz;
|
||||||
|
float3 extents = probe.boxMax;
|
||||||
|
|
||||||
float boxOuterRange = length(boxMaxLS - boxMinLS);
|
/*float3 boxOuterRange = boxMaxLS;
|
||||||
float boxInnerRange = boxOuterRange / probe.attenuation;
|
float3 boxInnerRange = boxOuterRange * 0.5;
|
||||||
|
|
||||||
float3 localDir = float3(abs(surfPosLS.x), abs(surfPosLS.y), abs(surfPosLS.z));
|
float3 localDir = float3(abs(surfPosLS.x), abs(surfPosLS.y), abs(surfPosLS.z));
|
||||||
localDir = (localDir - boxInnerRange) / (boxOuterRange - boxInnerRange);
|
localDir = (localDir - boxInnerRange) / (boxOuterRange - boxInnerRange);
|
||||||
|
|
||||||
float contribution = max(localDir.x, max(localDir.y, localDir.z)) * -1;
|
float contribution = max(localDir.x, max(localDir.y, localDir.z));
|
||||||
return contribution;
|
return contribution;*/
|
||||||
|
|
||||||
|
float transitionDistance = 0.9;
|
||||||
|
|
||||||
|
// Calculate contribution
|
||||||
|
//// Shrink the box so fade out happens within box extents
|
||||||
|
float3 reducedExtents = extents - float3(transitionDistance, transitionDistance, transitionDistance);
|
||||||
|
float distToBox = getDistBoxToPoint(surfPosLS * extents, reducedExtents);
|
||||||
|
|
||||||
|
float normalizedDistance = distToBox / transitionDistance;
|
||||||
|
|
||||||
|
// If closer than 70% to the probe radius, then full contribution is used.
|
||||||
|
// For the other 30% we smoothstep and return contribution lower than 1 so other
|
||||||
|
// reflection probes can be blended.
|
||||||
|
|
||||||
|
// smoothstep from 1 to 0.7:
|
||||||
|
// float t = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
|
||||||
|
// return t * t * (3.0 - 2.0 * t);
|
||||||
|
|
||||||
|
float t = saturate(3.3333 - 3.3333 * normalizedDistance);
|
||||||
|
float contribution = t * t * (3.0 - 2.0 * t);
|
||||||
|
return contribution;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Box Projected IBL Lighting
|
// Box Projected IBL Lighting
|
||||||
|
|
@ -87,9 +115,12 @@ float3 boxProject(Surface surface, ProbeData probe)
|
||||||
float3 RayLS = mul(probe.worldToLocal, float4(surface.R,0.0)).xyz;
|
float3 RayLS = mul(probe.worldToLocal, float4(surface.R,0.0)).xyz;
|
||||||
float3 PositionLS = mul( probe.worldToLocal, float4(surface.P,1.0)).xyz;
|
float3 PositionLS = mul( probe.worldToLocal, float4(surface.P,1.0)).xyz;
|
||||||
|
|
||||||
float3 unit = probe.boxMax-probe.boxMin;
|
//float3 invRayLS = rcp(RayLS);
|
||||||
float3 plane1vec = (unit/2 - PositionLS) / RayLS;
|
float3 unit = float3(1,1,1);
|
||||||
float3 plane2vec = (-unit/2 - PositionLS) / RayLS;
|
float3 plane1vec = (unit - PositionLS) / RayLS;
|
||||||
|
float3 plane2vec = (-unit - PositionLS) / RayLS;
|
||||||
|
//float3 plane1vec = invRayLS - PositionLS * RayLS;
|
||||||
|
//float3 plane2vec = -invRayLS - PositionLS * RayLS;
|
||||||
float3 furthestPlane = max(plane1vec, plane2vec);
|
float3 furthestPlane = max(plane1vec, plane2vec);
|
||||||
float dist = min(min(furthestPlane.x, furthestPlane.y), furthestPlane.z);
|
float dist = min(min(furthestPlane.x, furthestPlane.y), furthestPlane.z);
|
||||||
float3 posonbox = surface.P + surface.R * dist;
|
float3 posonbox = surface.P + surface.R * dist;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue