3D engine... Much interest?

Thanks Kevin. It’s a fun project to work on, I just hope I can squeeze enough out of it to be useful to people…

Richard, I love this too.  My Samsung S8 is acting up but I’ll give the APK a try when I get the issue resolved.

Performance still isn’t what I want it to be on the S8, but I’ve a plan for how to make the rendering considerably more efficient. I might not be able to crack on with that until the weekend though.

There’s a bug in the above APK too - The culling happens slightly too early on some screens so you can see the faces disappear before they fully leave the screen. That’s fixed now, just not in the demo.

I got it running, that’s really cool Richard!  I’m excited to see what comes next.

This is really cool. I want to add some rotatable turrets to my game.

It is easy to do in Unity, but Corona is difficult.

I sincerely hope that it can be purchased in the near future, even if the price is higher than your other plugins.

Thanks. There definitely will be some further development to this, I’m just struggling to squash internal projects in amongst client deadlines at the moment… We’re a bit burried by them!

In a nutshell, client work pays the bills so client deadlines take priority. Normally it’s client work through the week and internal projects over the weekend, but I just can’t sustain that during busier periods.

We’ve been considering setting up a Patreon profile to help fund some of the non-client work, which would make prioritising them more feasible. The more backers we had, the fewer client projects we’d need to take on and the more important it would be to keep those backers updated and happy. There’s still a lot that I’d like to add to Qiso, the 3D engine obviously has some way to go yet before it’s complete enough to release, and our Argentauria game is frankly a massive project. I’d absolutely love to be able to give more time and resources to all of these.

That in mind and very cheekily of me I know, if anybody here would consider backing this on Patreon, please do drop me a private message just so that I’ve got a bit of a head count. I absolutely wouldn’t hold anybody to such a promise, I just don’t want to set anything up unless there are enough people likely to pledge that it actually makes a difference.

Sounds pretty good, although I’m not sure what others think, but as far as I am concerned, I also spend some money on Patreon so that the other party will give me some practical small scripts for Unity (after all, unity is not my main tool )

If I can use donate to get some simple control script(move and rotation) of some 3D objects (The objects can with textures and materials), then I will be very interested.

The engine still only has cubes built in, but eventually you’d be able to import .obj files which I believe most 3D software is able to export to. The renderer is actually already capable of pumping out any shape you give it, I just never got around to adding vertex maps for anything other than cubes, or building an importer.

Two important things to note though:

Firstly, performance. The cubes I’ve been playing with to date consist 32 triangles per face (more vertices = more accurate texture mapping), so in the lastest demo apk in this thread, it’s rendering about 480 triangles at once and although there’s still optimisations that can be made to how all of this works, I do think we’re pushing Corona to its limits a little with this, given it’s still as far as I’m aware creating single threaded binaries. I’ve tested on various devices and wouldn’t currently like to throw any more vertices in there. Engines like Unity are able to make use of hardware capabilities that this engine just doesn’t have access to, so keeping the screen below about 500 poly renders is definitely key. Point being, if you created a complex model and exported to .obj, the engine would be able to load that in to internal vertex maps no problem, but even without anything else on screen, this complex object might just be too high of a poly count to rotate/move/scale around smoothly.

Secondly, I’m still in two minds about the feasibility of implementing intersecting faces. I.e. if you positioned two objects in a way where you’d expect them to fuse together, currently what you’d actually see is the face of one object fully rendered over the top of the faces of the other object. The engine just doesn’t yet handle individual pixel depths so doesn’t know that “this part of face A wants to be behind face B, but this other part of face A wants to be in front”. It’s a performance thing again - we’re already pushing Corona quite a bit to do this.

If your game isn’t likely to ever have two models trying to use up the same x,y,z position, and you’re not planning to show too many faces at once (hidden faces are already ignored and don’t contribute to polygon counts during the render), then this should be a useful engine for you =).

That’s it.

However, the models with less than 500 triangles are basically too simple shapes.

I bought many models, one of which has more than 18,000 triangles (although I let it actions and effects in the unity to catch frame use), but even the lowpoly turret model has 800 Multiple triangles …

It seems that there is still a long way to go, especially if the files exported from blender are not processed by lighting, it will not look very good.

