Hi Protopop, you did a really great job on polishing your work, really like the world you created!
I have some questions regarding post processing, would be really great if you can answer them (: I’m working on a mobile VR relaxation game for my final thesis and I am designing a forest with unity terrain.
What did you use for the atmospheric scattering like the sun shafts? I’ve seen some open source variant and also the blacksmith one on the asset store but they seem too heavy for mobile.
How did you create your sky, do you use a day/night cycle or made your own procedural sky?
Did you create the foliage like the grass, flowers yourself? and do you use the “Advanced foliage shader?”
Thanks Derojo. Sorry about the delay, i havent been to the forum in a week or so.
That sounds like an amazing thesis - wow, its great to see people exploring indeas and concepts that would have been science fiction when i was a kid. Its like i heard about Data Journalism the other day, journalists who analyze and draw conclusions from large amounts of data, and thought it was a clever future twist on a traditional career.
Quite a few people have written me saying how exploring BrightRidge has calmed them, so i think theres something ti this. You can feel great about reseraching something positive that can help people beyond entertainment. I can say from experience, the older most people get the more stresses can get to you. Having new tools based on you research might someday help a lot of people.
Im happy to answer your questions:)
The actual sun shafts are off by default, but can be turned on in OPTIONS > PLAYGROUND > EFFECTS. They use the default unity sunshaft shader (and it doesnt work on android so im looking for an alternative - thankfully my code structures very object oriented so very plugin/plugout friendly).
For the misty particulate effect its actually just a gradient on a plain thats placed in front of the camera. It simulates the dust and interacts great with lens flares.
In fact a lot of my approach is kind of smoke and mirrors - i try to create the IMPRESSION of real nature, its mess and chaos, instead of accurately physically simulating it.
The sky is just a skybox for each time of day (actually the morning sky is the sunset skybox, rotated and tinted orange). I wrote a simple script to handle the changing sun position, color, strength and ambient light. Combining this together its kind of a basic semi-procedural sky. I want to go fully procedural, but i have to figure out how to keep the great clouds. Im sure i wil swap in a fully procedural system at some point though. BTW i read an interesting pdf from the Guerilla games website about their skies and clouds in Horizon Zero Dawn (best game!) and its neat how much attention they paid to getting their clouds performant and looking just right
Most of the grass is from the asset store, various package, one or two (like the white flowers) are 3d renders ive had for ages. Nothing special there. I tried using advanced foliage shaders (they look incredible) but i could never quite get it to work. For VR though if its compatible i would definitely try them because its all those advance plugins that can really make a more robust (like non mobile) scene look so good.
Oh yeah, and Global Fog. Its your atmospheres best friend:) im using the one that comes with unity.
Thanks for the detailed explanation and your openness! Those clever tricks could help me a lot in getting that extra feeling of being immersed in the environment (the presence is strongly related to getting that relaxation going on)
Developing for VR, and in my case mobile VR, comes to optimizing and know what you can and cannot use. Most post-processing effects aren’t suitable. I will try to use global fog or maybe just the normal fog settings, just need to try things out
I can understand that some people experience calmness when exploring the world of BrightRidge; you used pleasant colors and the world looks realistic in a way that you convince your audience in being in the environment. Also music and sounds are very important, and for my prototype, getting that relaxation going on music and sounds are going to play the leading role.
Thanks again, and good luck with further developments!
Hey Protopop - just wanted to give a shout-out because I really enjoyed your Brightridge and was surprised to find this thread when doing a google search about Unity terrain optimization! Thanks for making this nice experience and sharing it with all of us!
Thank you for taking the time to let me know:) Im glad you played the game. Its funny how things are connected on the web isnt it? I really enjoy making natural worlds, and i am working on more updates for the game as we speak.
I do a lot of optimizations for mobile - the game is really chunky - some people say its beautiful, others say its low res and ugly. i just focus on getting the look and feel of nature’s mess and many people seem to like it. I use all the standard optimizations, compressed textures and being careful about how many i use, trying to optimize my scripts, nice skyboxes, and provide a lot of customization options so you can tailor it to your device - people have sent me pics from the newest android devices with all the settings pumped up and it can look pretty amazing. But it all comes at a price of making it all fit back to an iPhone 5s - i start the game in much lower quality on earlier devices, and i have a robust crash management flow so that when it crashes you at least start right back where you left off. There a lot more tips and tricks in this thread from me and from others as well:)
One more big thing is the version of Unity. Im still using unity 5.2 because its the only version ive found stable enough. I find with each new version the mobile performance has decreased, maybe they are focused more on AAA visuals and I wish there was a little more corporate will to slow down and make the software stable instead of fast progress that some of us on mobile cant follow. If you’re using a newer version of Unity you MAY encounter poorer performance and that can make a difference. For example as it stands right now i cannot get the game to work at all in Unity 5.4 . im actually not sure what i am going to do about that because its a big deal, but i just keep moving forward for now and squeeze as much as i can out of Unity 5.2, which has been a preetty great piece of software and a good friend for the last couple of years;)
I am taking all i have learned and working on a new world too - here’s some shots:
For those who read this “secrets”; dont chase ghosts.
I been trying to create an open world with the unity terrain and standart shaders as he suggested. I tried almost every possible ways and with all those heights on the scene and foliege, textures ; do you know what i found out? Creating an open world map with those scales are not possible. Even if you use a single texture with set to 128 and tailing to 400 do you know what will you get? Damn low fps rates. That is not possible. So i started to play with options. Increased error rate, decreases view range, added occolusion cullings, changed all textures to mobile, deleted all unnecessary models, got ride of trees and grass, removed shadows, baked lights, removed heights. At the end what i had left was a 500x500 flat terrain with one texture and still very low fps rate when i look to ground. What i planned was mountanious open world with 5k x 5k and the result was worse than minecraft.
So i decieded to try something else. I used a mesh with Lod. Do you know what? That fps rate doubled and hit to 60. Even with much height, bigger terrain and skybox…
So i said to myself, how come??? How the hell he could made it? I donwloaded the game than checked almost every details. You know what? He actually said the truth! He uses unity terrain. Damn!! He said truth but not all of it. When i checked around i reliesed that error rate changes. Whoot? He uses meshes as well. What da hell? He said he uses unity terrain only how come?? I been chasing ghosts for a long time and thats cause he said he used unity terrain only." Save as much as possible" damn it, i was punching air… you see photos? They are meshes combined with terrain. The pixel error rate causes swifting the details of half of screen and other side stands still. Why? cause it is a mesh!!! Checked whole map and figured out how he did it. There are terrain bases combined with meshes. So when you walk around you see terrain cause the walkable areas are mostly terrain and it is mostly flat. If i were him i would add more terrains to enable disable when i use or dont need it. Anyways on the other hand when walk over mountainous areas actually you walk over mesh. Damn it. I lost so much time to believe his advices. Guyz, open the game, check the details. You will see what is actually there.
Combination of terrain and mesh
Using lod
Using occolusion culling
Particle effects
Low poly grass and trees
High terrain error rate
View plants when they are about 10x close to you
Etc etc…
and definetly do not build your large scale terrain with unity terrain, use mesh or combine them as he did…
Yeah I haven’t tested my Android builds out of 5.6 yet, but I hope the performance isn’t too far regressed from 5.2 or 5.4? I wonder if anyone has discovered the source of these performance slowdowns. I know sometimes it’s literally a new checkbox in Unity for some feature you don’t need on mobile, and it’s checked on by default. I’d be very interested in a discussion in a thread on these mobile performance regressions, because I hear conflicting reports. You will read some people saying after their 5.4 upgrade, etc they saw a 10fps performance boost.
i KINDA suspect it has something to do with the way 5.4+ handles object transforms - i use a lot of gameobjects as a kind of visual coder, and my heirarchies are deep for organization. I think now it uses a lot more cpu when you change the order of a transform in the heirachy, although i have heard even this has been improved in newer versions. I also suspect that everything gets reflection probes and shadows now in deferred. The fact that its no longer an option to turn it off says to me that there must be some extra processing associated with this. In 5.2 i can control it on a case by case basis. It turs out dealing with upgrading older projects is actually a HUGE undertaking because of these things:) It all moves so fast so i hope for the best and i will at least be able to move to 5.3 for now it looks like.
There are about 30 or so giant rocks and cliffs around the world that are meshes - they just sit on the terrain. Is that what you mean by terrain meshes? The rest though is unity terrain, wherever you see ground textures like the mountains etc. You can see an example of the mountain LOD changing here: at about 27:07 https://www.youtube.com/watch?v=RMf2Si4omEk
the version you have in the screenshots is the old version - no realtime lights, no stories etc. But i used unity terrain there too, even though its unity 4 it should act the same.
It sounds like using a mesh and no unity terrain speeds things up. if i can find a way to convert my textured and tree filled terrain to a mesh i would give it a try. maybe i can get even more performance.
Tested Nimian Legends : Vandgels on iPad Air2 and Mini 4 and performance is better than BrightRidge. Here’s some screenshots of my travels from iPad Air2
The landscape, wildlife, and new shapechanges are working great, and performance is even better than BrightRidge so far. I’ve learned a lot from my last game, which I’m still updating, and I’ve worked hard on the story. I’m looking forward to releasing the game this fall
I dont know android that well, but my game needs at least 2gb in general - so i would use a small terrain like 1024x1024 or 2048x2048 if you dont use too many textures. Its kind of a mix between how much texture memory you use and the cpu which makes the performance. I would run a test on your device to see - i have a nexus 5 and i try to make sure things work on it as my base android model.
Hello brother, as an environment designer for mobile games. i wanna ask a question about terrain vegetation up to long distance view.
i do follow your all above explained procedure with using latest version of terrain composer 2, but still i have more batches then 1200 or 1500 with 150K verts, which kills the performance of our game, how can i optimize my following shown scene.
Offer users options to change grass density and distance - and set it automatically by device type - on earlier devices my grass density and distance is much lower
Lower your tree billboard distance
Limit Max mesh trees to something like 16
Check your grass patches amount on your terrain settings - i dont remember off hand but in general i lowered these
It also depends on how much else you have going on in your scene - and i only get high rame rates oin newer devices - there are plenty of players who have compkained about low framerates on my game over time - i just have to accept it and i keep optimizing other parts of the game in each update which can overall improve things - for example simplify your AI scripts