public static BuildTerrainJob Create(float extents, float3 cameraPosition, NativeArray <float4> planes, NativeList <RenderNode> renderNodes) { float2 camPosition = new float2(cameraPosition.x, cameraPosition.z); float2 center = default; center.x = FloorToMultiple(camPosition.x, 32f); center.y = FloorToMultiple(camPosition.y, 32f); NodeBounds bounds = new NodeBounds { min = new float2(center.x - extents, center.y - extents), max = new float2(center.x + extents, center.y + extents) }; BuildTerrainJob job = new BuildTerrainJob { CameraPosition = camPosition, Bounds = bounds, Planes = planes, RenderNodes = renderNodes }; return(job); }
private void Update() { if (BuildEveryFrame) { Camera cam = SceneCamera.Camera; if (cam.transform.rotation.Approximately(LastCameraRotation) && cam.transform.position.Approximately(LastCameraPosition)) { return; } LastCameraRotation = cam.transform.rotation; LastCameraPosition = cam.transform.position; FrustumPlanes2.FromCamera(cam, SourcePlanes, Planes); RenderNodes.Clear(); BuildTerrainJob job = BuildTerrainJob.Create(Extents, cam.transform.position, Planes, RenderNodes); JobHandle = job.Schedule(); BuildCount++; } }
public void Build() { Camera camera = SceneCamera.Camera; FrustumPlanes2.FromCamera(camera, SourcePlanes, Planes); RenderNodes.Clear(); BuildTerrainJob job = BuildTerrainJob.Create(Extents, camera.transform.position, Planes, RenderNodes); var watch = System.Diagnostics.Stopwatch.StartNew(); job.Run(); watch.Stop(); Debug.LogFormat("Construct: {0}", watch.ElapsedTicks); Debug.LogFormat("RenderNode count {0}", RenderNodes.Length); }