怎么做3D可视化?NebulaGraph Explorer 的图数据库可视化实践告诉你答案

news2024/11/18 5:56:04

在这里插入图片描述

前言

图数据可视化是现代 Web 可视化技术中比较常见的一种展示方式,NebulaGraph Explorer 作为基于 NebulaGraph 的可视化产品,在可视化图数据领域积累了许多经验,尤其是在图形渲染性能等领域。本文将系统性分享下 NebulaGraph Explorer 在 3D 图数据展示上的一些应用。以下演示皆可以在 https://explorer.nebula-graph.com.cn/explorer 在线试用。

二维力导图

目前业界常用的图数据展示都采用 2D 力导图的逻辑,如下图所示:

二维力导图

这种二维化的可视化模式,在图形语义上对物理世界数据进行了降维,通过点、边形状来描述实体和关系,符合人脑的习惯性直觉,简化了图数据的理解成本。D3-force,G6 等所采用的就是这样一种布局模式,也是大部分图类场景的基础算法。

其布局的力导算法则是大部分基于经典的 Fruchterman 布局算法,模拟弹簧的胡克定律和物体的万有引力,制造相互牵引和排斥的力算法,再通过模拟冷却收敛,最终得到减少交叉、步长等距、点分离独立的二维图布局。这也是可视化的基本诉求,即能够无遮挡地清晰查看各类繁杂的数据。

然而,2D 场景并不一定适用所有场景,主要有以下原因:

空间信息展示

部分数据具有原生的空间坐标信息,且这部分信息也不可降维,如分子结构、经纬度的球坐标展示、具有层级高度的数据等。这类数据通过 3D 展示会更符合人的习惯和直觉。

大数据量布局展示

在较大的数据集情况下,由于 2D 没有深度,导致所有的数据需要被平铺在画布上,可以想象一个西瓜的所有西瓜籽平铺的情况,占地面积要远远大于西瓜本身。因此这种情况需要将数据本身信息可视化还原,就需要 3D 可视化技术来实现了。
二维力导图

图数据 3D 可视化

图数据的 3D 可视化在逻辑上和 2D 比较像,我们一般依然是采用 2D 的 Fruchterman 力导图逻辑,也依然需要尽量避免交叉遮挡,但维度升了一维,逻辑复杂度也上升不少。因此我们重新自研了 3D 力导向算法来获得更好的效果和性能。可以看到下图同样的复杂网络关系中,3D 显示则会有较为明确的关系展示。

提供不同角度的图结构

图数据 3D 可视化

对于高密度的点边,可以像 3D 游戏一样,将视角转移、切换,观察到不同角度的图数据结构。
图数据 3D 可视化
图数据 3D 可视化

相同的数据也可以有完全不同的可视化效果。

提供鸟瞰视角

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YdWKzflA-1672383241171)(null)]

在 3D 鸟瞰情况下,可以将点在空间方向散射开,同样数据量下,画布能清晰的标识出节点团簇,也可以轻松的识别出超级节点。

通过屏幕内的整体颜色分布,能大致看出来整个可视化图中的节点 Tag 占比。

身临其境的体验感

用户可以在整个空间内搜索节点,直接定位到对应节点上,查看相关联的其余节点数据。上图为视频生成的 gif 图,画面切换会略有卡顿,如果你直接使用 NebulaGraph Explorer 进行探索的话会更流畅。

高性能可视化

目前我们的 3D 可视化可以支持 10w 点,10w 边同时渲染。渲染数量是由渲染性能、布局计算性能、内存占用、网络速率、NebulaGraph 性能等各方面因素综合决定的,上限主要由硬件和外部条件限制(网速,客户端机器配置,NebulaGraph 机器性能)决定,下限则是由图形渲染及布局算法决定。为了进一步提高下限,我们自研了图形渲染和布局算法部分,得到了较好的效果。

海量数据渲染

WebGL 是 web 端直接利用 GPU 进行渲染的方式。我们为了提高每一帧的图形渲染能力,在 3D 模式下采用 WebGL 来进行渲染。并且支持高低性能模式:

高性能可视化

高性能可视化

分别通过原生 Shader 和 Mesh 绘制,用户可以根据自己电脑终端的硬件情况选择对应的渲染模式。

其中高性能模式下,我们通过自研优化的 Shader,利用 GPU 并行计算的能力,将一些渲染效果放到着色器中计算,极大地提高了渲染速率,让渲染性能不再成为瓶颈。这也基本上达到了目前浏览器的极限。

快速算法布局

