mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-29 16:25:42 +00:00
commit
089d49dc93
8 changed files with 26 additions and 36 deletions
|
|
@ -794,7 +794,6 @@ ProbeManager::ReflectProbeMaterialInfo::ReflectProbeMaterialInfo(const String &m
|
||||||
probeWSPos(NULL),
|
probeWSPos(NULL),
|
||||||
attenuation(NULL),
|
attenuation(NULL),
|
||||||
radius(NULL),
|
radius(NULL),
|
||||||
invViewMat(NULL),
|
|
||||||
cubeMips(NULL)
|
cubeMips(NULL)
|
||||||
{
|
{
|
||||||
Material *mat = MATMGR->getMaterialDefinitionByName(matName);
|
Material *mat = MATMGR->getMaterialDefinitionByName(matName);
|
||||||
|
|
@ -819,8 +818,6 @@ ProbeManager::ReflectProbeMaterialInfo::ReflectProbeMaterialInfo(const String &m
|
||||||
negFarPlaneDotEye = matInstance->getMaterialParameterHandle("$negFarPlaneDotEye");
|
negFarPlaneDotEye = matInstance->getMaterialParameterHandle("$negFarPlaneDotEye");
|
||||||
zNearFarInvNearFar = matInstance->getMaterialParameterHandle("$zNearFarInvNearFar");
|
zNearFarInvNearFar = matInstance->getMaterialParameterHandle("$zNearFarInvNearFar");
|
||||||
|
|
||||||
invViewMat = matInstance->getMaterialParameterHandle("$invViewMat");
|
|
||||||
|
|
||||||
useCubemap = matInstance->getMaterialParameterHandle("$useCubemap");
|
useCubemap = matInstance->getMaterialParameterHandle("$useCubemap");
|
||||||
|
|
||||||
cubemap = matInstance->getMaterialParameterHandle("$cubeMap");
|
cubemap = matInstance->getMaterialParameterHandle("$cubeMap");
|
||||||
|
|
@ -848,7 +845,7 @@ void ProbeManager::ReflectProbeMaterialInfo::setViewParameters(const F32 _zNear,
|
||||||
const F32 _zFar,
|
const F32 _zFar,
|
||||||
const Point3F &_eyePos,
|
const Point3F &_eyePos,
|
||||||
const PlaneF &_farPlane,
|
const PlaneF &_farPlane,
|
||||||
const PlaneF &_vsFarPlane, const MatrixF &_inverseViewMatrix)
|
const PlaneF &_vsFarPlane)
|
||||||
{
|
{
|
||||||
MaterialParameters *matParams = matInstance->getMaterialParameters();
|
MaterialParameters *matParams = matInstance->getMaterialParameters();
|
||||||
|
|
||||||
|
|
@ -865,8 +862,6 @@ void ProbeManager::ReflectProbeMaterialInfo::setViewParameters(const F32 _zNear,
|
||||||
|
|
||||||
matParams->setSafe(zNearFarInvNearFar, Point4F(_zNear, _zFar, 1.0f / _zNear, 1.0f / _zFar));
|
matParams->setSafe(zNearFarInvNearFar, Point4F(_zNear, _zFar, 1.0f / _zNear, 1.0f / _zFar));
|
||||||
|
|
||||||
matParams->setSafe(invViewMat, _inverseViewMatrix);
|
|
||||||
|
|
||||||
Point4F frPlane = *((const Point4F *)&_farPlane);
|
Point4F frPlane = *((const Point4F *)&_farPlane);
|
||||||
Point4F vsFrPlane = *((const Point4F *)&_vsFarPlane);
|
Point4F vsFrPlane = *((const Point4F *)&_vsFarPlane);
|
||||||
Point4F nearFarInvNearFar = Point4F(_zNear, _zFar, 1.0f / _zNear, 1.0f / _zFar);
|
Point4F nearFarInvNearFar = Point4F(_zNear, _zFar, 1.0f / _zNear, 1.0f / _zFar);
|
||||||
|
|
@ -893,10 +888,10 @@ void ProbeManager::ReflectProbeMaterialInfo::setProbeParameters(const ProbeRende
|
||||||
if (total > 0.0f)
|
if (total > 0.0f)
|
||||||
attenRatio /= total;
|
attenRatio /= total;
|
||||||
|
|
||||||
F32 radius = probeInfo->mRadius;
|
F32 probeRadius = probeInfo->mRadius;
|
||||||
|
|
||||||
Point2F attenParams((1.0f / radius) * attenRatio.y,
|
Point2F attenParams((1.0f / probeRadius) * attenRatio.y,
|
||||||
(1.0f / (radius * radius)) * attenRatio.z);
|
(1.0f / (probeRadius * probeRadius)) * attenRatio.z);
|
||||||
|
|
||||||
matParams->setSafe(attenuation, attenParams);
|
matParams->setSafe(attenuation, attenParams);
|
||||||
|
|
||||||
|
|
@ -996,8 +991,6 @@ ProbeManager::SkylightMaterialInfo::SkylightMaterialInfo(const String &matName,
|
||||||
negFarPlaneDotEye = matInstance->getMaterialParameterHandle("$negFarPlaneDotEye");
|
negFarPlaneDotEye = matInstance->getMaterialParameterHandle("$negFarPlaneDotEye");
|
||||||
zNearFarInvNearFar = matInstance->getMaterialParameterHandle("$zNearFarInvNearFar");
|
zNearFarInvNearFar = matInstance->getMaterialParameterHandle("$zNearFarInvNearFar");
|
||||||
|
|
||||||
invViewMat = matInstance->getMaterialParameterHandle("$invViewMat");
|
|
||||||
|
|
||||||
useCubemap = matInstance->getMaterialParameterHandle("$useCubemap");
|
useCubemap = matInstance->getMaterialParameterHandle("$useCubemap");
|
||||||
cubemap = matInstance->getMaterialParameterHandle("$cubeMap");
|
cubemap = matInstance->getMaterialParameterHandle("$cubeMap");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -231,9 +231,6 @@ public:
|
||||||
// -dot( farPlane, eyePos )
|
// -dot( farPlane, eyePos )
|
||||||
MaterialParameterHandle *negFarPlaneDotEye;
|
MaterialParameterHandle *negFarPlaneDotEye;
|
||||||
|
|
||||||
// Inverse View matrix
|
|
||||||
MaterialParameterHandle *invViewMat;
|
|
||||||
|
|
||||||
// Light Parameters
|
// Light Parameters
|
||||||
MaterialParameterHandle *probeLSPos;
|
MaterialParameterHandle *probeLSPos;
|
||||||
MaterialParameterHandle *probeWSPos;
|
MaterialParameterHandle *probeWSPos;
|
||||||
|
|
@ -262,8 +259,7 @@ public:
|
||||||
const F32 zFar,
|
const F32 zFar,
|
||||||
const Point3F &eyePos,
|
const Point3F &eyePos,
|
||||||
const PlaneF &farPlane,
|
const PlaneF &farPlane,
|
||||||
const PlaneF &_vsFarPlane,
|
const PlaneF &_vsFarPlane);
|
||||||
const MatrixF &_inverseViewMatrix);
|
|
||||||
|
|
||||||
void setProbeParameters(const ProbeRenderInst *probe, const SceneRenderState* renderState, const MatrixF &worldViewOnly);
|
void setProbeParameters(const ProbeRenderInst *probe, const SceneRenderState* renderState, const MatrixF &worldViewOnly);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -75,6 +75,7 @@ void ShaderConstHandles::init( GFXShader *shader, CustomMaterial* mat /*=NULL*/
|
||||||
mModelViewProjSC = shader->getShaderConstHandle(ShaderGenVars::modelview);
|
mModelViewProjSC = shader->getShaderConstHandle(ShaderGenVars::modelview);
|
||||||
mWorldViewOnlySC = shader->getShaderConstHandle(ShaderGenVars::worldViewOnly);
|
mWorldViewOnlySC = shader->getShaderConstHandle(ShaderGenVars::worldViewOnly);
|
||||||
mWorldToCameraSC = shader->getShaderConstHandle(ShaderGenVars::worldToCamera);
|
mWorldToCameraSC = shader->getShaderConstHandle(ShaderGenVars::worldToCamera);
|
||||||
|
mCameraToWorldSC = shader->getShaderConstHandle(ShaderGenVars::cameraToWorld);
|
||||||
mWorldToObjSC = shader->getShaderConstHandle(ShaderGenVars::worldToObj);
|
mWorldToObjSC = shader->getShaderConstHandle(ShaderGenVars::worldToObj);
|
||||||
mViewToObjSC = shader->getShaderConstHandle(ShaderGenVars::viewToObj);
|
mViewToObjSC = shader->getShaderConstHandle(ShaderGenVars::viewToObj);
|
||||||
mCubeTransSC = shader->getShaderConstHandle(ShaderGenVars::cubeTrans);
|
mCubeTransSC = shader->getShaderConstHandle(ShaderGenVars::cubeTrans);
|
||||||
|
|
@ -1239,6 +1240,8 @@ void ProcessedShaderMaterial::setTransforms(const MatrixSet &matrixSet, SceneRen
|
||||||
shaderConsts->set( handles->mWorldToObjSC, matrixSet.getWorldToObject() );
|
shaderConsts->set( handles->mWorldToObjSC, matrixSet.getWorldToObject() );
|
||||||
if ( handles->mWorldToCameraSC->isValid() )
|
if ( handles->mWorldToCameraSC->isValid() )
|
||||||
shaderConsts->set( handles->mWorldToCameraSC, matrixSet.getWorldToCamera() );
|
shaderConsts->set( handles->mWorldToCameraSC, matrixSet.getWorldToCamera() );
|
||||||
|
if (handles->mCameraToWorldSC->isValid())
|
||||||
|
shaderConsts->set(handles->mCameraToWorldSC, matrixSet.getCameraToWorld());
|
||||||
if ( handles->mWorldViewOnlySC->isValid() )
|
if ( handles->mWorldViewOnlySC->isValid() )
|
||||||
shaderConsts->set( handles->mWorldViewOnlySC, matrixSet.getObjectToCamera() );
|
shaderConsts->set( handles->mWorldViewOnlySC, matrixSet.getObjectToCamera() );
|
||||||
if ( handles->mViewToObjSC->isValid() )
|
if ( handles->mViewToObjSC->isValid() )
|
||||||
|
|
|
||||||
|
|
@ -62,6 +62,7 @@ public:
|
||||||
GFXShaderConstHandle* mModelViewProjSC;
|
GFXShaderConstHandle* mModelViewProjSC;
|
||||||
GFXShaderConstHandle* mWorldViewOnlySC;
|
GFXShaderConstHandle* mWorldViewOnlySC;
|
||||||
GFXShaderConstHandle* mWorldToCameraSC;
|
GFXShaderConstHandle* mWorldToCameraSC;
|
||||||
|
GFXShaderConstHandle* mCameraToWorldSC;
|
||||||
GFXShaderConstHandle* mWorldToObjSC;
|
GFXShaderConstHandle* mWorldToObjSC;
|
||||||
GFXShaderConstHandle* mViewToObjSC;
|
GFXShaderConstHandle* mViewToObjSC;
|
||||||
GFXShaderConstHandle* mCubeTransSC;
|
GFXShaderConstHandle* mCubeTransSC;
|
||||||
|
|
|
||||||
|
|
@ -159,13 +159,9 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
|
||||||
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
|
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
|
||||||
matrixSet.restoreSceneViewProjection();
|
matrixSet.restoreSceneViewProjection();
|
||||||
|
|
||||||
const MatrixF &worldToCameraXfm = matrixSet.getWorldToCamera();
|
const MatrixF &worldToCameraXfm = matrixSet.getCameraToWorld();
|
||||||
|
|
||||||
MatrixF inverseViewMatrix = worldToCameraXfm;
|
MatrixF inverseViewMatrix = worldToCameraXfm;
|
||||||
//inverseViewMatrix.fullInverse();
|
|
||||||
//inverseViewMatrix.transpose();
|
|
||||||
|
|
||||||
//inverseViewMatrix = MatrixF::Identity;
|
|
||||||
|
|
||||||
// Parameters calculated, assign them to the materials
|
// Parameters calculated, assign them to the materials
|
||||||
ProbeManager::SkylightMaterialInfo* skylightMat = PROBEMGR->getSkylightMaterial();
|
ProbeManager::SkylightMaterialInfo* skylightMat = PROBEMGR->getSkylightMaterial();
|
||||||
|
|
@ -176,7 +172,7 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
|
||||||
frustum.getFarDist(),
|
frustum.getFarDist(),
|
||||||
frustum.getPosition(),
|
frustum.getPosition(),
|
||||||
farPlane,
|
farPlane,
|
||||||
vsFarPlane, inverseViewMatrix);
|
vsFarPlane);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProbeManager::ReflectProbeMaterialInfo* reflProbeMat = PROBEMGR->getReflectProbeMaterial();
|
ProbeManager::ReflectProbeMaterialInfo* reflProbeMat = PROBEMGR->getReflectProbeMaterial();
|
||||||
|
|
@ -187,7 +183,7 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
|
||||||
frustum.getFarDist(),
|
frustum.getFarDist(),
|
||||||
frustum.getPosition(),
|
frustum.getPosition(),
|
||||||
farPlane,
|
farPlane,
|
||||||
vsFarPlane, inverseViewMatrix);
|
vsFarPlane);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
const String ShaderGenVars::modelview("$modelview");
|
const String ShaderGenVars::modelview("$modelview");
|
||||||
const String ShaderGenVars::worldViewOnly("$worldViewOnly");
|
const String ShaderGenVars::worldViewOnly("$worldViewOnly");
|
||||||
const String ShaderGenVars::worldToCamera("$worldToCamera");
|
const String ShaderGenVars::worldToCamera("$worldToCamera");
|
||||||
|
const String ShaderGenVars::cameraToWorld("$cameraToWorld");
|
||||||
const String ShaderGenVars::worldToObj("$worldToObj");
|
const String ShaderGenVars::worldToObj("$worldToObj");
|
||||||
const String ShaderGenVars::viewToObj("$viewToObj");
|
const String ShaderGenVars::viewToObj("$viewToObj");
|
||||||
const String ShaderGenVars::cubeTrans("$cubeTrans");
|
const String ShaderGenVars::cubeTrans("$cubeTrans");
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ struct ShaderGenVars
|
||||||
const static String modelview;
|
const static String modelview;
|
||||||
const static String worldViewOnly;
|
const static String worldViewOnly;
|
||||||
const static String worldToCamera;
|
const static String worldToCamera;
|
||||||
|
const static String cameraToWorld;
|
||||||
const static String worldToObj;
|
const static String worldToObj;
|
||||||
const static String viewToObj;
|
const static String viewToObj;
|
||||||
const static String cubeTrans;
|
const static String cubeTrans;
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ uniform float4 vsFarPlane;
|
||||||
uniform float radius;
|
uniform float radius;
|
||||||
uniform float2 attenuation;
|
uniform float2 attenuation;
|
||||||
|
|
||||||
uniform float4x4 invViewMat;
|
|
||||||
uniform float4x4 worldToObj;
|
uniform float4x4 worldToObj;
|
||||||
|
uniform float4x4 cameraToWorld;
|
||||||
|
|
||||||
uniform float3 eyePosWorld;
|
uniform float3 eyePosWorld;
|
||||||
uniform float3 bbMin;
|
uniform float3 bbMin;
|
||||||
|
|
@ -175,27 +175,26 @@ PS_OUTPUT main( ConvexConnectP IN )
|
||||||
clip(-1);
|
clip(-1);
|
||||||
|
|
||||||
// Need world-space normal.
|
// Need world-space normal.
|
||||||
float3 wsNormal = mul(float4(normal, 1), invViewMat).rgb;
|
float3 wsNormal = mul(cameraToWorld, float4(normal, 0)).xyz;
|
||||||
|
|
||||||
float3 eyeRay = getDistanceVectorToPlane( -vsFarPlane.w, IN.vsEyeDir.xyz, vsFarPlane );
|
float3 vsEyeRay = getDistanceVectorToPlane( -vsFarPlane.w, IN.vsEyeDir.xyz, vsFarPlane );
|
||||||
float3 viewSpacePos = eyeRay * depth;
|
float3 vsPos = vsEyeRay * depth;
|
||||||
|
|
||||||
float3 wsEyeRay = mul(float4(eyeRay, 1), invViewMat).rgb;
|
float3 wsEyeRay = mul(cameraToWorld, float4(vsEyeRay, 0)).xyz;
|
||||||
|
// calculate world space position
|
||||||
// Use eye ray to get ws pos
|
float3 wsPos = float3(eyePosWorld + wsEyeRay * depth);
|
||||||
float3 worldPos = float3(eyePosWorld + wsEyeRay * depth);
|
|
||||||
|
|
||||||
float blendVal = 1.0;
|
float blendVal = 1.0;
|
||||||
|
|
||||||
//clip bounds and (TODO properly: set falloff)
|
//clip bounds and (TODO properly: set falloff)
|
||||||
if(useSphereMode)
|
if(useSphereMode)
|
||||||
{
|
{
|
||||||
blendVal = defineSphereSpaceInfluence(probeLSPos, radius, attenuation, viewSpacePos, normal);
|
blendVal = defineSphereSpaceInfluence(probeLSPos, radius, attenuation, vsPos, normal);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
float tempAttenVal = 3.5;
|
float tempAttenVal = 3.5;
|
||||||
blendVal = defineBoxSpaceInfluence(worldPos, probeWSPos, radius, tempAttenVal);
|
blendVal = defineBoxSpaceInfluence(wsPos, probeWSPos, radius, tempAttenVal);
|
||||||
}
|
}
|
||||||
clip(blendVal);
|
clip(blendVal);
|
||||||
|
|
||||||
|
|
@ -204,9 +203,9 @@ PS_OUTPUT main( ConvexConnectP IN )
|
||||||
|
|
||||||
|
|
||||||
//render into the bound space defined above
|
//render into the bound space defined above
|
||||||
float3 surfToEye = normalize(worldPos.xyz-eyePosWorld.xyz);
|
float3 surfToEye = normalize(wsPos - eyePosWorld);
|
||||||
Output.diffuse = float4(iblBoxDiffuse(wsNormal, worldPos, TORQUE_SAMPLERCUBE_MAKEARG(irradianceCubemap), probeWSPos, bbMin, bbMax), blendVal);
|
Output.diffuse = float4(iblBoxDiffuse(wsNormal, wsPos, TORQUE_SAMPLERCUBE_MAKEARG(irradianceCubemap), probeWSPos, bbMin, bbMax), blendVal);
|
||||||
Output.spec = float4(iblBoxSpecular(wsNormal, worldPos, 1.0 - matInfo.b, surfToEye, TORQUE_SAMPLER2D_MAKEARG(BRDFTexture), TORQUE_SAMPLERCUBE_MAKEARG(cubeMap), probeWSPos, bbMin, bbMax), blendVal);
|
Output.spec = float4(iblBoxSpecular(wsNormal, wsPos, 1.0 - matInfo.b, surfToEye, TORQUE_SAMPLER2D_MAKEARG(BRDFTexture), TORQUE_SAMPLERCUBE_MAKEARG(cubeMap), probeWSPos, bbMin, bbMax), blendVal);
|
||||||
Output.diffuse.rgb *= matInfo.g;
|
Output.diffuse.rgb *= matInfo.g;
|
||||||
Output.spec.rgb *= matInfo.g;
|
Output.spec.rgb *= matInfo.g;
|
||||||
return Output;
|
return Output;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue