【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮

这篇具有很好参考价值的文章主要介绍了【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

0.1 效果展示

0.2 实现步骤

1  数据准备 

 2  属性查询

2.1 射线检测 

2.2 获取FeatureID

2.3 属性查询

2.4  属性显示

3 单体高亮

3.1 构建材质参数集

3.2 材质参数设置

3.3 添加Cesium Encode Metadata插件

3.4 从纹理中取出特定FeatureId属性信息

3.5 创建材质图层

3.6 创建混合材质图层

3.7 创建材质实例

3.8 单体化高亮显示

4.扩展

4.1 通用单体高亮设置

4.2 属性拾取和单体高亮控制 


0.1 效果展示

在UE5中使用CesiumForUnreal加载本地3dtiles数据,3dtiles数据带有属性信息字段,通过材质图层来实现对3dtiles数据进行点击单体高亮显示效果,效果如下: 

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium


0.2 实现步骤

  1.  数据准备:准备在线发布好的3dtiles数据或者本地3dtiles数据,数据需要有属性字段
  2.  属性查询:使用CesiumForUnreal的射线检测拾取到点击的单体数据进行属性查询
  3.  单体高亮:基于 Cesium Encoded Metadata组件,使用材质图层的方式实现单体高亮效果

1  数据准备 

   准备本地或者在线发布的带有属性信息字段的3dtiles数据,在线发布可以借助于cesiumLab进行发布,如果是本地数据,url的路径格式为:file:/// + “本地数据的绝对路径”,本例子中,我加载的本地数据路径如下:保证3dtile数据的正确加载显示

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

 2  属性查询

属性查询在Cesium 官网和例子中都有相关示例,为了快速搭建工程,我是基于Cesium-Unreal-Samples示例工程中的06_CesiumMetadata进行改造实现的

2.1 射线检测 

在关卡蓝图中根据鼠标左键按下进行射线检测,获取碰撞Hit Component和Face Index

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

2.2 获取FeatureID

  通过碰撞检测到的Hit Component和FaceId,获取到碰撞的FeatureId

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

2.3 属性查询

这里参考Cesium-unreal-sample示例工程中的Widget来显示属性信息(key-value),具体蓝图实现如下:

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

2.4  属性显示

在编辑器视口中运行游戏,鼠标左键点选,就可获取到属性查询信息

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

3 单体高亮

   挑选出3dtiles中具有唯一值的属性字段,用于单体要素的全局唯一标识 

3.1 构建材质参数集

 新建材质参数集,添加Scalar Parameter参数,用于存储当前选中单体的唯一Id.

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

3.2 材质参数设置

  我们3dtiles数据具有唯一值的属性字段是"batchId" ,我么将此属性值设置到材质参数中

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

高亮hightLight函数如下:

 【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

3.3 添加Cesium Encode Metadata插件

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium 点击Auto Fill按钮,我们便可以看到加载数据的所有属性字段,为了简化,我们把处我们需要的唯一值字段Id留着之外,其他的属性字段进行删除处理,只留下"batchId"

3.4 从纹理中取出特定FeatureId属性信息

点击"Generate Material"    按钮,自动生成材质图层,便可以从纹理中取出特定的FeatureId的属性信息                

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

 【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

3.5 创建材质图层

 参考上一步自动生成的材质图层,创建新的材质图层,命名为"ML_Metadata'。使用步骤“1.3.1构建材质参数集”   中的Id与"batchId"进行比较,如果相等,则把Base Color属性设置为0,否则设置为1。

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

 3.6 创建混合材质图层

  创建混合材质图层,命名为"MLB_Metadata",用于顶层的高亮图层与底层材质图层进行混合,高亮的图层颜色可以自行进行设置,我们以设置的为青绿色,首先获取Top Layer,也就是上一步创建的材质图层的Base Color属性,判断其值是否为0,若为0,则表示是选择的Id,则将混合后的颜色更改为高亮颜色,若不为0,则不是选中的要素,使用原始Base Color。

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

 3.7 创建材质实例

 基于插件自带的M_CesiumBaseMaterial创建新的材质实例

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

将新的材质实例命名为MI_CesiumMetadata, 并将前面创建的材质图层和混合图层添加到材质实例里面

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

3.8 单体化高亮显示

 为添加的3dtiles数据设置刚创建的材质实例,并刷新图层

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

 然后在编辑器中运行游戏,进行鼠标点选,即可看到单体高亮效果

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

4.扩展

4.1 通用单体高亮设置

调试CesiumForUnreal源码(CesiumForUnreal\Source\CesiumRuntime\Private\CesiumGltfComponent.cpp)我们看到,在加载3Dtiles数据的时候,所使用的基础默认材质实例是:MI_CesiumThreeOverlaysAndClipping ,

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

 找到默认材质实例MI_CesiumThreeOverlaysAndClipping(CesiumForUnreal\Content\Materials\Instances\MI_CesiumThreeOverlaysAndClipping)如下所示:

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

打开 MI_CesiumThreeOverlaysAndClipping 材质实例,和之前步骤一样,设置最上层的材质图层和混合图层

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

 然后清除我们之前设置的材质,让3dtiles数据使用默认的材质实例MI_CesiumThreeOverlaysAndClipping

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

在编辑器中运行游戏,进行点选,可以拾取单体属性信息和高亮显示效果

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

