|
Who hates the roblox sky?
No, seriously. Have you taken a good look at what Roblox calls a sky?
It's ugly.
With that, let me introduce my Customizable Skybox idea.
I read somewhere that the current roblox skybox uses only about 6-10% of available processing power, whereas other games dedicate a lot more to it, about 50%. This means that the sky is a blank slate, except we can't use it. We can't create anything to do with sky.
And my suggestion is to make the sky useable.
It works like this:
The sky portions of lighting get removed entirely and placed into a separate service, "Sky".
Time, geographical position, and default ambient (interior ambient) are still controlled in lighting.
The sky service can change atmospheric lighting ambient for day and night outdoors, and the two colours get interpolated between during dawn and dusk, based off of another pair of colour/brightness values.
In this sky service, we have by default three objects. A sun object, a moon object, and a stars object.
These can be deleted, as they are children of the sky, and if we don't want them, we should be able to remove them.
The sun object would automatically track a path through the sky, based on game time. We can customize it's size and colour(s), and it will interpolate from three sets of said colours. (Dawn, Day, and Dusk.) We can also make the sun invisible, while still having it cast light and shadow.
The moon is similar, but has a Phase setting, with a number from 0 to 27 (new moon to almost completely dark waning crescent), with each one being one of the phases, calculated for whatever day it is. It would cast a lot less light than the sun, and the light would be controlled by the phase. Obviously new moon casts less light than full moon does.
The stars are procedurally generated from a random seed once per server start, and are the same for each player (as there is only one seed for the stars.) They cast very little light and have a twinkle effect around the core. Their colour is also adjustable, and it affects night colour, tinting it closer to the star adjustment colour.
The default arrangement and adjustment of these items will match the old skybox, somewhat like this.
Game
-Workspace
--Whatever is built in your game
-Players
-Lighting
=== >>This is the old sky object, it would be replaced...
--Sky
=== >>...by this. A customizable sky.
-Sky
--Sun
--Moon
--Stars
===
-StarterGui
-StarterGear
-SoundService
-Debris
New objects for the sky service are also going to be added, and will be implemented as GLSL shaders for cross-platform compatibility.
They would be the following objects for starters, perhaps with more added later.
Skybox - This is a legacy object to allow old games with a skybox to easily transfer to the new sky system.
Fog - This would work similar to the old render fog, except it would occlude the sky as well. This is a global shader, and therefore not affected by wind.
Like so:
Fog
-Fog visual range start(Studs, intvalue)
-Fog visual range end(Studs, intvalue)
-Fog Colour(Color3 value)
Mist - Similar to above, except mist acts within a rectangular region. It joins with adjacent regions, and is built/selected on a 4x4 grid. While the camera is outside it, it occludes from the edge point in, and while the camera is inside it acts like fog until the edge of the area is reached, after which it partially occludes based on a percentage of the distance to the edge of the area. Can be affected by wind, unlike fog. Renders as uniform particles with very little trail.
Like so:
Mist
-Mist Region Position(Vector3 value)
-Mist Region Size(Vector3 value)
-Mist Colour(Color3 value)
-Mist visual range start(Studs, intvalue)
-Mist visual range end(Studs, intvalue)
Dust - Similar to mist, can be affected by wind, behaves the same way as mist does, but renders like dust with differently sized particles that move fast and leave a bit of a trail.
Like so:
Dust
-Dust Region Position(Vector3 value)
-Dust Region Size(Vector3 value)
-Dust Particle Size(Tenth stud, intvalue)
-Dust particle size variation(Tenth stud, intvalue)
-Dust Colour(Color3 value)
-Dust visual range start(Studs, intvalue)
-Dust visual range end(Studs, intvalue)
Cloud - Similar to mist, is similarly affected by wind, and renders as a "far-away" mode of mist. Mist that is far away renders the same as clouds. Is region-based, and can have it's cloud type toggled with two dropdowns. One for height range, one for actual base type. Based on these two sliders, the cloud shaders generate random clouds within 50 studs either way of the selected height. It can also be recoloured and resized. Cloud size is an average size for the cloud in the horizontal plane, and has a random factor to it. One last option is coverage, or how much of the sky is actually covered by the cloud shader.
Like so:
Cloud
-Cloud Height Range(Dropdown, alto, cirro, nimbo)
-Cloud Type Range(Dropdown, stratus, cirrus, cumulus)
-Cloud Height(Studs, intvalue)
-Cloud Height Variation(Studs, intvalue)
-Cloud Colour(Color3 value)
-Cloud Coverage(okta(0-8), intvalue)
-Cloud Size(studs, intvalue)
Wind - Can be set in layers and affects particles and unanchored parts based on exposed area's size and exposure angle. Anchored parts are not calculated, and nocollide parts are not calculated (unless they are part of a humanoid). Can have altitude, height range, and wind strength set. Is a global effect.
Like so:
Wind
-Wind height bottom(Studs, intvalue)
-Wind height top(Studs, intvalue)
-Wind speed(Studs per second(same as walkspeed), intvalue)
-Wind direction(Degrees, intvalue)
Rain - Obviously. Makes a global particle fall from the sky, is affected by wind. Is a global effect, but drops from clouds. It makes clouds grey while it falls from them, and is affected by wind. Can be set to fall all over with no cloud, and is stopped by terrain and blocks.
Like so:
Rain
-Rain amount(Percentage, intvalue)
-Rain colour(Vector3 value)(I want bright neon green radioactive rain!)
-Rain droplet size(Tenth stud, intvalue)
-Rain falls from clouds(True/false, boolvalue)
-Rain is falling(True/false, boolvalue)
Snow - Think of rain, except it uses a slower and bigger particle.
Like so:
Snow
-Snow amount(Percentage, intvalue)
-Snow colour(Vector3 value)(I want bright neon green radioactive snow!)
-Snow flakelet size(Tenth stud, intvalue)
-Snow falls from clouds(True/false, boolvalue)
-Snow is falling(True/false, boolvalue)
This is all I have for now, but I'm sure the admins will add many more effects that I haven't thought of. And by implementing them as shader objects, they can be implemented relatively efficiently and easily. Please favourite and support, expand and improve, and if you don't like it, tell me how it can be made better!
An example of these object in a game with a storm could be like this.
Game
-Workspace
--Blah blah blah, level.
-Players
--Whoever is being amazed at the stack of weather effects.
-Lighting
-Sky
--Cloud
--Wind
--Rain
--Mist
--Fog
--Sun
--Moon
--Stars
-StarterGui
-StarterGear
-SoundService
-Debris
================
TL;DR Please don't TL;DR. It's a good sky suggestion, just skim it, see if you like it, and write support if you like it. |