You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UE5蓝图工具删除静态网格体顶点颜色后修改未保存问题求助

问题:批量删除Static Mesh顶点颜色后修改未保存

尝试制作蓝图工具批量处理Static Mesh的顶点颜色,编写了C++蓝图函数删除顶点颜色,日志显示函数执行成功,但打开顶点颜色编辑器后,Static Mesh仍显示原有顶点颜色数据。函数核心代码如下:

...
for (FStaticMeshLODResources& LODResource : RenderData->LODResources)
{
    if (LODResource.bHasColorVertexData)
    {
        LODResource.VertexBuffers.ColorVertexBuffer.ReleaseResource();
        LODResource.VertexBuffers.ColorVertexBuffer.CleanUp();
        LODResource.bHasColorVertexData = false;
    }
}
StaticMesh->PostEditChange();
StaticMesh->MarkPackageDirty();
...

解决方案

问题根源

你修改的是运行时渲染数据(RenderData),但Static Mesh的顶点颜色编辑器读取的是源资产数据(SourceModels中的RawMesh)。RenderData是从源数据实时生成的临时数据,重启编辑器或重新构建Static Mesh后就会被覆盖,且不会保存到资产文件中。

正确实现代码

需要直接修改Static Mesh的源数据,再重新构建资产:

UStaticMesh* StaticMesh = ...; // 你的输入参数
if (!StaticMesh || StaticMesh->SourceModels.Num() == 0)
{
    return;
}

// 遍历所有LOD的源模型数据
for (FStaticMeshSourceModel& SourceModel : StaticMesh->SourceModels)
{
    if (!SourceModel.RawMesh)
    {
        continue;
    }

    // 清除所有顶点的颜色数据(设为默认白色,或按需修改)
    for (FColor& VertexColor : SourceModel.RawMesh->VertexColors)
    {
        VertexColor = FColor::White;
    }
}

// 重新构建Static Mesh,基于修改后的源数据生成新的RenderData
StaticMesh->Build(false);

// 触发编辑器更新并标记资产为脏(需要保存)
StaticMesh->PostEditChange();
StaticMesh->MarkPackageDirty();

额外注意事项

  • 操作前务必备份Static Mesh资产,修改源数据是不可逆的
  • 确保Static Mesh资产不是只读状态,否则无法保存修改
  • 如果需要彻底移除颜色通道(而不是设为默认色),可以检查RawMesh的顶点格式,移除对应的颜色属性(不过通常设为默认色就能满足编辑器不显示自定义顶点颜色的需求)

内容的提问来源于stack exchange,提问作者Youan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:10:06