4.2 属性拾取和单体高亮控制 

在实际应用中,我们可能只需要做属性查询,单体高亮,或者两者都要,那我们如何对这两个功能进行统一控制呢?在关卡蓝图中,我们定义了两个bool值,分别对单体高亮和属性查询进行分别控制:

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

  1. Show Property 为true:属性拾取    Show Property 为false:属性拾取不可用
  2. Show HightLight为true: 单体高亮    Show HightLightfalse: 单体高亮不可用

只做属性拾取:

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

只做单体高亮:

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium

属性拾取和单体高亮同时显示:

【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮,【UE5】CesiumForUnreal,CesiumForUnreal,UE5,Cesium文章来源地址https://www.toymoban.com/news/detail-670909.html

到了这里,关于【UE5:CesiumForUnreal】——3DTiles数据属性查询和单体高亮的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cesium3DTile属性及Nginx发布3DTiles(包含IIS)

    Cesium从入门到项目实战总目录: 点击 在Cesium中,Cesium3DTile是一种基于Web的三维地图数据格式,包含了大量的空间数据和属性信息。以下是Cesium3DTile常用的属性: 1.boundingVolume boundingVolume属性定义了Cesium3DTile的包围盒,用于优化渲染性能。 2.geometricError geometricError属性定义了

    2024年02月06日
    浏览(55)
  • Cesium 3dtiles数据下载 3DTiles

     http://chenjiamian.me/mars3d-max-shihua-3dtiles/ 预览 GitHub - CHENJIAMIAN/mars3d-max-shihua-3dtiles: 3DTiles数据下载 | 预览:http://mars3d.cn/editor-vue.html?id=layer-tileset/style/custom-style | 23Mb https://github.com/CHENJIAMIAN/mars3d-max-shihua-3dtiles/archive/refs/heads/master.zip  

    2024年02月13日
    浏览(32)
  • 三维数据格式3DTiles

    它是Cesium于2016年3月定义的一种三维模式瓦片数据结构,它将海量的三维数据用分块、分层的形式组织起来,很大程度上减轻了浏览器的负担,除此外还提供了细节层次的LOD(Levels of Detail 多细节层次)功能,在远观时,降低模型的面数和精度,拉近后再将细节加载出来,大大

    2023年04月08日
    浏览(31)
  • ThreeJS-加载3dtiles数据

    目前加载3dtiles数据的方式有三种,均是借助第三方插件的方式 3d-tiles-renderer https://github.com/NASA-AMMOS/3DTilesRendererJS

    2024年02月11日
    浏览(32)
  • shp数据制作3DTiles白膜

    3D Tiles格式介绍 3D Tiles用于大场景的三维模型。 3D Tiles是一个开放的规范,用于传输海量的异构三维地理空间数据集。使用概念上类似于terrain和imagery的瓦片流技术,3D Tiles 使得建筑物数据集、BIM模型、点云和摄影测量模型等大模型比较流畅的在Web端进行浏览展示。 3D Tiles官方

    2024年02月11日
    浏览(93)
  • cesium加载3dtiles倾斜摄影数据

    效果如图 倾斜摄影数据的地址:百度网盘 请输入提取码 提取码:ztde 1.配置nginx,代理3dtiles倾斜摄影数据服务 如我的倾斜摄影数据放在D盘的某个文件夹里面,nginx可以这样配置    2.代码里面3dtiles的url指向倾斜摄影服务地址,同时配置一系列的参数 3dtiles的配置参数如下,可

    2024年02月11日
    浏览(29)
  • threejs加载3dtiles(倾斜摄影)数据

    使用npm 安装  或者去官网下载都行 GitHub - NASA-AMMOS/3DTilesRendererJS: Renderer for 3D Tiles in Javascript using three.js 首先引入,在填入3dtiles数据的地址,可以是文件路径也可以是网站路径 const tilesRenderer = new TilesRenderer( \\\'./path/to/tileset.json\\\' ); const tilesRenderer = new TilesRenderer( \\\'http://192.168.1.

    2024年02月16日
    浏览(30)
  • osgb转3dtiles之数据篇

    前不久,终于对osgb以及3dtiles的数据结构有了足够的了解,成功地利用FME将osgb数据转换成了3dtiles数据。于是,我开心地决定先来写一下如何将osgb转换成3dtiles数据。 为了让大家能够比较详细的了解这两个数据格式,该系列文章一共分为上下两篇,我将会从osgb与3dtiles的数据结

    2024年02月02日
    浏览(36)
  • UE5——网络——属性复制

    当属性被注册进行复制后,您将无法再取消注册(涉及到生存期这一话题)。之所以会这样,是因为我们要预制尽可能多的信息,以便针对同一组属性将某一工作分担给多个连接。这样可以节省大量的计算时间。 COND_InitialOnly :此属性将仅尝试在初始话的时候发送 COND_OwnerO

    2024年02月06日
    浏览(27)
  • Cesium 加载3Dtiles数据-最佳方法对比

            Cesium加载空间数据的方法有很多种,网络上关于3Dtiles数据集加载的废话连篇,看着就很无语。这里我本人直抒胸臆,简单介绍一下数据的加载方式。         先打开Cesium的深度检测的开关,也可以不打开。                完成以上步骤后,利用Cesium的readyPromi

    2024年02月11日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包