A month ago Ryan Brucks revealed his cool toolkit which can be quite handy when working on game locations.
Did you hear about the Impostor Baker tool by Ryan Brucks? A month ago the artist revealed this cool toolkit and it can be quite handy when working on game locations. The thing, for example, was used for the creation of Fortnite Battle Royale. Basically, it’s a UE4 plugin for generating Impostors for static meshes. Let’s study it in detail.
I have been experimenting with impostors for several years now. The idea is not exactly cutting edge. There is a version of an impostor generator built into UE4 that I added a long time ago, but at this point, it is pretty dated and borderline unusable (it exists under the Render To Texture BP Library). While the biggest problem with the old method is the cumbersome usability, it also wasted lots of texture memory.
This new version improves the workflow issues and makes more optimal use of the available texture space by using a layout based on octahedra.
The reason I was able to spend time on a new version is due to being asked to help out on the development of the Apple Park AR Demo. So this Impostor Generator was first built and tested for that. Unfortunately, I do not have permission to show any images related to that, so instead, I will use examples from Fortnite since it has been in use in Battle Royale since the map 2.0 update. I made a video showing the transitions a skydiver will see going from Proxy LOD to actual level geometry. The tree impostors are built into the LOD actors.
In order to make it easier to understand exactly what is going on behind the scenes for these new impostors, I think it is helpful to first think of Traditional Billboards since everybody understands them.
Did I mention the Impostor Baker has a Traditional Billboard mode too?
ImpostorOptions
The three modes are Full Sphere, Upper Hemisphere, and Traditional Billboards. In order to better understand the impostors, I will first show the Billboards and progressively enable expensive features the make them look better. Then the similarity/overlap should make sense.
Billboards
The above video shows what the blueprint generates for “Traditional Billboards” mode.This is a 3×3 layout of frames with 8 side views and 1 top view (texture atlas shown briefly in the video). Notice how the separate cards cause noticeable artifacts. Enabling “Dither” is like a masked Fresnel that uses DitherTemporalAA to smoothly hide the cards that are not facing the camera. It helps but TempAA is not an option for all platforms such as mobile, so this option is not reliable. Speedtree billboards use the vertex shader to simply hide the cards that are not facing the camera.
Next, PixelDepthOffset (PDO) is enabled in the video. This uses the captured depth to offset the pixels and cause more interesting intersections between the cards and the world. It has the same problem that it’s not supported or a good idea to enable for all platforms, plus it makes TempAA look smeary when parallax does not match for complicated reasons.
Finally, POM (parallax mapping) is enabled. Notice how this makes the transitions between frames much smoother. There are some strange artifacts at the edge of the frames (especially when approaching the top view). Those artifacts are very difficult to explain and fix, but I do not intend to spend much time fixing them, since enabling full POM on a billboard like this is quite expensive, and it would still require significantly more than 9 frames for POM to look smooth for all views.
The point I wanted to make with the above example is that while decent results can be had with a few shader tricks, it does not scale to a smooth high-quality version. To increase quality we need to add more billboard cards. This makes the mesh heavier in terms of both vertex and pixel shader, and doing POM is slow enough without it being in lots of overlapping masked triangles. The 9 card cross is already 72-81 verts, so if we add many more, whats the point? At some point a very low standard LOD would be better, but it would be harder to make.
What if there was a way to capture more view angles, but render the final material without needing geometry for each card? That is basically what impostors attempt to do.
Ryan Brucks
Do you want to learn more? Follow this link for an overview by the artist. You can find the tool on GitHub here.