Files
planet/unreal/Content/Blueprints/BP_DataPoint_Spec.md
2026-03-05 11:46:58 +08:00

7.4 KiB

BP_DataPoint 基类蓝图详细规格

蓝图信息

属性
蓝图类型 Actor
父类 Actor
路径 Content/Blueprints/BP_DataPoint.uasset

组件列表

BP_DataPoint
├── SceneRoot (场景根)
│   ├── StaticMesh (基础网格 - 球体)
│   │   └── Material: M_DataPoint_Base
│   ├── NiagaraComponent (粒子光晕)
│   │   └── Niagara System: NS_DataPoint_Glow
│   ├── WidgetComponent (3D 标签)
│   │   └── User Widget: W_DataLabel
│   └── SpringArm (弹簧臂 - 用于相机聚焦)
│       └── CameraComponent

变量列表

变量名 类型 默认值 说明
DataId String "" 唯一标识
Name String "Unknown" 显示名称
Source String "unknown" 数据源
DataType String "point" 数据类型
Latitude Float 0.0 纬度
Longitude Float 0.0 经度
Altitude Float 100000.0 高度 (厘米)
Country String "" 国家
City String "" 城市
Performance Float 0.0 性能值
Metadata JsonObject {} 元数据
IsSelected Boolean false 是否选中
IsHovered Boolean false 是否悬停
BaseColor LinearColor (1,1,1,1) 基础颜色
HighlightColor LinearColor (0,1,1,1) 高亮颜色

材质参数

M_DataPoint_Base

参数 类型 默认值 说明
BaseColor Vector3 (1,0,0) 基础颜色
EmissiveStrength Float 5.0 自发光强度
PulseSpeed Float 1.0 脉冲速度
PulseIntensity Float 0.5 脉冲强度
FresnelPower Float 2.0 菲涅尔边缘强度

NS_DataPoint_Glow (Niagara 参数)

参数 类型 默认值 说明
User.Color LinearColor (1,0,0,1) 粒子颜色
User.Size Float 1.0 粒子大小
User.Lifetime Float 1.5 粒子寿命

函数

Initialize (String InId, String InName, Float InLat, Float InLon)

1. [设置] DataId = InId
2. [设置] Name = InName
3. [设置] Latitude = InLat
4. [设置] Longitude = InLon
5. [调用] UpdatePosition()
6. [调用] UpdateLabel()

UpdatePosition

1. [创建] FGeographicPoint (Latitude, Longitude, Altitude)
2. [调用] GeoUtils.LatLonToUEPosition(Point)
   └─ 返回: UELocation (Vector3)
3. [设置] StaticMesh.SetRelativeLocation(UELocation)
4. [设置] NiagaraComponent.SetRelativeLocation(UELocation)
5. [设置] WidgetComponent.SetRelativeLocation(UELocation + (0,0,200))

UpdateData (Struct NewData)

1. [解析] NewData
2. [设置] DataId = NewData["id"]
3. [设置] Name = NewData["name"]
4. [设置] Latitude = NewData["location"]["latitude"]
5. [设置] Longitude = NewData["location"]["longitude"]
6. [可选] [设置] Performance = NewData["performance"]
7. [可选] [设置] Country = NewData["country"]
8. [调用] UpdatePosition()
9. [调用] UpdateLabel()
10. [调用] UpdateMaterial()

UpdateLabel

1. [获取] W_DataLabel Widget Reference
2. [设置] NameText = Name
3. [设置] CountryText = Country
4. [设置] PerformanceText = FormatPerformance(Performance)

UpdateMaterial

1. [获取] StaticMesh.Material
2. [分支] Source
   ├─ "top500":
   │   └─ [设置] BaseColor = (1, 0.2, 0.2, 1)  红色
   ├─ "epoch_ai_gpu":
   │   └─ [设置] BaseColor = (1, 0.5, 0, 1)     橙色
   ├─ "huggingface_models":
   │   └─ [设置] BaseColor = (0.2, 0.5, 1, 1)   蓝色
   ├─ "peeringdb_ixp":
   │   └─ [设置] BaseColor = (0, 1, 0.5, 1)     青色
   ├─ "peeringdb_network":
   │   └─ [设置] BaseColor = (0.5, 0, 1, 1)     紫色
   └─ [默认]:
       └─ [设置] BaseColor = (1, 1, 1, 1)        白色

FormatPerformance (Float Value) → String

