Added frustum culling;

Added geometry data;

Changed name of VolumeObject to AoVolume;

Removed the capsule type in VolumeType, all volumes are box volume now;
This commit is contained in:
2025-02-19 23:20:38 +09:00
parent de8eafb713
commit ef2bdeac98
18 changed files with 348 additions and 39 deletions

View File

@@ -0,0 +1,74 @@
using UnityEngine;
using UnityEngine.Rendering;
namespace Misaki.AoVolume
{
[GenerateHLSL(PackingRules.Exact, false)]
internal struct FrustumGPU
{
// The data of the 6 planes of the frustum
public Vector3 normal0;
public float dist0;
public Vector3 normal1;
public float dist1;
public Vector3 normal2;
public float dist2;
public Vector3 normal3;
public float dist3;
public Vector3 normal4;
public float dist4;
public Vector3 normal5;
public float dist5;
// The data of the 8 corners of the frustum
public Vector4 corner0;
public Vector4 corner1;
public Vector4 corner2;
public Vector4 corner3;
public Vector4 corner4;
public Vector4 corner5;
public Vector4 corner6;
public Vector4 corner7;
}
[GenerateHLSL(PackingRules.Exact, false)]
internal struct OrientedBoundingBox
{
// 4 x float3 = 48 bytes.
// TODO: pack the axes into 16-bit UNORM per channel, and consider a quaternionic representation.
public Vector3 center;
public Vector3 right;
public Vector3 up;
public Vector3 extent;
//public ushort quatX;
//public ushort quatY;
//public ushort quatZ;
//public ushort quatW;
public readonly Vector3 Forward => Vector3.Cross(up, right);
public OrientedBoundingBox(Matrix4x4 trs)
{
var vecX = (Vector3)trs.GetColumn(0);
var vecY = (Vector3)trs.GetColumn(1);
var vecZ = (Vector3)trs.GetColumn(2);
center = trs.GetColumn(3);
right = vecX * (1.0f / vecX.magnitude);
up = vecY * (1.0f / vecY.magnitude);
extent.x = 0.5f * vecX.magnitude;
extent.y = 0.5f * vecY.magnitude;
extent.z = 0.5f * vecZ.magnitude;
}
}
[GenerateHLSL(PackingRules.Exact, false)]
internal struct CullingData
{
public float fadeStart;
public float fadeEnd;
}
}