Improving Graphics Rendering

graphics
Tags: #<Tag:0x00007fb3f019bee0>

#1

Contents

  • Introduction
  • About my Boundless experience
  • Bloom
  • Night-time lighting
  • Water reflection compositing

Introduction

Hello Boundless developers,

I’d like to offer some suggestions for how I think the graphics in Boundless could be significantly improved. Boundless has been billed as a beautiful voxel game and I think it is indeed beautiful a lot of the time. However, there are quite a few scenarios where I actually think the graphics in Boundless can get quite ugly. I think there are a couple of specific interventions that could potentially solve these cases.

About my Boundless experience

I started playing Boundless around Christmas of 2017 and I played a fair amount in early 2018 (about 250 hours). I stopped playing around the time that all the new brews and foods were added. It was around that time that the lighting system was also changed. I can’t remember how this change was described but I think it altered the way that lighting colour and intensity was calculated. My first impression of this change was that it detracted from Boundless’s aesthetic.

I would describe the old lighting appearance as:

  • Warm
  • Vibrant
  • Enchanting

Words that come to mind to describe the newer lighting appearance are:

  • Dull
  • Bland
  • Mundane

Now, I don’t want to give the impression that the old lighting appearance was totally flawless. On the contrary, there were many cases where I remember colours becoming overbearingly bright with clipping in certain colour channels resulting in large burnt out areas of the image.

However, now that I’ve returned to Boundless again, I wish that some of that old vibrancy could be reintroduced somehow. Browsing through the ‘Post Your Screenshots’ thread, I found some examples of lighting that I think is very rare (if not impossible) to find nowadays.

So colourful:

So warm:

Such a tasteful, coherent colour palette:

With all that said, let’s move on to the details of my suggestions. I’m going to be trying to provide somewhat technical diagnoses of the problems that I’ve identified and, if any of my diagnoses are wrong, please feel free to correct me. I’d love to learn more from the developers about what goes on under the hood of Boundless’s game engine. Please forgive me if I misuse certain technical terms or reveal that I don’t fully understand the concepts I’m talking about. :stuck_out_tongue:

Bloom

Back when I first played Boundless in early 2018, I actually disabled the bloom effect because I felt that it was often way too bright and overbearing. However, nowadays, I think it’s gone too far in the other direction. Now there’s not enough bloom. The only areas of the image that give off a bit of bloom are areas that are almost totally white. The colour of the bloom is almost always only white.

I think that the problem is one (or perhaps both) of the following:

  • The bloom effect uses an LDR source image instead of an HDR source image.
  • The bloom effect has an extremely high threshold.

I think that the bloom effect should be processed before the image is tone mapped into LDR colours. The only way to get a good-looking, authentic bloom effect is to do the blurring operations on a copy of the image that is still in the HDR colour mode.

Sometimes, hot spots in the image may appear white but that doesn’t mean that the colour of that area is really white. An extremely bright red light may oversaturate the virtual camera and be rendered as white. However, the bloom from that area should still be red. This can only be achieved by blurring the image in HDR colour mode.

Another issue with the bloom in Boundless is that it looks like it only uses one blur operation. A good-looking bloom effect will need 3 - 5 blurs with different radii. To improve performance, the very wide blurs can be done at a much lower resolution.

To illustrate the type of bloom effect that I’d like to see in Boundless, I’ve Photoshopped some screenshots. If you click on the screenshots, they should display larger and allow you to flip between them to see the differences more clearly.

Example 1: Original unaltered screenshot (apart from adding the inset bit):

Example 1: My Photoshopped version:

Example 2: Original unaltered screenshot:

Example 2: My Photoshopped version:

In combination with improving the bloom effect, it might also be worth adding stronger emissive components to certain materials, such as gleam so that they can really shine properly.

Night-time lighting

I think that the natural lighting at night is probably the biggest problem with the graphics in Boundless right now. At night, the terrain almost always looks terrible.

The problem is that the brightest environmental light source comes from under the ground. This results in the surface of the terrain being poorly lit. However, the blades of grass that grow out of the terrain catch the light and feel disconnected from the surface they’re growing from. The undersides of trees also become very strangely lit up.

I stood in one spot and took some screenshots to show how the blades of grass look nicely connected to the ground during the middle of the day but often look ugly during the evening, night, and morning:

Here are a couple more examples to show how bad things can look at night.

Hideous:

Dreadful:

The light direction should never come from underneath the terrain. The environmental light source during the night should come from the sky.

