I haven’t posted in a while, but I’ve been busy figuring out the whole tech art process for The Hologram. I’ve came across many techniques for many different things and I ended up testing a lot of stuff and tried to do it all at the same time, so there haven’t been much to show, but at this point I’m pretty happy with the current workflow.
In modelling: At first a modelling based on subdivisions seemed like a great idea, but getting all the supporting geometry and quads in the right places is a great amount of work, it would be feasible if not for the huge amount of geometry in the end too. I ended up with 20k polygons for a single ship with very little detail and I think that’s too much for this project. Then I tried using a technique that I saw in a youtube video: model low poly, then copy the mesh and bevel it, then transfer the normal data from the first to the second. Ended up with a decent amount of polys, and very beautiful bevels. Would have used it in my current ship if I didn’t try this so late in the process. This should be done before marking the edges for unwrapping, but even then, UV mapping this with all the bevels is a nightmare, especially in Blender which has indecent UV mapping tools. I’m not using this in the current ship I’m modelling, but will definitely use it on another, in a more discreet way. So yeah, which leaves me with a process I call: fuck it and let’s go with bare flat geometry.
In texturing: considering that I want the player to go outside ships, that presents an immediate problem of scale. Even with a mere 300 or 400 meter ship, a single texture of 4092px is not enough to look sharp when the camera is very close to the surface of the ship, but I only noticed how bad it was after I made my first texture of a model of that size. This has several solutions, and I think I tested them all, but the most fancy is to have a library of detailed normal maps which can be rendered as decals in Unreal. This technique is explained in this video and is used in Star Citizen and Fractured Space. So I made my own normal library in NDO, a single 4092px texture that will be used for the entire game. And also, a smaller texture for color and emissive decals.
I doubt this is very performant, after all I’m stucking hundreds of decals with different materials in there, but we’ll see how it goes. If I did it again from scratch I would have created a fully shaded texture library with color+rough+emissive+normal instead of having a material for each, but I don’t know if that would be better or not.
In the end I achieved most of my objectives, which was to learn more technical art and end up with a workflow that doesn’t require high poly meshes and full texture normal maps. I just wish UV Mapping was simpler (and Blender makes this task even worse), and considering I’ll be using tiled normal maps in some areas, the necessary UV Mapping discipline is even higher (as you can see from the screenshot above). There’s a tradeoff between number of islands and right angles in UV space. With more islands you lose performance, but with less islands you end up with less right angles which might mess the alignment of tiled textures and you may get jagged edges.
Also revamped the UI, but that is a story for another day.
A lot of blueprinting went by and also a lot of thinking and finding solutions. Obstacle avoidance should be easy, but add variable object size and physics simulation, and the potential for bugs multiplies tenfold. I managed to create a simple obstacle avoidance, which is far from perfect, but an AI ship can now check if there is an obstacle to its target, and if there is, fire several rays in a star pattern to find the closest open space it can go to and then resume its path to target. I will leave AI at that for now because it was pretty hardcore.
I started the mission system and made basic mission managing. It’s very simple and linear, but there can be as many missions as needed in a level. At the start of the level, Event Dispatchers are bound for Starting, Advancing and Completing the Mission. These will manipulate the array of objectives, and see what their state is. The events can be called by any actor, but I think the Level Blueprint will do most mission scripting, where references of level triggers can be easily grabbed. This was pretty interesting to do, but I’ve seen enough blueprints to last a lifetime now. I’m itching for some art now =D