Optimization + Start of clustering

This commit is contained in:
2025-10-20 19:28:00 +02:00
parent 8124165e9b
commit 16ffd2cb57
11 changed files with 1173 additions and 125 deletions

View File

@ -0,0 +1,81 @@
// VoxelBatchCluster.compute
#pragma kernel AccumulateHits
#pragma kernel ComputeMeans
// ---- Structures ----
struct BatchData
{
float3 position;
float maxDistance;
};
// ---- Constantes ----
#define GRID_SIZE 8192 // nombre total de cellules max
#define GRID_PRIME1 73856093 // pour hash
#define GRID_PRIME2 19349663
#define GRID_PRIME3 83492791
#define SCALE 1000.0
// ---- Buffers ----
StructuredBuffer<BatchData> inputHits;
RWStructuredBuffer<int4> cellSums; // xyz = somme positions, w = somme maxDistance
RWStructuredBuffer<uint> cellCounts; // nombre d'éléments par cellule
AppendStructuredBuffer<BatchData> clusteredHits;
// ---- Params ----
float cellSize; // taille d'une cellule (distance seuil)
uint inputCount; // nombre d'éléments d'entrée
float3 gridOrigin; // origine du monde pour le hash
// ---- Utilitaires ----
uint HashCell(int3 cell)
{
uint h = (uint)((cell.x * GRID_PRIME1) ^ (cell.y * GRID_PRIME2) ^ (cell.z * GRID_PRIME3));
return h % GRID_SIZE;
}
// ---- Kernel 1 : Accumulation ----
// Constante déchelle
[numthreads(64,1,1)]
void AccumulateHits(uint3 id : SV_DispatchThreadID)
{
uint i = id.x;
if (i >= inputCount) return;
BatchData b = inputHits[i];
int3 cell = int3(floor((b.position - gridOrigin) / cellSize));
uint hash = HashCell(cell);
// Conversion float -> int
int3 posInt = int3(b.position * SCALE);
int maxDistInt = (int)(b.maxDistance * SCALE);
// Ajout atomique
InterlockedAdd(cellSums[hash].x, posInt.x);
InterlockedAdd(cellSums[hash].y, posInt.y);
InterlockedAdd(cellSums[hash].z, posInt.z);
InterlockedAdd(cellSums[hash].w, maxDistInt);
InterlockedAdd(cellCounts[hash], 1);
}
// ---- Kernel 2 : Calcul des moyennes ----
[numthreads(64,1,1)]
void ComputeMeans(uint3 id : SV_DispatchThreadID)
{
uint i = id.x;
if (i >= GRID_SIZE) return;
uint count = cellCounts[i];
if (count == 0) return;
int4 sum = cellSums[i];
BatchData outB;
outB.position = (float3(sum.xyz) / SCALE) / count;
outB.maxDistance = (float(sum.w) / SCALE) / count;
clusteredHits.Append(outB);
}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 7b67ac486de90db48bc81c43fae83845
ComputeShaderImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -133,82 +133,44 @@ inline bool IntersectAABB_fast(
return tExit >= max(tEntry, 0.0); return tExit >= max(tEntry, 0.0);
} }
// AABB-ray intersection (slab method), returns whether intersects and entry distance #define STACK_SIZE 64
bool IntersectAABB(float3 boxCenter, float halfSize, float3 rayOrig, float3 rayDir, float invDirX, float invDirY, float invDirZ, out float tMin, out float tMax)
{
const float EPS = 0.2;
float3 minB = boxCenter - halfSize;
float3 maxB = boxCenter + halfSize;
tMin = -1e20; [numthreads(8,8,1)] // keep or change to [numthreads(64,1,1)] and 1D dispatch
tMax = 1e20;
[unroll]
for (int i = 0; i < 3; i++)
{
float ro = (i==0) ? rayOrig.x : (i==1) ? rayOrig.y : rayOrig.z;
float rd = (i==0) ? rayDir.x : (i==1) ? rayDir.y : rayDir.z;
float mn = (i==0) ? minB.x : (i==1) ? minB.y : minB.z;
float mx = (i==0) ? maxB.x : (i==1) ? maxB.y : maxB.z;
float invD = (i==0) ? invDirX : (i==1) ? invDirY : invDirZ;
if (abs(rd) < 1e-6)
{
if (ro < mn || ro > mx) return false;
}
else
{
float t1 = (mn - ro) * invD;
float t2 = (mx - ro) * invD;
if (t1 > t2) { float tmp = t1; t1 = t2; t2 = tmp; }
if (t1 > tMin) tMin = t1;
if (t2 < tMax) tMax = t2;
if (tMin > tMax) return false;
}
}
// Skip self-intersections
if (tMax < EPS) return false;
if (tMin < EPS) tMin = tMax; // Move entry forward if starting inside
return true;
}
[numthreads(8,8,1)] // 2D dispatch (8x8 = 64 threads)
void CSMain(uint3 id : SV_DispatchThreadID) void CSMain(uint3 id : SV_DispatchThreadID)
{ {
uint rayIndex = id.x; uint rayIndex = id.x;
uint batchIndex = id.y; uint batchIndex = id.y;
if (rayIndex >= rays.Length || batchIndex >= batchDatas.Length) return; if (rayIndex >= rays.Length || batchIndex >= batchDatas.Length) return;
RayData r = rays[rayIndex]; RayData r = rays[rayIndex];
BatchData b = batchDatas[batchIndex]; BatchData b = batchDatas[batchIndex];
// initialize outHit as the current max distance (no hit yet)
BatchData outHit; BatchData outHit;
outHit.origin = b.origin; outHit.origin = b.origin;
outHit.maxDistance = b.maxDistance; outHit.maxDistance = b.maxDistance;
float3 invDir=(0,0,0); // safe inverse direction
invDir.x = (abs(r.direction.x) < 1e-6) ? 1e8 : 1.0 / r.direction.x; float eps = 1e-6;
invDir.y = (abs(r.direction.y) < 1e-6) ? 1e8 : 1.0 / r.direction.y; float3 invDir;
invDir.z = (abs(r.direction.z) < 1e-6) ? 1e8 : 1.0 / r.direction.z; invDir.x = (abs(r.direction.x) < eps) ? (r.direction.x >= 0 ? 1e8 : -1e8) : 1.0 / r.direction.x;
invDir.y = (abs(r.direction.y) < eps) ? (r.direction.y >= 0 ? 1e8 : -1e8) : 1.0 / r.direction.y;
invDir.z = (abs(r.direction.z) < eps) ? (r.direction.z >= 0 ? 1e8 : -1e8) : 1.0 / r.direction.z;
StackEntry stack[64]; // small stack per thread
StackEntry stack[STACK_SIZE];
int sp = 0; int sp = 0;
StackEntry entry; StackEntry root;
entry.nodeIndex = rootIndex; root.nodeIndex = rootIndex;
entry.center = rootCenter; root.center = rootCenter;
entry.halfSize = rootHalfSize ; root.halfSize = rootHalfSize;
stack[sp++] = root;
stack[sp++] = entry;
bool hasHit = false; bool hasHit = false;
StackEntry bestEntry;
StackEntry lastEntry = entry; // traversal
while (sp > 0) while (sp > 0)
{ {
StackEntry e = stack[--sp]; StackEntry e = stack[--sp];
@ -217,67 +179,119 @@ void CSMain(uint3 id : SV_DispatchThreadID)
LinearNode n = nodes[e.nodeIndex]; LinearNode n = nodes[e.nodeIndex];
float tEntry, tExit; float tEntry, tExit;
if (!IntersectAABB_fast(e.center, e.halfSize, b.origin, r.direction, invDir, tEntry, tExit)) if (!IntersectAABB_fast(e.center, e.halfSize, b.origin, r.direction, invDir, tEntry, tExit)) continue;
continue;
if ( tEntry >= outHit.maxDistance ) continue; // prune with current best
if (tEntry >= outHit.maxDistance) continue;
// Feuille if (n.isLeaf == 1u)
if (n.isLeaf == 1)
{ {
if (n.isOccupied == 1) if (n.isOccupied == 1u)
{ {
float tHit = max(tEntry, 0); float tHit = max(tEntry, 0.0);
if (tHit < outHit.maxDistance) if (tHit < outHit.maxDistance)
{ {
// found a closer hit — commit minimal info, defer heavy ops
hasHit = true; hasHit = true;
outHit.maxDistance = tHit; outHit.maxDistance = tHit;
lastEntry = e; bestEntry = e;
} }
} }
continue; continue;
} }
if (n.childMask != 0) // Non-leaf: gather children that intersect and their tEntry (small array)
uint childMask = n.childMask;
// small local arrays
float childT[8];
int childIdx[8];
float3 childCenter[8];
int childCount = 0;
float childHalf = e.halfSize * 0.5;
for (uint i = 0; i < 8; ++i)
{ {
float childHalf = e.halfSize * 0.5; if (((childMask >> i) & 1u) == 0u) continue;
for (uint i = 0; i < 8; i++)
{
if (((n.childMask >> i) & 1u) == 0) continue;
uint offset = countbits(n.childMask & ((1u << i) - 1u)); uint offset = countbits(childMask & ((1u << i) - 1u));
int childIndex = n.childBase + offset; int cIndex = int(n.childBase + offset);
float3 offsetVec = childHalf * float3( // compute child center
(i & 4u) ? 1 : -1, float3 offsetVec = childHalf * float3(
(i & 2u) ? 1 : -1, (i & 4u) ? 1.0 : -1.0,
(i & 1u) ? 1 : -1 (i & 2u) ? 1.0 : -1.0,
); (i & 1u) ? 1.0 : -1.0
);
float3 cCenter = e.center + offsetVec;
entry.nodeIndex = childIndex; // pretest intersection with child AABB to get tEntry
entry.center = e.center + offsetVec; float ctEntry, ctExit;
entry.halfSize = childHalf ; if (!IntersectAABB_fast(cCenter, childHalf, b.origin, r.direction, invDir, ctEntry, ctExit)) continue;
if (ctEntry >= outHit.maxDistance) continue; // prune child if already farther than best hit
stack[sp++] = entry; // store for near-first push
} childT[childCount] = ctEntry;
childIdx[childCount] = cIndex;
childCenter[childCount] = cCenter;
// temporarily store center and half? we recompute on push
childCount++;
} }
}
if ( hasHit ) // sort children by childT ascending (insertion sort on at most 8 elements)
for (int a = 1; a < childCount; ++a)
{
float keyT = childT[a];
int keyIdx = childIdx[a];
float3 keyCenter = childCenter[a];
int j = a - 1;
while (j >= 0 && childT[j] > keyT) {
childT[j+1] = childT[j];
childIdx[j+1] = childIdx[j];
childCenter[j+1] = childCenter[j];
j--;
}
childT[j+1] = keyT;
childIdx[j+1] = keyIdx;
childCenter[j+1] = keyCenter;
}
StackEntry childEntry;
// push children in reverse order (so the nearest is popped first) if stack has room
for (int c = childCount - 1; c >= 0; --c)
{
//if (sp >= STACK_SIZE) break; // protect overflow
int cIndex = childIdx[c];
// compute child center (recompute bit pattern from cIndex relative? We need original i -> recompute mapping:
// We can recover i by searching bits in childMask; for clarity, recompute using same loop mapping: simpler: push center using known mapping
// But here we don't have i, so better to recompute using childIndex -> we need a deterministic mapping.
// For simplicity in this snippet, we recompute i by scanning parent children again — cost small (<=8), do it once:
// (implementation detail left to integrate carefully)
// --- simplified approach below assumes child center can be recomputed from cIndex via known ordering (keep same mapping as building)
// You must ensure mapping consistency between builder and shader.
// push
childEntry.nodeIndex = cIndex;
// recompute center from index i -> omitted here; in your real shader compute the offsetVec same as above
childEntry.center = childCenter[c]; // placeholder: replace with correct center compute
childEntry.halfSize = childHalf;
stack[sp++] = childEntry;
}
} // end while
if (hasHit)
{ {
LinearNode n = nodes[lastEntry.nodeIndex]; // commit heavy ops only now
float tHit = outHit.maxDistance; float tHit = outHit.maxDistance;
outHit.maxDistance = ( b.maxDistance - outHit.maxDistance ) * n.reflexionFactor;
float3 hitPos = b.origin + r.direction * tHit; float3 hitPos = b.origin + r.direction * tHit;
outHit.origin = ClosestPointOnAABB(hitPos, lastEntry.center, lastEntry.halfSize); // closest point
outHit.origin = ClosestPointOnAABB(hitPos, bestEntry.center, bestEntry.halfSize);
float3 dirOffset = b.origin - outHit.origin; outHit.origin += outHit.origin - bestEntry.center;
outHit.origin = outHit.origin + dirOffset;
hits.Append( outHit ); // append final
hits.Append(outHit);
} }
} }

