Hey man, that's really great, thanks for the tutorial One thing i'm wondering is, if you need to make it appear with some effects after you made it disappear, what would be your take on that? Desactivating the physics just makes him spawn which isn't so great visually
Great channel! Is there any way to sample the texture from the mesh in local UVW space? My issue is the skeletal mesh I am trying to apply this to has 10 materials...😅
Great tutorial! I have a question, is it possible to combine this system with a one that you showed in video "How to paint damage textures and other effects on skeletal meshes" to pixelize damaged areas of skeletal mesh? If yes, could you pls give a direction how to implement this? Thanks!
Yeah absolutely! You can check my video on the Spot VFX, where I do something very similar: first, you can use the "paint textures on meshes" method to generate an opacity mask. Next in Niagara, create the voxel particle effect and also sample the opacity mask texture. Finally, destroy any particles that sampled the unmasked parts of the texture, so you keep only the voxels from the damaged parts of your mesh.
Is it only a effect on UE or you can export this voxel version model to other applications, such as zbrush? If so, I think it will be a good way to create voxel style figure.
Hi Enrique, Love your tutorials, thank you for all of the times I have watched and learned from you. I am following this tutorial, doing fine until you said 'add a sample texture'. Our game's characters and clothing etc is made up of mostly RGB masks and material layers...So I am wondering is it possible to somehow sample whatever colors the material applied to the mesh has because if you don't have a 'diffuse/albedo' texture?
Hmmm if that is your setup, I don't think you can sample the final mesh color directly. I can think of two options: If the material setup in your project is standardized and all meshes use a similar one, you could use custom modules in Niagara to get the color from the UV coordinates that the particle occupies, going through your RGB masks and material layers. This is technically possible but it could get out of hand if the materials have a lot of layers. The approach I think would work best would be to bake the final mesh color as a low res texture, either as an offline process during content creation, or dynamically in game, if you are assembling these materials in runtime.
Whats the performance impact like for this effect? I am planning out a Voxel world game and needed something like this for the characters But was curious if this will make my fps go down the drain or not. In case I have to redesign the game for a smaller scope.
This is incredibly interesting, thanks for sharing! Side note: There seems to be some lag or latency in whatever software you're using to display the cursor position and inputs. It's a little disorienting/distracting 😅
Thank you! Yeah, it all happens because of overlapping voxels. You can use 3d grids to find close neighbors and run a pass on them to remove the ones occupying the same space. Didn't go over this because the video was already long, but I might do one on neighbor grids in the future.
When I attempt to add your expression at 17 minutes it shows a compiler error. I checked several times for spelling errors hower I can not find one: Here is the exact paste of what I typed: float2(round(Particles.SkeletalMeshLocation.SampledUV.x/User.TextureGridSize)*User.TextureGridSize,round(Particles.SkeletalMeshLocation.SampledUV.y/User.TextureGridSize)*User.TextureGridSize)
@@EnriqueVenturaGames Hi, I have the same issue, and the error message shows[Cannot use variable in custom expression, it hasn't been encountered yet: User.TextureGridSize - Node: Custom Hlsl - Empty, Particle Spawn Script Interpolated, ], do you have any idea?
Even with " User.GridSize/100 " my voxels are not lining up perfectly on my own model. Is this something we have to change with different models or change the GridSize under the User Parameters Float value?
Not necessarily, I would say that it depends on the needs of your project. If all the objects in your project have a similar visual style, you probably could have a constant grid size shared across all of them. Since the voxels' positions are rounded to be in a grid, they will never match organic meshes with 100% accuracy, but you can get close if your models are more blocky.
Ive been unable to get through the first 10 mins :( I put in this expression for the oarticle position but it just doesnt compile (round(Particles.Position/User.GridSize))*User.GridSize
Fantastic!! Especially love the use of expressions, something I've wanted to understand better in my Niagara setups.
You never fail to amaze me every time you post a new tutorial
Keep up the great work man!
Thanks, will do!
Next level stuff Enrique!! Yet another awesome thing to add to the list of stuff to try out :D
Thank you!
Hey man, that's really great, thanks for the tutorial
One thing i'm wondering is, if you need to make it appear with some effects after you made it disappear, what would be your take on that? Desactivating the physics just makes him spawn which isn't so great visually
The expressions are magic!
Great channel! Is there any way to sample the texture from the mesh in local UVW space? My issue is the skeletal mesh I am trying to apply this to has 10 materials...😅
Great tutorial! I have a question, is it possible to combine this system with a one that you showed in video "How to paint damage textures and other effects on skeletal meshes" to pixelize damaged areas of skeletal mesh? If yes, could you pls give a direction how to implement this? Thanks!
Yeah absolutely! You can check my video on the Spot VFX, where I do something very similar: first, you can use the "paint textures on meshes" method to generate an opacity mask. Next in Niagara, create the voxel particle effect and also sample the opacity mask texture. Finally, destroy any particles that sampled the unmasked parts of the texture, so you keep only the voxels from the damaged parts of your mesh.
@@EnriqueVenturaGames Thanks bro! I definetly will try it
Very great tutorial!! Good job making it!!
This is amazing! Thanks for sharing!!!
You are so welcome! Glad you enjoyed it! :)
Is it only a effect on UE or you can export this voxel version model to other applications, such as zbrush? If so, I think it will be a good way to create voxel style figure.
Hi Enrique, Love your tutorials, thank you for all of the times I have watched and learned from you. I am following this tutorial, doing fine until you said 'add a sample texture'. Our game's characters and clothing etc is made up of mostly RGB masks and material layers...So I am wondering is it possible to somehow sample whatever colors the material applied to the mesh has because if you don't have a 'diffuse/albedo' texture?
Hmmm if that is your setup, I don't think you can sample the final mesh color directly. I can think of two options:
If the material setup in your project is standardized and all meshes use a similar one, you could use custom modules in Niagara to get the color from the UV coordinates that the particle occupies, going through your RGB masks and material layers. This is technically possible but it could get out of hand if the materials have a lot of layers.
The approach I think would work best would be to bake the final mesh color as a low res texture, either as an offline process during content creation, or dynamically in game, if you are assembling these materials in runtime.
Whats the performance impact like for this effect?
I am planning out a Voxel world game and needed something like this for the characters But was curious if this will make my fps go down the drain or not. In case I have to redesign the game for a smaller scope.
This is pretty damn cool
This is incredibly interesting, thanks for sharing!
Side note: There seems to be some lag or latency in whatever software you're using to display the cursor position and inputs. It's a little disorienting/distracting 😅
Oh actually, the cursor appears to be ahead of time. Weird lol
Thanks! I know, I was using a really bad software but recent videos have been made using OBS, which works a lot better :)
I don't like the shimmering and I'm worried about performance, but overall this is really cool
Thank you! Yeah, it all happens because of overlapping voxels. You can use 3d grids to find close neighbors and run a pass on them to remove the ones occupying the same space.
Didn't go over this because the video was already long, but I might do one on neighbor grids in the future.
I tried to use NeighborGrid3D to solve that issue but I haven't had any luck. Did you ever get that to work? @@EnriqueVenturaGames
Is it possible to make static mesh to voxel?
Thank you for sharing this :)
No problem 😊
How to achieve this effect in Godot?
Bravo
*Promosm*
When I attempt to add your expression at 17 minutes it shows a compiler error. I checked several times for spelling errors hower I can not find one:
Here is the exact paste of what I typed:
float2(round(Particles.SkeletalMeshLocation.SampledUV.x/User.TextureGridSize)*User.TextureGridSize,round(Particles.SkeletalMeshLocation.SampledUV.y/User.TextureGridSize)*User.TextureGridSize)
Can you post the error message?
@@EnriqueVenturaGames Hi, I have the same issue, and the error message shows[Cannot use variable in custom expression, it hasn't been encountered yet: User.TextureGridSize - Node: Custom Hlsl - Empty, Particle Spawn Script Interpolated, ], do you have any idea?
Even with " User.GridSize/100 " my voxels are not lining up perfectly on my own model. Is this something we have to change with different models or change the GridSize under the User Parameters Float value?
Not necessarily, I would say that it depends on the needs of your project. If all the objects in your project have a similar visual style, you probably could have a constant grid size shared across all of them.
Since the voxels' positions are rounded to be in a grid, they will never match organic meshes with 100% accuracy, but you can get close if your models are more blocky.
Ive been unable to get through the first 10 mins :(
I put in this expression for the oarticle position but it just doesnt compile
(round(Particles.Position/User.GridSize))*User.GridSize
Is "GridSize" spelled the same way as the Parameter "GridSize" that is underneath the Preview?
What is the error in the niagara log?
@@EnriqueVenturaGames Oh i happened to fix it myself xDD Turns out it was just a random error and after restarting unreal it just worked idk how xDD