Do you think Corona has a way to achieve the lighting of 3D objects?

Ambient lighting is already in place. You set a direction and an amount and this controls how individual faces are lit. You can see this in action here: https://youtu.be/O4-dgfAVXpU

Positioned lighting is planned but not yet in place.

18,000 poly models are likely to be too detailed I’m afraid, but 800 is probably fine. Bear in mind that the engine never has to render all of those triangles - with a cube for example, it’s impossible to see more than 3 faces at any one time, so an 800 poly cube would actually be a 400 poly render at most.

I’ve been busy making effects in Unity recently, constantly switching between unity and corona, and finally have some time to follow the forum.

This looks awesome, and it seems that the color of the ambient light can also be modified?

Also a little curious, can Corona only import obj and not fbx?

After all, obj cannot have animation. :o

But if it is a pure model, I really hope to import about 2000 polygon models.

No matter what, this plugin will definitely be bought if it is launched. :smiley:

It’s not a Corona limitation as such. Just that .obj files are plain text and reasonably documented so an importer can be built around them fairly easily, and most modelling software can export to them. I’d be happy to look at importing other formats too if the initial release gains traction.

Importing 2000 models would be an interesting test. Currently the way world’s are set up isn’t particularly optimised, but the goal is to have them work much like in Qiso, where everything outside of screen space is ignored so as long as you’re not trying to actually display them all at once, it should just be a case of the device needing enough memory to store that much data at once.

The trick, in case interested, is arrays. Rather than iterating the entire world of data to look for elements that fit within the screen boundaries, my engines structure everything into arrays and then just reverse each screen corner to really quickly figure out which part of the arrays need iterating for on-screen content. That way it doesn’t matter how large the arrays get, their size doesn’t impact on the rendering performance. How much is actually on screen at the same time does, but not how big the world itself is.

I would love to see a 3D Corona engine! I’ve tried with some engines, and by far Corona is my favorite because it is lite, very fast, and lua is easy to use. And it would be awesome to see those features in a 3D engine.

Hi, I am quite new to Solar2d and stumbled about this thread …

For some of my plans the option to use simple 3D objects would be perfect. Can this 3D engine already be tried out? Or are there other similar solutions?

Thanx,
Christian

I’m afraid it’s been a while since I had chance to work on the 3D engine. The fundamentals are all in - objects and the camera can be moved around and rotated, face culling is in place, basic lighting is in place, etc. But currently only cubes exist - there’s no functionality to create other shapes or to import meshes, although the renderer would already be able to display them if they existed in the world.

This project is definitely still happening. As soon as I get back on to it I’ll focus on importing .obj files so that an initial beta can be released. It’ll definitely be far from optimised and until it has the ability to handle intersecting faces, it’s not going to be useful for doing anything more than displaying a few 3D objects, but other than that it should be usable.

Also now toying with the idea of building a voxel engine too for the record :smirk:. One thing at a time huh.

1 Like

Thank you for this information, so I keep on hoping …

For games with 3D elements I can recommend Defold or Godot. If Unity and Unreal are an overkill.

Keep up the good work… I’m interested in 3D - I’m currently working on a retro first-person grid based RPG (dungeon master, eye of the beholder style) using a pseudo 3d projection.
It’s still over 6 months away from finishing ( been at it for about a year now) so I’m almost ready show you guys.

It’s not true 3D - and more of an illusion of 3D but I’m happy with the results.
Id definitely consider a sequel in a proper 3d engine.

The term “pseudo 3D” always puzzles me slightly. Screens are still a flat plane - all 3D rendering is pseudo projection really - just some approaches equate to more accurate results than others =).

Pseudo 3D or 2.5D really just refers to cases where 2D games are faked to look like 3D games.

For instance, all images in Clash of Clans seem 3D, they are from 3D models after all, but in the end they are all just 2D renders stuffed inside a sprite sheet. Regardless of how good a fake it is, a 2D game will only ever have x and y-axes.

Well, you could technically fake a z-axis in a 2D game…” and that’s the entire point. Pseudo 3D or 2.5D games don’t have a true z-axis, they can have a faked one at best.