Also, given that the terrain doesn’t cast shadows, I think that the lighting from the sun and moon need to be finessed a bit so that the terrain is never lit from very oblique angles. I think that the lowest angle that the primary light source should go is perhaps 30 degrees above the horizon. It doesn’t matter if the light direction doesn’t exactly match the direction of the actual sun or moon object during sunrise and sunset. There are no shadows to give away any directional disconnect so the priority should be to improve the overall aesthetic of the image by avoiding situations where the terrain receives a very different amount of light compared to the blades of grass.

Water reflection compositing

I think that the various water effects (the reflections, the Fresnel effect, the ripple shading) are being composited in LDR colour mode. This is best explained by looking at a screenshot first:

Notice how the clouds in the reflection have been overexposed, resulting in clipping. Then, notice how the Fresnel effect appears to darken the reflection as the angle of incidence becomes more acute. This darkening should bring the colour values of the cloud reflection back inside the colour gamut but, instead, they remain burnt out.

I admit that this is a much smaller nitpick than the previous issues that I’ve raised but I think that it speaks to a larger issue - the use of HDR.

While browsing through some of the old patch notes, I saw HDR mentioned on several occasions. So, it seems to me that Boundless certainly uses HDR within its rendering pipeline. However, I suspect it’s not being fully utilised. There are several post-processing effects that look like they’re calculated after the image has been tone-mapped into an LDR colour mode. I think that great improvements in quality could be achieved by adjusting the rendering system so that all processing occurs in the HDR colour mode and the image is only tone-mapped right at the end.

Thanks for reading and I hope to see some even more beautiful voxels coming soon! :grin:


#2

This post is LIT! And quite unexpected to see my EA house in the colorful example pic :smiley:


#3

Insane good post +1 for me


#4

:scream:
noooo kidding!!! thats what it is! I knew there was something off about the terrain lighting at night time! I totally see it now.
and here I thought night lighting looked the best, but thats just because theres no white glare on everything :joy:


#5

Thanks for this comprehensive write up. Articulates a lot of how I felt but I didn’t have the vocabulary or knowledge to do this. Good stuff, cheers!


#6

That build was so cool, it was so colourful


#7

(Without going into anything else, just about the HDR), it’s a conscious decision on our part to keep most of the rendering in LDR to reduce vram and bandwidth requirements on the gpu, we use an invertible tone mapping function so that in many cases we “undo” the HDR for compositing in post effects, but of course as you describe if things clip then you cant get back the detail.


#8

Hey @WildCat-Actual.

Thanks for taking the time to analyse and share these details.

I agree with many of the points you’ve raised here. And you’ll be pleased to hear that we a few things in the pipeline that will hopefully improve things significantly.

(Roughly speaking) there is a stack of technology that delivers the final visual look in Boundless:

  1. Base Palette - Boundless contains a single master palette of 255 colours. This palette was procedurally generated to cover the colour space taking into account the eventual lighting and HDR that would be executed later in the rendering pipeline. The names of these colours were also generated so that there was a consistent relationship between colours and avoid any legal issues with naming standards. We use a single standard base palette so that we could add a tinting system to the game after release.

  2. Block Palettes - Each material type takes the base palette and uniquely customises it to create a palette of colour triples: highlight, mid tone and lowlight. These colours define the base colour of a block and the highlight and lowlight colours create variation in albedo. This results in a baked-in ambient occlusion with controllable colours rather then simply brighter and darker. The material block palettes are generated in the world builder and the current recipes are here.

  3. World Palettes - When a world is generated the configuration can manually select the colours per material, creature, plant, etc, or procedurally generate the colours. We created a set of recipes for selecting the colours per world. The recipes we currently use are available here. These colours then flow through the crafting system and almost everything is tinted by one of the colours gather from the world.

We can now generate a world and the procedurally selected block colours are burnt into the world. We could technically iterate any of the these steps but not without an adventurous live universe migration. The engine is fully data driven so in the future modders would be able to fully reboot the full colour technology we have here.

Everything so far is just to select the colours of the materials and it says nothing about in game rendering, which comes now:

  1. Material Rendering - The material rendering includes: colour maps, gradient maps, specular maps, normal maps, emissive maps, and tint maps. On top of this we’ll also rendering blends between voxel materials and decals for embedded resources.

COMING CHANGE - The material rendering is currently being changed to not destroy and blowout the colour on highly specular surfaces and generally improve the behaviour of ambient lighting and realism (in terms of energy conservation of lighting model). This will be a pretty big visual change and will make sure that blocks retain their base colour much better effectively so that things look ‘‘smoother’’ rather than like they’ve been covered in shiny white wax. This has been quite a bit of work and has required us to modify all the specular maps in the game. But it’ll definitely be worth it.

