Add gaussian splat asset caching groundwork
This commit is contained in:
@@ -229,21 +229,21 @@ Shader "Builtin Gaussian Splat Utilities"
|
||||
}
|
||||
|
||||
float3 CalcCovariance2D(
|
||||
float3 viewPosition,
|
||||
float3 localPosition,
|
||||
float3 covariance3D0,
|
||||
float3 covariance3D1,
|
||||
float4x4 viewMatrix,
|
||||
float4x4 modelViewMatrix,
|
||||
float4x4 projectionMatrix,
|
||||
float2 screenSize)
|
||||
{
|
||||
const float3 viewPosition = mul(modelViewMatrix, float4(localPosition, 1.0)).xyz;
|
||||
if (abs(viewPosition.z) <= 1.0e-5)
|
||||
{
|
||||
return float3(0.3, 0.0, 0.3);
|
||||
}
|
||||
|
||||
const float aspect = projectionMatrix[0][0] / projectionMatrix[1][1];
|
||||
const float tanFovX = rcp(projectionMatrix[0][0]);
|
||||
const float tanFovY = rcp(projectionMatrix[1][1] * aspect);
|
||||
const float tanFovY = rcp(projectionMatrix[1][1]);
|
||||
const float limitX = 1.3 * tanFovX;
|
||||
const float limitY = 1.3 * tanFovY;
|
||||
|
||||
@@ -264,7 +264,7 @@ Shader "Builtin Gaussian Splat Utilities"
|
||||
0.0,
|
||||
0.0,
|
||||
0.0);
|
||||
const float3x3 worldToView = (float3x3)viewMatrix;
|
||||
const float3x3 worldToView = (float3x3)modelViewMatrix;
|
||||
const float3x3 transform = mul(jacobian, worldToView);
|
||||
const float3x3 covariance3D = float3x3(
|
||||
covariance3D0.x, covariance3D0.y, covariance3D0.z,
|
||||
@@ -284,7 +284,7 @@ Shader "Builtin Gaussian Splat Utilities"
|
||||
const float offDiagonal = covariance2D.y;
|
||||
const float mid = 0.5 * (diagonal0 + diagonal1);
|
||||
const float radius = length(float2((diagonal0 - diagonal1) * 0.5, offDiagonal));
|
||||
const float lambda0 = max(mid + radius, 0.1);
|
||||
const float lambda0 = mid + radius;
|
||||
const float lambda1 = max(mid - radius, 0.1);
|
||||
|
||||
float2 basis = normalize(float2(offDiagonal, lambda0 - diagonal0));
|
||||
@@ -425,22 +425,22 @@ Shader "Builtin Gaussian Splat Utilities"
|
||||
GaussianSplatSortDistances[index] = FloatToSortableUint(viewCenter.z);
|
||||
|
||||
const float4 clipCenter = mul(gProjectionMatrix, float4(viewCenter, 1.0));
|
||||
if (clipCenter.w > 0.0)
|
||||
const float nearClip = max(gCameraWorldPos.w, 1.0e-4);
|
||||
if (clipCenter.w > 0.0 && viewCenter.z > nearClip)
|
||||
{
|
||||
const float3x3 modelLinear = (float3x3)gModelMatrix;
|
||||
const float4x4 modelViewMatrix = mul(gViewMatrix, gModelMatrix);
|
||||
const float3x3 rotationScaleMatrix =
|
||||
CalcMatrixFromRotationScale(otherData.rotation, otherData.scaleReserved.xyz);
|
||||
const float3x3 worldRotationScale = mul(modelLinear, rotationScaleMatrix);
|
||||
|
||||
float3 covariance3D0 = 0.0;
|
||||
float3 covariance3D1 = 0.0;
|
||||
CalcCovariance3D(worldRotationScale, covariance3D0, covariance3D1);
|
||||
CalcCovariance3D(rotationScaleMatrix, covariance3D0, covariance3D1);
|
||||
|
||||
const float3 covariance2D = CalcCovariance2D(
|
||||
viewCenter,
|
||||
localCenter,
|
||||
covariance3D0,
|
||||
covariance3D1,
|
||||
gViewMatrix,
|
||||
modelViewMatrix,
|
||||
gProjectionMatrix,
|
||||
gScreenParams.xy);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user