View File

@ -519,6 +519,7 @@ MonoBehaviour:
maxDepth: 7 maxDepth: 7
boundsSize: 100 boundsSize: 100
computeShader: {fileID: 7200000, guid: beacc211952bec342847019386af6944, type: 3} computeShader: {fileID: 7200000, guid: beacc211952bec342847019386af6944, type: 3}
clusteringShader: {fileID: 7200000, guid: 7b67ac486de90db48bc81c43fae83845, type: 3}
--- !u!114 &464574967 --- !u!114 &464574967
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1092,7 +1093,7 @@ Transform:
m_GameObject: {fileID: 1273284503} m_GameObject: {fileID: 1273284503}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 24.7976, y: 0, z: -7.9622} m_LocalPosition: {x: 18.52, y: 3.69, z: -9.47}
m_LocalScale: {x: 11.138, y: 11.138, z: 11.138} m_LocalScale: {x: 11.138, y: 11.138, z: 11.138}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []

View File

@ -1,24 +1,24 @@
using UnityEngine; using UnityEngine;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Diagnostics;
public class VoxelRaycastGpuManager public class VoxelRaycastGpuManager
{ {
ComputeShader raycastShader; ComputeShader raycastShader;
OctreeNode root; // assign your built octree root
public VoxelRaycastGpuManager(ComputeShader computeShader, OctreeNode octreeRoot)
{
raycastShader = computeShader;
root = octreeRoot;
}
//---------------- Octree ----------------------------------------------------
OctreeNode root; // assign your built octree root
ComputeBuffer nodeBuffer; ComputeBuffer nodeBuffer;
public LinearTree linearTree; public LinearTree linearTree;
//--------------- RayCasts ------------------------------------------------------
int kernel; int kernel;
ComputeBuffer datasBuffer;
ComputeBuffer hitCounterBuffer = null; ComputeBuffer hitCounterBuffer = null;
ComputeBuffer rayBuffer = null; ComputeBuffer rayBuffer = null;
ComputeBuffer hitBuffer;
int raysPerBatch; int raysPerBatch;
@ -27,12 +27,33 @@ public class VoxelRaycastGpuManager
int groupsX; int groupsX;
int maxRaycastPerIteration; int maxRaycastPerIteration;
//--------------- Clustering ------------------------------------------------------
ComputeShader clusteringShader;
int gridSize;
int threadCount = 64;
int groupCountHits;
int groupCountGrid;
ComputeBuffer cellClusteringSums;
ComputeBuffer cellClusteringCounts;
ComputeBuffer clustered;
//---------------------------------------------------------------------------------
public VoxelRaycastGpuManager(ComputeShader computeShader, ComputeShader clusteringShader, OctreeNode octreeRoot)
{
raycastShader = computeShader;
this.clusteringShader = clusteringShader;
root = octreeRoot;
}
public VoxelRaycastGPU.BatchData[] Raycast(in VoxelRaycastGPU.BatchData[] batchData, int datasLenght) public VoxelRaycastGPU.BatchData[] Raycast(in VoxelRaycastGPU.BatchData[] batchData, int datasLenght)
{ {
ComputeBuffer hitBuffer = new ComputeBuffer(5000, batchDataClassSize, ComputeBufferType.Append);
ComputeBuffer datasBuffer = new ComputeBuffer(datasLenght, batchDataClassSize, ComputeBufferType.Default);
ComputeBuffer countBuffer = new ComputeBuffer(1, sizeof(int), ComputeBufferType.Raw); ComputeBuffer countBuffer = new ComputeBuffer(1, sizeof(int), ComputeBufferType.Raw);
int iteration = 0; int iteration = 0;
@ -41,17 +62,20 @@ public class VoxelRaycastGpuManager
datasBuffer.SetData(batchData, 0, 0, currentCount); datasBuffer.SetData(batchData, 0, 0, currentCount);
while (iteration < 4 && currentCount > 0) while (iteration < 5 && currentCount > 0)
{ {
previousCount = currentCount; previousCount = currentCount;
raycastShader.SetBuffer(kernel, "batchDatas", datasBuffer); hitBuffer.SetCounterValue(0);
raycastShader.SetBuffer(kernel, "batchDatas", datasBuffer );
raycastShader.SetBuffer(kernel, "hits", hitBuffer); raycastShader.SetBuffer(kernel, "hits", hitBuffer);
int threadsY = 8; int threadsY = 8;
int groupsY = Mathf.CeilToInt((float)currentCount / threadsY); int groupsY = Mathf.CeilToInt((float)currentCount / threadsY);
Stopwatch sw = Stopwatch.StartNew();
raycastShader.Dispatch(kernel, groupsX, groupsY, 1); raycastShader.Dispatch(kernel, groupsX, groupsY, 1);
ComputeBuffer.CopyCount(hitBuffer, countBuffer, 0); ComputeBuffer.CopyCount(hitBuffer, countBuffer, 0);
@ -59,22 +83,35 @@ public class VoxelRaycastGpuManager
countBuffer.GetData(countArr); countBuffer.GetData(countArr);
currentCount = countArr[0]; currentCount = countArr[0];
/*VoxelRaycastGPU.BatchData[] hits = new VoxelRaycastGPU.BatchData[currentCount]; sw.Stop();
hitBuffer.GetData(hits, 0, 0, currentCount); UnityEngine.Debug.Log($"Dispatch done in {sw.Elapsed.TotalMilliseconds}ms for {previousCount*raysPerBatch} casts retrieving {currentCount} hits");
for (int i = 0; i < currentCount; i++)
{
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = hits[i].origin;
sphere.transform.localScale = Vector3.one * 0.5f;
}*/
if (currentCount > 0) if (currentCount > 0)
{ {
(datasBuffer, hitBuffer) = (hitBuffer, datasBuffer); if (currentCount * raysPerBatch > maxRaycastPerIteration && iteration < 5)
{
sw = Stopwatch.StartNew();
currentCount = Clustering(currentCount);
sw.Stop();
hitBuffer.Release(); UnityEngine.Debug.Log($"Clustering done in {sw.Elapsed.TotalMilliseconds}ms for {currentCount} casts");
hitBuffer = new ComputeBuffer(5000, batchDataClassSize, ComputeBufferType.Append);
VoxelRaycastGPU.BatchData[] hits = new VoxelRaycastGPU.BatchData[currentCount];
datasBuffer.GetData(hits, 0, 0, currentCount);
for (int i = 0; i < currentCount; i++)
{
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = hits[i].origin;
sphere.transform.localScale = Vector3.one * 0.5f;
}
}
else
{
datasBuffer = hitBuffer;
}
} }
iteration++; iteration++;
@ -86,19 +123,24 @@ public class VoxelRaycastGpuManager
else else
hitBuffer.GetData(result, 0, 0, previousCount); hitBuffer.GetData(result, 0, 0, previousCount);
hitBuffer.Release();
datasBuffer.Release();
countBuffer.Release(); countBuffer.Release();
return result; return result;
} }
public void Init( int nbRaysPerBatch, in VoxelRaycastGPU.Ray[] rays ) public void Init(int nbRaysPerBatch, in VoxelRaycastGPU.Ray[] rays)
{ {
maxRaycastPerIteration = 1000000;
raysPerBatch = nbRaysPerBatch;
// Flatten octree // Flatten octree
linearTree = OctreeGpuHelpers.FlattenOctree(root); linearTree = OctreeGpuHelpers.FlattenOctree(root);
int nodeStride = Marshal.SizeOf(typeof(LinearNode)); // should be 64 int nodeStride = Marshal.SizeOf(typeof(LinearNode)); // should be 64
hitBuffer = new ComputeBuffer(maxRaycastPerIteration * raysPerBatch, batchDataClassSize, ComputeBufferType.Append);
datasBuffer = new ComputeBuffer(maxRaycastPerIteration, batchDataClassSize, ComputeBufferType.Default);
rayBuffer = new ComputeBuffer(rays.Length, Marshal.SizeOf(typeof(VoxelRaycastGPU.Ray)), ComputeBufferType.Default); rayBuffer = new ComputeBuffer(rays.Length, Marshal.SizeOf(typeof(VoxelRaycastGPU.Ray)), ComputeBufferType.Default);
rayBuffer.SetData(rays, 0, 0, rays.Length); rayBuffer.SetData(rays, 0, 0, rays.Length);
@ -110,7 +152,7 @@ public class VoxelRaycastGpuManager
uint[] counterInit = { 0 }; uint[] counterInit = { 0 };
counterInit[0] = 0; counterInit[0] = 0;
hitCounterBuffer.SetData(counterInit); hitCounterBuffer.SetData(counterInit);
kernel = raycastShader.FindKernel("CSMain"); kernel = raycastShader.FindKernel("CSMain");
raycastShader.SetBuffer(kernel, "nodes", nodeBuffer); raycastShader.SetBuffer(kernel, "nodes", nodeBuffer);
@ -124,11 +166,54 @@ public class VoxelRaycastGpuManager
raycastShader.SetFloat("rootHalfSize", root.bounds.size.x / 2f); raycastShader.SetFloat("rootHalfSize", root.bounds.size.x / 2f);
raycastShader.SetFloats("rootCenter", new float[3] { root.bounds.center.x, root.bounds.center.y, root.bounds.center.z }); raycastShader.SetFloats("rootCenter", new float[3] { root.bounds.center.x, root.bounds.center.y, root.bounds.center.z });
raysPerBatch = nbRaysPerBatch;
groupsX = Mathf.CeilToInt((float)raysPerBatch / 8); groupsX = Mathf.CeilToInt((float)raysPerBatch / 8);
maxRaycastPerIteration = 5000 / raysPerBatch; gridSize = maxRaycastPerIteration / raysPerBatch;
groupCountGrid = Mathf.CeilToInt((float)gridSize / threadCount);
cellClusteringSums = new ComputeBuffer(gridSize, sizeof(float) * 4);
cellClusteringCounts = new ComputeBuffer(gridSize, sizeof(uint));
clustered = new ComputeBuffer(gridSize, Marshal.SizeOf(typeof(VoxelRaycastGPU.BatchData)), ComputeBufferType.Append);
}
public int Clustering( int inputCount )
{
groupCountHits = Mathf.CeilToInt((float)inputCount / threadCount);
clustered.SetCounterValue(0);
float[] zero4 = new float[gridSize * 4];
uint[] zeroU = new uint[gridSize];
cellClusteringSums.SetData(zero4);
cellClusteringCounts.SetData(zeroU);
// Shader
int kernelAcc = clusteringShader.FindKernel("AccumulateHits");
int kernelMean = clusteringShader.FindKernel("ComputeMeans");
clusteringShader.SetInt("inputCount", inputCount);
clusteringShader.SetFloat("cellSize", 1.0f); // taille des cellules
clusteringShader.SetVector("gridOrigin", Vector3.zero);
clusteringShader.SetBuffer(kernelAcc, "inputHits", hitBuffer);
clusteringShader.SetBuffer(kernelAcc, "cellSums", cellClusteringSums);
clusteringShader.SetBuffer(kernelAcc, "cellCounts", cellClusteringCounts);
clusteringShader.Dispatch(kernelAcc, groupCountHits, 1, 1);
clusteringShader.SetBuffer(kernelMean, "cellSums", cellClusteringSums);
clusteringShader.SetBuffer(kernelMean, "cellCounts", cellClusteringCounts);
clusteringShader.SetBuffer(kernelMean, "clusteredHits", clustered);
clusteringShader.Dispatch(kernelMean, groupCountGrid, 1, 1);
// Lecture du résultat
ComputeBuffer countBuffer = new ComputeBuffer(1, sizeof(int), ComputeBufferType.Raw);
ComputeBuffer.CopyCount(clustered, countBuffer, 0);
int[] countArr = new int[1];
countBuffer.GetData(countArr);
int clusterCount = countArr[0];
datasBuffer = clustered;
return clusterCount;
} }
~VoxelRaycastGpuManager() ~VoxelRaycastGpuManager()
@ -138,5 +223,9 @@ public class VoxelRaycastGpuManager
if (rayBuffer != null) if (rayBuffer != null)
rayBuffer.Release(); rayBuffer.Release();
hitBuffer.Release();
datasBuffer.Release();
} }
} }

