IsoSurface Demo - Dev blog experiment... (released)

@TsrKanal(utilising JRuby).

Woho, I thought I was the only one =D

/hijack off

@pspeed, have you fought about something to hide the the non-existing sky dome parts (black below horizon)?

I am also reading, don’t you worry. :smiley:
Great stuff by the way! :slight_smile:

I read all your stuff too :slight_smile:
I’m still waiting for the ultimate JME nature system to come along that can create huge terrains with grass and trees… this doesn’t look too far off that now!

@kwando said: @pspeed, have you fought about something to hide the the non-existing sky dome parts (black below horizon)?

Yeah, for one the water filter should cover that I think… but aside from that I will add a similar infinite ground plane that also uses atmospherics. I haven’t done it yet because I want to wait until I’ve readded all of the post filters to make sure everything plays nice.

Usually, I’d expect far away mountains and stuff to by rendered over the horizon anyway but there is always the chance of gaps and that should be covered. Incidentally, I may also provide for fractally generated “far mountains” for the sky dome, too. We’ll see. Essentially, I want to have near skymap quality without the sky map.

@monkeychops said: I read all your stuff too :) I'm still waiting for the ultimate JME nature system to come along that can create huge terrains with grass and trees.... this doesn't look too far off that now!

Thanks. That’s kind of where it’s headed, I think… though (hopefully) as a bunch of more modular systems rather than one monolithic thing.

For example, the Pager library is already separate. And it splits things into the Builder and Pager. The Builder could be used for any JME background thread operation and already has support for running it on the JME thread when complete, proper release() semantics, and so on. Add your job, override build() to do the worker thread processing and apply() to do the on-scene-graph processing.

The terrain library so far makes extra sure to always free the direct buffers it creates. The Pager and Builder architecture directly supports that ability and it was designed into it from the ground up. This is why when you fly around the direct memory stays stable.

Note: I’ll be putting out a release of this soon so that people can play with it. I just want to add back all of the post-processing effects I did in the previous demo… and write a blog post here about it.

1 Like

So, I finally added back all of the post filters and settings for them… plus more settings than before. Now the open sourced version has as much and more functionality than the old prototype did.

Consequently, I’ve uploaded a release:
https://simsilica-tools.googlecode.com/svn/trunk/IsoSurfaceDemo/release/IsoSurfaceDemo-Windows.zip
https://simsilica-tools.googlecode.com/svn/trunk/IsoSurfaceDemo/release/IsoSurfaceDemo-Linux.zip
https://simsilica-tools.googlecode.com/svn/trunk/IsoSurfaceDemo/release/IsoSurfaceDemo-MacOSX.zip

Controls

The controls are similar to before:
-Mouse looks
-Cursor keys look
-WASD moves
-Q moves up
-Z moves down
-shift runs
-ctrl+shift runs super fast

Joystick controls:
-left stick moves
-right stick looks
-dpad moves up and down. (it also moves left/right just like the left stick)
-right shoulder button one runs
-right shoulder button one plus two runs super fast

Creating Settings Panels

Creating the edit screens was pretty easy using the LemurProps sub-project. This includes a PropertyPanel class that can be used to edit the fields and properties of any Java object. Right now it only supports a handful of property types but it works fine for this use-case.

Here is what it can look like to setup a panel:


BloomFilter bloom = new BloomFilter();

PropertyPanel properties = new PropertyPanel("glass");
properties.setEnabledProperty(bloom, "enabled");
properties.addFloatProperty("Bloom Intensity", bloom, "bloomIntensity", 0, 10, 0.1f);
properties.addFloatProperty("Blur Scale", bloom, "blurScale", 0, 10, 0.1f);
properties.addFloatProperty("Exposure Cut-off", bloom, "exposureCutOff", 0, 1, 0.01f);
properties.addFloatProperty("Exposure Power", bloom, "exposurePower", 1f, 100, 0.1f);

This UI goes one further and adds them to rollup panels:


RollupPanel rollup = new RollupPanel("Bloom", properties, "glass");

The only tricky bit is that I want to add the enabled toggle right to the rollups title bar. PropertyPanel exposes a specially configured “enabled” property as a CheckboxModel for easily adding toggles like this.


CheckboxModel cbm = properties.getEnabledModel();
rollup.getTitleContainer().addChild(new Checkbox("", cbm, “glass”));

And that’s how I created all of those edit panels in the settings dialog.

Here is a pic of this release with all effects enabled:

And one with the scattering color wavelengths tweaked and an extremely wide FoV:

5 Likes

Sorry for repeating myself - but this last two screenshots are one of the most beautiful outdoor scenes I’ve seen for a long time. And this includes major game titles! Just wanted to let you know…

Hey you…

What filters did you add back in?

From the pictures, I think I see Depth of Field, FXAA and the fancy light one that I can’t remember the name of. Are there others? And are they the standard JME versions or the Paul Speed signature series? =)

Also, I was wondering about the floating segments… I noticed that every implementation of marching cubes has these. Not that it matters, because the whole thing is awesome and quite breath taking as is. But, I’m curious if this is something that is impossible to filter out? Or just difficult and not implemented yet?

