【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数据进行点击单体高亮显示效果,效果如下: 


0.2 实现步骤

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

1  数据准备 

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

 2  属性查询

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

2.1 射线检测 

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

2.2 获取FeatureID

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

2.3 属性查询

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

2.4  属性显示

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

3 单体高亮

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

3.1 构建材质参数集

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

3.2 材质参数设置

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

高亮hightLight函数如下:

 

3.3 添加Cesium Encode Metadata插件

 点击Auto Fill按钮,我们便可以看到加载数据的所有属性字段,为了简化,我们把处我们需要的唯一值字段Id留着之外,其他的属性字段进行删除处理,只留下"batchId"

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

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

 

3.5 创建材质图层

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

 3.6 创建混合材质图层

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

 3.7 创建材质实例

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

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

3.8 单体化高亮显示

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

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

4.扩展

4.1 通用单体高亮设置

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

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

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

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

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

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

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

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

只做属性拾取:

只做单体高亮:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/90682.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

netdata监控服务器主机(包括Docker容器)

效果 Docker部署 创建挂载目录 mkdir -p /data/netdata/{netdatacache,netdatalib}docker运行 docker run -d --namenetdata \-p 19999:19999 \-v /data/netdata/netdatalib:/var/lib/netdata \-v /data/netdata/netdatacache:/var/cache/netdata \-v /etc/passwd:/host/etc…

【业务功能篇83】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-应用层实战

五、ElasticSearch应用 1.ES 的Java API两种方式 Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种。相比来说transportClient API效率更高,transportClient 是通过Elasticsearch内部RPC的形式进行请求…

MAVEN利器:一文带你了解IDEA中如何使用Maven

前言: 强大的构建工具——Maven。作为Java生态系统中的重要组成部分,Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用,Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等…

windows10 docker 安装在D盘

win10安装docker后发现c盘空间急速减少,360管家查看发现images镜像安装在C盘,于是重装docker desktop以为在安装过程中能够选择,遗憾的是没有提供选择权限,默认直接就安装到了c盘。 desktop 迁移 百度得知可以将c盘的docker安装…

SpringCloud学习笔记(二)_Eureka注册中心

一、Eureka简介 Eureka是一项基于REST(代表性状态转移)的服务,主要在AWS云中用于定位服务,以实现负载均衡和中间层服务器的故障转移。我们称此服务为Eureka Server。Eureka还带有一个基于Java的客户端组件Eureka Client&#xff…

网络安全之红蓝对抗实战

前言 背景介绍:目标是拿到企业www.xxx.com的《上市商业计划书.docx》,通过 OPENVPN 访问。特别提出的得分规则修改,权限的得分必须有 WEBSHELL/交互式 SHELL,只有一个漏洞回显不给分,更加偏向考察**漏洞利用**而非漏洞…

大红喜庆版UI猜灯谜小程序源码/猜字谜微信小程序源码

今天给大家带来一款UI比较喜庆的猜灯谜小程序,大家看演示图的时候当然也是可以看得到那界面是多么的喜庆,而且新的一年也很快就来了,所以种种的界面可能都比较往喜庆方面去变吧。 这款小程序搭建是免服务器和域名的,只需要使用微信开发者工具…

ARM--day7(cortex_M4核LED实验流程、异常源、异常处理模式、异常向量表、异常处理流程、软中断编程、cortex_A7核中断实验)

软中断代码:(keil软件) .text .global _start _start:1.构建异常向量表b resetb undef_interruptb software_interruptb prefetch_dataabortb data_abortb .b irqb fiq reset:2.系统一上电,程序运行在SVC模式1>>初始化SVC模…

Mysql B+数索引结构

一、B树和B树区别 二、 B 树形成过程 三、页分裂过程 3.1 页分裂过程实例 3.1.1 原有数据1、3、5形成如下数据页 3.1.2 先新插入数据4,因为 页10 最多只能放3条记录所以我们不得不再分配一个新页: 新分配的数据页编号可能并不是连续的,也…

Pytorch06-复杂模型构建

https://github.com/ExpressGit/Pytorch_Study_Demo 1、PyTorch 复杂模型构建 1、模型截图2、模型部件实现3、模型组装 2、模型定义 2.1、Sequential 1、当模型的前向计算为简单串联各个层的计算时, Sequential 类可以通过更加简单的方式定义模型。2、可以接收…

Excel 分组排名

分组排名 公式&#xff1a;SUMPRODUCT((A:AA2)*(C:C>C2)) 1 降序&#xff1a;> 改为 < ⚠️注意1&#xff1a;此处空值参与排名&#xff1b;不参与排名则公式改为&#xff1a;IF(C2“”,“”,SUMPRODUCT((A:AA2)*(C:C>C2)) 1) ⚠️注意2&#xff1a;相同值的项…

从开源到商业化:成功的转型策略

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

第9章:聚类

聚类任务 性能度量 距离度量 非度量距离 原型聚类 有很好的统计学上的意义&#xff0c;但是只能找到椭球形的聚类。 密度聚类 层次聚类

linux 免交互

Linux 免交互 1、免交互概念2、基本免交互的例子2.1命令行免交互统计2.2使用脚本免交互统计2.3使用免交互命令打印2.4免交互修改密码2.5重定向查看2.6重定向到指定文件2.7重定向直接指定文件2.8使用脚本完成重定向输入2.9免交互脚本完成赋值变量2.10关闭变量替换功能&#xff0…

【51单片机】EEPROM-IIC实验(按键控制数码管)

目录 &#x1f381;I2C总线 ​编辑 &#x1f381;代码 &#x1f3f3;️‍&#x1f308;main.c &#x1f3f3;️‍&#x1f308;i2.c &#x1f386;代码分析 &#x1f381;I2C总线 I2C总线是Philips公司在八十年代初推出的一种串行、半双工的总线&#xff0c;主要用于近距…

ubuntu下自启动设置,为了开机自启动launch文件

1、书写sh脚本文件 每隔5秒钟启动一个launch文件&#xff0c;也可以直接在一个launch文件中启动多个&#xff0c;这里为了确保启动顺利&#xff0c;添加了一些延时 #! /bin/bash ### BEGIN INIT sleep 5 gnome-terminal -- bash -c "source /opt/ros/melodic/setup.bash…

JavaScript(笔记)

目录 Hello World JavaScript 的变量 JavaScript 动态类型 隐式类型转换 JavaScript 数组 JavaScript 函数 JavaScript 中变量的作用域 对象 DOM 选中页面元素 事件 获取 / 修改元素内容 获取 / 修改元素属性 获取 / 修改 表单元素属性 获取 / 修改样式属性 新…

MybatisPlus(1)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 MyBatis-Plus&#xff08;简称MP&#xff09;是一个 Mybatis 的增强工具&…

pytorch中的register_buffer

今天在一个模型的init中遇到了self.register_buffer(‘running_mean’, torch.zeros(num_features)) register_buffer(self, name, tensor)是一个PyTorch中的方法&#xff0c;它的作用是向模块&#xff08;module&#xff09;中添加一个持久的缓冲区&#xff08;buffer&#xf…