diff --git a/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset b/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset index 039dc62354..dcbdf49f07 100644 --- a/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset +++ b/data/assets/scene/solarsystem/missions/newhorizons/pluto.asset @@ -48,6 +48,10 @@ local Pluto = { Type = "SpiceRotation", SourceFrame = "IAU_PLUTO", DestinationFrame = "GALACTIC" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { diff --git a/data/assets/scene/solarsystem/planets/earth/earth.asset b/data/assets/scene/solarsystem/planets/earth/earth.asset index 29e8f002b6..8335fb94a9 100644 --- a/data/assets/scene/solarsystem/planets/earth/earth.asset +++ b/data/assets/scene/solarsystem/planets/earth/earth.asset @@ -12,6 +12,12 @@ local mapServiceConfigsPath = asset.localResource("map_service_configs") local Earth = { Identifier = "Earth", Parent = transforms.EarthIAU.Identifier, + Transform = { + Scale = { + Type = "StaticScale", + Scale = 1.0 + } + }, Renderable = { Type = "RenderableGlobe", Radii = earthEllipsoid, diff --git a/data/assets/scene/solarsystem/planets/earth/transforms.asset b/data/assets/scene/solarsystem/planets/earth/transforms.asset index e93c136f2b..39fe3a9304 100644 --- a/data/assets/scene/solarsystem/planets/earth/transforms.asset +++ b/data/assets/scene/solarsystem/planets/earth/transforms.asset @@ -56,8 +56,6 @@ local EarthIAU = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { EarthBarycenter, EarthInertial, diff --git a/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset b/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset index 9333c339c1..b15a546a5e 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/jupiter.asset @@ -20,6 +20,10 @@ local Jupiter = { Type = "SpiceRotation", SourceFrame = "IAU_JUPITER", DestinationFrame = "GALACTIC" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { diff --git a/data/assets/scene/solarsystem/planets/jupiter/transforms.asset b/data/assets/scene/solarsystem/planets/jupiter/transforms.asset index 851a2d5310..c0e1178b83 100644 --- a/data/assets/scene/solarsystem/planets/jupiter/transforms.asset +++ b/data/assets/scene/solarsystem/planets/jupiter/transforms.asset @@ -21,6 +21,4 @@ local JupiterBarycenter = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { JupiterBarycenter }) diff --git a/data/assets/scene/solarsystem/planets/mars/mars.asset b/data/assets/scene/solarsystem/planets/mars/mars.asset index 27a273c308..7872ef298f 100644 --- a/data/assets/scene/solarsystem/planets/mars/mars.asset +++ b/data/assets/scene/solarsystem/planets/mars/mars.asset @@ -184,6 +184,10 @@ local Mars = { Type = "SpiceRotation", SourceFrame = "IAU_MARS", DestinationFrame = "GALACTIC" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { diff --git a/data/assets/scene/solarsystem/planets/mars/transforms.asset b/data/assets/scene/solarsystem/planets/mars/transforms.asset index c953e89c69..c2a793a56b 100644 --- a/data/assets/scene/solarsystem/planets/mars/transforms.asset +++ b/data/assets/scene/solarsystem/planets/mars/transforms.asset @@ -2,8 +2,6 @@ local assetHelper = asset.require('util/asset_helper') local transforms = asset.require('scene/solarsystem/sun/transforms') asset.require("spice/base") - - local MarsBarycenter = { Identifier = "MarsBarycenter", Parent = transforms.SolarSystemBarycenter.Identifier, @@ -21,6 +19,4 @@ local MarsBarycenter = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { MarsBarycenter }) diff --git a/data/assets/scene/solarsystem/planets/mercury/mercury.asset b/data/assets/scene/solarsystem/planets/mercury/mercury.asset index 3650676d42..0dce3bc3b7 100644 --- a/data/assets/scene/solarsystem/planets/mercury/mercury.asset +++ b/data/assets/scene/solarsystem/planets/mercury/mercury.asset @@ -49,6 +49,10 @@ local Mercury = { Type = "SpiceRotation", SourceFrame = "IAU_MERCURY", DestinationFrame = "GALACTIC" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { diff --git a/data/assets/scene/solarsystem/planets/mercury/transforms.asset b/data/assets/scene/solarsystem/planets/mercury/transforms.asset index bef198f85d..035854e517 100644 --- a/data/assets/scene/solarsystem/planets/mercury/transforms.asset +++ b/data/assets/scene/solarsystem/planets/mercury/transforms.asset @@ -2,8 +2,6 @@ local assetHelper = asset.require('util/asset_helper') local transforms = asset.require('scene/solarsystem/sun/transforms') asset.require("spice/base") - - local MercuryBarycenter = { Identifier = "MercuryBarycenter", Parent = transforms.SolarSystemBarycenter.Identifier, @@ -21,6 +19,4 @@ local MercuryBarycenter = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { MercuryBarycenter }) diff --git a/data/assets/scene/solarsystem/planets/neptune/neptune.asset b/data/assets/scene/solarsystem/planets/neptune/neptune.asset index 4cd35f22a6..450b1fa4c7 100644 --- a/data/assets/scene/solarsystem/planets/neptune/neptune.asset +++ b/data/assets/scene/solarsystem/planets/neptune/neptune.asset @@ -3,8 +3,6 @@ local transforms = asset.require('./transforms') asset.require("spice/base") asset.request('./trail') - - local textures = asset.syncedResource({ Name = "Neptune textures", Type = "HttpSynchronization", @@ -20,6 +18,10 @@ local Neptune = { Type = "SpiceRotation", SourceFrame = "IAU_NEPTUNE", DestinationFrame = "GALACTIC" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { @@ -42,5 +44,4 @@ local Neptune = { } } - assetHelper.registerSceneGraphNodesAndExport(asset, { Neptune }) diff --git a/data/assets/scene/solarsystem/planets/neptune/transforms.asset b/data/assets/scene/solarsystem/planets/neptune/transforms.asset index c9671ca5b0..864501df6b 100644 --- a/data/assets/scene/solarsystem/planets/neptune/transforms.asset +++ b/data/assets/scene/solarsystem/planets/neptune/transforms.asset @@ -2,8 +2,6 @@ local assetHelper = asset.require('util/asset_helper') local sun_transforms_asset = asset.require('scene/solarsystem/sun/transforms') asset.require("spice/base") - - local NeptuneBarycenter = { Identifier = "NeptuneBarycenter", Parent = sun_transforms_asset.SolarSystemBarycenter.Identifier, @@ -21,6 +19,4 @@ local NeptuneBarycenter = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { NeptuneBarycenter }) diff --git a/data/assets/scene/solarsystem/planets/saturn/saturn.asset b/data/assets/scene/solarsystem/planets/saturn/saturn.asset index 77b45972f2..d9ea30dac3 100644 --- a/data/assets/scene/solarsystem/planets/saturn/saturn.asset +++ b/data/assets/scene/solarsystem/planets/saturn/saturn.asset @@ -20,6 +20,10 @@ local Saturn = { Type = "SpiceRotation", SourceFrame = "IAU_SATURN", DestinationFrame = "GALACTIC" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { diff --git a/data/assets/scene/solarsystem/planets/saturn/transforms.asset b/data/assets/scene/solarsystem/planets/saturn/transforms.asset index 910aae992f..21b84d5c54 100644 --- a/data/assets/scene/solarsystem/planets/saturn/transforms.asset +++ b/data/assets/scene/solarsystem/planets/saturn/transforms.asset @@ -2,8 +2,6 @@ local assetHelper = asset.require('util/asset_helper') local transforms = asset.require('scene/solarsystem/sun/transforms') asset.require("spice/base") - - local SaturnBarycenter = { Identifier = "SaturnBarycenter", Parent = transforms.SolarSystemBarycenter.Identifier, @@ -21,6 +19,4 @@ local SaturnBarycenter = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { SaturnBarycenter }) diff --git a/data/assets/scene/solarsystem/planets/uranus/transforms.asset b/data/assets/scene/solarsystem/planets/uranus/transforms.asset index 2b801bebd1..aec617b326 100644 --- a/data/assets/scene/solarsystem/planets/uranus/transforms.asset +++ b/data/assets/scene/solarsystem/planets/uranus/transforms.asset @@ -21,6 +21,4 @@ local UranusBarycenter = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { UranusBarycenter }) diff --git a/data/assets/scene/solarsystem/planets/uranus/uranus.asset b/data/assets/scene/solarsystem/planets/uranus/uranus.asset index 1bb29fa184..03ca0abd60 100644 --- a/data/assets/scene/solarsystem/planets/uranus/uranus.asset +++ b/data/assets/scene/solarsystem/planets/uranus/uranus.asset @@ -20,6 +20,10 @@ local Uranus = { Type = "SpiceRotation", SourceFrame = "IAU_URANUS", DestinationFrame = "GALACTIC" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { diff --git a/data/assets/scene/solarsystem/planets/venus/transforms.asset b/data/assets/scene/solarsystem/planets/venus/transforms.asset index f8b0bf0307..c3071d5fa5 100644 --- a/data/assets/scene/solarsystem/planets/venus/transforms.asset +++ b/data/assets/scene/solarsystem/planets/venus/transforms.asset @@ -2,8 +2,6 @@ local assetHelper = asset.require('util/asset_helper') local transforms = asset.require('scene/solarsystem/sun/transforms') asset.require("spice/base") - - local VenusBarycenter = { Identifier = "VenusBarycenter", Parent = transforms.SolarSystemBarycenter.Identifier, @@ -20,6 +18,4 @@ local VenusBarycenter = { } } - - assetHelper.registerSceneGraphNodesAndExport(asset, { VenusBarycenter }) diff --git a/data/assets/scene/solarsystem/planets/venus/venus.asset b/data/assets/scene/solarsystem/planets/venus/venus.asset index 6cb6586798..83c63f838f 100644 --- a/data/assets/scene/solarsystem/planets/venus/venus.asset +++ b/data/assets/scene/solarsystem/planets/venus/venus.asset @@ -25,6 +25,10 @@ local Venus = { Type = "SpiceTranslation", Target = "VENUS", Observer = "VENUS BARYCENTER" + }, + Scale = { + Type = "StaticScale", + Scale = 1.0 } }, Renderable = { diff --git a/modules/atmosphere/rendering/atmospheredeferredcaster.cpp b/modules/atmosphere/rendering/atmospheredeferredcaster.cpp index c6e28f5543..7daa08ef0e 100644 --- a/modules/atmosphere/rendering/atmospheredeferredcaster.cpp +++ b/modules/atmosphere/rendering/atmospheredeferredcaster.cpp @@ -191,8 +191,14 @@ void AtmosphereDeferredcaster::preRaycast(const RenderData& renderData, _modelTransform * glm::dvec4(0.0, 0.0, 0.0, 1.0) ); - double distance = glm::distance(tPlanetPosWorld, renderData.camera.eyePositionVec3()); - if (distance > DISTANCE_CULLING) { + const double distance = glm::distance(tPlanetPosWorld, renderData.camera.eyePositionVec3()); + + // Radius is in KM + const double scaledRadius = glm::length( + glm::dmat3(_modelTransform) * glm::dvec3(1000.0 * _atmosphereRadius, 0.0, 0.0) + ); + + if (distance > scaledRadius * DISTANCE_CULLING_RADII) { program.setUniform("cullAtmosphere", 1); } else { diff --git a/modules/atmosphere/rendering/atmospheredeferredcaster.h b/modules/atmosphere/rendering/atmospheredeferredcaster.h index 78814104b6..73e9d5d279 100644 --- a/modules/atmosphere/rendering/atmospheredeferredcaster.h +++ b/modules/atmosphere/rendering/atmospheredeferredcaster.h @@ -113,7 +113,8 @@ private: bool isAtmosphereInFrustum(const glm::dmat4& MVMatrix, const glm::dvec3& position, double radius) const; - const double DISTANCE_CULLING = 1e10; + // Number of planet radii to use as distance threshold for culling + const double DISTANCE_CULLING_RADII = 5000; std::unique_ptr _transmittanceProgramObject; std::unique_ptr _irradianceProgramObject;