View File

@ -15,6 +15,7 @@ public class VoxelTreeManager : MonoBehaviour
public int maxDepth = 6; // Tree subdivision limit public int maxDepth = 6; // Tree subdivision limit
public float boundsSize = 300f; // World size covered by the voxel tree public float boundsSize = 300f; // World size covered by the voxel tree
public ComputeShader computeShader; public ComputeShader computeShader;
public ComputeShader clusteringShader;
private OctreeNode root; private OctreeNode root;
private VoxelTreeRaycaster raycaster = new VoxelTreeRaycaster(); private VoxelTreeRaycaster raycaster = new VoxelTreeRaycaster();
public VoxelRaycastGpuManager gpuRayCaster; public VoxelRaycastGpuManager gpuRayCaster;
@ -29,7 +30,7 @@ public class VoxelTreeManager : MonoBehaviour
var dbg = FindObjectOfType<VoxelTreeDebugger>(); var dbg = FindObjectOfType<VoxelTreeDebugger>();
if (dbg) dbg.root = root; if (dbg) dbg.root = root;
gpuRayCaster = new VoxelRaycastGpuManager(computeShader, root); gpuRayCaster = new VoxelRaycastGpuManager(computeShader, clusteringShader, root);
} }
// This function replaces pos => pos.magnitude < 100f // This function replaces pos => pos.magnitude < 100f

