What I did today

Please share the crisis

I think you will find I am now old and fat and running out of hair.

Though if I managed to diet and had a shave Iā€™d maybe look a bit less decrepit.

Cas :slight_smile:

Well i shave, and yea it works a bit. Then i got a part time job driving buses. I have to cycle 8km to work. So 16km a day. And now i\m loosing weight. But went to a rave in a cave in the weekend. Was the oldest person there by over 5 years, out of 100 pplā€¦ shesh.

Today I logged into JGO for the first time in a year, and started adding curly bracket support to TreeML, as an alternative to tabs.

Today, I finally had the time to add new stuff to Tetouris.

Feel free to play the new version.

[b]
Google Play: https://play.google.com/store/apps/details?id=br0ken_m1nd.tetouris.android

Itch.io: https://br0ken-m1nd.itch.io/tetouris

[/b]

Today i realized i have litterly done nothing constructive at all for 2 weeks. ::slight_smile:

Just submitted my PhD. It took 5 years! If anyone canā€™t sleep, Iā€™ll send you my work on ā€˜tax abitrage and minimisation in a comparative statics and general equilibrium settingā€™.

Iā€™m now looking forward to doing more Java game programming.

Congrats on getting it submitted. Writing up a PhD is not the most fun thing you can do with your time. :smiley:

What do you guys think of our Status Menu? Edit: please donā€™t mind the silly item names. Theyā€™re just for testing.

Also, theagentd and I are thinking about making the We Shall Wake/Robot Farm game engine open source once RF is done. Would any of you guys be interested in using it if we did? It uses LWJGL3 and JOML. We think itā€™d be cool to maybe get some kind of free open source community game engine going in Java (besides jMonkey of course). Iā€™m not really sure if anyone would actually want to help though haha.

[quote]What do you guys think of our Status Menu?
[/quote]
Clean, but too many and too long words, a bit bland and crowded.

It looks good, i like the general looks of it, but usability might be a bit meh because it lacks symbols and visual clues to differentiate stats, you have to actually read the densely placed text to know what is what.

The triangle indicating which character is selected is a bit badly placed right at the outline of the stats section, it looks like itā€™s just part of the outline.

The character selection could use some visual clues as to which character is selected, like scaling down the icons of the characters that are not selected.

[quote]Would any of you guys be interested in using it if we did?
[/quote]
What does your engine do? Why should anyone use it instead of building their own with some framework or using another engine?
I quit jMonkey because i found it to constricting, i wouldnā€™t go near any type of engine if it doesnā€™t provide clear benefits.

The only engine/framework i would ever want was LibGDX but cleaned up and with a full 3d rendering API. Iā€™m talking animations, light and smoke, but blazing fast and packed neatly into modules, with editors that are actually usable.

To summarize, thatā€™s pretty much what NNGINE is. It has 3D/2D rendering, along with a sound system, and various utilities and wrappers that speed up development. Everything is module based and you can easily pick and choose what parts of it you do and donā€™t use. Weā€™re gonna clean it up a lot after RF and give it proper Vulkan support as well, but make it optional so that OpenGL and Vulkan can be interchanged (but Iā€™m not gonna talk too much about it since thatā€™s theagentdā€™s baby). It also has full Blender/Substance Painter integration - we wrote plugins/export settings for both of them so that you can pretty much send stuff straight from those programs into NNGINE. Just a lot of neat tools weā€™ve made over the years that might benefit others.

If you want to see what it can do, this is our best example we had like two years ago, although itā€™s pretty old and not really indicative of what we can do with it now (this was the LWJGL2 version):

Q0vzfEv2-EM

Also I appreciate the detailed feedback on the Status menu. Iā€™m gonna see if I can make whoā€™s selected clearer. The only thing I disagree with is the ā€œtoo many wordsā€ part. Itā€™s a jRPG. Thatā€™s an inevitability. Haha. The good news is that literally everything has a tooltip, so weā€™re not leaving you in the dark and you can just mouse over stuff and see what it is.

[quote]Itā€™s a jRPG
[/quote]
Oh, kinda makes sense. Itā€™s always good to have visual cues accompany text is all i wanted to say.
Itā€™s not like itā€™s bad, iā€™m just nitpicking there :smiley:

[quote]NNGINE
[/quote]
I saw that video some time ago, it looks god damn sexy, i thought it just vanished but itā€™s good to hear that itā€™s still worked on!
Where does it stand with GUI and other usability stuff? It would be a shame if itā€™s the inverse of LibGDX, great 3d API but no 2d magic.

Also I would be intrigued to see how a simple scene setup/update looks with that engine?
Somthing like a box, a light and a particle spawner in an empty scene with some default skybox/skylight.

It would be a great test on how good the engine actually is actually structured :wink:

[spoiler]PLS PLS PLS ;D[/spoiler]

Oh gosh. This enthusiasm actually legitimately made me smile. Lol. And donā€™t worry, no offense taken - I understand what you mean about the menus. Iā€™m working on it now to try and make it clearer.

Robot Farm is actually running on the same engine as WSW. You can see its 2D features in just these screenshots Iā€™m posted. We have Distance Field Fonts working for example, which means theyā€™ll scale to any resolution. We have support for making icons with the same tech, itā€™s just that we added the functionality too late in so I wonā€™t be able to fit it into RF now.

Unfortunately, the GUI API Iā€™ve written for NNGINE will likely be retired after RF. It hasnā€™t held up over the test of time. But I may write a new one or see if someone from the community would be interested in writing a new UI system for it.

As for the rest, when Robot Farm is done and released, weā€™ll make a thread on here and get some stuff going. Itā€™s really too early to talk about it. But if you guys would use it, weā€™ll share it. Itā€™ll need a lot of work to make it clean enough for us to feel comfortable sharing it because itā€™s really just a huge mess of tools weā€™ve made since like 2013 at the moment.

Iā€™ll post some examples to give you a generic idea of how NNGINE works as soon as I can (either tonight or tomorrow night depending on school).

[quote]Robot Farm is actually running on the same engine as WSW.
[/quote]
Ooooohhhh :o Didnā€™t see that coming.

[quote]But if you guys would use it, weā€™ll share it.
[/quote]
If itā€™s usable than sure, java doesnā€™t really have a good 3d engine/framework, jMonkey is a mess with aweful tools and all the other engines donā€™t go very far with their 3d feature-set imho.

[quote]Iā€™ll post some examples
[/quote]
1000x thanks man :point:

Is NNGINE a fork of NGINX? ;D

No, it is a TERRIBLE DISTRACTION from the awesome VOXOID engine heā€™s also making :stuck_out_tongue:

Cas :slight_smile:

Yes, the engine is just the front-end and is just a webpage. It just connects to our server farm in China.

ā€¦ which is also just a distraction from my schoolwork and Masterā€™s thesis. =P

Got distracted building my ui interface, in my quest to get a rounded rectangle I ended up building a new vector graphics engine which has a nice triangulation routine to triangulate any shape (convex, concave, single hole, many holes). Also allowed me to do some nice gradient shading / texturing on any shape.

@VaTTeRGeR

I wonā€™t go too deep into detail here, as 1. itā€™d be way too much for one post and 2. some of it may change drastically before we would consider releasing it, so keep that in mind.

2D is mostly just simple stuff like sprite batching and some simple postprocessing, so not too much to brag about. We have some simple postprocessing for 2D (simple bloom, dithering, MSAA resolving). Not much to say here.

NNGINE has a powerful task-based threading library which allows the user to define ā€œtask treesā€ to run. These tasks may be able to individually be processed on multiple threads (example: split up frustum culling into N subtasks) or individual tasks (run two non-threadable tasks in parallel). The task set additionally contains dependencies between tasks, forcing certain tasks to finish before others can run. The system has the potential to use any number of CPU cores, and NNGINE could hit 3.5x scaling on a quad core, held back by OpenGL.

The 3D engine is where most of the fancy stuff is happening. The engine is currently using classic deferred rendering, but this will be changed to clustered deferred, with an optional forward clustered rendering mode (either for the entire scene, or just for lighting particles/transparent effects etc). The G-buffer data for deferred will be customized with a storage/read shader to allow games to customize the G-buffer layout to contain the data they need.

