I played with more complicated atmospheres today. I refuse to implement overly-fancy techniques just to get something that boils down to a gradient with a few subtleties. Come on now. Here's a shot from a sunset on a planet orbiting an O star:
I'm sure the math doesn't work out...you can complain about not using real scattering equations all day, but man, it sure would be pretty to see this in-game. Don't ever let the real math get in the way of beauty 😉
Brought the terrain shaders over to the new deferred engine tonight. I didn't touch the actual terrain code, so nothing's new here...but it still looks good under the deferred pipeline, so that's good news. And now we have distance blur as well!
Trace any individual element, and you see the order.
Sounds deep. It's really not.
As a follow-up to the last post, I just couldn't wait to see what I could do in terms of procedural nebulae with the particle system. The initial results aren't jaw-dropping, but they do beat previous attempts by a fair amount. The particle-sim nebulae definitely have a more volumetric feel to them (not surprising, considering that they are volumetric, unlike the 2D-noise-based previous attempts).
I actually did a bit of cheating in this shot: I've composited the original screenshot with several blurred version of itself. In principle, this is easy enough to do on the GPU with textures. I just didn't want to go write that code in the simulator, since I want to keep it as a real-time application. There's still a long way to go in the procedural nebula department, but I believe this represents a step in the right direction.
I've been having a bit of fun with particles and the GUI engine lately. I experimented with a basic particle simulator in which particles are subjected to a force, where the force's vector field is defined by functions of complex variables. My rational behind this was that equations in complex variables have an uncanny ability to produce interesting behavior even with simple operations. Indeed, I witnessed some pretty cool results! Thanks to the new-and-improved GUI engine, I was able to control loads of parameters of the simulation in real time, and had quite a bit of fun playing with the math 🙂 Of course, particles do have a tendency to make everything seem cooler than it really is!
I'd call the experiment a success both in terms of it being the first real test of the new GUI engine, as well as the first particle system implemented in XDX. Oh, and the math was a success as well 😀 I'm thinking this kind of work may even lead to realistic procedural nebula rendering at some point. That could be exciting.
Finally, all the kinks have been worked out (at least for now...) of the GPU terrain engine. Borders are totally seamless, so there are no longer any visible artifacts of the chunk boundaries (note that those first-order discontinuities in the screenshot are from the Voronoi Noise, not the terrain engine!). Looks pretty smooth! I've also got a system in place that should allow for some advanced semi-global heightmap effects like erosion, though I've yet to really put it to the test.
Great! Now, shall we make it adaptive? *shivers*
I'm dreaming...of a white Christmas.
Merry Christmas 🙂
Implementing normal mapping really helped the appearance of the terrain - they can push the effective resolution of the terrains up by a factor of at least 16 or so. The screen shot this time is from a demo that runs at 60 fps on my laptop, unlike the previous one (which ran at ~10 fps on my laptop).
In addition, I've found that Voronoi noise (aka Worley noise) makes a very compelling basis function for the terrain!
I've finally admitted it to myself: CPU-based terrain generation just isn't smart, and it'll probably get crushed by all things GPU-based in the future. Sure, it makes threading and precision easier to deal with, but it doesn't make sense that my current terrain takes about the same amount of time to generate on my Intel HD Graphics-driven laptop and my 560GTX-powered desktop. Why on earth are all those processors going to waste?
So, here we go. My second endeavor into GPU-based terrain generation. I've already come farther than last time, when I gave it all up because of cracks that I thought were the result of GPU precision problems. I managed to solve the crack problem this time. Of course, my skirts were hiding the problems, but it still made me uneasy that tiles didn't line up perfectly - luckily, a little math solved that.
It may look like the screenshot is a regression from my previous shot, but, since it's GPU-generated, it definitely represents a step in a direction that I think will ultimately prove to be a worthwhile investment in the future of XDX's terrain engine. The terrain below is obviously simple: just a single layer of iterated value noise. Building up layers is the next step, and should be relatively easy with a few shaders.
I'm getting a bit better with terrain functions. Slowly but surely...