Three.js + WebGL 粒子动画实测:10 万粒子,流畅无压力

Three.js + WebGL 粒子动画实测:10 万粒子,流畅无压力

 ​​​​​

测试环境

Windows 桌面,WinForms + OpenTK (OpenGL 3.3)。

处理器    Intel(R) Core(TM) i9-14900HX (2.20 GHz)
机带 RAM    32.0 GB (31.7 GB 可用)
系统类型    64 位操作系统, 基于 x64 的处理器
操作系统版本    Windows 11 家庭中文版


实现原理

核心思路是:用 C# 承载页面,用 Three.js 组织 3D 场景,用 WebGL 做底层 GPU 绘制。

整体如下:

1. `WPF` 窗口中嵌入 `WebView2`。

2. 在 C# 中动态拼接 HTML,并通过 `NavigateToString` 注入页面。

3. 页面侧加载 `three.min.js`,创建 `Scene / Camera / WebGLRenderer`。

4. 粒子通过 `THREE.BufferGeometry` 与多个 `BufferAttribute` 存储。

5. 每帧在 JS 中更新粒子位置与生命周期,提交属性更新后由 GPU 渲染。

6. 页面每秒统计一次 FPS,通过 `window.chrome.webview.postMessage(...)` 回传给 C#,在 UI 上实时显示。

总结为:这是一个“CPU 负责粒子状态更新,GPU 负责大规模点精灵绘制”的混合型架构。


关键技术点

1. 跨技术栈集成:WPF 与 Web 3D 的桥接

- C# 端调用 `EnsureCoreWebView2Async()` 初始化浏览器内核。

- 使用 `WebMessageReceived` 接收前端消息,把 FPS 同步回桌面 UI。

- 这样可以让原生桌面应用拥有 WebGL 渲染能力,同时保留 WPF 的业务壳层。

2. 大规模粒子数据结构:BufferGeometry

- 粒子位置、颜色、尺寸、生命周期都以 `Float32Array` 组织。

- 通过 `geometry.setAttribute(...)` 绑定到 GPU 可消费的缓冲属性。

- 相比逐对象管理,**结构化数组 + 批量绘制**是海量粒子的基础。

3. 自定义 Shader:粒子视觉在 GPU 完成

- 顶点着色器负责点大小透视缩放、生命周期透明度系数计算。

- 片段着色器利用 `gl_PointCoord` 裁剪圆形粒子并做柔和边缘。

- 材质配置启用 `AdditiveBlending`,形成更亮的粒子叠加效果。

仿真更新模型:每帧 CPU 循环

当前粒子运动(重力、阻力、边界反弹、重生)都在 JS `for` 循环中执行。  

这使逻辑直观易控,但也带来一个关键瓶颈:**粒子数线性增长时,CPU 计算和属性回写成本同步上升。


核心代码

1. **粒子总量入口**

   - `private const int ParticleCount = 100000;`

   - 这是压测的直接控制阀,影响所有数组长度和每帧循环规模。

2. **GPU 友好数据准备**

   - `positions / colors / sizes / lifetimes / maxLifetimes` 都是 `Float32Array`。

   - `BufferAttribute` 绑定后由 `THREE.Points` 进行一次性批量绘制。

3. **渲染材质与 Shader**

   - `THREE.ShaderMaterial({...})` 挂载 `vertexShader` 与 `fragmentShader`。

   - 开启 `transparent + AdditiveBlending + depthWrite:false`,确保粒子叠加效果。

4. **每帧更新与提交**

   - `updateParticles(deltaTime)` 内遍历全部粒子更新状态。

   - 更新后设置:

     - `particles.geometry.attributes.position.needsUpdate = true`

     - `particles.geometry.attributes.lifetime.needsUpdate = true`

   - 这一步会触发 GPU 侧缓冲同步,粒子越多,带宽与提交压力越大。

