mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 08:34:40 +00:00
Merge branch 'PBR_ProbeArrayWIP' of https://github.com/Areloch/Torque3D into PBR_ProbeArrayWIP
# Conflicts: # Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl
This commit is contained in:
commit
eae6793186
5 changed files with 67 additions and 190 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;
|
||||||
|
|
|
||||||
|
|
@ -353,7 +353,7 @@ void RenderProbeMgr::_setupStaticParameters()
|
||||||
|
|
||||||
probeWorldToObjData[mEffectiveProbeCount] = transform;// curEntry.getTransform();
|
probeWorldToObjData[mEffectiveProbeCount] = transform;// 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 = 2;//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) / max((boxOuterRange - boxInnerRange),0.0001);
|
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;
|
||||||
|
|
@ -345,4 +376,4 @@ float4 main( PFXVertToPix IN ) : SV_TARGET
|
||||||
return float4(cubeColor, 1);
|
return float4(cubeColor, 1);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue