feat(benchmark): 接入 AstarPro RVO 压测方案
This commit is contained in:
@@ -165,3 +165,10 @@ MonoBehaviour:
|
||||
dimensionMode: 1
|
||||
viewMode: 0
|
||||
fishCount: 300
|
||||
fishMaterial: {fileID: 2100000, guid: 48d562f3b265c9d4a803f967cf69c6f0, type: 2}
|
||||
fishMaxSpeed: 2.4
|
||||
baitDemoMaxSpeed: 4.2
|
||||
speedMultiplier: 1
|
||||
timeScale: 1
|
||||
hookDropHeight: 10
|
||||
hookDropDuration: 1.5
|
||||
|
||||
@@ -7,7 +7,8 @@ namespace FishROV.AvoidanceBenchmark
|
||||
{
|
||||
NoAvoidance = 0,
|
||||
Rvo2 = 1,
|
||||
SamplingLocal = 2
|
||||
AstarProRvo = 2,
|
||||
AstarProRvoVelocityLike = 3
|
||||
}
|
||||
|
||||
public enum AvoidanceScenarioKind
|
||||
@@ -15,7 +16,8 @@ namespace FishROV.AvoidanceBenchmark
|
||||
FreeSwim = 0,
|
||||
CrossFlow = 1,
|
||||
NarrowPassage = 2,
|
||||
DenseCircleStress = 3
|
||||
DenseCircleStress = 3,
|
||||
BaitScramble = 4
|
||||
}
|
||||
|
||||
public enum AvoidanceDimensionMode
|
||||
|
||||
@@ -0,0 +1,167 @@
|
||||
using System.Collections.Generic;
|
||||
using Pathfinding.RVO;
|
||||
using Pathfinding.Util;
|
||||
using Unity.Collections;
|
||||
using Unity.Jobs;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishROV.AvoidanceBenchmark
|
||||
{
|
||||
public sealed class AstarProRvoAdapter : IAvoidanceAdapter
|
||||
{
|
||||
private const float TimeHorizon = 2.5f;
|
||||
private const float ObstacleTimeHorizon = 2.5f;
|
||||
private const float TargetLookAheadDistanceMultiplier = 4f;
|
||||
private const float BoundaryPadding = 0.15f;
|
||||
|
||||
private readonly Dictionary<BenchmarkAgent, IAgent> agents = new Dictionary<BenchmarkAgent, IAgent>(512);
|
||||
private readonly Dictionary<BenchmarkAgent, float> verticalVelocities = new Dictionary<BenchmarkAgent, float>(512);
|
||||
private SimulatorBurst simulator;
|
||||
private AvoidanceBenchmarkConfig config;
|
||||
|
||||
public string Name => "A* Pro RVO";
|
||||
public bool IsAvailable => simulator != null;
|
||||
public string Status => config != null && config.DimensionMode == AvoidanceDimensionMode.XYZ3D
|
||||
? $"A* Pathfinding Project Pro RVO 已接入,当前 {agents.Count} 个对象;RVO 按 XZ 平面计算,3D 压测会投影为水平避障。"
|
||||
: $"A* Pathfinding Project Pro RVO 已接入,当前 {agents.Count} 个对象。";
|
||||
|
||||
public void Initialize(AvoidanceBenchmarkConfig config)
|
||||
{
|
||||
this.config = config.Clone();
|
||||
agents.Clear();
|
||||
verticalVelocities.Clear();
|
||||
simulator = new SimulatorBurst(MovementPlane.XZ)
|
||||
{
|
||||
HardCollisions = true,
|
||||
SymmetryBreakingBias = 0.1f,
|
||||
UseNavmeshAsObstacle = false
|
||||
};
|
||||
}
|
||||
|
||||
public BenchmarkAgent CreateAgent(BenchmarkAgentSpawnInfo spawnInfo, Transform parent)
|
||||
{
|
||||
var agent = BenchmarkAgent.CreatePrimitive(spawnInfo, parent);
|
||||
if (simulator == null)
|
||||
{
|
||||
return agent;
|
||||
}
|
||||
|
||||
var rvoAgent = simulator.AddAgent(spawnInfo.Position);
|
||||
rvoAgent.MovementPlane = SimpleMovementPlane.XZPlane;
|
||||
rvoAgent.Radius = Mathf.Max(0.01f, spawnInfo.Radius);
|
||||
rvoAgent.Height = Mathf.Max(0.01f, spawnInfo.Height);
|
||||
rvoAgent.AgentTimeHorizon = TimeHorizon;
|
||||
rvoAgent.ObstacleTimeHorizon = ObstacleTimeHorizon;
|
||||
rvoAgent.MaxNeighbours = Mathf.Max(1, config.MaxNeighbours);
|
||||
rvoAgent.Priority = Mathf.Clamp01(spawnInfo.Priority <= 0f ? 0.5f : spawnInfo.Priority);
|
||||
rvoAgent.Layer = RVOLayer.DefaultAgent;
|
||||
rvoAgent.CollidesWith = (RVOLayer)(-1);
|
||||
rvoAgent.Position = spawnInfo.Position;
|
||||
rvoAgent.SetTarget(spawnInfo.Position, 0f, agent.MaxSpeed, NoEndOfPath());
|
||||
agents[agent] = rvoAgent;
|
||||
verticalVelocities[agent] = 0f;
|
||||
return agent;
|
||||
}
|
||||
|
||||
public void SetPreferredVelocity(BenchmarkAgent agent, Vector3 preferredVelocity)
|
||||
{
|
||||
if (simulator == null || !agents.TryGetValue(agent, out var rvoAgent))
|
||||
{
|
||||
agent.ApplyVelocity(preferredVelocity);
|
||||
return;
|
||||
}
|
||||
|
||||
var clamped = Vector3.ClampMagnitude(preferredVelocity, agent.MaxSpeed);
|
||||
var horizontal = new Vector3(clamped.x, 0f, clamped.z);
|
||||
var speed = Mathf.Min(agent.MaxSpeed, horizontal.magnitude);
|
||||
var position = agent.transform.position;
|
||||
verticalVelocities[agent] = config.DimensionMode == AvoidanceDimensionMode.XYZ3D ? clamped.y : 0f;
|
||||
rvoAgent.Position = position;
|
||||
|
||||
if (speed <= 0.001f)
|
||||
{
|
||||
rvoAgent.SetTarget(position, 0f, agent.MaxSpeed, NoEndOfPath());
|
||||
return;
|
||||
}
|
||||
|
||||
var target = position + horizontal.normalized * Mathf.Max(agent.Radius * 2f, config.ArenaRadius * TargetLookAheadDistanceMultiplier);
|
||||
rvoAgent.SetTarget(target, speed, agent.MaxSpeed, NoEndOfPath());
|
||||
}
|
||||
|
||||
public void SetTarget(BenchmarkAgent agent, Vector3 target)
|
||||
{
|
||||
agent.Target = target;
|
||||
}
|
||||
|
||||
public void Tick(float deltaTime)
|
||||
{
|
||||
if (simulator == null || deltaTime <= 0f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
simulator.Update(default(JobHandle), Mathf.Max(0.001f, deltaTime), false, Allocator.TempJob).Complete();
|
||||
|
||||
foreach (var pair in agents)
|
||||
{
|
||||
var agent = pair.Key;
|
||||
var rvoAgent = pair.Value;
|
||||
var direction = rvoAgent.CalculatedTargetPoint - agent.transform.position;
|
||||
direction.y = 0f;
|
||||
|
||||
var speed = Mathf.Min(agent.MaxSpeed, rvoAgent.CalculatedSpeed);
|
||||
var velocity = direction.sqrMagnitude > 0.0001f
|
||||
? direction.normalized * speed
|
||||
: Vector3.zero;
|
||||
velocity = KeepVelocityInsideArena(agent.transform.position, velocity);
|
||||
if (verticalVelocities.TryGetValue(agent, out var verticalVelocity))
|
||||
{
|
||||
velocity.y = verticalVelocity;
|
||||
}
|
||||
agent.ApplyVelocity(velocity);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
agents.Clear();
|
||||
verticalVelocities.Clear();
|
||||
simulator?.OnDestroy();
|
||||
simulator = null;
|
||||
config = null;
|
||||
}
|
||||
|
||||
private static Vector3 NoEndOfPath()
|
||||
{
|
||||
return new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity);
|
||||
}
|
||||
|
||||
private Vector3 KeepVelocityInsideArena(Vector3 position, Vector3 velocity)
|
||||
{
|
||||
if (config == null)
|
||||
{
|
||||
return velocity;
|
||||
}
|
||||
|
||||
var flatPosition = new Vector2(position.x, position.z);
|
||||
var flatVelocity = new Vector2(velocity.x, velocity.z);
|
||||
var radius = Mathf.Max(0.01f, config.ArenaRadius - BoundaryPadding);
|
||||
if (flatPosition.magnitude < radius || flatVelocity.sqrMagnitude <= 0.0001f)
|
||||
{
|
||||
return velocity;
|
||||
}
|
||||
|
||||
var outward = flatPosition.normalized;
|
||||
var outwardSpeed = Vector2.Dot(flatVelocity, outward);
|
||||
if (outwardSpeed <= 0f)
|
||||
{
|
||||
return velocity;
|
||||
}
|
||||
|
||||
flatVelocity -= outward * outwardSpeed;
|
||||
velocity.x = flatVelocity.x;
|
||||
velocity.z = flatVelocity.y;
|
||||
return velocity;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c15d8b6404f05fb49bbe215a0d853b90
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,166 @@
|
||||
using System.Collections.Generic;
|
||||
using Pathfinding.RVO;
|
||||
using Pathfinding.Util;
|
||||
using Unity.Collections;
|
||||
using Unity.Jobs;
|
||||
using UnityEngine;
|
||||
|
||||
namespace FishROV.AvoidanceBenchmark
|
||||
{
|
||||
public sealed class AstarProRvoVelocityLikeAdapter : IAvoidanceAdapter
|
||||
{
|
||||
private const float TimeHorizon = 2.5f;
|
||||
private const float ObstacleTimeHorizon = 2.5f;
|
||||
private const float BoundaryPadding = 0.15f;
|
||||
|
||||
private readonly Dictionary<BenchmarkAgent, IAgent> agents = new Dictionary<BenchmarkAgent, IAgent>(512);
|
||||
private readonly Dictionary<BenchmarkAgent, float> verticalVelocities = new Dictionary<BenchmarkAgent, float>(512);
|
||||
private SimulatorBurst simulator;
|
||||
private AvoidanceBenchmarkConfig config;
|
||||
|
||||
public string Name => "A* Pro RVO VelocityLike";
|
||||
public bool IsAvailable => simulator != null;
|
||||
public string Status => config != null && config.DimensionMode == AvoidanceDimensionMode.XYZ3D
|
||||
? $"A* Pathfinding Project Pro RVO velocity-like adapter active, {agents.Count} agents; RVO still solves on XZ plane."
|
||||
: $"A* Pathfinding Project Pro RVO velocity-like adapter active, {agents.Count} agents.";
|
||||
|
||||
public void Initialize(AvoidanceBenchmarkConfig config)
|
||||
{
|
||||
this.config = config.Clone();
|
||||
agents.Clear();
|
||||
verticalVelocities.Clear();
|
||||
simulator = new SimulatorBurst(MovementPlane.XZ)
|
||||
{
|
||||
HardCollisions = true,
|
||||
SymmetryBreakingBias = 0.1f,
|
||||
UseNavmeshAsObstacle = false
|
||||
};
|
||||
}
|
||||
|
||||
public BenchmarkAgent CreateAgent(BenchmarkAgentSpawnInfo spawnInfo, Transform parent)
|
||||
{
|
||||
var agent = BenchmarkAgent.CreatePrimitive(spawnInfo, parent);
|
||||
if (simulator == null)
|
||||
{
|
||||
return agent;
|
||||
}
|
||||
|
||||
var rvoAgent = simulator.AddAgent(spawnInfo.Position);
|
||||
rvoAgent.MovementPlane = SimpleMovementPlane.XZPlane;
|
||||
rvoAgent.Radius = Mathf.Max(0.01f, spawnInfo.Radius);
|
||||
rvoAgent.Height = Mathf.Max(0.01f, spawnInfo.Height);
|
||||
rvoAgent.AgentTimeHorizon = TimeHorizon;
|
||||
rvoAgent.ObstacleTimeHorizon = ObstacleTimeHorizon;
|
||||
rvoAgent.MaxNeighbours = Mathf.Max(1, config.MaxNeighbours);
|
||||
rvoAgent.Priority = Mathf.Clamp01(spawnInfo.Priority <= 0f ? 0.5f : spawnInfo.Priority);
|
||||
rvoAgent.Layer = RVOLayer.DefaultAgent;
|
||||
rvoAgent.CollidesWith = (RVOLayer)(-1);
|
||||
rvoAgent.Position = spawnInfo.Position;
|
||||
rvoAgent.SetTarget(spawnInfo.Position, 0f, agent.MaxSpeed, NoEndOfPath());
|
||||
agents[agent] = rvoAgent;
|
||||
verticalVelocities[agent] = 0f;
|
||||
return agent;
|
||||
}
|
||||
|
||||
public void SetPreferredVelocity(BenchmarkAgent agent, Vector3 preferredVelocity)
|
||||
{
|
||||
if (simulator == null || !agents.TryGetValue(agent, out var rvoAgent))
|
||||
{
|
||||
agent.ApplyVelocity(preferredVelocity);
|
||||
return;
|
||||
}
|
||||
|
||||
var clamped = Vector3.ClampMagnitude(preferredVelocity, agent.MaxSpeed);
|
||||
var horizontal = new Vector3(clamped.x, 0f, clamped.z);
|
||||
var speed = Mathf.Min(agent.MaxSpeed, horizontal.magnitude);
|
||||
var position = agent.transform.position;
|
||||
verticalVelocities[agent] = config.DimensionMode == AvoidanceDimensionMode.XYZ3D ? clamped.y : 0f;
|
||||
rvoAgent.Position = position;
|
||||
|
||||
if (speed <= 0.001f)
|
||||
{
|
||||
rvoAgent.SetTarget(position, 0f, agent.MaxSpeed, NoEndOfPath());
|
||||
return;
|
||||
}
|
||||
|
||||
var target = position + horizontal;
|
||||
rvoAgent.SetTarget(target, speed, speed, NoEndOfPath());
|
||||
}
|
||||
|
||||
public void SetTarget(BenchmarkAgent agent, Vector3 target)
|
||||
{
|
||||
agent.Target = target;
|
||||
}
|
||||
|
||||
public void Tick(float deltaTime)
|
||||
{
|
||||
if (simulator == null || deltaTime <= 0f)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
simulator.Update(default(JobHandle), Mathf.Max(0.001f, deltaTime), false, Allocator.TempJob).Complete();
|
||||
|
||||
foreach (var pair in agents)
|
||||
{
|
||||
var agent = pair.Key;
|
||||
var rvoAgent = pair.Value;
|
||||
var direction = rvoAgent.CalculatedTargetPoint - agent.transform.position;
|
||||
direction.y = 0f;
|
||||
|
||||
var speed = Mathf.Min(agent.MaxSpeed, rvoAgent.CalculatedSpeed);
|
||||
var velocity = direction.sqrMagnitude > 0.0001f
|
||||
? direction.normalized * speed
|
||||
: Vector3.zero;
|
||||
velocity = KeepVelocityInsideArena(agent.transform.position, velocity);
|
||||
if (verticalVelocities.TryGetValue(agent, out var verticalVelocity))
|
||||
{
|
||||
velocity.y = verticalVelocity;
|
||||
}
|
||||
agent.ApplyVelocity(velocity);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
agents.Clear();
|
||||
verticalVelocities.Clear();
|
||||
simulator?.OnDestroy();
|
||||
simulator = null;
|
||||
config = null;
|
||||
}
|
||||
|
||||
private static Vector3 NoEndOfPath()
|
||||
{
|
||||
return new Vector3(float.PositiveInfinity, float.PositiveInfinity, float.PositiveInfinity);
|
||||
}
|
||||
|
||||
private Vector3 KeepVelocityInsideArena(Vector3 position, Vector3 velocity)
|
||||
{
|
||||
if (config == null)
|
||||
{
|
||||
return velocity;
|
||||
}
|
||||
|
||||
var flatPosition = new Vector2(position.x, position.z);
|
||||
var flatVelocity = new Vector2(velocity.x, velocity.z);
|
||||
var radius = Mathf.Max(0.01f, config.ArenaRadius - BoundaryPadding);
|
||||
if (flatPosition.magnitude < radius || flatVelocity.sqrMagnitude <= 0.0001f)
|
||||
{
|
||||
return velocity;
|
||||
}
|
||||
|
||||
var outward = flatPosition.normalized;
|
||||
var outwardSpeed = Vector2.Dot(flatVelocity, outward);
|
||||
if (outwardSpeed <= 0f)
|
||||
{
|
||||
return velocity;
|
||||
}
|
||||
|
||||
flatVelocity -= outward * outwardSpeed;
|
||||
velocity.x = flatVelocity.x;
|
||||
velocity.z = flatVelocity.y;
|
||||
return velocity;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bc0b8d77778b4af6bfd3e9632ff02c48
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -10,8 +10,10 @@ namespace FishROV.AvoidanceBenchmark
|
||||
return new NoAvoidanceAdapter();
|
||||
case AvoidanceFrameworkKind.Rvo2:
|
||||
return new Rvo2Adapter();
|
||||
case AvoidanceFrameworkKind.SamplingLocal:
|
||||
return new SamplingLocalAvoidanceAdapter();
|
||||
case AvoidanceFrameworkKind.AstarProRvo:
|
||||
return new AstarProRvoAdapter();
|
||||
case AvoidanceFrameworkKind.AstarProRvoVelocityLike:
|
||||
return new AstarProRvoVelocityLikeAdapter();
|
||||
default:
|
||||
return new UnavailableAvoidanceAdapter(kind);
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ namespace FishROV.AvoidanceBenchmark
|
||||
}
|
||||
|
||||
simulator.SetAgentPosition(id, ToRvoVector(agent.transform.position));
|
||||
simulator.SetAgentMaxSpeed(id, Mathf.Max(0.01f, agent.MaxSpeed));
|
||||
simulator.SetAgentPrefVelocity(id, ToRvoVector(Vector3.ClampMagnitude(preferredVelocity, agent.MaxSpeed)));
|
||||
}
|
||||
|
||||
|
||||
8
FishROV/Assets/Settings.meta
Normal file
8
FishROV/Assets/Settings.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4b6e9d462e8dff84bb55e413c65abd73
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
FishROV/Assets/Settings/Resources.meta
Normal file
8
FishROV/Assets/Settings/Resources.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9ae2ae52201ae7e4cb93944bcf40ed31
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
23
FishROV/Assets/Settings/Resources/AstarGizmos.asset
Normal file
23
FishROV/Assets/Settings/Resources/AstarGizmos.asset
Normal file
@@ -0,0 +1,23 @@
|
||||
%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: 11500000, guid: 98e3089fbc7bff2b78412546c703c554, type: 3}
|
||||
m_Name: AstarGizmos
|
||||
m_EditorClassIdentifier:
|
||||
version: 0
|
||||
settings:
|
||||
lineOpacity: 1
|
||||
solidOpacity: 0.55
|
||||
textOpacity: 1
|
||||
lineOpacityBehindObjects: 0.12
|
||||
solidOpacityBehindObjects: 0.45
|
||||
textOpacityBehindObjects: 0.9
|
||||
curveResolution: 1
|
||||
8
FishROV/Assets/Settings/Resources/AstarGizmos.asset.meta
Normal file
8
FishROV/Assets/Settings/Resources/AstarGizmos.asset.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7535552aa4143bd41b4196e5eeb2e5ba
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 11400000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
83
FishROV/Assets/test.mat
Normal file
83
FishROV/Assets/test.mat
Normal file
@@ -0,0 +1,83 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!21 &2100000
|
||||
Material:
|
||||
serializedVersion: 8
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_Name: test
|
||||
m_Shader: {fileID: 10703, guid: 0000000000000000f000000000000000, type: 0}
|
||||
m_Parent: {fileID: 0}
|
||||
m_ModifiedSerializedProperties: 0
|
||||
m_ValidKeywords: []
|
||||
m_InvalidKeywords: []
|
||||
m_LightmapFlags: 4
|
||||
m_EnableInstancingVariants: 1
|
||||
m_DoubleSidedGI: 0
|
||||
m_CustomRenderQueue: -1
|
||||
stringTagMap: {}
|
||||
disabledShaderPasses: []
|
||||
m_LockedProperties:
|
||||
m_SavedProperties:
|
||||
serializedVersion: 3
|
||||
m_TexEnvs:
|
||||
- _BumpMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailAlbedoMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailMask:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _DetailNormalMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _EmissionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MainTex:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _MetallicGlossMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _OcclusionMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
- _ParallaxMap:
|
||||
m_Texture: {fileID: 0}
|
||||
m_Scale: {x: 1, y: 1}
|
||||
m_Offset: {x: 0, y: 0}
|
||||
m_Ints: []
|
||||
m_Floats:
|
||||
- _BumpScale: 1
|
||||
- _Cutoff: 0.5
|
||||
- _DetailNormalMapScale: 1
|
||||
- _DstBlend: 0
|
||||
- _GlossMapScale: 1
|
||||
- _Glossiness: 0.5
|
||||
- _GlossyReflections: 1
|
||||
- _Metallic: 0
|
||||
- _Mode: 0
|
||||
- _OcclusionStrength: 1
|
||||
- _Parallax: 0.02
|
||||
- _SmoothnessTextureChannel: 0
|
||||
- _SpecularHighlights: 1
|
||||
- _SrcBlend: 1
|
||||
- _UVSec: 0
|
||||
- _ZWrite: 1
|
||||
m_Colors:
|
||||
- _Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
|
||||
m_BuildTextureStacks: []
|
||||
8
FishROV/Assets/test.mat.meta
Normal file
8
FishROV/Assets/test.mat.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 48d562f3b265c9d4a803f967cf69c6f0
|
||||
NativeFormatImporter:
|
||||
externalObjects: {}
|
||||
mainObjectFileID: 2100000
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,5 +1,8 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"com.unity.burst": "1.8.7",
|
||||
"com.unity.collections": "1.5.1",
|
||||
"com.unity.mathematics": "1.2.6",
|
||||
"com.unity.test-framework": "1.1.33",
|
||||
"com.unity.textmeshpro": "3.0.7",
|
||||
"com.unity.timeline": "1.7.7",
|
||||
|
||||
@@ -1,5 +1,25 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"com.unity.burst": {
|
||||
"version": "1.8.7",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.mathematics": "1.2.1"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.collections": {
|
||||
"version": "1.5.1",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {
|
||||
"com.unity.burst": "1.6.6",
|
||||
"com.unity.nuget.mono-cecil": "1.11.4",
|
||||
"com.unity.test-framework": "1.1.31"
|
||||
},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.ext.nunit": {
|
||||
"version": "1.0.6",
|
||||
"depth": 1,
|
||||
@@ -7,6 +27,20 @@
|
||||
"dependencies": {},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.mathematics": {
|
||||
"version": "1.2.6",
|
||||
"depth": 0,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.nuget.mono-cecil": {
|
||||
"version": "1.11.4",
|
||||
"depth": 1,
|
||||
"source": "registry",
|
||||
"dependencies": {},
|
||||
"url": "https://packages.unity.cn"
|
||||
},
|
||||
"com.unity.test-framework": {
|
||||
"version": "1.1.33",
|
||||
"depth": 0,
|
||||
|
||||
17
FishROV/ProjectSettings/BurstAotSettings_Android.json
Normal file
17
FishROV/ProjectSettings/BurstAotSettings_Android.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"MonoBehaviour": {
|
||||
"Version": 4,
|
||||
"EnableBurstCompilation": true,
|
||||
"EnableOptimisations": true,
|
||||
"EnableSafetyChecks": false,
|
||||
"EnableDebugInAllBuilds": false,
|
||||
"DebugDataKind": 1,
|
||||
"EnableArmv9SecurityFeatures": false,
|
||||
"CpuMinTargetX32": 0,
|
||||
"CpuMaxTargetX32": 0,
|
||||
"CpuMinTargetX64": 0,
|
||||
"CpuMaxTargetX64": 0,
|
||||
"CpuTargetsArm64": 512,
|
||||
"OptimizeFor": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"MonoBehaviour": {
|
||||
"Version": 4,
|
||||
"EnableBurstCompilation": true,
|
||||
"EnableOptimisations": true,
|
||||
"EnableSafetyChecks": false,
|
||||
"EnableDebugInAllBuilds": false,
|
||||
"DebugDataKind": 1,
|
||||
"EnableArmv9SecurityFeatures": false,
|
||||
"CpuMinTargetX32": 0,
|
||||
"CpuMaxTargetX32": 0,
|
||||
"CpuMinTargetX64": 0,
|
||||
"CpuMaxTargetX64": 0,
|
||||
"CpuTargetsX32": 6,
|
||||
"CpuTargetsX64": 72,
|
||||
"OptimizeFor": 0
|
||||
}
|
||||
}
|
||||
16
FishROV/ProjectSettings/BurstAotSettings_iOS.json
Normal file
16
FishROV/ProjectSettings/BurstAotSettings_iOS.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"MonoBehaviour": {
|
||||
"Version": 4,
|
||||
"EnableBurstCompilation": true,
|
||||
"EnableOptimisations": true,
|
||||
"EnableSafetyChecks": false,
|
||||
"EnableDebugInAllBuilds": false,
|
||||
"DebugDataKind": 1,
|
||||
"EnableArmv9SecurityFeatures": false,
|
||||
"CpuMinTargetX32": 0,
|
||||
"CpuMaxTargetX32": 0,
|
||||
"CpuMinTargetX64": 0,
|
||||
"CpuMaxTargetX64": 0,
|
||||
"OptimizeFor": 0
|
||||
}
|
||||
}
|
||||
6
FishROV/ProjectSettings/CommonBurstAotSettings.json
Normal file
6
FishROV/ProjectSettings/CommonBurstAotSettings.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"MonoBehaviour": {
|
||||
"Version": 4,
|
||||
"DisabledWarnings": ""
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ EditorBuildSettings:
|
||||
- enabled: 1
|
||||
path: Assets/Scenes/AvoidancePerfDemo.unity
|
||||
guid: 5a4ed09540a94b80bca1c7d7be0bbf31
|
||||
- enabled: 1
|
||||
- enabled: 0
|
||||
path: Assets/Scenes/SampleScene.unity
|
||||
guid: 9fc0d4010bbf28b4594072e72b8655ab
|
||||
m_configObjects: {}
|
||||
|
||||
@@ -6,7 +6,7 @@ QualitySettings:
|
||||
serializedVersion: 5
|
||||
m_CurrentQuality: 5
|
||||
m_QualitySettings:
|
||||
- serializedVersion: 2
|
||||
- serializedVersion: 3
|
||||
name: Very Low
|
||||
pixelLightCount: 0
|
||||
shadows: 0
|
||||
@@ -18,17 +18,21 @@ QualitySettings:
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 0
|
||||
blendWeights: 1
|
||||
textureQuality: 1
|
||||
skinWeights: 1
|
||||
globalTextureMipmapLimit: 1
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 0
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 0
|
||||
realtimeReflectionProbes: 0
|
||||
billboardsFaceCameraPosition: 0
|
||||
useLegacyDetailDistribution: 1
|
||||
vSyncCount: 0
|
||||
realtimeGICPUUsage: 25
|
||||
lodBias: 0.3
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
@@ -40,8 +44,18 @@ QualitySettings:
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 2
|
||||
- serializedVersion: 3
|
||||
name: Low
|
||||
pixelLightCount: 0
|
||||
shadows: 0
|
||||
@@ -53,17 +67,21 @@ QualitySettings:
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 0
|
||||
blendWeights: 2
|
||||
textureQuality: 0
|
||||
skinWeights: 2
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 0
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 0
|
||||
realtimeReflectionProbes: 0
|
||||
billboardsFaceCameraPosition: 0
|
||||
useLegacyDetailDistribution: 1
|
||||
vSyncCount: 0
|
||||
realtimeGICPUUsage: 25
|
||||
lodBias: 0.4
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
@@ -75,8 +93,18 @@ QualitySettings:
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 2
|
||||
- serializedVersion: 3
|
||||
name: Medium
|
||||
pixelLightCount: 1
|
||||
shadows: 1
|
||||
@@ -88,17 +116,21 @@ QualitySettings:
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 0
|
||||
blendWeights: 2
|
||||
textureQuality: 0
|
||||
skinWeights: 2
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 1
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 0
|
||||
realtimeReflectionProbes: 0
|
||||
billboardsFaceCameraPosition: 0
|
||||
useLegacyDetailDistribution: 1
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 25
|
||||
lodBias: 0.7
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
@@ -110,8 +142,18 @@ QualitySettings:
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 2
|
||||
- serializedVersion: 3
|
||||
name: High
|
||||
pixelLightCount: 2
|
||||
shadows: 2
|
||||
@@ -123,17 +165,21 @@ QualitySettings:
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 1
|
||||
blendWeights: 2
|
||||
textureQuality: 0
|
||||
skinWeights: 2
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 1
|
||||
antiAliasing: 0
|
||||
softParticles: 0
|
||||
softVegetation: 1
|
||||
realtimeReflectionProbes: 1
|
||||
billboardsFaceCameraPosition: 1
|
||||
useLegacyDetailDistribution: 1
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 50
|
||||
lodBias: 1
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
@@ -145,8 +191,18 @@ QualitySettings:
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 2
|
||||
- serializedVersion: 3
|
||||
name: Very High
|
||||
pixelLightCount: 3
|
||||
shadows: 2
|
||||
@@ -158,17 +214,21 @@ QualitySettings:
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 1
|
||||
blendWeights: 4
|
||||
textureQuality: 0
|
||||
skinWeights: 4
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 2
|
||||
antiAliasing: 2
|
||||
softParticles: 1
|
||||
softVegetation: 1
|
||||
realtimeReflectionProbes: 1
|
||||
billboardsFaceCameraPosition: 1
|
||||
useLegacyDetailDistribution: 1
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 50
|
||||
lodBias: 1.5
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
@@ -180,8 +240,18 @@ QualitySettings:
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
- serializedVersion: 2
|
||||
- serializedVersion: 3
|
||||
name: Ultra
|
||||
pixelLightCount: 4
|
||||
shadows: 2
|
||||
@@ -193,17 +263,21 @@ QualitySettings:
|
||||
shadowCascade2Split: 0.33333334
|
||||
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
|
||||
shadowmaskMode: 1
|
||||
blendWeights: 4
|
||||
textureQuality: 0
|
||||
skinWeights: 4
|
||||
globalTextureMipmapLimit: 0
|
||||
textureMipmapLimitSettings: []
|
||||
anisotropicTextures: 2
|
||||
antiAliasing: 2
|
||||
softParticles: 1
|
||||
softVegetation: 1
|
||||
realtimeReflectionProbes: 1
|
||||
billboardsFaceCameraPosition: 1
|
||||
useLegacyDetailDistribution: 1
|
||||
vSyncCount: 1
|
||||
realtimeGICPUUsage: 100
|
||||
lodBias: 2
|
||||
maximumLODLevel: 0
|
||||
enableLODCrossFade: 1
|
||||
streamingMipmapsActive: 0
|
||||
streamingMipmapsAddAllCameras: 1
|
||||
streamingMipmapsMemoryBudget: 512
|
||||
@@ -215,16 +289,28 @@ QualitySettings:
|
||||
asyncUploadBufferSize: 16
|
||||
asyncUploadPersistentBuffer: 1
|
||||
resolutionScalingFixedDPIFactor: 1
|
||||
customRenderPipeline: {fileID: 0}
|
||||
terrainQualityOverrides: 0
|
||||
terrainPixelError: 1
|
||||
terrainDetailDensityScale: 1
|
||||
terrainBasemapDistance: 1000
|
||||
terrainDetailDistance: 80
|
||||
terrainTreeDistance: 5000
|
||||
terrainBillboardStart: 50
|
||||
terrainFadeLength: 5
|
||||
terrainMaxTrees: 50
|
||||
excludedTargetPlatforms: []
|
||||
m_TextureMipmapLimitGroupNames: []
|
||||
m_PerPlatformDefaultQuality:
|
||||
Android: 2
|
||||
Lumin: 5
|
||||
GameCoreScarlett: 5
|
||||
GameCoreXboxOne: 5
|
||||
Lumin: 5
|
||||
Nintendo 3DS: 5
|
||||
Nintendo Switch: 5
|
||||
PS4: 5
|
||||
PS5: 5
|
||||
Server: 0
|
||||
Stadia: 5
|
||||
Standalone: 5
|
||||
WebGL: 3
|
||||
|
||||
16
FishROV/ProjectSettings/TimelineSettings.asset
Normal file
16
FishROV/ProjectSettings/TimelineSettings.asset
Normal file
@@ -0,0 +1,16 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &1
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 53
|
||||
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: 11500000, guid: a287be6c49135cd4f9b2b8666c39d999, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
assetDefaultFramerate: 60
|
||||
m_DefaultFrameRate: 60
|
||||
@@ -0,0 +1,15 @@
|
||||
%YAML 1.1
|
||||
%TAG !u! tag:unity3d.com,2011:
|
||||
--- !u!114 &1
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 53
|
||||
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: 11500000, guid: 21f007d651ef4ab42b597f1da9ad75cf, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
hasShownWelcomeScreen: 1
|
||||
Reference in New Issue
Block a user