Read online Punjab News in Punjabi. We cover all kind of topics such as sports, politics, Bollywood, Pollywood and soon. Visit once for breaking news. https://www.rozanaspokesman.com/epaper
Very impressive article Jake! You are very talented.
nice article! i love seeing the breakdowns.
Jonas Manke introduced his amazing indie project Omno which started back in 2016. It’s an adventure platformer with fascinating landscapes, breath-taking open spaces, and serene, dreamlike atmosphere. Today he’s revealed the official trailer and launched a Kickstarter campaign to finish the project with the help of the community. Omno is planned to come on Steam in 2019.
The game has made some serious progress during the last months. I quit my day job in March – or at least I didn’t take new offers as a freelancer – to fully focus on the production of Omno. I’m living off my savings since then. The game mechanics are all entirely done (maybe just tweaking things might be necessary), and all that’s left to do is adding content. Creatures, puzzles, expanded landscapes, all those kinds of things. Today, November 1st, I launch a Kickstarter campaign for Omno to hopefully be able to finish the game with the help of the community. Otherwise I’d have to pick up doing animation jobs and that would delay the release drastically.
The world of Omno consists of fairly vast areas and landscapes. The style I chose allows me to work on a very large scale. I don’t struggle with detailed textures or high-res models. So when I start laying things out, I roughly put in the puzzles, check distances, plan explorational highlights and put all other important gameplay elements in place first. In that stage, it is often just a large 2D-plane where I put things on. The second step is getting vertical. That means I use large spheres or low res landscapes to get it off from the ground plane and get a sense for the heights of the different map features. Hills, mountains, valleys, canyons, etc. In that stage, I often double check with my concepts to make sure I maintain the landscape features that I want to have on the map.
Working solo forces me to remain extremely economic in a good way. I focus on working from large to small. I usually clean up the blocking a bit before I let some people test it and check for some red flags, gameplay-wise. Afterward, I start refining things, adding bigger rocks, large trees, etc. That process repeats until the last final piece of grass is put into place. Doing playtests is absolutely mandatory to check if your visual guiding work and people run the direction you want to (or enjoy random roaming where they are supposed to). It’s a lot of psychology, and I’m not sure about other devs, but I only trust in playtests and real end-user experience.
Peculiar Features of the Materials
Coding materials is certainly not one of my strengths, so I tried to keep those fairly simple overall (with few exceptions). For some meshes, I use a noise-based material that allows me too put some random color variations onto the mesh. Having those huge rock formations feels dull sometimes when everything has one single color. I like the almost cartoony look though, so I wanted to keep that uni-color feeling and just add some very subtle color variation via that noise map to help the eye perceiving the depth, scales, and perspectives more easily. For some creatures, I use a Fresnel node, based on the vertex normals, which gives that super soft look to them. The clouds and the grass are certainly a little more complex, but standard stuff as well.
For Omno, I use a dynamic lighting while focussing on keeping things simple and performance costs low.
Since the landscapes are quite large it would not make sense to bake all the lighting (that means saving all shadow information into shadow maps), because it would really hurt the performance loading shadow maps of that size. So I decided to go for the usual ‘open-world’-approach: I use one dynamic light source as sun direction.
In the first prototypes of Omno, it had a dynamic day-night-cycle, but I quickly realized that making everything dynamic doesn’t necessarily make it better. In fact, I wanted to really be able to have full control over the colors, the fog and all other visual aspects of the atmosphere, and really design the atmosphere the way I wanted. It just wouldn’t be possible (at least for a solo dev) to achieve that with a day-night-cycling setup.
Anyways, I keep the light source as a dynamic light, so all shadows are being processed dynamically. That is more performance-heavy than baked lighting for small maps obviously, but it works out great for large landscapes if you tweak the shadow qualities and carefully make decisions about which meshes drop a shadow and which ones don’t.
Besides the main sunlight, I also use a skylight, which allows me to light up all surfaces that are not being lit by the sun directly. Pretty basic setup and very performance friendly. I also use Unreal’s default Skysphere Blueprint but with custom colors and settings – but that’s just a matter of taste. That allows me to keep some GPU power for post-processing and fog, which makes the real deal for Omno. Adding exponential height fog, keeping the sun quite low and tweaking the colors of the fog and the sky really gives a great atmosphere already. I love those god rays when the sun breaks through trees or is close to edges of rocks, etc. Many people might think that I overuse god rays, but I think they look awesome. I turned on volumetric fog and lighting for the planned PC release but I kept all settings for a non-volumetric setup on the side, which looks almost the same, for potential console ports, etc. I am not yet in the state where I polish the performance and do profiling and all, but I kept that in mind and I can easily turn away from the fully volumetric approach but still keep the same feeling of the atmosphere.
So to sum it up, it’s a really basic setup which took a lot of time to tweak and make look right. Directional sunlight, skylight for backlighting, exponential height fog, and many hours of tweaking colors and intensities. Everyone can do that, so I’m not gonna reveal the exact light and color schemes that I use for Omno.
Setting Up Stormy Weather
Some people might have seen this video demonstrating arctic snow storm which I uploaded on Facebook.
I’m not quite sure if this scene will make it into the final game, so I don’t want to talk about that too much. But what I was trying was this: I wanted to see if I could create a large-scale map with heavy use of particle effects without destroying the performance.
The way I made it work was quite simple again: I did use some, few, particle effects on certain places where I wanted to have full control level design wise. Those had very strict LOD rules and pretty much turned themselves off very quickly when you walk away from them.
Putting hundreds of particles into a large map would simply be too heavy nevertheless, so I tried this: since it’s a stormy weather, the view distance is very low (which is good in that case to save performance). I pushed up the fog, so you can’t see very far. The idea was to dynamically spawn non-looping particle effects within a small range based on the player position, so there’s always just a few particles running while you still have the impression that whole landscape is covered with them.
I wrote a simple algorithm that randomly spawns some particles around the player (on the same world height). Another setup ‘shoots’ line traces in random directions and detects the ground (if no ground was detected within a certain distance, it traces downwards to find the ground) and places more complex particles where the trace ends to make it look like snow is blown over the ground. On very specific occasions I placed collision boxes (that only create overlap events for line traces) which return a value to that line trace algorithm, so another set of particles were placed.
For instance, if there is a hard-edged cliff where the particles would look different due to the wind blowing over the edge, I could put some of those collision boxes over that edge, so when the line traces detect those, they spawn a certain kind of particles that look better in that scenario.
For the interactive foliage, I use two methods right now, but both are still very work in progress, so that might all change in the later development.
For grass and the ground-covering plants, I use a sphere mask based shader. For more complex plants like ferns or large leaves, I use a fully dynamic joint based setup. I wrote about that setup in one of my devlog newsletters. Feel free to have a look into that article here. For the shader based grass setup, I recommend the tutorial below:
What it does is the following: it stores the player location into a variable and passes that information to the grass shader. Based on that player position it creates a sphere mask and offsets the grass accordingly. I highly recommend checking out Abey Miranda’s foliage setup which is extremely high-quality:
I use quite a lot of post-processing, which is the most performance draining aspect of Omno. I push the colors in saturation, tweak the contrast a bit and give the entire scene a slight tint where needed. For the depth, I decided to add some ambient occlusion which really helps to sell some realism and softness to the world. Last but not least, I use Gaussian depth of field to blur off the horizon line and give the last bit of cinematic feeling that is needed for Omno.
Further Development of the Game
As mentioned, I am launching a Kickstarter campaign TODAY, November 1st. I am extremely excited about that and hope people will like my work and if Omno will receive enough public attention to make it to the goal. In fact, I do have a few investment offers and I am in conversations with a few publishers, but I want to stay independent as long as possible to make Omno the way we, as a community, want. That’s why I give it a go with the campaign. That does not mean that I wouldn’t consider working with publishers to bring Omno to consoles, or get some help for the final stretch of quality assurance, etc. But that is something to worry about in future.
You can keep an eye on the progress here:
80.lv: By the way, a year ago we already talked with Jonas about the development of Omno, – its gameplay, design, animation and more. If you liked Omno, make sure to check the first article!