Question about integrating Unreal with other external tools and systems

Hi,

I’ve just built new Unreal 4.12 on Linux (OpenSUSE 13.2 x86_64).
I have several general questions. I would like to stress I’m interested in
C++ programming (preferably on Linux), not in Blueprints.

As far as I know, UE target application is generated by Editor by packaging.
The generated package contains everything, both binaries and content.
However, I would like to have more control over the whole process, both
development and runtime. Also, I would like to make it easier for a team
of several developers to work on Unreal project, for example, to keep the
developed project in repository.
Is it possible to make some clear separation between user-defined application
source code and assets ?

When I generate Basic C++ example without any user-defined source, the project
directory is about 6 GB. Packaged directory (Linux/Development) is 1.6 GB.

Is it possible to compose assets (terrain using heightmap and textures, objects using
imported FBX or OBJ models and textures, etc.) and export them from editor in
some well documented format ?
For example, to export edited terrain as some XML file with terrain properties
(dimensions, etc), heightmap(s) used, textures and terrain objects like buildings or roads
with their location, etc, together with model and texture files (FBX, OBJ, PNG, ect) ?

Then I would like to be able to edit this file - for example, modify
some properties or add new assets manually, change fbx/obj/png files, and then
load this in runtime into Unreal application. Is it possible ?

Then I would have more control over the sources and assets, it would
be easier to share the work between developers, to keep track of changes using
repository, and so on.

And the most important thing - such file could be easily processed by external tools and systems.
We do not create games, but complex simulation systems and the big project is
often conducted by several companies and final product is not a simple
application but complex system of several cooperated applications - not all
of them use Unreal but we need to easily exchange and process terrain and other asset data.

This is important - we would like to use Unreal only as 3D rendering engine,
at least now. We (and partners) have own engines for physics/dynamics/collisions/etc,
and all of this must cooperate with 3D visualization engine. The same data used by
visualization (terrain definition, vehicles definition) must be easily shared
between different integrated distributed systems, not necessarily using Unreal.
That’s why I’m so interested in using Unreal Editor (which is very useful tool) to create
assets in some externally processable (and editable) format.

The target system may use several completely different
worlds/terrains, and must be able to switch between them in runtime,
without restarting everything.

This is not only about terrain, the same applies, for example, to other
objects like characters or vehicles. I know it’s possible to import fbx/obj models to editor
and then for application to load actor components/meshes from content folder.
But is it possible for final application to load assets (components meshes,
textures, etc) during runtime directly from obj/fbx/files from specified location ?

And, to control this correctly, I need some high level single application object
with well defined lifecycle:

  • some method called at the application startup to do some initializations,
  • some periodically called method, like Tick() in actors,
  • some terminating method called when application is about to close.

I tried to define special class derived from Actor and put its invisible object
to the level in editor and use its lifecycle methods (*InitializeComponents,
BeginPlay, EndPlay, BeginDestroy, FinishDestroy,etc) to do the work (like spawn actors)
but perhaps there is some better way to do it.
As far as I know, I can put actors in level and engine will call their methods,
but is there any way to create some main applicatin object ?

Shortly speaking:

  • I would like to use Unreal mainly as 3D rendering engine, operating on some portable data,
  • I would use Unreal Editor to create some assets (terrain, objects, etc) and export
    them in some format that would be easily used by both Unreal application and other
    systems.

Is it possible ? Are there any examples to do this ? If not, are the any
plans to implement something like this in some predictable future ?
I know of at least several companies seriously considering using Unreal
for big things, but hesitating exactly for reasons described above.
Not for games, but for complex heterogeneous systems where Unreal would
be one of the building blocks, used mainly as 3D visualization engine.

Thanks a lot in advance for help.

Regards,
Robert