1. [分支] Value >= 1000000
   ├─ [是]: 返回 = FString::Printf(TEXT("%.1f EFLOPS"), Value / 1000000)
   └─ [否]: [分支] Value >= 1000
       ├─ [是]: 返回 = FString::Printf(TEXT("%.1f PFLOPS"), Value / 1000)
       └─ [否]: 返回 = FString::Printf(TEXT("%.1f TFLOPS"), Value)

事件

OnBeginCursorOver

1. [设置] IsHovered = true
2. [调用] SetHighlight(true)
3. [调用] PlayHoverEffect()

OnEndCursorOver

1. [设置] IsHovered = false
2. [分支] IsSelected == false
   └─ [调用] SetHighlight(false)

OnClicked

1. [调用] SetSelected(true)
2. [调用] BP_GlobeController.OnDataPointSelected(Self)
3. [调用] PlayClickEffect()

SetHighlight (Boolean bHighlight)

1. [获取] NiagaraComponent
2. [分支] bHighlight == true
   ├─ [设置] User.Color = HighlightColor
   └─ [否则]:
       ├─ [设置] User.Color = BaseColor
3. [调用] NiagaraComponent.Activate(bHighlight)

SetSelected (Boolean bSelected)

1. [设置] IsSelected = bSelected
2. [分支] bSelected == true
   ├─ [设置] StaticMesh.Scale = (1.5, 1.5, 1.5)
   ├─ [调用] SetHighlight(true)
   └─ [设置] SelectedRing.Visible = true
└─ [否则]:
    ├─ [设置] StaticMesh.Scale = (1.0, 1.0, 1.0)
    ├─ [分支] IsHovered == true
    │   └─ [调用] SetHighlight(true)
    └─ [设置] SelectedRing.Visible = false

PlayHoverEffect

1. [播放] Niagara Particle Burst
   └─ 粒子数量: 20

PlayClickEffect

1. [播放] Sound Effect "DataPoint_Click"
2. [播放] Timeline "PulseEffect"
   └─ 持续时间: 0.5秒

事件调度器

事件调度器 参数 说明
OnPointSelected BP_DataPoint 点被选中
OnPointHovered BP_DataPoint 鼠标悬停
OnPointClicked BP_DataPoint 点击

数据格式

输入数据结构

{
  "id": "top500_1",
  "name": "Frontier",
  "source": "top500",
  "data_type": "supercomputer",
  "location": {
    "latitude": 33.7756,
    "longitude": -84.3962,
    "altitude": 0
  },
  "country": "US",
  "city": "Atlanta",
  "performance": 1682.65,
  "metadata": {
    "cores": 8730112,
    "memory": "5.67 PB",
    "power": "29.0 MW"
  }
}

颜色编码

数据源 颜色 RGB 说明
top500 🔴 红色 (1.0, 0.2, 0.2) TOP500 超算
epoch_ai_gpu 🟠 橙色 (1.0, 0.5, 0.0) GPU 集群
huggingface_models 🔵 蓝色 (0.2, 0.5, 1.0) HuggingFace 模型
peeringdb_ixp 🩵 青色 (0.0, 1.0, 0.8) IXP 互联网交换中心
peeringdb_network 🟣 紫色 (0.6, 0.0, 1.0) 网络运营商
peeringdb_facility 🟤 棕色 (0.6, 0.4, 0.2) 数据中心
teleegeography_cables 🟡 黄色 (1.0, 0.8, 0.0) 海底光缆

缩放比例

性能范围 缩放 说明
< 1 PFLOPS 0.5x 小型系统
1-100 PFLOPS 1.0x 中型系统
100-1000 PFLOPS 1.5x 大型系统
> 1 EFLOPS 2.0x 超大规模

粒子效果 (Niagara)

NS_DataPoint_Glow

发射器设置:
├─ 发射器类型: 粒子系统
├─ 发射模式: 循环
├─ 发射速率: 30 粒子/秒
├─ 粒子寿命: 1.5 秒
└─ 粒子大小: 渐变 (小 → 大)

渲染设置:
├─ 渲染组件: Niagara 粒子
├─ 材质: M_Particle_Glow
├─ 混合模式: Additive
└─ 排序: 无

颜色渐变:
├─ 0%: (1, 1, 1, 1)
├─ 50%: (1, 1, 1, 0.8)
└─ 100%: (1, 1, 1, 0)