Optimization + Start of clustering
This commit is contained in:
81
Assets/Assets/Shader/VoxelBatchCluster.compute
Normal file
81
Assets/Assets/Shader/VoxelBatchCluster.compute
Normal 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);
|
||||||
|
}
|
||||||
7
Assets/Assets/Shader/VoxelBatchCluster.compute.meta
Normal file
7
Assets/Assets/Shader/VoxelBatchCluster.compute.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7b67ac486de90db48bc81c43fae83845
|
||||||
|
ComputeShaderImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -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;
|
|
||||||
|
|
||||||
|
// prune with current best
|
||||||
if (tEntry >= outHit.maxDistance) continue;
|
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;
|
float childHalf = e.halfSize * 0.5;
|
||||||
for (uint i = 0; i < 8; i++)
|
for (uint i = 0; i < 8; ++i)
|
||||||
{
|
{
|
||||||
if (((n.childMask >> i) & 1u) == 0) continue;
|
if (((childMask >> i) & 1u) == 0u) 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);
|
||||||
|
|
||||||
|
// compute child center
|
||||||
float3 offsetVec = childHalf * float3(
|
float3 offsetVec = childHalf * float3(
|
||||||
(i & 4u) ? 1 : -1,
|
(i & 4u) ? 1.0 : -1.0,
|
||||||
(i & 2u) ? 1 : -1,
|
(i & 2u) ? 1.0 : -1.0,
|
||||||
(i & 1u) ? 1 : -1
|
(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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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)
|
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;
|
|
||||||
|
|
||||||
|
// append final
|
||||||
hits.Append(outHit);
|
hits.Append(outHit);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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: []
|
||||||
|
|||||||
@ -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;
|
||||||
|
|
||||||
@ -29,10 +29,31 @@ public class VoxelRaycastGpuManager
|
|||||||
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,10 +62,12 @@ 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;
|
||||||
|
|
||||||
|
hitBuffer.SetCounterValue(0);
|
||||||
|
|
||||||
raycastShader.SetBuffer(kernel, "batchDatas", datasBuffer );
|
raycastShader.SetBuffer(kernel, "batchDatas", datasBuffer );
|
||||||
raycastShader.SetBuffer(kernel, "hits", hitBuffer);
|
raycastShader.SetBuffer(kernel, "hits", hitBuffer);
|
||||||
|
|
||||||
@ -52,6 +75,7 @@ public class VoxelRaycastGpuManager
|
|||||||
|
|
||||||
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");
|
||||||
|
|
||||||
|
if (currentCount > 0)
|
||||||
|
{
|
||||||
|
if (currentCount * raysPerBatch > maxRaycastPerIteration && iteration < 5)
|
||||||
|
{
|
||||||
|
sw = Stopwatch.StartNew();
|
||||||
|
currentCount = Clustering(currentCount);
|
||||||
|
sw.Stop();
|
||||||
|
|
||||||
|
UnityEngine.Debug.Log($"Clustering done in {sw.Elapsed.TotalMilliseconds}ms for {currentCount} casts");
|
||||||
|
|
||||||
|
VoxelRaycastGPU.BatchData[] hits = new VoxelRaycastGPU.BatchData[currentCount];
|
||||||
|
datasBuffer.GetData(hits, 0, 0, currentCount);
|
||||||
|
|
||||||
for (int i = 0; i < currentCount; i++)
|
for (int i = 0; i < currentCount; i++)
|
||||||
{
|
{
|
||||||
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
|
||||||
sphere.transform.position = hits[i].origin;
|
sphere.transform.position = hits[i].origin;
|
||||||
sphere.transform.localScale = Vector3.one * 0.5f;
|
sphere.transform.localScale = Vector3.one * 0.5f;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
if (currentCount > 0)
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
(datasBuffer, hitBuffer) = (hitBuffer, datasBuffer);
|
|
||||||
|
|
||||||
hitBuffer.Release();
|
datasBuffer = hitBuffer;
|
||||||
hitBuffer = new ComputeBuffer(5000, batchDataClassSize, ComputeBufferType.Append);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
iteration++;
|
iteration++;
|
||||||
@ -86,8 +123,7 @@ 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;
|
||||||
@ -95,10 +131,16 @@ public class VoxelRaycastGpuManager
|
|||||||
|
|
||||||
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);
|
||||||
|
|
||||||
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -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
8
Assets/Settings.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8c2a84cff8d04a94c8c462293e8dd112
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
8
Assets/Settings/Build Profiles.meta
Normal file
8
Assets/Settings/Build Profiles.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 40a945ad85a306045b49fa05807b0b34
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
828
Assets/Settings/Build Profiles/Windows.asset
Normal file
828
Assets/Settings/Build Profiles/Windows.asset
Normal 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:
|
||||||
8
Assets/Settings/Build Profiles/Windows.asset.meta
Normal file
8
Assets/Settings/Build Profiles/Windows.asset.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 06ffdc248d6e2de4fb066396107cd4a5
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 11400000
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user