For reference if you are returning: 1. In Maya, export the selection and make sure Preserve Instances is enabled in FBX options 2. In Unreal, use File -> Import Into Level 3. In Import into level options, Hierarchy Type should be Create Level Actors. Static Meshes panel shows only the static meshes while the Scene panel shows each instance. 4. The actor that is added to the level -> delete its group, select all instances, then 5. Actor -> Merge Actors -> Batch (this creates an actor in content browser you can reuse, with the ISM setup how you had them in maya)
THIS IS WHAT I WANTED, I tried importing via usd, nvidia omniverse, autoshot etc.... But I finally found this video and now I feel like i can sleep well THANK YOU SO MUCH
This is by far one of the best videos ever that pushes forward one more step into level optimization. Fantastic technique, easy, smart and fast. Thanks a lot!
Thanks a lot, I'm trying to work with the Hillside sample project materials and this tutorial helped me on some details that I didn't see anywhere else
I like that you use real examples of complex models, like the ones I have in my production. It's easy to find videos giving a basic overview of UE5 features, but ones that go beyond basic are hard to find...
I've been looking for an easy instance method like Batch for a while now, cant believe its taken me this many tutorial videos to discover that feature!
Thank you so so much! This is excellent information, and absolutely concludes my questions I asked you last time. I had no clue that it was this easy creating the instanced meshes, I thought it required fiddling with blueprints and locations, but you can just turn the meshes into instances AFTER you placed them like you want in a scene, which is excellent. Thanks!
Awesome series. I wanted to know if you can add physics to instanced static meshes for example a brick and then make a breakable wall with the instanced bricks?
hey awesome stuff right here! Is there a workflow similar to what you showed in part 2, so that if I need to make changes in Blender and then want all instances to be affected by the changes in the UE editor? thanks!
Is this possible with Hierarchical Instanced Static Meshes from Blender to Unreal? I need the capability to LOD each instanced object. I'm making a detailed room in VR that needs to utilize High Res Materials up close and Low Res materials on the other side of the room. 45x15 ft room with modular pieces for walls. (I don't have experience making ISM and HISM. I will be following your tutorials.)
Thanks. Great info. Is there much impact comparing nanite of instancing vs nanite of copies? Also why not use level instances instead instancing like shown in the video? Or packed level actors vs level instances vs regular instances
Could you explain placing HISM during runtime, and how pooling or a queue is faster? I have been experimenting on my own, and it's much better with a queue but I'd like your opinion.
Ah you just clarified my confusion. I thought instanced static meshes is something different than merge meshes batch option, but that's actually the same, correct? Both are creating isntanced static meshes. Thanks for pointing that out! Thanks a lot for sharing :)
great tutorial, thank you so much. i have a question about thsi instancing. when i creat LODs in UE5 and do give it a try, all instances of a static mesh changin its LODs together not individually.
Is there a method to switch instanced meshes based on a matched string. I'd like to be able to switch between meshes based on a custom row for names (with regex to remove the .001 or .005) I tried using a map variable with a find node but I can't seem to get it to work.
I cannot seem to find a way to programmatically add an ISM to the scene root (at least in blueprints). I try to create all ISMs from a data table for a level editor of my game, and later spawn instances of corresponding ISMs as user edits the level. There is an "Add Scene Component" node, but it is marked as "do not call manually - blueprint internal use only", and also does not seem to do the right thing. Is this possible at all, perhaps, only using C++?
Hey there, thanks for the video. I have a question.. Maybe I missed it. But i'm trying to make streetlights, consisting of multiple ISM components (one per shape, which i then combine), but i'm not able to actually see a second instanced static mesh component. The first one renders and i can manipulate it anyway i want to so that i can build up a wall, floor, whatever. The problem occurs when i add a second ISM Component into my BP. That second and third component remains completely invisible
when you use batch, where does it store the instanced static mesh? ive done this to a building and now i cant find that instanced batched mesh anywhere in the content drawer. i need to sort out its lods but cant find it
also have a question after nanite being introduced in UE% the requirement in UE5 changes a bit over UE4 like for example do i really need to make ISM of HISM with nanite mesh? hpw does it affect drawcalls in ue5 ?
hi, I tried that way for make instanced static meshes but if I selected a lot of different meshes it doesn't work with bacth of actor merge. but if I selected same meshes, it is work
If all the meshes are unique then it can't instance them because they are not duplicates of the same information. If you have duplicates of a mesh (same geometry/file placed multiple times, then it will instance those).
@@tryky3d i personally have not. But to be honest, I am currently working in a studio which our tech team has implemented this feature for us. So it definitely is possible
Thanks, I'll ask further using the example. I wanted to make sure - and you probably know more than me. In the Sample from Epic "CitySample" most of the assets show as Instance. Extracting them to single Static Mesh (with preserved coordinates from Instance) using the option in UE is not possible?
Nice tip, thanks! 2 points though: 1) when exporting fbx from blender, everything needs to be scaled by 100. this is normally fine when importing a single fbx object into unreal. But when importing a fbx scene into unreal, it looks like the scene root is imported with 100 scaleup (expected) and all the hierarchical meshes under the root also scaled up 100 times, which results in them being scaled up 100x100 =10000 ! 2) any tips on how to export handmade collision volumes (prefixed UCX) from blender in the context of instanced static meshes?
Hey, this is amazing. I just realized one thing, when you delete one of the instances the other objects get locked and I am not able to select them again. Do you know why this happens?
I noticed the blueprints created as static meshes do not allow you to easily select them. If you click on them in the scene view, it selects the sub-component not the entire blueprint like normal static blueprints.
I have found a peculiar bug... when using this method Unreal always leaves one instance out. IDK why. It is the one that is not set to invisible after batching. You can see it in this video as well at 7:55. "FRAME_LINE_P1_629_" is left visible and I bet it is missing from the batched Blueprint 🤯 So far I have not been able to tell why one mesh is always left out. When trying the same bunch of objects again, it is always the same one getting left out. Yet nothing seems wrong with it... Can somebody confirm this happening?
In blender, import to unreal does not work correctly. If you import through the import menu, a group is not created in unreal, and all meshes are small. Despite the fact that units in blender are selected by default, but if you change them, nothing changes, the objects are very small. If you drag a group of meshes, the size is correct.
Great tips! Does nanite affect this workflow at all, or is this strictly for non-nanite geometry? Nanite is virtualized geometry, a kind of instancing process as well in a way, but I wonder if this methodology, if it works with nanite, can help take the load off of actor count, which becomes more and more of an issue the more nanite geometry you use.
If the same nanite mesh is used many times in the scene weather its nanite or not you will get better performance as having that mesh being a instanced static mesh so its instancing those meshes, rather than just having them placed in the scene (it will reduce draw calls).
@@carlosrivadulla8903 you could make the whole building a nanite mesh but what I have here is a building made from modular assets (pieces that fit together like lego) this way you can actually build many different variations of those buildings using the same pieces. What is done in this video is just taking those duplicates of building pieces and making them instanced static meshes instead of just static meshes. Which reduces draw calls and yields better performance in cases where a object is used hundreds or thousands of times. The guideline would be: - Is the mesh placed many times in the scene (1000+)? If yes then ISM/HISM is going to be beneficial. You can use Instanced Static Meshes weather the mesh is nanite or not. So its applicable for both.
@@renderbucket awesome, so if you built your building with instances of dense displaced meshes, then you could import as nanite and follow the same steps to instantiate them?
Haven't utilized Datasmith that much since its limited to 3dsMax, Revit.etc. But not sure If Datasmith instances or retains instancing. Datasmith is more targeted towards architectural and visualization workflows. This video is more about utilizing instancing in Unreal for better performance with large and more complex environments. And making sure if you have assets that are modular or that utilize instancing that they are being treated that way within Unreal and not loading in as gigantic static meshes or hundreds of individual objects.
Prefab is just a re-useable group of objects. It can contain static meshes or instanced static meshes and other types of components. But each instance of a prefab will have its own draw costs (increasing draw calls). The benefit of instanced static meshes is that when drawing ISMs it draws all the instanced static meshes (duplicates) of a asset in one draw call. Whereas static meshes would require a draw call for each duplicate.
I don't believe this is possible using Blender. I have tried everything I can think of to export instance data to FBX, but every time it's imported, Unreal sees the identical meshes as separate meshes. I have DEFINITELY used instances with ALT+D in Blender, before anyone brings that up! If it is possible, could you explain how you achieved it? You just show it working in Maya and then say "but it's also possible in other software" - I'm not sure that's true unless I've missed something in Blender after many hours of effort.
Just gave this a try with Blender to confirm and it seems to work. Things will have to be duplicated with ALT+D. So you got that all right. Now here's one thing to check. When you export from Blender as a .FBX, when you import it into Unreal go to File->Import To Level. That is super important, if you just drag in the FBX to your Content Browser it wont work. Try it out, if you run into issues let me know and I can make a video for it.
@@teokim6298 I don't think so, we were able to do it today by not applying modifiers or freezing transforms, and unreal processed it correctly when we imported it. We only saw 1 static mesh but it was alt+D duplicated around and came in properly to unreal and got merge -> batch as an instanced static mesh blueprint.
For reference if you are returning:
1. In Maya, export the selection and make sure Preserve Instances is enabled in FBX options
2. In Unreal, use File -> Import Into Level
3. In Import into level options, Hierarchy Type should be Create Level Actors. Static Meshes panel shows only the static meshes while the Scene panel shows each instance.
4. The actor that is added to the level -> delete its group, select all instances, then
5. Actor -> Merge Actors -> Batch (this creates an actor in content browser you can reuse, with the ISM setup how you had them in maya)
THIS IS WHAT I WANTED, I tried importing via usd, nvidia omniverse, autoshot etc.... But I finally found this video and now I feel like i can sleep well THANK YOU SO MUCH
This is by far one of the best videos ever that pushes forward one more step into level optimization. Fantastic technique, easy, smart and fast. Thanks a lot!
Thanks a lot, I'm trying to work with the Hillside sample project materials and this tutorial helped me on some details that I didn't see anywhere else
I like that you use real examples of complex models, like the ones I have in my production. It's easy to find videos giving a basic overview of UE5 features, but ones that go beyond basic are hard to find...
I've been looking for an easy instance method like Batch for a while now, cant believe its taken me this many tutorial videos to discover that feature!
awesoem stuff, i dont think there in any better tut on this in youtube. great stuff and subscribed
Thank you so so much! This is excellent information, and absolutely concludes my questions I asked you last time. I had no clue that it was this easy creating the instanced meshes, I thought it required fiddling with blueprints and locations, but you can just turn the meshes into instances AFTER you placed them like you want in a scene, which is excellent. Thanks!
Awesome series. I wanted to know if you can add physics to instanced static meshes for example a brick and then make a breakable wall with the instanced bricks?
hey awesome stuff right here!
Is there a workflow similar to what you showed in part 2, so that if I need to make changes in Blender and then want all instances to be affected by the changes in the UE editor?
thanks!
Thank you for all your series of tutorials. they re really helpful to me
Amazing, exactly what i needed to get started with modular parts!
Thanks, man! Very straight foward. I´ve been looking for this for a while. saved my day.
This whole series was great and exactly the information I was looking for. Much obliged.
Holy crap this was an awesome series. Thank you so much for sharing your workflow and knowledge! ♥
Very useful video mate. One quick question. Is there a way to merge the actors into HISM instead of ISM???
Good tips and very helpful
Is this possible with Hierarchical Instanced Static Meshes from Blender to Unreal? I need the capability to LOD each instanced object. I'm making a detailed room in VR that needs to utilize High Res Materials up close and Low Res materials on the other side of the room. 45x15 ft room with modular pieces for walls. (I don't have experience making ISM and HISM. I will be following your tutorials.)
Thanks. Great info.
Is there much impact comparing nanite of instancing vs nanite of copies?
Also why not use level instances instead instancing like shown in the video?
Or packed level actors vs level instances vs regular instances
Good question would love to see some tests and comparisons on that.
Could you explain placing HISM during runtime, and how pooling or a queue is faster? I have been experimenting on my own, and it's much better with a queue but I'd like your opinion.
Ah you just clarified my confusion. I thought instanced static meshes is something different than merge meshes batch option, but that's actually the same, correct? Both are creating isntanced static meshes. Thanks for pointing that out! Thanks a lot for sharing :)
Very much helpful ! Thank you so much !
great tutorial, thank you so much.
i have a question about thsi instancing. when i creat LODs in UE5 and do give it a try, all instances of a static mesh changin its LODs together not individually.
Cool tutorial, but what about Geo Nodes in Blender, would it work somehow with Blender procedural instances?
As in Blender can you convert instanced sm to full sm? (like arrays in Blender)
Is there a method to switch instanced meshes based on a matched string. I'd like to be able to switch between meshes based on a custom row for names (with regex to remove the .001 or .005)
I tried using a map variable with a find node but I can't seem to get it to work.
Hi Thanks so much for the tutorial. BTW, is it possible to do instance in vertices of a alembic cached geo ?
I cannot seem to find a way to programmatically add an ISM to the scene root (at least in blueprints). I try to create all ISMs from a data table for a level editor of my game, and later spawn instances of corresponding ISMs as user edits the level. There is an "Add Scene Component" node, but it is marked as "do not call manually - blueprint internal use only", and also does not seem to do the right thing.
Is this possible at all, perhaps, only using C++?
How do I do this if the meshes are imported as separate and instanced to themselves and have different orientations?
Hey, when i batch item, the actor create "InstancedStaticMesh", but can i create "HierarchicalInstancedStaticMesh" ?
Hey there, thanks for the video. I have a question.. Maybe I missed it. But i'm trying to make streetlights, consisting of multiple ISM components (one per shape, which i then combine), but i'm not able to actually see a second instanced static mesh component. The first one renders and i can manipulate it anyway i want to so that i can build up a wall, floor, whatever. The problem occurs when i add a second ISM Component into my BP. That second and third component remains completely invisible
when you use batch, where does it store the instanced static mesh? ive done this to a building and now i cant find that instanced batched mesh anywhere in the content drawer. i need to sort out its lods but cant find it
FANTASTIC!!! Thank you!!👍👍👍
Thank you, appreciated!🖖
also have a question after nanite being introduced in UE% the requirement in UE5 changes a bit over UE4 like for example do i really need to make ISM of HISM with nanite mesh? hpw does it affect drawcalls in ue5 ?
Absolutly perfect thank you
how to figure out to which batch actor selected instance is belong?
hi, I tried that way for make instanced static meshes but if I selected a lot of different meshes it doesn't work with bacth of actor merge. but if I selected same meshes, it is work
If all the meshes are unique then it can't instance them because they are not duplicates of the same information. If you have duplicates of a mesh (same geometry/file placed multiple times, then it will instance those).
i find that my instance static meshes are disappeared in the packaged game, do you have the same issue? or just my wrong setting?
ultracool series! super useful. thx
Thank you!!! subscribed
Thank you so much!!
Great series! Thank you very much! subscribed.
Great tips and tricks! God bless you! XD
@renderBucket
Question.. is there a reverse for it?
Essentially changing the ISMs back to all the SMs it created?
Hi, did you find maybe a solution (how to do the reverse action)? thanks :)
@@tryky3d i personally have not.
But to be honest, I am currently working in a studio which our tech team has implemented this feature for us. So it definitely is possible
Thanks, I'll ask further using the example. I wanted to make sure - and you probably know more than me. In the Sample from Epic "CitySample" most of the assets show as Instance. Extracting them to single Static Mesh (with preserved coordinates from Instance) using the option in UE is not possible?
Nice tip, thanks!
2 points though:
1) when exporting fbx from blender, everything needs to be scaled by 100. this is normally fine when importing a single fbx object into unreal. But when importing a fbx scene into unreal, it looks like the scene root is imported with 100 scaleup (expected) and all the hierarchical meshes under the root also scaled up 100 times, which results in them being scaled up 100x100 =10000 !
2) any tips on how to export handmade collision volumes (prefixed UCX) from blender in the context of instanced static meshes?
Hey, this is amazing. I just realized one thing, when you delete one of the instances the other objects get locked and I am not able to select them again. Do you know why this happens?
amazing!
Hey @renderBucket how do i bake shadows for instanced static meshes
thank you
Same as any other mesh. Just make sure the ism has its root and all submeshes set to Static.
I noticed the blueprints created as static meshes do not allow you to easily select them. If you click on them in the scene view, it selects the sub-component not the entire blueprint like normal static blueprints.
I have found a peculiar bug... when using this method Unreal always leaves one instance out. IDK why. It is the one that is not set to invisible after batching. You can see it in this video as well at 7:55. "FRAME_LINE_P1_629_" is left visible and I bet it is missing from the batched Blueprint 🤯
So far I have not been able to tell why one mesh is always left out. When trying the same bunch of objects again, it is always the same one getting left out. Yet nothing seems wrong with it...
Can somebody confirm this happening?
In blender, import to unreal does not work correctly. If you import through the import menu, a group is not created in unreal, and all meshes are small. Despite the fact that units in blender are selected by default, but if you change them, nothing changes, the objects are very small. If you drag a group of meshes, the size is correct.
Realy Nice
Great tips! Does nanite affect this workflow at all, or is this strictly for non-nanite geometry? Nanite is virtualized geometry, a kind of instancing process as well in a way, but I wonder if this methodology, if it works with nanite, can help take the load off of actor count, which becomes more and more of an issue the more nanite geometry you use.
I made the same question in the last video and I have the same doubt again. After u do this u convert the whole building into nanite?
If the same nanite mesh is used many times in the scene weather its nanite or not you will get better performance as having that mesh being a instanced static mesh so its instancing those meshes, rather than just having them placed in the scene (it will reduce draw calls).
@@carlosrivadulla8903 you could make the whole building a nanite mesh but what I have here is a building made from modular assets (pieces that fit together like lego) this way you can actually build many different variations of those buildings using the same pieces. What is done in this video is just taking those duplicates of building pieces and making them instanced static meshes instead of just static meshes. Which reduces draw calls and yields better performance in cases where a object is used hundreds or thousands of times.
The guideline would be:
- Is the mesh placed many times in the scene (1000+)?
If yes then ISM/HISM is going to be beneficial.
You can use Instanced Static Meshes weather the mesh is nanite or not. So its applicable for both.
@@renderbucket awesome, so if you built your building with instances of dense displaced meshes, then you could import as nanite and follow the same steps to instantiate them?
@@ConradSly exactly.
💪 wow really helpful !!!!!!
What is the advantage of this method compared to Datasmith import?
Haven't utilized Datasmith that much since its limited to 3dsMax, Revit.etc.
But not sure If Datasmith instances or retains instancing. Datasmith is more targeted towards architectural and visualization workflows.
This video is more about utilizing instancing in Unreal for better performance with large and more complex environments.
And making sure if you have assets that are modular or that utilize instancing that they are being treated that way within Unreal and not loading in as gigantic static meshes or hundreds of individual objects.
is there any way to unmerge instanced static meshes?
Hi, did you find maybe a solution (how to do the reverse action)? thanks :)
OMG - tremendo!
Excellent!
Great!!!
THANK YOU!!!
WOOOOOOOOOOOOOOOOOOOOOOOOOOOOOW
you are a genius !!
subscribed :)
whats the difference between this and prefabs?
Prefab is just a re-useable group of objects. It can contain static meshes or instanced static meshes and other types of components.
But each instance of a prefab will have its own draw costs (increasing draw calls).
The benefit of instanced static meshes is that when drawing ISMs it draws all the instanced static meshes (duplicates) of a asset in one draw call. Whereas static meshes would require a draw call for each duplicate.
@@renderbucket I seee. No wonder my environments kill my pc.
So prefabs is just basically the same as grouping objects. Just a different UI.
❤👍
I don't believe this is possible using Blender. I have tried everything I can think of to export instance data to FBX, but every time it's imported, Unreal sees the identical meshes as separate meshes. I have DEFINITELY used instances with ALT+D in Blender, before anyone brings that up!
If it is possible, could you explain how you achieved it? You just show it working in Maya and then say "but it's also possible in other software" - I'm not sure that's true unless I've missed something in Blender after many hours of effort.
Just gave this a try with Blender to confirm and it seems to work. Things will have to be duplicated with ALT+D. So you got that all right.
Now here's one thing to check. When you export from Blender as a .FBX, when you import it into Unreal go to File->Import To Level. That is super important, if you just drag in the FBX to your Content Browser it wont work.
Try it out, if you run into issues let me know and I can make a video for it.
@@renderbucket I've tried as you mentioned. But it didn't work. Please, make a video for Blender users.
@@teokim6298 Disable apply modifiers in the export settings, that applies the instancing to the objects making them static.
@@alapidisThank you for your kind feedback. But it doesn't work for me. Am I missing something?
@@teokim6298 I don't think so, we were able to do it today by not applying modifiers or freezing transforms, and unreal processed it correctly when we imported it. We only saw 1 static mesh but it was alt+D duplicated around and came in properly to unreal and got merge -> batch as an instanced static mesh blueprint.
i love you man, it is helpful for me!!!
Thank you so so much!!!