8
Assets/Settings.meta Normal file
View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8c2a84cff8d04a94c8c462293e8dd112
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 40a945ad85a306045b49fa05807b0b34
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,828 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 15003, guid: 0000000000000000e000000000000000, type: 0}
m_Name: Windows
m_EditorClassIdentifier: UnityEditor.dll::UnityEditor.Build.Profile.BuildProfile
m_AssetVersion: 1
m_BuildTarget: 19
m_Subtarget: 2
m_PlatformId: 4e3c793746204150860bf175a9a41a05
m_PlatformBuildProfile:
rid: 6379512061355360307
m_OverrideGlobalSceneList: 0
m_Scenes: []
m_ScriptingDefines: []
m_PlayerSettingsYaml:
m_Settings:
- line: '| PlayerSettings:'
- line: '| m_ObjectHideFlags: 0'
- line: '| serializedVersion: 28'
- line: '| productGUID: 6f3f0780fb773534ba2ed370ebc76319'
- line: '| AndroidProfiler: 0'
- line: '| AndroidFilterTouchesWhenObscured: 0'
- line: '| AndroidEnableSustainedPerformanceMode: 0'
- line: '| defaultScreenOrientation: 4'
- line: '| targetDevice: 2'
- line: '| useOnDemandResources: 0'
- line: '| accelerometerFrequency: 60'
- line: '| companyName: DefaultCompany'
- line: '| productName: Sound'
- line: '| defaultCursor: {instanceID: 0}'
- line: '| cursorHotspot: {x: 0, y: 0}'
- line: '| m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b:
0.1254902, a: 1}'
- line: '| m_ShowUnitySplashScreen: 1'
- line: '| m_ShowUnitySplashLogo: 1'
- line: '| m_SplashScreenOverlayOpacity: 1'
- line: '| m_SplashScreenAnimation: 1'
- line: '| m_SplashScreenLogoStyle: 1'
- line: '| m_SplashScreenDrawMode: 0'
- line: '| m_SplashScreenBackgroundAnimationZoom: 1'
- line: '| m_SplashScreenLogoAnimationZoom: 1'
- line: '| m_SplashScreenBackgroundLandscapeAspect: 1'
- line: '| m_SplashScreenBackgroundPortraitAspect: 1'
- line: '| m_SplashScreenBackgroundLandscapeUvs:'
- line: '| serializedVersion: 2'
- line: '| x: 0'
- line: '| y: 0'
- line: '| width: 1'
- line: '| height: 1'
- line: '| m_SplashScreenBackgroundPortraitUvs:'
- line: '| serializedVersion: 2'
- line: '| x: 0'
- line: '| y: 0'
- line: '| width: 1'
- line: '| height: 1'
- line: '| m_SplashScreenLogos: []'
- line: '| m_VirtualRealitySplashScreen: {instanceID: 0}'
- line: '| m_HolographicTrackingLossScreen: {instanceID: 0}'
- line: '| defaultScreenWidth: 1920'
- line: '| defaultScreenHeight: 1080'
- line: '| defaultScreenWidthWeb: 960'
- line: '| defaultScreenHeightWeb: 600'
- line: '| m_StereoRenderingPath: 0'
- line: '| m_ActiveColorSpace: 1'
- line: '| unsupportedMSAAFallback: 0'
- line: '| m_SpriteBatchMaxVertexCount: 65535'
- line: '| m_SpriteBatchVertexThreshold: 300'
- line: '| m_MTRendering: 1'
- line: '| mipStripping: 0'
- line: '| numberOfMipsStripped: 0'
- line: '| numberOfMipsStrippedPerMipmapLimitGroup: {}'
- line: '| m_StackTraceTypes: 010000000100000001000000010000000100000001000000'
- line: '| iosShowActivityIndicatorOnLoading: -1'
- line: '| androidShowActivityIndicatorOnLoading: -1'
- line: '| iosUseCustomAppBackgroundBehavior: 0'
- line: '| allowedAutorotateToPortrait: 1'
- line: '| allowedAutorotateToPortraitUpsideDown: 1'
- line: '| allowedAutorotateToLandscapeRight: 1'
- line: '| allowedAutorotateToLandscapeLeft: 1'
- line: '| useOSAutorotation: 1'
- line: '| use32BitDisplayBuffer: 1'
- line: '| preserveFramebufferAlpha: 0'
- line: '| disableDepthAndStencilBuffers: 0'
- line: '| androidStartInFullscreen: 1'
- line: '| androidRenderOutsideSafeArea: 1'
- line: '| androidUseSwappy: 1'
- line: '| androidBlitType: 0'
- line: '| androidResizeableActivity: 1'
- line: '| androidDefaultWindowWidth: 1920'
- line: '| androidDefaultWindowHeight: 1080'
- line: '| androidMinimumWindowWidth: 400'
- line: '| androidMinimumWindowHeight: 300'
- line: '| androidFullscreenMode: 1'
- line: '| androidAutoRotationBehavior: 1'
- line: '| androidPredictiveBackSupport: 0'
- line: '| androidApplicationEntry: 2'
- line: '| defaultIsNativeResolution: 1'
- line: '| macRetinaSupport: 1'
- line: '| runInBackground: 1'
- line: '| muteOtherAudioSources: 0'
- line: '| Prepare IOS For Recording: 0'
- line: '| Force IOS Speakers When Recording: 0'
- line: '| audioSpatialExperience: 0'
- line: '| deferSystemGesturesMode: 0'
- line: '| hideHomeButton: 0'
- line: '| submitAnalytics: 1'
- line: '| usePlayerLog: 1'
- line: '| dedicatedServerOptimizations: 1'
- line: '| bakeCollisionMeshes: 0'
- line: '| forceSingleInstance: 0'
- line: '| useFlipModelSwapchain: 1'
- line: '| resizableWindow: 0'
- line: '| useMacAppStoreValidation: 0'
- line: '| macAppStoreCategory: public.app-category.games'
- line: '| gpuSkinning: 1'
- line: '| meshDeformation: 2'
- line: '| xboxPIXTextureCapture: 0'
- line: '| xboxEnableAvatar: 0'
- line: '| xboxEnableKinect: 0'
- line: '| xboxEnableKinectAutoTracking: 0'
- line: '| xboxEnableFitness: 0'
- line: '| visibleInBackground: 1'
- line: '| allowFullscreenSwitch: 1'
- line: '| fullscreenMode: 1'
- line: '| xboxSpeechDB: 0'
- line: '| xboxEnableHeadOrientation: 0'
- line: '| xboxEnableGuest: 0'
- line: '| xboxEnablePIXSampling: 0'
- line: '| metalFramebufferOnly: 0'
- line: '| xboxOneResolution: 0'
- line: '| xboxOneSResolution: 0'
- line: '| xboxOneXResolution: 3'
- line: '| xboxOneMonoLoggingLevel: 0'
- line: '| xboxOneLoggingLevel: 1'
- line: '| xboxOneDisableEsram: 0'
- line: '| xboxOneEnableTypeOptimization: 0'
- line: '| xboxOnePresentImmediateThreshold: 0'
- line: '| switchQueueCommandMemory: 0'
- line: '| switchQueueControlMemory: 16384'
- line: '| switchQueueComputeMemory: 262144'
- line: '| switchNVNShaderPoolsGranularity: 33554432'
- line: '| switchNVNDefaultPoolsGranularity: 16777216'
- line: '| switchNVNOtherPoolsGranularity: 16777216'
- line: '| switchGpuScratchPoolGranularity: 2097152'
- line: '| switchAllowGpuScratchShrinking: 0'
- line: '| switchNVNMaxPublicTextureIDCount: 0'
- line: '| switchNVNMaxPublicSamplerIDCount: 0'
- line: '| switchMaxWorkerMultiple: 8'
- line: '| switchNVNGraphicsFirmwareMemory: 32'
- line: '| switchGraphicsJobsSyncAfterKick: 1'
- line: '| vulkanNumSwapchainBuffers: 3'
- line: '| vulkanEnableSetSRGBWrite: 0'
- line: '| vulkanEnablePreTransform: 1'
- line: '| vulkanEnableLateAcquireNextImage: 0'
- line: '| vulkanEnableCommandBufferRecycling: 1'
- line: '| loadStoreDebugModeEnabled: 0'
- line: '| visionOSBundleVersion: 1.0'
- line: '| tvOSBundleVersion: 1.0'
- line: '| bundleVersion: 0.1'
- line: '| preloadedAssets: []'
- line: '| metroInputSource: 0'
- line: '| wsaTransparentSwapchain: 0'
- line: '| m_HolographicPauseOnTrackingLoss: 1'
- line: '| xboxOneDisableKinectGpuReservation: 1'
- line: '| xboxOneEnable7thCore: 1'
- line: '| vrSettings:'
- line: '| enable360StereoCapture: 0'
- line: '| isWsaHolographicRemotingEnabled: 0'
- line: '| enableFrameTimingStats: 0'
- line: '| enableOpenGLProfilerGPURecorders: 1'
- line: '| allowHDRDisplaySupport: 0'
- line: '| useHDRDisplay: 0'
- line: '| hdrBitDepth: 0'
- line: '| m_ColorGamuts: 00000000'
- line: '| targetPixelDensity: 30'
- line: '| resolutionScalingMode: 0'
- line: '| resetResolutionOnWindowResize: 0'
- line: '| androidSupportedAspectRatio: 1'
- line: '| androidMaxAspectRatio: 2.4'
- line: '| androidMinAspectRatio: 1'
- line: '| applicationIdentifier:'
- line: '| Standalone: com.DefaultCompany.3D-Project'
- line: '| buildNumber:'
- line: '| Standalone: 0'
- line: '| VisionOS: 0'
- line: '| iPhone: 0'
- line: '| tvOS: 0'
- line: '| overrideDefaultApplicationIdentifier: 1'
- line: '| AndroidBundleVersionCode: 1'
- line: '| AndroidMinSdkVersion: 23'
- line: '| AndroidTargetSdkVersion: 0'
- line: '| AndroidPreferredInstallLocation: 1'
- line: '| aotOptions: '
- line: '| stripEngineCode: 1'
- line: '| iPhoneStrippingLevel: 0'
- line: '| iPhoneScriptCallOptimization: 0'
- line: '| ForceInternetPermission: 0'
- line: '| ForceSDCardPermission: 0'
- line: '| CreateWallpaper: 0'
- line: '| androidSplitApplicationBinary: 0'
- line: '| keepLoadedShadersAlive: 0'
- line: '| StripUnusedMeshComponents: 1'
- line: '| strictShaderVariantMatching: 0'
- line: '| VertexChannelCompressionMask: 4054'
- line: '| iPhoneSdkVersion: 988'
- line: '| iOSSimulatorArchitecture: 0'
- line: '| iOSTargetOSVersionString: 13.0'
- line: '| tvOSSdkVersion: 0'
- line: '| tvOSSimulatorArchitecture: 0'
- line: '| tvOSRequireExtendedGameController: 0'
- line: '| tvOSTargetOSVersionString: 13.0'
- line: '| VisionOSSdkVersion: 0'
- line: '| VisionOSTargetOSVersionString: 1.0'
- line: '| uIPrerenderedIcon: 0'
- line: '| uIRequiresPersistentWiFi: 0'
- line: '| uIRequiresFullScreen: 1'
- line: '| uIStatusBarHidden: 1'
- line: '| uIExitOnSuspend: 0'
- line: '| uIStatusBarStyle: 0'
- line: '| appleTVSplashScreen: {instanceID: 0}'
- line: '| appleTVSplashScreen2x: {instanceID: 0}'
- line: '| tvOSSmallIconLayers: []'
- line: '| tvOSSmallIconLayers2x: []'
- line: '| tvOSLargeIconLayers: []'
- line: '| tvOSLargeIconLayers2x: []'
- line: '| tvOSTopShelfImageLayers: []'
- line: '| tvOSTopShelfImageLayers2x: []'
- line: '| tvOSTopShelfImageWideLayers: []'
- line: '| tvOSTopShelfImageWideLayers2x: []'
- line: '| iOSLaunchScreenType: 0'
- line: '| iOSLaunchScreenPortrait: {instanceID: 0}'
- line: '| iOSLaunchScreenLandscape: {instanceID: 0}'
- line: '| iOSLaunchScreenBackgroundColor:'
- line: '| serializedVersion: 2'
- line: '| rgba: 0'
- line: '| iOSLaunchScreenFillPct: 100'
- line: '| iOSLaunchScreenSize: 100'
- line: '| iOSLaunchScreeniPadType: 0'
- line: '| iOSLaunchScreeniPadImage: {instanceID: 0}'
- line: '| iOSLaunchScreeniPadBackgroundColor:'
- line: '| serializedVersion: 2'
- line: '| rgba: 0'
- line: '| iOSLaunchScreeniPadFillPct: 100'
- line: '| iOSLaunchScreeniPadSize: 100'
- line: '| iOSLaunchScreenCustomStoryboardPath: '
- line: '| iOSLaunchScreeniPadCustomStoryboardPath: '
- line: '| iOSDeviceRequirements: []'
- line: '| iOSURLSchemes: []'
- line: '| macOSURLSchemes: []'
- line: '| iOSBackgroundModes: 0'
- line: '| iOSMetalForceHardShadows: 0'
- line: '| metalEditorSupport: 1'
- line: '| metalAPIValidation: 1'
- line: '| metalCompileShaderBinary: 0'
- line: '| iOSRenderExtraFrameOnPause: 0'
- line: '| iosCopyPluginsCodeInsteadOfSymlink: 0'
- line: '| appleDeveloperTeamID: '
- line: '| iOSManualSigningProvisioningProfileID: '
- line: '| tvOSManualSigningProvisioningProfileID: '
- line: '| VisionOSManualSigningProvisioningProfileID: '
- line: '| iOSManualSigningProvisioningProfileType: 0'
- line: '| tvOSManualSigningProvisioningProfileType: 0'
- line: '| VisionOSManualSigningProvisioningProfileType: 0'
- line: '| appleEnableAutomaticSigning: 0'
- line: '| iOSRequireARKit: 0'
- line: '| iOSAutomaticallyDetectAndAddCapabilities: 1'
- line: '| appleEnableProMotion: 0'
- line: '| shaderPrecisionModel: 0'
- line: '| clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea'
- line: '| templatePackageId: com.unity.template.3d@9.1.0'
- line: '| templateDefaultScene: Assets/Scenes/SampleScene.unity'
- line: '| useCustomMainManifest: 0'
- line: '| useCustomLauncherManifest: 0'
- line: '| useCustomMainGradleTemplate: 0'
- line: '| useCustomLauncherGradleManifest: 0'
- line: '| useCustomBaseGradleTemplate: 0'
- line: '| useCustomGradlePropertiesTemplate: 0'
- line: '| useCustomGradleSettingsTemplate: 0'
- line: '| useCustomProguardFile: 0'
- line: '| AndroidTargetArchitectures: 2'
- line: '| AndroidSplashScreenScale: 0'
- line: '| androidSplashScreen: {instanceID: 0}'
- line: '| AndroidKeystoreName: '
- line: '| AndroidKeyaliasName: '
- line: '| AndroidEnableArmv9SecurityFeatures: 0'
- line: '| AndroidEnableArm64MTE: 0'
- line: '| AndroidBuildApkPerCpuArchitecture: 0'
- line: '| AndroidTVCompatibility: 0'
- line: '| AndroidIsGame: 1'
- line: '| androidAppCategory: 3'
- line: '| useAndroidAppCategory: 1'
- line: '| androidAppCategoryOther: '
- line: '| AndroidEnableTango: 0'
- line: '| androidEnableBanner: 1'
- line: '| androidUseLowAccuracyLocation: 0'
- line: '| androidUseCustomKeystore: 0'
- line: '| m_AndroidBanners:'
- line: '| - width: 320'
- line: '| height: 180'
- line: '| banner: {instanceID: 0}'
- line: '| androidGamepadSupportLevel: 0'
- line: '| AndroidMinifyRelease: 0'
- line: '| AndroidMinifyDebug: 0'
- line: '| AndroidValidateAppBundleSize: 1'
- line: '| AndroidAppBundleSizeToValidate: 150'
- line: '| AndroidReportGooglePlayAppDependencies: 1'
- line: '| androidSymbolsSizeThreshold: 800'
- line: '| m_BuildTargetIcons: []'
- line: '| m_BuildTargetPlatformIcons: []'
- line: '| m_BuildTargetBatching:'
- line: '| - m_BuildTarget: Standalone'
- line: '| m_StaticBatching: 1'
- line: '| m_DynamicBatching: 0'
- line: '| - m_BuildTarget: tvOS'
- line: '| m_StaticBatching: 1'
- line: '| m_DynamicBatching: 0'
- line: '| - m_BuildTarget: Android'
- line: '| m_StaticBatching: 1'
- line: '| m_DynamicBatching: 0'
- line: '| - m_BuildTarget: iPhone'
- line: '| m_StaticBatching: 1'
- line: '| m_DynamicBatching: 0'
- line: '| - m_BuildTarget: WebGL'
- line: '| m_StaticBatching: 0'
- line: '| m_DynamicBatching: 0'
- line: '| m_BuildTargetShaderSettings: []'
- line: '| m_BuildTargetGraphicsJobs:'
- line: '| - m_BuildTarget: MacStandaloneSupport'
- line: '| m_GraphicsJobs: 0'
- line: '| - m_BuildTarget: Switch'
- line: '| m_GraphicsJobs: 1'
- line: '| - m_BuildTarget: MetroSupport'
- line: '| m_GraphicsJobs: 1'
- line: '| - m_BuildTarget: AppleTVSupport'
- line: '| m_GraphicsJobs: 0'
- line: '| - m_BuildTarget: BJMSupport'
- line: '| m_GraphicsJobs: 1'
- line: '| - m_BuildTarget: LinuxStandaloneSupport'
- line: '| m_GraphicsJobs: 1'
- line: '| - m_BuildTarget: PS4Player'
- line: '| m_GraphicsJobs: 1'
- line: '| - m_BuildTarget: iOSSupport'
- line: '| m_GraphicsJobs: 0'
- line: '| - m_BuildTarget: WindowsStandaloneSupport'
- line: '| m_GraphicsJobs: 1'
- line: '| - m_BuildTarget: XboxOnePlayer'
- line: '| m_GraphicsJobs: 1'
- line: '| - m_BuildTarget: LuminSupport'
- line: '| m_GraphicsJobs: 0'
- line: '| - m_BuildTarget: AndroidPlayer'
- line: '| m_GraphicsJobs: 0'
- line: '| - m_BuildTarget: WebGLSupport'
- line: '| m_GraphicsJobs: 0'
- line: '| m_BuildTargetGraphicsJobMode:'
- line: '| - m_BuildTarget: PS4Player'
- line: '| m_GraphicsJobMode: 0'
- line: '| - m_BuildTarget: XboxOnePlayer'
- line: '| m_GraphicsJobMode: 0'
- line: '| m_BuildTargetGraphicsAPIs:'
- line: '| - m_BuildTarget: AndroidPlayer'
- line: '| m_APIs: 150000000b000000'
- line: '| m_Automatic: 1'
- line: '| - m_BuildTarget: iOSSupport'
- line: '| m_APIs: 10000000'
- line: '| m_Automatic: 1'
- line: '| - m_BuildTarget: AppleTVSupport'
- line: '| m_APIs: 10000000'
- line: '| m_Automatic: 1'
- line: '| - m_BuildTarget: WebGLSupport'
- line: '| m_APIs: 0b000000'
- line: '| m_Automatic: 1'
- line: '| m_BuildTargetVRSettings:'
- line: '| - m_BuildTarget: Standalone'
- line: '| m_Enabled: 0'
- line: '| m_Devices:'
- line: '| - Oculus'
- line: '| - OpenVR'
- line: '| m_DefaultShaderChunkSizeInMB: 16'
- line: '| m_DefaultShaderChunkCount: 0'
- line: '| openGLRequireES31: 0'
- line: '| openGLRequireES31AEP: 0'
- line: '| openGLRequireES32: 0'
- line: '| m_TemplateCustomTags: {}'
- line: '| mobileMTRendering:'
- line: '| Android: 1'
- line: '| iPhone: 1'
- line: '| tvOS: 1'
- line: '| m_BuildTargetGroupLightmapEncodingQuality:'
- line: '| - serializedVersion: 2'
- line: '| m_BuildTarget: Android'
- line: '| m_EncodingQuality: 1'
- line: '| - serializedVersion: 2'
- line: '| m_BuildTarget: iPhone'
- line: '| m_EncodingQuality: 1'
- line: '| - serializedVersion: 2'
- line: '| m_BuildTarget: tvOS'
- line: '| m_EncodingQuality: 1'
- line: '| m_BuildTargetGroupHDRCubemapEncodingQuality: []'
- line: '| m_BuildTargetGroupLightmapSettings: []'
- line: '| m_BuildTargetGroupLoadStoreDebugModeSettings: []'
- line: '| m_BuildTargetNormalMapEncoding:'
- line: '| - m_BuildTarget: Android'
- line: '| m_Encoding: 1'
- line: '| - m_BuildTarget: iPhone'
- line: '| m_Encoding: 1'
- line: '| - m_BuildTarget: tvOS'
- line: '| m_Encoding: 1'
- line: '| m_BuildTargetDefaultTextureCompressionFormat:'
- line: '| - serializedVersion: 3'
- line: '| m_BuildTarget: Android'
- line: '| m_Formats: 03000000'
- line: '| playModeTestRunnerEnabled: 0'
- line: '| runPlayModeTestAsEditModeTest: 0'
- line: '| actionOnDotNetUnhandledException: 1'
- line: '| editorGfxJobOverride: 1'
- line: '| enableInternalProfiler: 0'
- line: '| logObjCUncaughtExceptions: 1'
- line: '| enableCrashReportAPI: 0'
- line: '| cameraUsageDescription: '
- line: '| locationUsageDescription: '
- line: '| microphoneUsageDescription: '
- line: '| bluetoothUsageDescription: '
- line: '| macOSTargetOSVersion: 11.0'
- line: '| switchNMETAOverride: '
- line: '| switchNetLibKey: '
- line: '| switchSocketMemoryPoolSize: 6144'
- line: '| switchSocketAllocatorPoolSize: 128'
- line: '| switchSocketConcurrencyLimit: 14'
- line: '| switchScreenResolutionBehavior: 2'
- line: '| switchUseCPUProfiler: 0'
- line: '| switchEnableFileSystemTrace: 0'
- line: '| switchLTOSetting: 0'
- line: '| switchApplicationID: 0x01004b9000490000'
- line: '| switchNSODependencies: '
- line: '| switchCompilerFlags: '
- line: '| switchTitleNames_0: '
- line: '| switchTitleNames_1: '
- line: '| switchTitleNames_2: '
- line: '| switchTitleNames_3: '
- line: '| switchTitleNames_4: '
- line: '| switchTitleNames_5: '
- line: '| switchTitleNames_6: '
- line: '| switchTitleNames_7: '
- line: '| switchTitleNames_8: '
- line: '| switchTitleNames_9: '
- line: '| switchTitleNames_10: '
- line: '| switchTitleNames_11: '
- line: '| switchTitleNames_12: '
- line: '| switchTitleNames_13: '
- line: '| switchTitleNames_14: '
- line: '| switchTitleNames_15: '
- line: '| switchPublisherNames_0: '
- line: '| switchPublisherNames_1: '
- line: '| switchPublisherNames_2: '
- line: '| switchPublisherNames_3: '
- line: '| switchPublisherNames_4: '
- line: '| switchPublisherNames_5: '
- line: '| switchPublisherNames_6: '
- line: '| switchPublisherNames_7: '
- line: '| switchPublisherNames_8: '
- line: '| switchPublisherNames_9: '
- line: '| switchPublisherNames_10: '
- line: '| switchPublisherNames_11: '
- line: '| switchPublisherNames_12: '
- line: '| switchPublisherNames_13: '
- line: '| switchPublisherNames_14: '
- line: '| switchPublisherNames_15: '
- line: '| switchIcons_0: {instanceID: 0}'
- line: '| switchIcons_1: {instanceID: 0}'
- line: '| switchIcons_2: {instanceID: 0}'
- line: '| switchIcons_3: {instanceID: 0}'
- line: '| switchIcons_4: {instanceID: 0}'
- line: '| switchIcons_5: {instanceID: 0}'
- line: '| switchIcons_6: {instanceID: 0}'
- line: '| switchIcons_7: {instanceID: 0}'
- line: '| switchIcons_8: {instanceID: 0}'
- line: '| switchIcons_9: {instanceID: 0}'
- line: '| switchIcons_10: {instanceID: 0}'
- line: '| switchIcons_11: {instanceID: 0}'
- line: '| switchIcons_12: {instanceID: 0}'
- line: '| switchIcons_13: {instanceID: 0}'
- line: '| switchIcons_14: {instanceID: 0}'
- line: '| switchIcons_15: {instanceID: 0}'
- line: '| switchSmallIcons_0: {instanceID: 0}'
- line: '| switchSmallIcons_1: {instanceID: 0}'
- line: '| switchSmallIcons_2: {instanceID: 0}'
- line: '| switchSmallIcons_3: {instanceID: 0}'
- line: '| switchSmallIcons_4: {instanceID: 0}'
- line: '| switchSmallIcons_5: {instanceID: 0}'
- line: '| switchSmallIcons_6: {instanceID: 0}'
- line: '| switchSmallIcons_7: {instanceID: 0}'
- line: '| switchSmallIcons_8: {instanceID: 0}'
- line: '| switchSmallIcons_9: {instanceID: 0}'
- line: '| switchSmallIcons_10: {instanceID: 0}'
- line: '| switchSmallIcons_11: {instanceID: 0}'
- line: '| switchSmallIcons_12: {instanceID: 0}'
- line: '| switchSmallIcons_13: {instanceID: 0}'
- line: '| switchSmallIcons_14: {instanceID: 0}'
- line: '| switchSmallIcons_15: {instanceID: 0}'
- line: '| switchManualHTML: '
- line: '| switchAccessibleURLs: '
- line: '| switchLegalInformation: '
- line: '| switchMainThreadStackSize: 1048576'
- line: '| switchPresenceGroupId: '
- line: '| switchLogoHandling: 0'
- line: '| switchReleaseVersion: 0'
- line: '| switchDisplayVersion: 1.0.0'
- line: '| switchStartupUserAccount: 0'
- line: '| switchSupportedLanguagesMask: 0'
- line: '| switchLogoType: 0'
- line: '| switchApplicationErrorCodeCategory: '
- line: '| switchUserAccountSaveDataSize: 0'
- line: '| switchUserAccountSaveDataJournalSize: 0'
- line: '| switchApplicationAttribute: 0'
- line: '| switchCardSpecSize: -1'
- line: '| switchCardSpecClock: -1'
- line: '| switchRatingsMask: 0'
- line: '| switchRatingsInt_0: 0'
- line: '| switchRatingsInt_1: 0'
- line: '| switchRatingsInt_2: 0'
- line: '| switchRatingsInt_3: 0'
- line: '| switchRatingsInt_4: 0'
- line: '| switchRatingsInt_5: 0'
- line: '| switchRatingsInt_6: 0'
- line: '| switchRatingsInt_7: 0'
- line: '| switchRatingsInt_8: 0'
- line: '| switchRatingsInt_9: 0'
- line: '| switchRatingsInt_10: 0'
- line: '| switchRatingsInt_11: 0'
- line: '| switchRatingsInt_12: 0'
- line: '| switchLocalCommunicationIds_0: '
- line: '| switchLocalCommunicationIds_1: '
- line: '| switchLocalCommunicationIds_2: '
- line: '| switchLocalCommunicationIds_3: '
- line: '| switchLocalCommunicationIds_4: '
- line: '| switchLocalCommunicationIds_5: '
- line: '| switchLocalCommunicationIds_6: '
- line: '| switchLocalCommunicationIds_7: '
- line: '| switchParentalControl: 0'
- line: '| switchAllowsScreenshot: 1'
- line: '| switchAllowsVideoCapturing: 1'
- line: '| switchAllowsRuntimeAddOnContentInstall: 0'
- line: '| switchDataLossConfirmation: 0'
- line: '| switchUserAccountLockEnabled: 0'
- line: '| switchSystemResourceMemory: 16777216'
- line: '| switchSupportedNpadStyles: 22'
- line: '| switchNativeFsCacheSize: 32'
- line: '| switchIsHoldTypeHorizontal: 0'
- line: '| switchSupportedNpadCount: 8'
- line: '| switchEnableTouchScreen: 1'
- line: '| switchSocketConfigEnabled: 0'
- line: '| switchTcpInitialSendBufferSize: 32'
- line: '| switchTcpInitialReceiveBufferSize: 64'
- line: '| switchTcpAutoSendBufferSizeMax: 256'
- line: '| switchTcpAutoReceiveBufferSizeMax: 256'
- line: '| switchUdpSendBufferSize: 9'
- line: '| switchUdpReceiveBufferSize: 42'
- line: '| switchSocketBufferEfficiency: 4'
- line: '| switchSocketInitializeEnabled: 1'
- line: '| switchNetworkInterfaceManagerInitializeEnabled: 1'
- line: '| switchDisableHTCSPlayerConnection: 0'
- line: '| switchUseNewStyleFilepaths: 1'
- line: '| switchUseLegacyFmodPriorities: 0'
- line: '| switchUseMicroSleepForYield: 1'
- line: '| switchEnableRamDiskSupport: 0'
- line: '| switchMicroSleepForYieldTime: 25'
- line: '| switchRamDiskSpaceSize: 12'
- line: '| switchUpgradedPlayerSettingsToNMETA: 0'
- line: '| ps4NPAgeRating: 12'
- line: '| ps4NPTitleSecret: '
- line: '| ps4NPTrophyPackPath: '
- line: '| ps4ParentalLevel: 11'
- line: '| ps4ContentID: '
- line: '| ps4Category: 0'
- line: '| ps4MasterVersion: 01.00'
- line: '| ps4AppVersion: 01.00'
- line: '| ps4AppType: 0'
- line: '| ps4ParamSfxPath: '
- line: '| ps4VideoOutPixelFormat: 0'
- line: '| ps4VideoOutInitialWidth: 1920'
- line: '| ps4VideoOutBaseModeInitialWidth: 1920'
- line: '| ps4VideoOutReprojectionRate: 60'
- line: '| ps4PronunciationXMLPath: '
- line: '| ps4PronunciationSIGPath: '
- line: '| ps4BackgroundImagePath: '
- line: '| ps4StartupImagePath: '
- line: '| ps4StartupImagesFolder: '
- line: '| ps4IconImagesFolder: '
- line: '| ps4SaveDataImagePath: '
- line: '| ps4SdkOverride: '
- line: '| ps4BGMPath: '
- line: '| ps4ShareFilePath: '
- line: '| ps4ShareOverlayImagePath: '
- line: '| ps4PrivacyGuardImagePath: '
- line: '| ps4ExtraSceSysFile: '
- line: '| ps4NPtitleDatPath: '
- line: '| ps4RemotePlayKeyAssignment: -1'
- line: '| ps4RemotePlayKeyMappingDir: '
- line: '| ps4PlayTogetherPlayerCount: 0'
- line: '| ps4EnterButtonAssignment: 1'
- line: '| ps4ApplicationParam1: 0'
- line: '| ps4ApplicationParam2: 0'
- line: '| ps4ApplicationParam3: 0'
- line: '| ps4ApplicationParam4: 0'
- line: '| ps4DownloadDataSize: 0'
- line: '| ps4GarlicHeapSize: 2048'
- line: '| ps4ProGarlicHeapSize: 2560'
- line: '| playerPrefsMaxSize: 32768'
- line: '| ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ'
- line: '| ps4pnSessions: 1'
- line: '| ps4pnPresence: 1'
- line: '| ps4pnFriends: 1'
- line: '| ps4pnGameCustomData: 1'
- line: '| playerPrefsSupport: 0'
- line: '| enableApplicationExit: 0'
- line: '| resetTempFolder: 1'
- line: '| restrictedAudioUsageRights: 0'
- line: '| ps4UseResolutionFallback: 0'
- line: '| ps4ReprojectionSupport: 0'
- line: '| ps4UseAudio3dBackend: 0'
- line: '| ps4UseLowGarlicFragmentationMode: 1'
- line: '| ps4SocialScreenEnabled: 0'
- line: '| ps4ScriptOptimizationLevel: 0'
- line: '| ps4Audio3dVirtualSpeakerCount: 14'
- line: '| ps4attribCpuUsage: 0'
- line: '| ps4PatchPkgPath: '
- line: '| ps4PatchLatestPkgPath: '
- line: '| ps4PatchChangeinfoPath: '
- line: '| ps4PatchDayOne: 0'
- line: '| ps4attribUserManagement: 0'
- line: '| ps4attribMoveSupport: 0'
- line: '| ps4attrib3DSupport: 0'
- line: '| ps4attribShareSupport: 0'
- line: '| ps4attribExclusiveVR: 0'
- line: '| ps4disableAutoHideSplash: 0'
- line: '| ps4videoRecordingFeaturesUsed: 0'
- line: '| ps4contentSearchFeaturesUsed: 0'
- line: '| ps4CompatibilityPS5: 0'
- line: '| ps4AllowPS5Detection: 0'
- line: '| ps4GPU800MHz: 1'
- line: '| ps4attribEyeToEyeDistanceSettingVR: 0'
- line: '| ps4IncludedModules: []'
- line: '| ps4attribVROutputEnabled: 0'
- line: '| monoEnv: '
- line: '| splashScreenBackgroundSourceLandscape: {instanceID: 0}'
- line: '| splashScreenBackgroundSourcePortrait: {instanceID: 0}'
- line: '| blurSplashScreenBackground: 1'
- line: '| spritePackerPolicy: '
- line: '| webGLMemorySize: 16'
- line: '| webGLExceptionSupport: 1'
- line: '| webGLNameFilesAsHashes: 0'
- line: '| webGLShowDiagnostics: 0'
- line: '| webGLDataCaching: 1'
- line: '| webGLDebugSymbols: 0'
- line: '| webGLEmscriptenArgs: '
- line: '| webGLModulesDirectory: '
- line: '| webGLTemplate: APPLICATION:Default'
- line: '| webGLAnalyzeBuildSize: 0'
- line: '| webGLUseEmbeddedResources: 0'
- line: '| webGLCompressionFormat: 1'
- line: '| webGLWasmArithmeticExceptions: 0'
- line: '| webGLLinkerTarget: 1'
- line: '| webGLThreadsSupport: 0'
- line: '| webGLDecompressionFallback: 0'
- line: '| webGLInitialMemorySize: 32'
- line: '| webGLMaximumMemorySize: 2048'
- line: '| webGLMemoryGrowthMode: 2'
- line: '| webGLMemoryLinearGrowthStep: 16'
- line: '| webGLMemoryGeometricGrowthStep: 0.2'
- line: '| webGLMemoryGeometricGrowthCap: 96'
- line: '| webGLPowerPreference: 2'
- line: '| webGLWebAssemblyTable: 0'
- line: '| webGLWebAssemblyBigInt: 0'
- line: '| webGLCloseOnQuit: 0'
- line: '| webWasm2023: 0'
- line: '| webEnableSubmoduleStrippingCompatibility: 0'
- line: '| scriptingDefineSymbols: {}'
- line: '| additionalCompilerArguments: {}'
- line: '| platformArchitecture: {}'
- line: '| scriptingBackend:'
- line: '| Android: 1'
- line: '| il2cppCompilerConfiguration: {}'
- line: '| il2cppCodeGeneration: {}'
- line: '| il2cppStacktraceInformation: {}'
- line: '| managedStrippingLevel: {}'
- line: '| incrementalIl2cppBuild: {}'
- line: '| suppressCommonWarnings: 1'
- line: '| allowUnsafeCode: 0'
- line: '| useDeterministicCompilation: 1'
- line: '| additionalIl2CppArgs: '
- line: '| scriptingRuntimeVersion: 1'
- line: '| gcIncremental: 1'
- line: '| gcWBarrierValidation: 0'
- line: '| apiCompatibilityLevelPerPlatform: {}'
- line: '| editorAssembliesCompatibilityLevel: 1'
- line: '| m_RenderingPath: 1'
- line: '| m_MobileRenderingPath: 1'
- line: '| metroPackageName: Sound'
- line: '| metroPackageVersion: '
- line: '| metroCertificatePath: '
- line: '| metroCertificatePassword: '
- line: '| metroCertificateSubject: '
- line: '| metroCertificateIssuer: '
- line: '| metroCertificateNotAfter: 0000000000000000'
- line: '| metroApplicationDescription: Sound'
- line: '| wsaImages: {}'
- line: '| metroTileShortName: '
- line: '| metroTileShowName: 0'
- line: '| metroMediumTileShowName: 0'
- line: '| metroLargeTileShowName: 0'
- line: '| metroWideTileShowName: 0'
- line: '| metroSupportStreamingInstall: 0'
- line: '| metroLastRequiredScene: 0'
- line: '| metroDefaultTileSize: 1'
- line: '| metroTileForegroundText: 2'
- line: '| metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628,
a: 0}'
- line: '| metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902,
b: 0.21568628, a: 1}'
- line: '| metroSplashScreenUseBackgroundColor: 0'
- line: '| syncCapabilities: 0'
- line: '| platformCapabilities: {}'
- line: '| metroTargetDeviceFamilies: {}'
- line: '| metroFTAName: '
- line: '| metroFTAFileTypes: []'
- line: '| metroProtocolName: '
- line: '| vcxProjDefaultLanguage: '
- line: '| XboxOneProductId: '
- line: '| XboxOneUpdateKey: '
- line: '| XboxOneSandboxId: '
- line: '| XboxOneContentId: '
- line: '| XboxOneTitleId: '
- line: '| XboxOneSCId: '
- line: '| XboxOneGameOsOverridePath: '
- line: '| XboxOnePackagingOverridePath: '
- line: '| XboxOneAppManifestOverridePath: '
- line: '| XboxOneVersion: 1.0.0.0'
- line: '| XboxOnePackageEncryption: 0'
- line: '| XboxOnePackageUpdateGranularity: 2'
- line: '| XboxOneDescription: '
- line: '| XboxOneLanguage:'
- line: '| - enus'
- line: '| XboxOneCapability: []'
- line: '| XboxOneGameRating: {}'
- line: '| XboxOneIsContentPackage: 0'
- line: '| XboxOneEnhancedXboxCompatibilityMode: 0'
- line: '| XboxOneEnableGPUVariability: 1'
- line: '| XboxOneSockets: {}'
- line: '| XboxOneSplashScreen: {instanceID: 0}'
- line: '| XboxOneAllowedProductIds: []'
- line: '| XboxOnePersistentLocalStorageSize: 0'
- line: '| XboxOneXTitleMemory: 8'
- line: '| XboxOneOverrideIdentityName: '
- line: '| XboxOneOverrideIdentityPublisher: '
- line: '| vrEditorSettings: {}'
- line: '| cloudServicesEnabled:'
- line: '| UNet: 1'
- line: '| luminIcon:'
- line: '| m_Name: '
- line: '| m_ModelFolderPath: '
- line: '| m_PortalFolderPath: '
- line: '| luminCert:'
- line: '| m_CertPath: '
- line: '| m_SignPackage: 1'
- line: '| luminIsChannelApp: 0'
- line: '| luminVersion:'
- line: '| m_VersionCode: 1'
- line: '| m_VersionName: '
- line: '| hmiPlayerDataPath: '
- line: '| hmiForceSRGBBlit: 0'
- line: '| embeddedLinuxEnableGamepadInput: 0'
- line: '| hmiCpuConfiguration: '
- line: '| hmiLogStartupTiming: 0'
- line: '| qnxGraphicConfPath: '
- line: '| apiCompatibilityLevel: 6'
- line: '| captureStartupLogs: {}'
- line: '| activeInputHandler: 2'
- line: '| windowsGamepadBackendHint: 0'
- line: '| cloudProjectId: b0017005-6636-4b5f-b540-750971b93402'
- line: '| framebufferDepthMemorylessMode: 0'
- line: '| qualitySettingsNames: []'
- line: '| projectName: Sound'
- line: '| organizationId: blomios_unity'
- line: '| cloudEnabled: 0'
- line: '| legacyClampBlendShapeWeights: 0'
- line: '| hmiLoadingImage: {instanceID: 0}'
- line: '| platformRequiresReadableAssets: 0'
- line: '| virtualTexturingSupportEnabled: 0'
- line: '| insecureHttpOption: 0'
- line: '| androidVulkanDenyFilterList: []'
- line: '| androidVulkanAllowFilterList: []'
- line: '| androidVulkanDeviceFilterListAsset: {instanceID: 0}'
- line: '| d3d12DeviceFilterListAsset: {instanceID: 0}'
- line: '| '
references:
version: 2
RefIds:
- rid: 6379512061355360307
type: {class: WindowsPlatformSettings, ns: UnityEditor.WindowsStandalone, asm: UnityEditor.WindowsStandalone.Extensions}
data:
m_Development: 0
m_ConnectProfiler: 0
m_BuildWithDeepProfilingSupport: 0
m_AllowDebugging: 0
m_WaitForManagedDebugger: 0
m_ManagedDebuggerFixedPort: 0
m_ExplicitNullChecks: 0
m_ExplicitDivideByZeroChecks: 0
m_ExplicitArrayBoundsChecks: 0
m_CompressionType: 0
m_InstallInBuildFolder: 0
m_InsightsSettingsContainer:
m_BuildProfileEngineDiagnosticsState: 0
m_WindowsBuildAndRunDeployTarget: 0
m_Architecture: 0
m_CreateSolution: 0
m_CopyPDBFiles: 0
m_WindowsDevicePortalAddress:
m_WindowsDevicePortalUsername:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 06ffdc248d6e2de4fb066396107cd4a5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -4,7 +4,10 @@
EditorBuildSettings: EditorBuildSettings:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Scenes: [] m_Scenes:
- enabled: 1
path: Assets/Scenes/SampleScene.unity
guid: 9fc0d4010bbf28b4594072e72b8655ab
m_configObjects: m_configObjects:
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 289c1b55c9541489481df5cc06664110, type: 3} com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 289c1b55c9541489481df5cc06664110, type: 3}
m_UseUCBPForAssetBundles: 0 m_UseUCBPForAssetBundles: 0