I am trying to utilize the ability to use instances where possible. I
understand the basics, some object I simply copy as an instance and
thickmarking the “Keep Instances” in the Babylon exporter really generates a
smaller file which indicates the instances are recognized. But what about if I
have an object which is a completely the same, just mirrored. Like this wall
part. It is symmetrycal. I have tried several ways but looking at the other
methods are not working properly Symmetry modifier is not recognized as
instance Mirror modifier is not recognized as instance Copy as referenced and
a Mirror modifier over it is not recognized either. Mirror button from the
toolbar than select as instance is recognized as an instance but the “good
old” 3ds max kicks in and all normal are multiplied with -1. The object looks
great in 3ds max, but in the simulator all polygons are flipped. Is there any
way to achieve a mirrored instance? There is one other topic. The SDK mentions
a lot of times the nodes. Like here:
https://docs.flightsimulator.com/html/index.htm#t=Asset_Creation%2F3D_Models%2FLandscape%2FLandscape_Elements.htm&rhsearch;=instance
Most probably my 3ds knowledge is lacks some basics but what do you mean by
that? (e.g. "However, on the right, the black boxes describe how this single
object has been split into smaller objects that can now be clipped by the
camera easily. " or "you can clearly see that the amount of nodes introduced
by instances (for the pillars) would have a negative effect due to the sheer
number of nodes required " Does it mean one node is gltf object? Like you
build your airport in one single 3ds project but exports into several objects
(gltf)? One node is the model root? Is it a dummy or a simple layer? Thanks a
lot!
I think this definition of what Nodes are is quite accurate:
https://documentation.help/3DS-Max/idx_AT_nodes.htm Nodes are the items in
the 3ds max that have a one to one correspondence with objects in the scene.
Every procedural object, light, camera, helper object, etc. that appears in
the viewports has an associated node. The node stores many properties that
allow the item associated with the node to relate to the scene. These are
properties such as a transform controller, a material used for rendering, a
visibility controller, hidden/unhidden sate, frozen/thawed state, wireframe
color, and many more. So, basically, everything in see in the Hierachical view
it’s a Node. Dummies/Points are nodes too so, for example, if you have some
hierarchy like a Dummy containing another Dummy containing a Mesh, that’s 3
nodes because, to all of them you might have apply some kind of transformation
(scale, rotate, etc.) and they all affect each other in cascade. Layers are
NOT Nodes, they are just an abstraction to help you organize stuff in Max, but
they have no relationship to what gets exported. There are many issues at play
when balancing the usage of Instances, the object size (so they might culled
more/less effectively) the instance size, the saving of using Instances
compared to the overhead of using lots of Nodes, so you must really judge
depending on the situation. I guess that, if you have 1000 instances of a
4-sided object, it’s likely ( I can’t say for sure though, manybe some dev
from Asobo might chime in ) the overhead of dealing with 1000 Nodes, even if
they are Instances, might not be worth the saving of instancing and, possibly,
it might just be easier to Attach them all and just draw thos 4000 polygons
together. However, this would change if those polygons are very close together
and cover a rather small place, or they are spread around the whole airport.
In the latter, the camera culling might work better if they were nodes.
Instead, if you have many objects with a more significant polygon count, like
100 identical objects of 2000 polygons each, it would be a perfect case for
Instancing. But, that kind of object might even work better if it was exported
as a separate .gltf, using multiple LODs. This last question is for Asobo: is
Instancing only useful when many identical objects are exported in the same
.glft ? Or, is exporting the object separately with its own guid (likely in
multiple LODs) and including it multiple times in the .BGL an even better
optimization method ? Or, to express it in a slightly different manner: Is
DirectX Instancing used when the object is inserted multiple times in the
scenery from a single .gltf, or only when we have “Instances” of it in a
single large .glft that contains it and other objects too ? Or is it both ?
Lastly, I don’t know if there’s a better way to optimize symmetric objects.
Usually, exporting mirrored objects always gives bad results in Max, because
what the Simmetry modified does, is to add a transformation with a reversed
scale ( usually -1 in all axes ), which cause game engines to display objects
with flipped normals, so you’ll probably have to apply an Xform modifier
first, then collapse it to an editable Mesh/Poly. In that case, you’ll end up
with a separate reference object, from which you could create its own separate
Instances. Not sure if there’s a way to keep a common Instancing but with
different simmetry, probably not.
Hi Umberto! Thanks for the detailed answer! You helped a lot!