288 lines
7.4 KiB
Markdown
288 lines
7.4 KiB
Markdown
# 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 | 点击 |
|
|
|
|
## 数据格式
|
|
|
|
### 输入数据结构
|
|
|
|
```json
|
|
{
|
|
"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)
|
|
```
|