Browse Source

skylights do actually have a position. 0,0,0. so we can include those without messing with things. and we'll want to sum/count for blending purposes down the line. not render over each other

Azaezel 6 năm trước cách đây
mục cha
commit
4d3d800051

+ 3 - 3
Engine/source/renderInstance/renderProbeMgr.cpp

@@ -347,7 +347,7 @@ void RenderProbeMgr::render( SceneRenderState *state )
 
             MatrixF probeTrans = curEntry->getTransform();
 
-            if (!curEntry->mIsSkylight)
+            //if (!curEntry->mIsSkylight)
             {
                //if (curEntry->mProbeShapeType == ProbeRenderInst::Sphere)
               //    probeTrans.scale(curEntry->mRadius * 1.01f);
@@ -362,13 +362,13 @@ void RenderProbeMgr::render( SceneRenderState *state )
 
          if (effectiveProbeCount != 0)
          {
-            Con::printf("Probe aligned position count: %i", probeCount);
+            //Con::printf("Probe aligned position count: %i", probeCount);
 
             for (U32 p = 0; p < probeCount; p++)
             {
                Point3F prb = probePositions[p];
 
-               Con::printf("Probe %i aligned position is: %g %g %g", p, prb.x, prb.y, prb.z);
+               //Con::printf("Probe %i aligned position is: %g %g %g", p, prb.x, prb.y, prb.z);
 
                bool tasadfh = true;
             }

+ 10 - 4
Templates/Full/game/shaders/common/lighting/advanced/reflectionProbeP.hlsl

@@ -137,18 +137,24 @@ float4 main( ConvexConnectP IN ) : SV_TARGET
 	float3 specular = iblBoxSpecular(surface.N, surface.P, surface.roughness, surfToEye, TORQUE_SAMPLER2D_MAKEARG(BRDFTexture), TORQUE_SAMPLERCUBE_MAKEARG(cubeMap), probeWSPos, bbMin, bbMax);
 
     int i;
+	irradiance = float3(0,0,0);
+	float blendSum = 0.00001;
     for(i=0; i < numProbes; i++)
     {
         float3 probeWS = inProbePosArray[i];
 
         float3 L = probeWS - surface.P;
 		blendVal = 1.0-length(L)/radius;
-		//clip(blendVal);	
+		blendVal = max(0,blendVal);
 
-        irradiance = float3(blendVal,blendVal,blendVal);
+        irradiance += float3(blendVal,blendVal,blendVal);
         specular = irradiance;
+		blendSum += blendVal;
     }
-
+	//irradiance /= blendSum;
+	//specular /= blendSum;
+	blendSum /= numProbes;
+	
 	//render into the bound space defined above
 	//
 	//float3 irradiance = TORQUE_TEXCUBELOD(irradianceCubemap, float4(surface.N,0)).xyz;
@@ -161,5 +167,5 @@ float4 main( ConvexConnectP IN ) : SV_TARGET
    //final diffuse color
    float3 diffuse = kD * irradiance * surface.baseColor.rgb;
 
-   return float4(diffuse + specular * surface.ao, blendVal);
+   return float4(diffuse + specular * surface.ao, blendSum);
 }