Using Unity as a 3D Graphics Engine?

Hi all,

New Unity user and first time poster here, so be gentle with me :slight_smile:

My question is basically in this posts Subject line: “Can Unity be used as a 3D Graphics Engine?”

To extend that further, could I use it to:-

  • Present windowed 3D graphical views embedded within a Windows application
  • Create whatever graphical objects I need to build my ‘world’ on the fly
  • Have the position, orientation of all objects controlled by my app in real time (driven by an external dynamics & physics engine - AgX)
  • Present multiple 3D views, embedded or full screen
  • Use shader (or Unity) controlled particulate effects where I can query Unity for the pos & ori of every particulate so that I can serialize this info for accurate replay
  • Ditto for localised fogging effects

Essentially I only need to use a fraction of what Unity as a whole provides, but from a quick skim of the documentation it doesn’t appear to provide a low enough API to let me do that.

Currently an old version of Ogre is being used with a wrapper around it to let us use it in C# and provide abstractions to manage meshes, textures, shaders, etc. The application is a simulator / trainer / real time visualisation aid / engineer tool.

I’m exploring different alternatives, seeing if it’s possible to use any of these game engines and how much work it would be compared to rewriting our wrapper around the latest Ogre. They would seem to provide everything we need, at the abstraction level that’s great for us, but I’m not sure if they will let us use them as we need to.

Many thanks for any help!

Richard

Could it be? Yes, but it’s a pretty heavy option to be used like that.

If you’re looking for a replacement for Ogre maybe bgfx would be a better fit?

I’d say it’s possible but risky. I think unity got you covered on the points mentioned, but you never know when you might face a problem that literally has no workaround due to a lack of a low enough API.

For example you may at some point need to update a texture every frame, but applying any changes to a texture is too slow for that. Or update a mesh collider’s mesh often, which is also pretty slow. (I guess you could maybe split said objects to update them faster, but then may be you don’t feel like using twice as much memory, etc, you get the idea).

Unity API is not thread safe so there is not much you can do about these cases. And These are only things that I faced, so there is probably more.