From 2eb58e4cb741250d74b94fbdd75fcb0b8ff3bcc6 Mon Sep 17 00:00:00 2001 From: Azaezel Date: Thu, 31 Jan 2019 13:00:52 -0600 Subject: [PATCH] portwork from jeff to use farFrustumQuad for the vertex shader --- .../source/renderInstance/renderProbeMgr.cpp | 77 ++++--------------- Engine/source/renderInstance/renderProbeMgr.h | 3 +- .../client/lighting/advanced/shaders.cs | 10 +-- .../advanced/reflectionProbeArrayP.hlsl | 20 +---- 4 files changed, 24 insertions(+), 86 deletions(-) diff --git a/Engine/source/renderInstance/renderProbeMgr.cpp b/Engine/source/renderInstance/renderProbeMgr.cpp index 1b2f653b6..278970ae5 100644 --- a/Engine/source/renderInstance/renderProbeMgr.cpp +++ b/Engine/source/renderInstance/renderProbeMgr.cpp @@ -314,35 +314,27 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state) // Now build the quad for drawing full-screen vector light // passes.... this is a volatile VB and updates every frame. - GFXVertexPC verts[4]; + FarFrustumQuadVert verts[4]; { verts[0].point.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraPos); - //invCam.mulP(wsFrustumPoints[Frustum::FarTopLeft], &verts[0].normal); - //verts[0].texCoord.set(-1.0, 1.0); - //verts[0].tangent.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraOffsetPos); + invCam.mulP(wsFrustumPoints[Frustum::FarTopLeft], &verts[0].normal); + verts[0].texCoord.set(-1.0, 1.0); + verts[0].tangent.set(wsFrustumPoints[Frustum::FarTopLeft] - cameraOffsetPos); verts[1].point.set(wsFrustumPoints[Frustum::FarTopRight] - cameraPos); - // invCam.mulP(wsFrustumPoints[Frustum::FarTopRight], &verts[1].normal); - //verts[1].texCoord.set(1.0, 1.0); - //verts[1].tangent.set(wsFrustumPoints[Frustum::FarTopRight] - cameraOffsetPos); + invCam.mulP(wsFrustumPoints[Frustum::FarTopRight], &verts[1].normal); + verts[1].texCoord.set(1.0, 1.0); + verts[1].tangent.set(wsFrustumPoints[Frustum::FarTopRight] - cameraOffsetPos); verts[2].point.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraPos); - //invCam.mulP(wsFrustumPoints[Frustum::FarBottomLeft], &verts[2].normal); - // verts[2].texCoord.set(-1.0, -1.0); - // verts[2].tangent.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos); + invCam.mulP(wsFrustumPoints[Frustum::FarBottomLeft], &verts[2].normal); + verts[2].texCoord.set(-1.0, -1.0); + verts[2].tangent.set(wsFrustumPoints[Frustum::FarBottomLeft] - cameraOffsetPos); verts[3].point.set(wsFrustumPoints[Frustum::FarBottomRight] - cameraPos); - // invCam.mulP(wsFrustumPoints[Frustum::FarBottomRight], &verts[3].normal); - // verts[3].texCoord.set(1.0, -1.0); - // verts[3].tangent.set(wsFrustumPoints[Frustum::FarBottomRight] - cameraOffsetPos); - } - - Point3F norms[4]; - { - invCam.mulP(wsFrustumPoints[Frustum::FarTopLeft], &norms[0]); - invCam.mulP(wsFrustumPoints[Frustum::FarTopRight], &norms[1]); - invCam.mulP(wsFrustumPoints[Frustum::FarBottomLeft], &norms[2]); - invCam.mulP(wsFrustumPoints[Frustum::FarBottomRight], &norms[3]); + invCam.mulP(wsFrustumPoints[Frustum::FarBottomRight], &verts[3].normal); + verts[3].texCoord.set(1.0, -1.0); + verts[3].tangent.set(wsFrustumPoints[Frustum::FarBottomRight] - cameraOffsetPos); } mFarFrustumQuadVerts.set(GFX, 4); @@ -350,8 +342,7 @@ void RenderProbeMgr::_setupPerFrameParameters(const SceneRenderState *state) mFarFrustumQuadVerts.unlock(); PlaneF farPlane(wsFrustumPoints[Frustum::FarBottomLeft], wsFrustumPoints[Frustum::FarTopLeft], wsFrustumPoints[Frustum::FarTopRight]); - PlaneF vsFarPlane(norms[0], norms[1], norms[2]); - + PlaneF vsFarPlane(verts[0].normal, verts[1].normal, verts[2].normal); ReflectProbeMaterialInfo* reflProbeMat = getReflectProbeMaterial(); @@ -839,46 +830,6 @@ void RenderProbeMgr::render( SceneRenderState *state ) } // // - /*ProbeManager::ReflectionProbeArrayMaterialInfo* reflProbeArrayMat = PROBEMGR->getReflectProbeArrayMaterial(); - - for (U32 i = 0; i < ProbeRenderInst::all.size(); i++) - { - if (i > 0) - return; - - ProbeRenderInst* curEntry = ProbeRenderInst::all[i]; - - if (!reflProbeArrayMat || !reflProbeArrayMat->matInstance) - break; - - //Setup - //MatrixF probeTrans = curEntry->getTransform(); - - //if (!curEntry->mIsSkylight) - { - //if (curEntry->mProbeShapeType == ProbeRenderInst::Sphere) - // probeTrans.scale(curEntry->mRadius * 1.01f); - - //sgData.objTrans = &state-; - - reflProbeArrayMat->setProbeParameters(curEntry, state, worldToCameraXfm); - - // Set geometry - GFX->setVertexBuffer(mFarFrustumQuadVerts); - GFX->setPrimitiveBuffer(NULL); - while (reflProbeArrayMat->matInstance->setupPass(state, sgData)) - { - // Set transforms - //matrixSet.setWorld(*sgData.objTrans); - reflProbeArrayMat->matInstance->setTransforms(matrixSet, state); - reflProbeArrayMat->matInstance->setSceneInfo(state, sgData); - - GFX->drawPrimitive(GFXTriangleStrip, 0, 2); - } - } - }*/ - // - // GFX->popActiveRenderTarget(); diff --git a/Engine/source/renderInstance/renderProbeMgr.h b/Engine/source/renderInstance/renderProbeMgr.h index 4535f1a04..9a20ed84f 100644 --- a/Engine/source/renderInstance/renderProbeMgr.h +++ b/Engine/source/renderInstance/renderProbeMgr.h @@ -265,7 +265,8 @@ protected: /// The current active light manager. static RenderProbeMgr *smProbeManager; - GFXVertexBufferHandle mFarFrustumQuadVerts; + typedef GFXVertexPNTT FarFrustumQuadVert; + GFXVertexBufferHandle mFarFrustumQuadVerts; /// This helper function sets the shader constansts /// for the stock 4 light forward lighting code. diff --git a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs index 281f0dac5..8b122c5de 100644 --- a/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs +++ b/Templates/Full/game/core/scripts/client/lighting/advanced/shaders.cs @@ -293,18 +293,18 @@ new ShaderData( ReflectionProbeShader ) samplerNames[4] = "$irradianceCubemap"; samplerNames[5] = "$BRDFTexture";*/ - DXVertexShaderFile = "shaders/common/lighting/advanced/reflectionProbeArrayV.hlsl"; + DXVertexShaderFile = "shaders/common/lighting/advanced/farFrustumQuadV.hlsl"; DXPixelShaderFile = "shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl"; - OGLVertexShaderFile = "shaders/common/lighting/advanced/gl/reflectionProbeArrayV.glsl"; + OGLVertexShaderFile = "shaders/common/lighting/advanced/gl/farFrustumQuadV.glsl"; OGLPixelShaderFile = "shaders/common/lighting/advanced/gl/reflectionProbeArrayP.glsl"; samplerNames[0] = "$deferredBuffer"; samplerNames[1] = "$colorBuffer"; samplerNames[2] = "$matInfoBuffer"; - samplerNames[3] = "$cubeMap"; - samplerNames[4] = "$irradianceCubemap"; - samplerNames[5] = "$BRDFTexture"; + samplerNames[3] = "$BRDFTexture"; + samplerNames[4] = "$cubeMap"; + samplerNames[5] = "$irradianceCubemap"; pixVersion = 3.0; }; diff --git a/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl b/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl index 4cf858cf8..464bd4039 100644 --- a/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl +++ b/Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeArrayP.hlsl @@ -4,13 +4,6 @@ #include "../../lighting.hlsl" #include "../../torque.hlsl" -struct ConvexConnectP -{ - float4 pos : TORQUE_POSITION; - float4 uv0 : TEXCOORD1; - float4 vsEyeDir : TEXCOORD2; -}; - TORQUE_UNIFORM_SAMPLER2D(deferredBuffer, 0); TORQUE_UNIFORM_SAMPLER2D(colorBuffer, 1); TORQUE_UNIFORM_SAMPLER2D(matInfoBuffer, 2); @@ -95,22 +88,15 @@ float defineBoxSpaceInfluence(Surface surface, int id) return max(localDir.x, max(localDir.y, localDir.z)) * -1; } -float4 main( ConvexConnectP IN ) : SV_TARGET +float4 main( FarFrustumQuadConnectP IN ) : SV_TARGET { - // Compute scene UV - //float3 ssPos = IN.ssPos.xyz / IN.ssPos.w; - //float2 IN.uv0 = getUVFromSSPos( ssPos, rtParams0 ); - - //eye ray WS/LS - float3 vsEyeRay = getDistanceVectorToPlane( -vsFarPlane.w, IN.vsEyeDir.xyz, vsFarPlane ); - float3 wsEyeRay = mul(cameraToWorld, float4(vsEyeRay, 0)).xyz; - //unpack normal and linear depth float4 normDepth = TORQUE_DEFERRED_UNCONDITION(deferredBuffer, IN.uv0.xy); //create surface Surface surface = createSurface( normDepth, TORQUE_SAMPLER2D_MAKEARG(colorBuffer),TORQUE_SAMPLER2D_MAKEARG(matInfoBuffer), - IN.uv0.xy, eyePosWorld, wsEyeRay, cameraToWorld); + IN.uv0.xy, eyePosWorld, IN.wsEyeRay, cameraToWorld); + //early out if emissive if (getFlag(surface.matFlag, 0)) {