COMING CHANGE - We’re also updating the material rendering to have much better control over the metallic rendering by adding a metal map. This’ll mean that metallic surfaces should look more metallic in the same way that the pure metal voxel already do. This is a subtle effect generally, only changing how the coloration of the material by the lights works so that metals are more likely to retain their true colour, for example gold will never looks bright purple.

  1. Voxel Lighting - On top of the material rendering we apply all the voxel light sources. This itself is done in a few ways. There is faux ambient occlusion burnt into the voxel vertex lighting and then any block that act as light sources can also apply lighting to the voxel landscape. All the voxel lighting is also bundled up into a sparse array of spherical harmonic lighting that is applied to dynamic objects in addition to a fixed number of dynamic lights.

POSSIBLE - Whilst preparing for launch we did rebalance the held dynamic light sources and placed static light sources to try and be much closer. The idea was that placing a help torch into the world should try to maintain the lighting within the environment. This will have changed how the voxel light sources applied light to the worlds. Some of the images flagged as looking different where mainly a result of this change. We could consider reviewing this - but - any changes could have a fairly big effect on players builds. Basically environments will get darker as we soften the fall off.

  1. Day / Night Lighting - On top the voxel lighting we apply a range of ambient and directional lighting to simulate a day / night cycle.

COMING CHANGE - The day / night cycles need quite a bit of work. At the moment the simulated atmosphere colour (say red on a Burn world) can destroy the block lighting colours too much. We want to find a balance where the day / night cycle communicates what world you’re on but without destroying too many other colours.

COMING CHANGE - We also need to fix the ugly bright side light that we have during the night. We do need some lighting during the night or the game becomes impossible to play. But clearly this side light (then looks like it’s lighting the world from below - as you’ve pointed out) is very ugly and needs to be fixed.

  1. Weather and Fog - On top of the day / night cycle we apply weather a weather simulation that can darken areas based on the cloud cover. The distance based fog which softens the landscape as distance increases is an important part of presenting the landscape.

COMING CHANGE - As part of the day / night cycle changes we are also rebalancing the way distance fog is applied. Too many weather systems disable it and the fog’s absence then destroys the visual depth of the environment.

  1. HDR + Tone Mapping - Lighting is done in HDR with an invertible filmic tone-mapper approximation and histogram based dynamic adjustment of exposure. Some of the big changes before release were around HDR and a correct sRGB workflow; we previously (mistakingly) did lighting in sRGB space which caused screwed up lighting and a range of issues with HDR which were all fixed. So we think the HDR is good.

  2. Full screen effects - With regards to lighting, there are the god-rays/lens flare and bloom only really to discuss. The god-rays and lens flare have a large impact on the visual appearance of the sun/moon and sky, and as users have consistently complained about, the flare is currently far too bright - these are driven by the day/night cycle and would be fixed together with those.

COMING CHANGE - we also want to balance the full screen effects a little. As you point out the bloom is too low. The hardest part is balancing the full screen effects over the wider variety of environments that can be discovered and created in the universe. We’ll also tweak the lens flare.


In response to the areas you’ve highlighted:

Of the “colourful” and “warm” images shared they are likely using different block colours [[but also the day/night cycle did used to be much more ‘‘orange’’ and warm compared to the white lighting now]]. But the latest Boundless universe contains many more colours so will ultimately offer a much wider variety of compositions when used creatively. I think the biggest thing that will help is to soften the voxel lighting falloff which is currently steep to try and match the held lights (which were balanced for gameplay).

Of the “coherent colour palette” the pre-release worlds were coloured by hand. But this simply isn’t a scalable system so we needed to switch to the generated approach. Improving the procedural colour selection for world generation will help, and the introduction of Exoworlds will give is more shots at iterating this. Additionally the image also has a gentle fog that helps balance the fore and background, this will be improved in the updated day night cycle.

As above the Bloom needs a balance, but as Luca commented we don’t think this is specifically an LDR / HDR issue.

Fully agreed. As above we’re reworking the day/night cycles to remove this terrible side light.

I will need to look at the water rendering. It’s not something I’ve looked at recently.


-tl;dr-

  • Lighting - agreed.
  • Bloom - agreed.
  • Night lighting - agreed.
  • Water reflections - I’ll need to review this.

#9

Please reconsider the rendering of glass underwater too, the affect of water running down the side is far more broken than the glass being see through as above water.


#10

This is pretty much what stops me from bothering with underwater sections/builds :frowning:


#11