5. **桌面侧 FPS 可观测性**

   - 页面端每秒 `postMessage('FPS: ' + fps)`。

   - C# 侧 `WebMessageReceived` 更新 `txtFPS.Text`。

   - 这让测试过程具备了稳定的在线观测能力。


实测结果

1 万粒子: FPS 145 , 非常流畅 ;

10 万粒子: FPS 53 ,流畅 ;

50 万粒子: FPS 14 ,明显卡顿 ;

100 万粒子: FPS 7,严重卡顿,接近不可用 ;


性能分析

1. 为什么 1 万到 10 万仍能跑得动?

- WebGL 批量绘制能力较强,点精灵渲染天然适合并行。

- 数据结构使用 `BufferGeometry`,减少了对象级 draw call。

- Shader 逻辑相对轻量,没有复杂纹理采样或后处理。

2. 为什么到 50 万、100 万会急剧下滑?

核心原因不是“GPU 不能画点”,而是**CPU + 数据传输 + GPU 渲染**三者叠加后的总成本爆炸:

- **CPU O(N) 更新成本**:每帧遍历所有粒子,计算速度、位置、碰撞、重生。

- **缓冲更新成本**:`position/lifetime` 每帧都标记 `needsUpdate`,意味着大体量数据频繁上传。

- **像素填充压力**:粒子数量增大后,叠加混合(Additive)会显著增加片段处理负担。

- **浏览器容器开销**:WebView2 本质是嵌入式浏览器,不是纯原生图形管线,存在额外调度成本。

3. 从数据看当前实现的可用区间

- **推荐实时区间**:1 万 ~ 10 万(视业务目标而定)。

- **风险区间**:>10 万 后帧率明显衰减,尤其在复杂效果叠加时。

- **极限演示区间**:几十万到百万可以“展示数量级”,但不适合交互型实时动画。


总结

1. 它验证了 `WebView2 + Three.js + WebGL` 路线在桌面应用中的**可行性**。  

2. 它给出了当前实现的**性能基线**:10 万以内可用,数十万后显著下降,百万级不可实时。  

3. 它说明了后续优化的重点不只是“继续堆 GPU”,而是要系统处理**CPU 更新模型与数据上传路径**。  

