Intro

This behavior is highly configurable and you can reach several different types of results by tweaking these parameters. The star field generated is normally split into a bright star field (one which is always visible irrespective of the camera location) and a dim one which is streamed in and out on the fly during runtime. Here’s what the parameters all mean:


Star material

The material applied to each star generated. This of course includes the shader and hence brightness behavior of all individual stars.


Default: Stars (supplied with the package)


Total star count in Powers of Ten

The total amount of stars generated in the container will be ten to the power of this number. 4 produces 1 000 stars and 12 produces one billion stars.


Default: 8, resulting in one hundred million (100 000 000) stars


Color variance, R, G and B

Here’s where you define the color spread of your generated star field. The spread is defined as a random interval added to a base color. This implementation has a base color set to full white (1,1,1,1), meaning that a variance value of 0.5 puts the result in the range of ]0.5,1]. Setting the variance to 0 only produces white stars.


Default: 0.5, 0.35, 0.5


Bright star multipliers

Some values for the bright stars are calculated based on the dim stars as a baseline.


Brightness

This value represents a multiple of the dim stars. If the dim stars have the baseline of 1 and this value is set to 50, the bright stars will be 50 times as bright (read big).


Default: 10


Part of total in Powers of Ten

One of the major points of working with both a bright and a dim star field is to allow for some stars to always be visible at great distances, making the galaxy feel more “alive” if you will. The value is a negative power of ten which is multiplied with the total number of stars to calculate the total number of bright stars.


For example, if the total number of stars is 10^6 and this value is -3, there will be 10^6 * 10^-3 = 10^3 = 1 000 bright stars and 1 000 000 – 1000 = 1 999 000 dim stars.


Another example may be putting this value at 0, letting the bright stars represent all stars. This deactivates the dim star generation completely. This may suite your needs if you don’t want an immense number of stars, but be careful with this if you want a lot of them! This basically bypasses the numerous performance optimizations that the dim star field provides and the bright star field does not.


Default: -3


Spatial subdivisions

In order for the star field generation to properly distribute stars across the full galactic plane, and at the same time allow for a number of optimization schemes, the galaxy volume is split into a number of “buckets”, each containing a number of stars. This value represents how many buckets the full space is split into along each axis. For example, a value of 10 yields a total of 10*10*10 = 1000 buckets.


The minimum is 1 and 32 for the bright and dim stars respectively but even for a small number of total stars it is not advisable to set this value too low. Partly because it limits the star distribution function to do its work properly and partly because enough stars in one bucket limits the picking functionality to do work properly. It also hinders star field generation performance.


Adversely, setting especially the dim star value too high – while allowing the picking function to run very quickly – prevents bucket lookup and generation from running in a quick fashion. Setting the bright star value too high will also cause the initial bright star generation to take more time, especially if the number of bright stars is high.


Bright stars

This value refers to the number of buckets the bright stars are divided into.


Default: 20


Dim stars

This value refers to the number of buckets the bright stars are divided into.


Default: 200


Hitbox size multipliers

The picking algorithm uses generated hitboxes to detect what stars are affected by a user click and returns the closest star that was found, provided it was not already selected. When stars are very small, the hitbox size should be small. When they are bigger, picking feels better if the hitboxes are also bigger. The same goes for few versus many stars. The more stars, the smaller the hitboxes should be in order for picking to feel like it’s working well.


Bright stars

The hitbox size multiplier for bright stars.


Default: 0.3


Dim stars

The hitbox size multiplier for dim stars


Default: 0.1


Star fade modifiers

When the camera moves towards and away from a given star, it’s brightness is calculated using a non-linear falloff function. This function is parameterized in a way to allow for custom brightness behaviors depending on your needs. The mathematical function itself is defined as the following:


Plotted, it looks something like this:

…where, in the behavior parameters, the mapping looks like
a = Near Falloff

b = Near phase

c = Far Falloff

d = Far phase

x = Distance from the star (normalized by the galaxy size)


Bright Near falloff

Default: 4


Bright Near phase

Default: 0.8


Bright Far falloff

Default: 0.5


Bright Far phase

Default: 2.3


Dim Near falloff

Default: 7


Dim Near phase

Default: 0.5


Dim Far falloff

Default: 0.8


Dim Far phase

Default: 1.5


Camera tracking

This bit controls the space which is taken into account when the camera view is evaluated in order to update the what dim star regions to add or remove to those that are currently rendering. Simply put, a hitbox is generated on the target camera, the bounds of which are then used to track what star fields go in and out of view. We use a box instead of a frustum, as it’s better fit when very roughly taking into account how the camera is able to move.


View distance multiplier

This value is a multiplier of 1 percent of the Euclidian galaxy size (the local scale of parent galaxy object), i.e the length of the localScale vector on that object. Be careful not to set this value too high as it, together with the spatial subdivision setting, can either make or break your star region generation performance. In the Demo Scene, this value is set to roughly double the distance of the camera star visibility range, given how the shader is configured.


Default: 1


Elongation multiplier

This value is a simple multiple added along the view axis (local z) of the camera hitbox. If you need the view distance to grow, this is the value for you. A value of 1 produces a cubic hitbox. A higher value elongates the hitbox and a lower value shortens it.


Default: 2