Does Cesium for Unreal support material adjustment for individual components?

At the moment, I understand that the plugin can perform overall material adjustments for 3D tilesets. I’ve loaded a building model converted from Revit to 3D Tiles, and when I bring it into Unreal Engine 5, I can select individual components but can’t perform separate operations on them, such as toggling visibility or adjusting materials – I can only make changes to the entire model. Is this type of operation not supported yet, or is there something I’m not doing correctly? Thank you.

+1,i can pick one node, but can’t change its material

Hello,

What are you trying to accomplish? Do you want to adjust the materials of different tiles as they’re loaded in? Or different parts of the original model?

It is difficult to do the latter. The nature of 3D Tiles involves baking the mesh at different levels of detail, then chopping them up into tiles (hence the name). Once tiled, the individual components of the original model will not be distinguishable from each other – unless you tile the model with the EXT_mesh_features extension. You can see an example of styling with this extension in Level 6 of the Cesium for Unreal Samples.

I built it using specialized CAD modeling software such as Revit, not an oblique photography model, so it has a model component tree, and I hope to adjust the color, reveal and hide some of the components. Currently, component-level modifications to 3dtile can be made in cesium. You can take a look at my screenshot below.

I’m not sure what you mean by “component-level modifications to 3dtile can be made in cesium”. Do you mean CesiumJS? If so, can you share what your code is doing, so I can get a better sense of what functionality you’re looking for?

When I import a gltf model or fbx model into UE, I can make material modifications or color adjustments anywhere on the model, but when introducing 3dtile through cesium for Unreal 2.0, I cannot do this, so that the 3dtile data is more It is often viewed as it is, and it is impossible to modify the material or color of each node under its model structure.

When I import a gltf model or fbx model into UE, I can make material modifications or color adjustments anywhere on the model,

Right, but that’s because you’re importing the glTF / fbx model as-is into Unreal Engine. Once you convert this model into 3D Tiles, you lose that per-node information. See my initial answer to this forum thread:

The nature of 3D Tiles involves baking the mesh at different levels of detail, then chopping them up into tiles (hence the name). Once tiled, the individual components of the original model will not be distinguishable from each other – unless you tile the model with the EXT_mesh_features extension . You can see an example of styling with this extension in Level 6 of the Cesium for Unreal Samples .

This extension has been used in my model. You can see that I can select each independent component in UE, but I cannot adjust the material of the component.

Unfortunately, you cannot assign component-specific materials. You can only assign a custom material to the 3D Tileset. But you can configure this to handle the individual features.

I suggest following the tutorial below to learn how to create materials that use EXT_mesh_features and EXT_structural_metadata to style a tileset.

Thank you, I can now modify the material of the component through your guidance. But is there any way to hide the components? It seems that importing 3dtile into UE is not as flexible as GLTF and FBX models.

Hi @cqliao,

I think you could hide components by setting their alpha to 0, but I haven’t had a chance to try it myself.

BIM3dtile.zip (1.8 MB)
Hello, we tried it and didn’t succeed in reaching our goal. I provided our 3dtile data and blueprint, not sure where we went wrong, thanks.

It looks like you’re setting the opacity to 0.7, not 0. You may also have to change the blend asset used by the layer on the material instance.

The MLB_CesiumAlphaBlendBaseColor asset uses the opacity to linearly interpolate between two opaque colors. You’ll want to change this so that your styling layer’s opacity sets the final opacity of the color.

Sorry, my previous post did not explain the problem clearly. My problem is still that there is no way to change the material of a specific component. I got the dbid of the component, but when I modify its material, it doesn’t seem to have any effect.

I’m able to get it to work. Please double check that you have set up your material instance correctly; there may be a step in the tutorial that you missed.

First, I verified that the values were being passed in with this is the material graph:

This results in parts of the building being different colors:

Then I recreated your material graph. I can see the roof highlighted in red:

I tried using the nodes you provided, but it doesn’t work the same way and I couldn’t get the Dbid information. I’m not sure what operations I might have missed.Can you help me check for errors or omissions in that part? Thank you very much.






When I use raycasting to retrieve model data, the Dbid exists, but I cannot retrieve it from the materials.

In the Material Instance, you have to label your material layer “FeaturesMetadata”. I’ll include a screenshot of the corresponding step in the tutorial.

1 Like

I followed your advice and modified the corresponding material layer names, but it didn’t work initially. Later, I tried adding the suffix “_FeaturesMetadata” to all the relevant material names, and now it displays the desired effect correctly. Previously, I overlooked the naming convention for materials while reviewing the documentation, as it wasn’t explicitly marked, and I assumed I could customize the material names.




Thank you for your advice, it helped me solve my problem.

Actually, you only have to use the “FeaturesMetadata” label in the contents of the Material Instance. It was previously labeled “Layer 4” in your screenshot, which is why the metadata styling layer wasn’t applying. It’s perfectly acceptable to use arbitrary names for the Material Instances / Layers themselves. See this example:


Sometimes your changes won’t show up until you save the material, or manually click “Apply” in the toolbar. It can be flaky :slight_smile: In the future, try to verify that your changes were actually applied to the material. And in any case, I’m glad you were able to solve your problem!

1 Like