Great to learn a lot of visual issues are on the agenda to be tweaked and fixed…looking forward to a bright (or maybe not quite sooo bright) future!


#12

Would love to see it darker at night on let’s say Gyosha Ophin where my reapers build is then I can create a more creepy feel to the whole place.


#13

Wait a minute!

I remember this from farming:

Does this mean that we can then actually have more than 256 colours for blocks???

That would be amazing!


#14

The master palette is 255, so I assume you’d be able to take #100 and (maybe somehow) recolour it, or use it’s colour to alter another blocks colour.

I’d be surprised if another palette was created. Though I supose it’s possible…maybe?


#15

That whole writeup kinda sounded like the base colour could be modified, ie. still the base colour with a tint on top. If the tinting replaces the base colour then it would simply be changing the colour number associated with a block and would not require any special code in the renderer wouldn’t it??


#16

The base block is already tinted to the current block colour, that’s what james probably means. The tint color can in the future be changed to another tint colour with farming.


#17

Reading that you are on it, makes me really really happy.
This and same-face-syndrome are my biggest turn offs right now.

Yes please, that’s one of my worst offenders. (together with the blown out colors.) Lights can only really shine if there are dark corners.

Looking at my latest screenshots, everything seems to have about the same light level everywhere, it looks almost flat:


Looking at my old stuff:




Isn’t that a whole lot more intersting to look at?
(All screenshots are at night time)

So yes, please. Do it!

I guess that’s my fault. I loved it too much and took way to many screenshots of it.



#18

Thanks so much for sharing those details, @james. I really appreciate gaining these insights into how the engine works.

I’ve also noticed the “shiny white wax” appearance on certain blocks. Would you say that Refined Metamorphic Rocks and Decorative Metamorphic Rocks are good examples of this? How about the leaf blocks of trees?

Actually, I’d like to go into a little more detail regarding trees and their leaf blocks because this has reminded me of another graphical issue that I didn’t include in my original post. I’m wondering if your comment above about this ‘coming change’ might address this.

Consider the following screenshots of a group of trees taken from various distances away:

In the close-up shot at the top, the foliage has additional detail geometry that’s added around the base block. Both this detail geometry and the underlying block have normal maps enabled, which breaks up the specular highlights.

In the medium-distance shot in the middle, the detail geometry is starting to disappear. Furthermore, the normal maps appear to have either been disabled or mipmapped into oblivion. Without the normal maps to break up the specular highlights, we are starting to see a very flat shine appearing on these leaf blocks.

In the long-distance shot at the bottom, all the detail geometry is gone and there is no hint of normal mapping. The specular highlight on the front face of these leaf blocks is totally flat and it strongly accentuates the ‘blockiness’ of the tree.

My questions:

  1. Does your comment (quoted above) about the ‘shiny white wax’ appearance refer to this effect that I’m describing here?
  2. Why is there such an aggressive fading out of the normal maps in Boundless?

@lucadeltodecso, Would you consider providing an option for HDR bloom in the graphics settings for PC? The options could be something like:

  • OFF
  • MEDIUM (LDR)
  • HIGH (HDR)

I recently bought a new graphics card that has 8GB of memory to take advantage of. :money_mouth_face:

I can imagine that it would be very challenging to balance the bloom across all the different lighting conditions available in Boundless. If you configure the bloom to look impressive while walking around a city at night, you might find that it looks overbearing during the day.

However, I’m relatively confident that part of the reason for it being hard is that it’s rendered using an LDR source. If you only have an LDR source to blur, you basically have no choice other than to set a high threshold and live with only minimal bloom. However, with an HDR source, a high threshold won’t necessarily mean minimal bloom because there is a vast range of colour/light intensity that exists above the LDR colour gamut.

The advantages of HDR bloom can be illustrated in Photoshop using the 32-bit colour mode and some gaussian blurs. In the image below, I’ve created a blue bar that uses a single hue of blue at varying intensity. On the left, the bloom is LDR and, on the right, the bloom is HDR. The settings for the blur radii are the same on both sides. I’ve provided two examples with different levels of exposure.

Notice how the colour of the LDR bloom varies unrealistically and how its brightness is limited. Then notice how the overexposed area really shines in the HDR bloom and it maintains the original blue hue.

Imagine if you took all the Gleam materials in Boundless and significantly increased their emissive power/intensity. This should cause them to appear much brighter than the other blocks around them. Then, combine this with an HDR bloom and you would find that those overexposed Gleam blocks would bloom beautifully while the rest of the blocks would not contribute because they’re not overexposed.

The following animation shows a Photoshopped example of a bloom effect that I think is only possible using HDR:

bloom-animation