从这个演示效果,我们看到three.js的性能仅仅是opentk(opengl)的1/10 (https://blog.ZEEKLOG.net/LateFrames/article/details/158291013?spm=1001.2014.3001.5501), 可以看出来明显的区别:

Read more

【数据集+完整源码】【YOLO】无人机数据集,目标检测无人机检测数据集 7261 张,YOLO无人机识别系统实战训练教程,yolo无人机检测。

【数据集+完整源码】【YOLO】无人机数据集,目标检测无人机检测数据集 7261 张,YOLO无人机识别系统实战训练教程,yolo无人机检测。

文章前瞻:优质数据集与检测系统精选 点击链接:更多数据集与系统目录清单 数据集与检测系统数据集与检测系统基于深度学习的道路积水检测系统基于深度学习的道路垃圾检测系统基于深度学习的道路裂缝检测系统基于深度学习的道路交通事故检测系统基于深度学习的道路病害检测系统基于深度学习的道路积雪结冰检测系统基于深度学习的汽车车牌检测系统基于深度学习的井盖丢失破损检测系统基于深度学习的行人车辆检测系统基于深度学习的航拍行人检测系统基于深度学习的车辆分类检测系统基于深度学习的电动车头盔佩戴检测系统基于深度学习的交通信号灯检测系统基于深度学习的共享单车违停检测系统基于深度学习的摆摊占道经营检测系统基于深度学习的人员游泳溺水检测系统基于深度学习的航拍水面垃圾检测系统基于深度学习的水面垃圾检测系统基于深度学习的水面船舶分类检测系统基于深度学习的海洋垃圾检测系统基于深度学习的救生衣穿戴检测系统基于深度学习的海洋生物检测系统基于深度学习的人员吸烟检测系统基于深度学习的口罩佩戴检测系统基于深度学习的烟雾和火灾检测系统基于深度学习的人员睡岗玩手机检测系统基于深度学习的人员摔倒检测系统基于深度学习的人员姿势检测系

【FPGA】Quartus Prime Lite 23.1 最新版 安装教程 ModelSim_18.1 下载安装 + 联调仿真教程 + 详细安装教程 2025最新

【FPGA】Quartus Prime Lite 23.1 最新版 安装教程 ModelSim_18.1 下载安装 + 联调仿真教程 + 详细安装教程 2025最新

前言         本文章基于截至2025年 Quartus_Prime_Lite的最新版 23.1 版本,详细的,一步一步的教你怎么安装,每一步都教你怎么做,按照流程绝对能安装成功。创作不易希望大家看完后点个赞支持创作,谢谢大家啦! 目录  软件下载地址 Quartus Prime Lite 23.1 ModelSim-Intel® FPGA 标准版软件版本 18.1 若不想在官网下载或官网下载速度太慢 点个关注+收藏可以免费用下面的百度链接进行下载  两个软件的安装包都在里面。如果使用百度链接下载则可跳过两个软件的下载流程,直接看安装流程。 一、Quartus Prime Lite 23.1 下载以及安装流程 1.1 Quartus Prime Lite 23.1 官方网站下载流程 第一步 打开上方链接到达如下界面 确保软件名称和版本如下图

输入AI绘画的用户评价,自动分类统计(满意,一般,不满意),输出评价分析报告和改进建议。

输入AI绘画的用户评价,自动分类统计(满意,一般,不满意),输出评价分析报告和改进建议。

这是将数据科学、人工智能与商业决策结合起来。下面我将为您提供一个完整的、基于Python的“AI绘画用户评价分析”程序。   项目概览:ArtCriticScope - AI绘画用户评价分析器   核心功能:用户提供一个包含AI绘画作品用户评价的CSV或文本文件,程序会自动分析每一条评价的情绪倾向,将其分类为“满意”、“一般”或“不满意”,并生成一份包含统计数据和可操作改进建议的分析报告,帮助产品团队快速定位问题,优化产品。   1. 实际应用场景与痛点   * 目标用户:AI绘画产品(如Midjourney, Stable Diffusion, DALL-E等)的创始人、产品经理、社区运营、研发团队。 * 场景描述:您领导着一个AI绘画产品的开发。每天,您的Discord频道、应用商店评论区、Reddit板块都会涌入大量用户反馈。您想知道用户对新上线的“风格迁移”功能到底满不满意,但人工阅读成千上万条评论是不现实的。 * 传统痛点:    1. 信息过载:评价数据量巨大,人工分析效率极低,且容易遗漏关键信息。    2.

目标检测数据集——无人机视觉VisDrone数据集

目标检测数据集——无人机视觉VisDrone数据集

随着无人机技术的飞速发展,无人机在航拍、监控、农业、物流等领域的应用日益广泛。与此同时,无人机视角下的视觉任务,如目标检测、目标跟踪和场景理解,也成为了计算机视觉研究的热点。然而,相比传统的地面视角数据集,无人机视角下的图像具有高度变化、小目标密集、复杂背景等独特挑战,这对现有算法提出了更高的要求。 为了应对这些挑战并推动无人机视觉技术的发展,天津大学机器学习与数据挖掘实验室推出了 VisDrone数据集。作为一个大规模、标注精细的无人机视觉数据集,VisDrone 不仅涵盖了丰富的场景和多样化的目标类别,还为研究人员提供了一个极具挑战性的测试平台。无论是小目标检测的精度提升,还是密集场景下的鲁棒性优化,VisDrone 都成为了学术界和工业界不可或缺的资源。该数据集采集自中国14个不同城市,覆盖复杂城市场景、交通枢纽、密集人群等多种环境。 VisDrone官方Github下载渠道可点击访问: https://github.com/VisDrone/VisDrone-Dataset?tab=readme-ov-file 下载的数据集为VisDrone2019-DET-train