reflection probe updates

This commit is contained in:
Tim Barnes 2018-10-28 20:42:26 +10:00
parent 43c1abbc96
commit 9a39afa0eb
8 changed files with 26 additions and 36 deletions

View file

@ -794,7 +794,6 @@ ProbeManager::ReflectProbeMaterialInfo::ReflectProbeMaterialInfo(const String &m
probeWSPos(NULL),
attenuation(NULL),
radius(NULL),
invViewMat(NULL),
cubeMips(NULL)
{
Material *mat = MATMGR->getMaterialDefinitionByName(matName);
@ -819,8 +818,6 @@ ProbeManager::ReflectProbeMaterialInfo::ReflectProbeMaterialInfo(const String &m
negFarPlaneDotEye = matInstance->getMaterialParameterHandle("$negFarPlaneDotEye");
zNearFarInvNearFar = matInstance->getMaterialParameterHandle("$zNearFarInvNearFar");
invViewMat = matInstance->getMaterialParameterHandle("$invViewMat");
useCubemap = matInstance->getMaterialParameterHandle("$useCubemap");
cubemap = matInstance->getMaterialParameterHandle("$cubeMap");
@ -848,7 +845,7 @@ void ProbeManager::ReflectProbeMaterialInfo::setViewParameters(const F32 _zNear,
const F32 _zFar,
const Point3F &_eyePos,
const PlaneF &_farPlane,
const PlaneF &_vsFarPlane, const MatrixF &_inverseViewMatrix)
const PlaneF &_vsFarPlane)
{
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(invViewMat, _inverseViewMatrix);
Point4F frPlane = *((const Point4F *)&_farPlane);
Point4F vsFrPlane = *((const Point4F *)&_vsFarPlane);
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)
attenRatio /= total;
F32 radius = probeInfo->mRadius;
F32 probeRadius = probeInfo->mRadius;
Point2F attenParams((1.0f / radius) * attenRatio.y,
(1.0f / (radius * radius)) * attenRatio.z);
Point2F attenParams((1.0f / probeRadius) * attenRatio.y,
(1.0f / (probeRadius * probeRadius)) * attenRatio.z);
matParams->setSafe(attenuation, attenParams);
@ -996,8 +991,6 @@ ProbeManager::SkylightMaterialInfo::SkylightMaterialInfo(const String &matName,
negFarPlaneDotEye = matInstance->getMaterialParameterHandle("$negFarPlaneDotEye");
zNearFarInvNearFar = matInstance->getMaterialParameterHandle("$zNearFarInvNearFar");
invViewMat = matInstance->getMaterialParameterHandle("$invViewMat");
useCubemap = matInstance->getMaterialParameterHandle("$useCubemap");
cubemap = matInstance->getMaterialParameterHandle("$cubeMap");

View file

@ -231,9 +231,6 @@ public:
// -dot( farPlane, eyePos )
MaterialParameterHandle *negFarPlaneDotEye;
// Inverse View matrix
MaterialParameterHandle *invViewMat;
// Light Parameters
MaterialParameterHandle *probeLSPos;
MaterialParameterHandle *probeWSPos;
@ -262,8 +259,7 @@ public:
const F32 zFar,
const Point3F &eyePos,
const PlaneF &farPlane,
const PlaneF &_vsFarPlane,
const MatrixF &_inverseViewMatrix);
const PlaneF &_vsFarPlane);
void setProbeParameters(const ProbeRenderInst *probe, const SceneRenderState* renderState, const MatrixF &worldViewOnly);
};

View file

@ -75,6 +75,7 @@ void ShaderConstHandles::init( GFXShader *shader, CustomMaterial* mat /*=NULL*/
mModelViewProjSC = shader->getShaderConstHandle(ShaderGenVars::modelview);
mWorldViewOnlySC = shader->getShaderConstHandle(ShaderGenVars::worldViewOnly);
mWorldToCameraSC = shader->getShaderConstHandle(ShaderGenVars::worldToCamera);
mCameraToWorldSC = shader->getShaderConstHandle(ShaderGenVars::cameraToWorld);
mWorldToObjSC = shader->getShaderConstHandle(ShaderGenVars::worldToObj);
mViewToObjSC = shader->getShaderConstHandle(ShaderGenVars::viewToObj);
mCubeTransSC = shader->getShaderConstHandle(ShaderGenVars::cubeTrans);
@ -1239,6 +1240,8 @@ void ProcessedShaderMaterial::setTransforms(const MatrixSet &matrixSet, SceneRen
shaderConsts->set( handles->mWorldToObjSC, matrixSet.getWorldToObject() );
if ( handles->mWorldToCameraSC->isValid() )
shaderConsts->set( handles->mWorldToCameraSC, matrixSet.getWorldToCamera() );
if (handles->mCameraToWorldSC->isValid())
shaderConsts->set(handles->mCameraToWorldSC, matrixSet.getCameraToWorld());
if ( handles->mWorldViewOnlySC->isValid() )
shaderConsts->set( handles->mWorldViewOnlySC, matrixSet.getObjectToCamera() );
if ( handles->mViewToObjSC->isValid() )

View file

@ -62,6 +62,7 @@ public:
GFXShaderConstHandle* mModelViewProjSC;
GFXShaderConstHandle* mWorldViewOnlySC;
GFXShaderConstHandle* mWorldToCameraSC;
GFXShaderConstHandle* mCameraToWorldSC;
GFXShaderConstHandle* mWorldToObjSC;
GFXShaderConstHandle* mViewToObjSC;
GFXShaderConstHandle* mCubeTransSC;

View file

@ -159,13 +159,9 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
MatrixSet &matrixSet = getRenderPass()->getMatrixSet();
matrixSet.restoreSceneViewProjection();
const MatrixF &worldToCameraXfm = matrixSet.getWorldToCamera();
const MatrixF &worldToCameraXfm = matrixSet.getCameraToWorld();
MatrixF inverseViewMatrix = worldToCameraXfm;
//inverseViewMatrix.fullInverse();
//inverseViewMatrix.transpose();
//inverseViewMatrix = MatrixF::Identity;
// Parameters calculated, assign them to the materials
ProbeManager::SkylightMaterialInfo* skylightMat = PROBEMGR->getSkylightMaterial();
@ -176,7 +172,7 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
frustum.getFarDist(),
frustum.getPosition(),
farPlane,
vsFarPlane, inverseViewMatrix);
vsFarPlane);
}
ProbeManager::ReflectProbeMaterialInfo* reflProbeMat = PROBEMGR->getReflectProbeMaterial();
@ -187,7 +183,7 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state)
frustum.getFarDist(),
frustum.getPosition(),
farPlane,
vsFarPlane, inverseViewMatrix);
vsFarPlane);
}
}

View file

@ -26,6 +26,7 @@
const String ShaderGenVars::modelview("$modelview");
const String ShaderGenVars::worldViewOnly("$worldViewOnly");
const String ShaderGenVars::worldToCamera("$worldToCamera");
const String ShaderGenVars::cameraToWorld("$cameraToWorld");
const String ShaderGenVars::worldToObj("$worldToObj");
const String ShaderGenVars::viewToObj("$viewToObj");
const String ShaderGenVars::cubeTrans("$cubeTrans");

View file

@ -35,6 +35,7 @@ struct ShaderGenVars
const static String modelview;
const static String worldViewOnly;
const static String worldToCamera;
const static String cameraToWorld;
const static String worldToObj;
const static String viewToObj;
const static String cubeTrans;