在图布局算法方面,我们用八叉树优化了力导过程的算力消耗,并且针对使用 LinLog 模型对超级点进行了受力优化。由于算法性能消耗比较大,我们使用 Golang 对八叉树算法和力导算法进行了重写,最终可以支持在 20w 图元的情况下,预热完成后稳定在 1s 以下完成一次运算。

高性能可视化

另外为了图布局计算不影响前台页面渲染,我们利用多个 worker 进程,将不同的 CPU 任务分布下去,这样木桶的各个短板不会影响渲染和交互的长板,用户在布局的时候依然可以灵活的操作。

利用上述的一些手段,我们将 3D 可视化的性能几乎提升到浏览器极限,而对于一些不大的图空间数据,完全可以一次性载入分析。

后续方向

由于 3D 模式的开发复杂度较 2D 提升较多,因此目前仅用于一种特殊的图数据展示方式,在未来,会综合实际的业务场景,进行更多的体验优化。

  • 时序及 GIS 领域的图布局

  • 映射图数据坐标到渲染中

  • 增加边的相关交互行为


谢谢你读完本文 (///▽///)

想来近距离体验 NebulaGraph Explorer 的酷炫流畅吗?现在可以用用 NebulaGraph Cloud 来搭建自己的图数据系统哟,云上 NebulaGraph 搭载免费的图探索工具 Explorer 点击拖拽搞定线上业务吧~ NebulaGraph 阿里云计算巢现 30 天免费使用中,点击链接来用用图数据库吧~

想看源码的小伙伴可以前往 GitHub 阅读、使用、(з)-☆ star 它 -> GitHub;和其他的 NebulaGraph 用户一起交流图数据库技术和应用技能,留下「你的名片」一起玩耍呢~

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

串口通信协议

同步通信和异步通信 同步通信:需要时钟信号的约束,在时钟信号的驱动下两方进行数据交换,一般会选择在上升沿或者下降沿进行数据的采样,以及时钟极性和时钟相位【eg.SPI,IIC】。 异步通信:不需要时钟信号的同步,通过(…

只根据\r、\n、\r\n三种分隔符分割字符串splitlines()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 只根据\r、\n、\r\n三种 分隔符分割字符串 splitlines()方法 选择题 对于以下python代码表述错误的一项是? s字符串1\n字符串2\r字符串3\r\n字符串4\n\r字符串5 print("【执行】s字符串…

移植FreeRTOS到STM32

移植FreeRTOS到STM32单片机上引言介绍什么是 RTOS?为什么嵌入式设备往往使用RTOS?FreeRTOS具体步骤总结引言 本文详细介绍如何移植FreeRTOS到STM32单片机上。移植操作系统是嵌入式开发的入门基础,单片机和嵌入式在物理上其实是一摸一样的&am…

二、MySQL 介绍及 MySQL 安装与配置

文章目录一、新手如何学习 MySQL二、MySQL 介绍2.1 百科定义2.2 创始人简历2.3 历史背景2.4 MySQL 的优势2.5 MySQL 版本2.6 MySQL 特性2.7 MySQL 的应用环境2.8 数据库专业术语2.9 MySQL 客户端和服务器架构(C/S架构)2.10 MySQL 内部结构三、MySQL 服务…

免费分享一个SpringBoot鲜花商城管理系统,很漂亮的

大家好,我是锋哥,看到一个不错的SpringBoot鲜花商城管理系统,分享下哈。 项目介绍 这是基于主流SpringBoot框架开发的项目,thymeleaf模版引擎,Mysql数据库,druid连接池,界面美观大方&#xff…

spring动态数据源,多数据源

Spring是如何支持多数据源的 Spring提供了一个AbstractRoutingDataSource类,用来实现对多个DataSource的按需路由,本文介绍的就是基于此方式实现的多数据源实践。 一、什么是AbstractRoutingDataSource 先看类上的注释: Abstract {link jav…

Goby安装与使用

Goby安装与使用1.Goby简介1.1.Goby介绍1.2.Goby下载2.Goby使用2.1.切换语言2.2.新建扫描2.2.1.设置扫描地址2.2.2.设置端口2.2.2.1.选中默认端口2.2.2.2.自定义端口2.2.3.漏洞2.2.3.1.通用Poc2.2.3.2.暴力破解2.2.3.3.全部漏洞2.2.3.4.自定义Poc2.2.4.开始扫描2.3.扫描情况2.3.…

【Eureka】如何实现注册,续约,剔除,服务发现

文章目录前言服务注册服务续约服务剔除(服务端去剔除过期服务)被动下线服务下线(主动下线)client发起的服务发现集群同步信息Work下载前言 Eureka是SpringCloud的具体实现之一,提供了服务注册,发现,续约,撤…

[ Linux Audio 篇 ] Type-C 转 3.5mm音频接口介绍

简介 常见的Type-C 转3.5mm 线有两种: 模拟Type-C转3.5mm音频线数字Type-C转3.5mm 音频线,也就是带DAC芯片的转换线 当使用Type-C转换3.5mm音频接口时,使用到的是这里面的SBU1、D-、D、CC四个针脚,手机会通过这四个针脚输出模拟…

信贷--------

定义 信贷:一切以实现承诺为条件的价值运动方式,如贷款、担保、承诺、赊欠等 信贷业务:本外币贷款、贴现、透支、押汇(表内信贷);票据承兑、信用证、保函、贷款承诺、信贷证明等(表外信贷&…

卷积神经网络硬件加速——INT8数据精度加速

卷积神经网络硬件加速——INT8数据精度加速 上一专题已介绍了一种通用的卷积神经网络硬件加速方法——Supertile,本文将介绍一种特殊的硬件加速方案,一种INT8数据精度下的双倍算力提升方案。 目前大部分卷积神经网络模型的数据类型都是32-bits单精度浮点…

android开发笔记002

ListView控件 <ListViewandroid:id"id/main_iv"android:layout_width"match_parent"android:layout_height"match_parent"android:layout_below"id/main_top_layout"android:padding"10dp"android:divider"null&qu…

TCP三次握手详解

三次握手是 TCP 连接的建立过程。在握手之前&#xff0c;主动打开连接的客户端结束 CLOSE 阶段&#xff0c;被动打开的服务器也结束 CLOSE 阶段&#xff0c;并进入 LISTEN 阶段。随后进入三次握手阶段&#xff1a; ① 首先客户端向服务器发送一个 SYN 包&#xff0c;并等待服务…

c++11 标准模板(STL)(std::deque)(二)

构造函数 std::deque<T,Allocator>::deque deque(); (1) explicit deque( const Allocator& alloc ); (2)explicit deque( size_type count, const T& value T(), const Allocator& alloc Allocator());(3)(C11 前) …

网络编程 完成端口模型

1.概念以及重叠IO存在的问题 2.完成端口代码详解 整体流程 使用到的新函数 1.CreateIoCompletionPort函数 该函数创建输入/输出 (I/O) 完成端口并将其与指定的文件句柄相关联&#xff0c;或创建尚未与文件句柄关联的 I/O 完成端口&#xff0c;以便稍后关联&#xff0c;即创建…

金融业务的数据存储选型

为什么用关系型数据库&#xff1f;最常见的理由是别人在用&#xff0c;所以我也得用&#xff0c;但是这个并不是理由&#xff0c;而是借口。 1 数据分类 选择数据存储类型前&#xff0c;先分析数据特点&#xff0c;才能针对性选择存储方案。 通常按数据与数据之间关系的复杂…

SSM2---spring

Spring spring环境搭建 创建一个空白模块&#xff0c;目录结构如下 在pom.xml文件中引入相关依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/…

基于SSM(Spring+SpringMVC+Mybatis)实现的个人博客系统,含数据库文件及详细说明

关于项目 该博客是基于SSM实现的个人博客系统&#xff0c;适合初学SSM和个人博客制作的同学学习。 最新版本支持用户注册&#xff0c;包含用户和管理员两个角色 。 博主已写了一篇该项目的毕业论文和录制了2个小时的代码讲解可以供大家学习&#xff0c;需要的可以联系博主&…

RFID在模块管理中的应用

应用背景 模具是工业生产的基础工艺装备&#xff0c;被称为“工业之母”。作为国民经济的基础行业&#xff0c;模具涉及机械、汽车、轻工、电子、化工、冶金、建材等各个行业&#xff0c;应用范围十分广泛。模具资产管理采用传统的人工纸质记录的方式已经无法及时有效的进行&am…

还在用 XShell - 试试 IntelliJ IDEA 的 SSH

SSH 是很多人用得不多&#xff0c;但是又不得不用的工具。 如果你不是搞运维&#xff0c;没有必要搞个 CRT&#xff0c;XShell 也够用了&#xff0c;但是这 2 个都是收费软件&#xff0c;同时还不太便宜。 试试 IDEA 的 SSH 其实 IntelliJ IDEA 已经提供了 SSH 的功能。 如…