Rendering of geometry is done using a minimal Renderer interface. The interface pretty much only has a render() function which is called by the engine for each view that needs to be rendered. However, the Renderers are allowed to inject their own tasks and dependencies into the main NNGINE task tree, allowing renderers to run frustum culling in parallel, etc. This is used extensively in the current Renderers we have implemented.

USING Renderers is pretty easy. Hereā€™s the complete code for adding the ocean I made that you may have seen screenshots of here:


		oceanRenderer = new OceanRenderer();
		graphics.addRenderer(oceanRenderer);

Obviously, the complexity of the renderer depends on the actual implementation. Hereā€™s the code for setting up a static 3D model:


		modelRenderer = new ModelRenderer();
		graphics.addRenderer(modelRenderer);
		modelRenderer.addStaticModel("terminus", ModelUtils.readModel(new File("terminus.wam")));

		Instance in = modelRenderer.createStaticInstance();
		in.addModel("terminus");
		in.matrix.translation(x, y, z).scale(0.5f);

		//once you don't want the instance
		in.dispose(); //don't forget it or it lingers forevaaa

You also need to create the NNGINEGraphics object which is the main 3D engine object (the ā€œgraphicsā€ variable in the above code). This is 20 lines or so, including setting default graphics settings and setting up a camera.

Model textures are streamed in automatically on demand on a background thread by the engine by checking the materials of visible models. Gonna make model vertex data (optionally) streamed too, as itā€™s annoying to manage right now.

Lighting includes shadowed and unshadowed point, cone and directional lights (with configurable cascades). Lighting is physically based and produces very high quality reflections, and should close to the result seen in Substance Painter when designing materials for NNGINE. A planned feature is changing the BRDF to allow for lower quality lighting, cel shading, etc.

Postprocessing is currently not heavily customizable. Every single possible setting can be changed while the game is running and updated (except GPU count and texture resolution, last one for now only, planned feature), but you cannot currently add your own postprocessing passes. This is due to the heavy integration of the passes to minimize the number of fullscreen passes and how optimized the whole thing is. Adding individual postprocessing ā€œpassesā€ will never perform well, so Iā€™ll probably introduce the concept of a complete ā€œpostprocessing pipelineā€ which you can completely swap out instead. Current effects include: HQ SSAO, motion blur and depth of field (extremely high quality, writing my masterā€™s thesis on it), screenspace volumetric lighting, HDR tone mapping, HQ bloom, temporal SRAA, tone mapping (with camera exposure etc), air distortions, and probably a few I forgot about. =P

Transparency rendering is a tough one. When designing NNGINE I went for a 100% order independent transparency system, but this wasnā€™t entirely optimal due to performance and memory usage. Iā€™m not sure what to do here, but regardless of the sorting system weā€™ll allow for lit particles in the future thanks to the wonders of clustered shading. Regardless, transparency is structured similarly to the opaque Renderers, with different renderers. Particles are a specific renderer and are in turn split into Systems for culling. This stuff is very likely to change though, so not much point in posting code. It wonā€™t be that far off from the above ModelRenderer example though.

Finally, the entire engine will be ported over from OpenGL to a graphics abstraction system Iā€™m working on that will allow the engine to run on pretty much any rendering API, with the primary targets being Vulkan and OpenGL variants. The abstraction is pretty much doneā€¦ in my head at least. I have some minor code and proof of concepts (read: a single triangle), but itā€™s been on ice for some time since that. The abstraction will include a cross-API shader language (or something along those lines). Bear in mind, it will NOT be easy to work with the abstraction directly (which you would have to do to some extend when writing your own Renderers); itā€™s essentially raw Vulkan with only very minor simplifications. That being said, the actual code youā€™d write in that case would be surprisingly similar to OpenGL. When running on OpenGL, command buffers are emulated (still can bring great performance benefits actually). Vulkan support will allow for significantly reduced driver overhead, threaded rendering (finally linear scaling with cores!) and advanced features like manual multi-GPU support.

We got an OpenAL-based sound system, controller support, multi-window support, etc as well. We got a Blender plugin for exporting models and animations from Blender directly to our own format. We got an entire toolset under construction for converting textures to streamable NNGINE textures.

I feel like I forgot half the shit I wanted to write, but TL;DR: When released, it will be a completely multithreaded, cross platform, cross API (with Vulkan support) highly customizable engine