Skip to content
Snippets Groups Projects
Commit 4c9002af authored by Chang, Ryan's avatar Chang, Ryan
Browse files

Testing unity jobs.

parent b7d9359f
Branches UnityJob
No related tags found
No related merge requests found
......@@ -123,162 +123,6 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &40297591
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 40297593}
- component: {fileID: 40297592}
m_Layer: 0
m_Name: SurrondGenTest (1)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!114 &40297592
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 40297591}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7b1479ee951becd49bdec6fec1a6da0c, type: 3}
m_Name:
m_EditorClassIdentifier:
octaves:
- amplitude: 1
frequency: 0.01
type: 0
crawlStartPosition: {x: 0, y: 0}
generateNewSeed: 0
refresh: 0
samples: 513
currentGridPosition: {x: 0, y: 0}
--- !u!4 &40297593
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 40297591}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &231393954
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 231393956}
- component: {fileID: 231393955}
m_Layer: 0
m_Name: SurrondGenTest
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!114 &231393955
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 231393954}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7b1479ee951becd49bdec6fec1a6da0c, type: 3}
m_Name:
m_EditorClassIdentifier:
octaves:
- amplitude: 0.5
frequency: 0.01
type: 3
- amplitude: 0.1
frequency: 0.05
type: 0
- amplitude: 0.01
frequency: 0.1
type: 0
crawlStartPosition: {x: 0, y: 0}
generateNewSeed: 0
refresh: 0
samples: 513
currentGridPosition: {x: 0, y: 0}
--- !u!4 &231393956
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 231393954}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &347033900
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 347033901}
- component: {fileID: 347033902}
m_Layer: 0
m_Name: TerrainGenTest
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!4 &347033901
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 347033900}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &347033902
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 347033900}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 8a076a8671b38514a9708f1e117eb076, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &437356315
GameObject:
m_ObjectHideFlags: 0
......@@ -364,7 +208,7 @@ Transform:
m_Children:
- {fileID: 963194228}
m_Father: {fileID: 0}
m_RootOrder: 9
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!143 &437356320
CharacterController:
......@@ -493,100 +337,6 @@ MonoBehaviour:
m_DefaultActionMap: Player
m_SplitScreenIndex: -1
m_Camera: {fileID: 0}
--- !u!1 &705168852
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 705168856}
- component: {fileID: 705168855}
- component: {fileID: 705168854}
- component: {fileID: 705168853}
m_Layer: 0
m_Name: Terrain
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 2147483647
m_IsActive: 0
--- !u!114 &705168853
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705168852}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ce1380dbba38b6649893f386e86081d5, type: 3}
m_Name:
m_EditorClassIdentifier:
gridSize: 1000
player: {fileID: 0}
terrainGenerator: {fileID: 0}
--- !u!154 &705168854
TerrainCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705168852}
m_Material: {fileID: 0}
m_Enabled: 1
m_TerrainData: {fileID: 15600000, guid: 3a66be6e7ecbc8b46ac65d761362da74, type: 2}
m_EnableTreeColliders: 1
--- !u!218 &705168855
Terrain:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705168852}
m_Enabled: 1
serializedVersion: 6
m_TerrainData: {fileID: 15600000, guid: 3a66be6e7ecbc8b46ac65d761362da74, type: 2}
m_TreeDistance: 5000
m_TreeBillboardDistance: 50
m_TreeCrossFadeLength: 5
m_TreeMaximumFullLODCount: 50
m_DetailObjectDistance: 80
m_DetailObjectDensity: 1
m_HeightmapPixelError: 5
m_SplatMapDistance: 1000
m_HeightmapMaximumLOD: 0
m_ShadowCastingMode: 2
m_DrawHeightmap: 1
m_DrawInstanced: 0
m_DrawTreesAndFoliage: 1
m_StaticShadowCaster: 0
m_ReflectionProbeUsage: 1
m_MaterialTemplate: {fileID: 10652, guid: 0000000000000000f000000000000000, type: 0}
m_BakeLightProbesForTrees: 1
m_PreserveTreePrototypeLayers: 0
m_DeringLightProbesForTrees: 1
m_ScaleInLightmap: 0.0256
m_LightmapParameters: {fileID: 15203, guid: 0000000000000000f000000000000000, type: 0}
m_GroupingID: 0
m_RenderingLayerMask: 1
m_AllowAutoConnect: 1
--- !u!4 &705168856
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 705168852}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 5
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &705507993
GameObject:
m_ObjectHideFlags: 0
......@@ -765,59 +515,6 @@ Transform:
m_Father: {fileID: 437356319}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1129702281
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1129702283}
- component: {fileID: 1129702282}
m_Layer: 0
m_Name: SurrondGenTest (3)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!114 &1129702282
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1129702281}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7b1479ee951becd49bdec6fec1a6da0c, type: 3}
m_Name:
m_EditorClassIdentifier:
octaves:
- amplitude: 1
frequency: 0.01
type: 0
crawlStartPosition: {x: 0, y: 5.12}
generateNewSeed: 0
refresh: 0
samples: 513
currentGridPosition: {x: 0, y: 0}
--- !u!4 &1129702283
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1129702281}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 1000}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1237463650
GameObject:
m_ObjectHideFlags: 0
......@@ -924,59 +621,6 @@ MonoBehaviour:
refresh: 0
samples: 513
currentGridPosition: {x: 0, y: 0}
--- !u!1 &1312897309
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1312897311}
- component: {fileID: 1312897310}
m_Layer: 0
m_Name: SurrondGenTest (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!114 &1312897310
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1312897309}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7b1479ee951becd49bdec6fec1a6da0c, type: 3}
m_Name:
m_EditorClassIdentifier:
octaves:
- amplitude: 1
frequency: 0.01
type: 0
crawlStartPosition: {x: 5.12, y: 0}
generateNewSeed: 0
refresh: 0
samples: 513
currentGridPosition: {x: 0, y: 0}
--- !u!4 &1312897311
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1312897309}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 1000, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1796874583
GameObject:
m_ObjectHideFlags: 0
......
using System.Collections;
using UnityEngine;
using UnityEngine;
public class TerrainCreateTest : MonoBehaviour
{
......
using System.Collections.Generic;
using Unity.Collections;
using Unity.Jobs;
using Unity.Mathematics;
using UnityEngine;
......@@ -7,39 +8,41 @@ public struct TerrainGenJob : IJob
{
public Vector2 InitialCrawlPosition { get; private set; }
public Vector2Int GridPosition { get; private set; }
private List<Octave> octaves;
[ReadOnly]
private NativeArray<Octave> octaves;
public int Samples { get; private set; }
public TerrainData TerrainData { get; private set; }
private float[,] heights;
private NativeArray<NativeArray<float>> heights;
private bool ready;
public List<float> crawlPositionsX;
public List<float> crawlPositionsY;
public TerrainGenJob(Vector2 initialCrawlPos, Vector2Int gridPos, List<Octave> octaves, int samples, TerrainData data)
public TerrainGenJob(Vector2 initialCrawlPos, Vector2Int gridPos, NativeArray<Octave> octaves, int samples)
{
crawlPositionsX = new();
crawlPositionsY = new();
heights = null;
heights = new();
ready = false;
InitialCrawlPosition = initialCrawlPos;
GridPosition = gridPos;
Samples = samples;
this.octaves = octaves;
TerrainData = data;
}
public float[,] GetHeights()
{
if (ready)
return heights;
{
foreach (var height in heights)
{
}
return ;
}
else
throw new System.InvalidOperationException("Heights not built yet.");
}
public void Generate()
public void Execute()
{
heights = new float[Samples, Samples];
......@@ -51,9 +54,7 @@ public struct TerrainGenJob : IJob
{
float2 crawlPos = new((x + InitialCrawlPosition.x * (Samples - 1)) * octave.frequency,
(y + InitialCrawlPosition.y * (Samples - 1)) * octave.frequency);
crawlPositionsX.Add(crawlPos.x);
crawlPositionsY.Add(crawlPos.y);
float addition;
switch (octave.type)
......@@ -79,9 +80,4 @@ public struct TerrainGenJob : IJob
ready = true;
}
public void Execute()
{
Generate();
}
}
\ No newline at end of file
......@@ -2,7 +2,8 @@ using System.Threading;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Mathematics;
using Unity.Jobs;
using Unity.Collections;
[System.Serializable]
public struct Octave
......@@ -50,6 +51,8 @@ public class TerrainGenerator : MonoBehaviour
private Thread[] generationThreads = new Thread[9];
private List<TerrainGenThread> generators = new();
private List<TerrainGenJob> generatorJobs = new();
private List<JobHandle> generatorHandles = new();
private void ThreadGenerationFinished(TerrainGenThread genThread)
{
......@@ -63,6 +66,19 @@ public class TerrainGenerator : MonoBehaviour
obj.transform.position += offset;
}
private void ThreadGenerationFinished(TerrainGenJob genJob)
{
TerrainData data = Instantiate(Resources.Load<TerrainData>("Template"));
data.SetHeights(0, 0, genJob.GetHeights());
GameObject obj = Terrain.CreateTerrainGameObject(data);
obj.name = genJob.InitialCrawlPosition.ToString() + "Terrain";
obj.transform.SetParent(transform, false);
Vector3 offset = new Vector3(genJob.GridPosition.x, 0, genJob.GridPosition.y) *
data.size.x;
obj.transform.position += offset;
}
private void GenerateThread(Vector2 crawlPos, Vector2Int gridPos, ref Thread thread,
ref List<TerrainGenThread> genThreads, bool forceRefresh)
{
......@@ -71,23 +87,45 @@ public class TerrainGenerator : MonoBehaviour
TerrainData data = Instantiate(Resources.Load<TerrainData>("Template"));
TerrainGenThread genThread = new(crawlPos, gridPos, octaves, samples, data);
genThreads.Add(genThread);
ThreadStart starter = new ThreadStart(genThread.Generate);
ThreadStart starter = new(genThread.Generate);
thread = new Thread(starter);
previouslyLoaded[gridPos] = data;
thread.Start();
}
}
private void GenerateThread(Vector2 crawlPos, Vector2Int gridPos, NativeArray<Octave> octaves,
ref List<TerrainGenJob> genJobs, ref List<JobHandle> handles, bool forceRefresh)
{
if (!previouslyLoaded.ContainsKey(gridPos) || forceRefresh)
{
TerrainGenJob genJob = new(crawlPos, gridPos, octaves, samples);
genJobs.Add(genJob);
JobHandle jobHandle = genJob.Schedule();
handles.Add(jobHandle);
}
}
private NativeArray<Octave> nOctaves;
public virtual void GenerateSurronding(Vector2 initCrawlPos, bool forceRefresh = false)
{
int count = 0;
nOctaves = new(octaves.ToArray(), Allocator.Persistent);
for (int i = -1; i <= 1; i++)
{
for (int j = 1; j >= -1; j--)
{
//GenerateThread(initCrawlPos + new Vector2(i, j),
// currentGridPosition + new Vector2Int(i, j),
// ref generationThreads[count], ref generators,
// forceRefresh);
GenerateThread(initCrawlPos + new Vector2(i, j),
currentGridPosition + new Vector2Int(i, j),
ref generationThreads[count], ref generators,
nOctaves,
ref generatorJobs, ref generatorHandles,
forceRefresh);
count++;
}
......@@ -107,16 +145,46 @@ public class TerrainGenerator : MonoBehaviour
thread.Join();
}
}
// Code to ensure jobs are finished. This should optimally occur
// sometime after.
StartCoroutine(JoinOnGeneratorThreads(0.1f));
}
foreach (var genThread in generators)
private IEnumerator JoinOnGeneratorThreads(float timeToWait)
{
yield return new WaitForSecondsRealtime(timeToWait);
//foreach (var thread in generationThreads)
//{
// if (thread != null)
// {
// thread.Join();
// }
//}
//foreach (var genThread in generators)
//{
// if (genThread != null)
// {
// ThreadGenerationFinished(genThread);
// }
//}
//generators.Clear();
foreach (var handle in generatorHandles)
{
if (genThread != null)
{
ThreadGenerationFinished(genThread);
}
handle.Complete();
}
generators.Clear();
foreach (var job in generatorJobs)
{
ThreadGenerationFinished(job);
}
generatorJobs.Clear();
generatorHandles.Clear();
nOctaves.Dispose();
}
private void Start()
......@@ -136,4 +204,9 @@ public class TerrainGenerator : MonoBehaviour
GenerateSurronding(crawlStartPosition, true);
}
}
private void OnDestroy()
{
nOctaves.Dispose();
}
}
......@@ -29,7 +29,7 @@ public class TerrainLooker : MonoBehaviour
if (pGridPos != cGridPos)
{
terrainGenerator.currentGridPosition = pGridPos;
terrainGenerator.GenerateSurronding(terrainGenerator.crawlStartPosition + pGridPos);
terrainGenerator.GenerateSurronding(terrainGenerator.crawlStartPosition + (Vector2)pGridPos * gridSize);
}
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment