From c2fcffb0d8c9fde61f3c492628b11301c24b619d Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 13 Aug 2021 23:49:47 -0400 Subject: [PATCH] Planet frustum culling --- core/src/mindustry/graphics/g3d/PlanetRenderer.java | 10 +++++++--- core/src/mindustry/type/Planet.java | 5 ++++- gradle.properties | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/graphics/g3d/PlanetRenderer.java b/core/src/mindustry/graphics/g3d/PlanetRenderer.java index 64b3dd7c39..c7938cd11e 100644 --- a/core/src/mindustry/graphics/g3d/PlanetRenderer.java +++ b/core/src/mindustry/graphics/g3d/PlanetRenderer.java @@ -136,8 +136,12 @@ public class PlanetRenderer implements Disposable{ public void renderPlanet(Planet planet){ if(!planet.visible()) return; - //render planet at offsetted position in the world - planet.draw(cam.combined, planet.getTransform(mat)); + cam.update(); + + if(cam.frustum.containsSphere(planet.position, planet.clipRadius)){ + //render planet at offsetted position in the world + planet.draw(cam.combined, planet.getTransform(mat)); + } renderOrbit(planet); @@ -153,7 +157,7 @@ public class PlanetRenderer implements Disposable{ renderSectors(planet); } - if(planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){ + if(cam.frustum.containsSphere(planet.position, planet.clipRadius) && planet.parent != null && planet.hasAtmosphere && Core.settings.getBool("atmosphere")){ Gl.depthMask(false); Blending.additive.apply(); diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 06499d9ca0..73cb0f58c0 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -35,6 +35,8 @@ public class Planet extends UnlockableContent{ public float radius; /** Atmosphere radius adjustment parameters. */ public float atmosphereRadIn = 0, atmosphereRadOut = 0.3f; + /** Frustrum sphere clip radius. */ + public float clipRadius = -1f; /** Orbital radius around the sun. Do not change unless you know exactly what you are doing.*/ public float orbitRadius; /** Total radius of this planet and all its children. */ @@ -47,7 +49,7 @@ public class Planet extends UnlockableContent{ public float sectorApproxRadius; /** Whether this planet is tidally locked relative to its parent - see https://en.wikipedia.org/wiki/Tidal_locking */ public boolean tidalLock = false; - /** Whether or not this planet is listed in the planet access UI. **/ + /** Whether this planet is listed in the planet access UI. **/ public boolean accessible = true; /** The default starting sector displayed to the map dialog. */ public int startSector = 0; @@ -237,6 +239,7 @@ public class Planet extends UnlockableContent{ updateBaseCoverage(); } + clipRadius = Math.max(clipRadius, radius + atmosphereRadOut + 0.5f); } @Override diff --git a/gradle.properties b/gradle.properties index 9bb15d466d..fab70b4810 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=4c1533ad063b0e91b9536e9aa6ff0c998e2489e2 +archash=d85d38b6ad854623af961178e6fc951caeff0598