I’ve never actually seen a version without this, so I always assumed that it was something that was beyond the normal scope of implementing this approach. Buuuut… now that you have done this… I can ask you and find out the real answer!

Nothing to add to keanu

@t0neg0d said: Hey you...

What filters did you add back in?

From the pictures, I think I see Depth of Field, FXAA and the fancy light one that I can’t remember the name of. Are there others? And are they the standard JME versions or the Paul Speed signature series? =)

Also, I was wondering about the floating segments… I noticed that every implementation of marching cubes has these. Not that it matters, because the whole thing is awesome and quite breath taking as is. But, I’m curious if this is something that is impossible to filter out? Or just difficult and not implemented yet?

I’ve never actually seen a version without this, so I always assumed that it was something that was beyond the normal scope of implementing this approach. Buuuut… now that you have done this… I can ask you and find out the real answer!

In reverse order:
It doesn’t have anything to do with Marching Cubes in general but the way the terrain fractal is setup. Pure 3D noise based fractals will likely have these sorts of exclusions. The smaller ones could trivially be filtered out but I’ve so far chosen not to. Larger ones are harder, especially if they span chunks. But for example, Mythruna’s fractal would not exhibit these issues because it generates a heightmap… but neither would I get cool caves and overhangs, either.

I think the reason you see it so often is because this fractal is nearly straight from the GPU Gems book. I suspect others followed suit are are doing similar 3D noise fractals.

The filters are all stock JME filters. Shadows, SSAO, Water, Light Scattering, Bloom, DoF, FXAA I think. If you run the demo then there is a settings panel for every one of them so you can see.

@TsrKanal said: Sorry for repeating myself - but this last two screenshots are one of the most beautiful outdoor scenes I've seen for a long time. And this includes major game titles! Just wanted to let you know...

Thanks!

It’s possible to get some really great screen shots if you turn up everything and don’t care about your frame rate. :slight_smile:

Hopefully I can add some trees and rocks soon to really round it out.

@pspeed said: In reverse order: It doesn't have anything to do with Marching Cubes in general but the way the terrain fractal is setup. Pure 3D noise based fractals will likely have these sorts of exclusions. The smaller ones could trivially be filtered out but I've so far chosen not to. Larger ones are harder, especially if they span chunks. But for example, Mythruna's fractal would not exhibit these issues because it generates a heightmap.... but neither would I get cool caves and overhangs, either.

I think the reason you see it so often is because this fractal is nearly straight from the GPU Gems book. I suspect others followed suit are are doing similar 3D noise fractals.

The filters are all stock JME filters. Shadows, SSAO, Water, Light Scattering, Bloom, DoF, FXAA I think. If you run the demo then there is a settings panel for every one of them so you can see.

Awesome! Thanks for the info. Well… now that my WTH is wrong with my Android life crisis is over, I’m gonna download this and the tree generator and actually get a chance to play instead of my usual peel my own face off trying to fix stuff =)

Just to know it, do you plan to add some kind of editor and manual material selection? Or is that up to us?

Not that i am requesting it, its more to not do the same work twice

A big “Merci” for all the informations, the code,…

@zzuegg said: Just to know it, do you plan to add some kind of editor and manual material selection? Or is that up to us?

Not that i am requesting it, its more to not do the same work twice

There is the library that you use in your code and this demo that uses my textures and the library. I hadn’t really planned on an editor or anything.

Tested it out.

The good news is, this has to be the best visuals I’ve seen so far from JME3. The bad news is that even my new i7 4770K 16GB RAM GTX770 pretty damn fast PC runs it too slow to be playable and there aren’t even any characters or anything in the scene yet :stuck_out_tongue:

An issue I noticed is that the water looks weird as you move the camera… I am guessing the shader is using the main camera for reflections?

~ 250 fps it’s playable IMHO and I’ve got a lower config
1680x1050, fullscreen, anti-aliasing disabled, no change in settings panel,
linux, openjdk 1.7.0_55 64bit
680GTX + i5-4570

@monkeychops said: Tested it out.

The good news is, this has to be the best visuals I’ve seen so far from JME3. The bad news is that even my new i7 4770K 16GB RAM GTX770 pretty damn fast PC runs it too slow to be playable and there aren’t even any characters or anything in the scene yet :stuck_out_tongue:

An issue I noticed is that the water looks weird as you move the camera… I am guessing the shader is using the main camera for reflections?

Yeah, the wider slides as you move around because I can’t provide it an offset. In this app, the camera stays still and the world moves.

Regarding your performance it seems very strange. That’s an nVidia GTX770? Did you turn all of the options on or something?

I have a way older card than that and get around 180 FPS before I turn stuff on. I’m running in the 1280x720 window, though.

@david.bernard.31 said: ~ 250 fps it's playable IMHO and I've got a lower config 1680x1050, fullscreen, anti-aliasing disabled, no change in settings panel, linux, openjdk 1.7.0_55 64bit 680GTX + i5-4570

Wow. Nice stats. Thanks for testing.

I have 400 fps with default settings,
around 90 fps when everything is on.
Nvidia GTX 670 + core i7