应用介绍
一个在手机桌面上运行实时PBR+IBL的3D启动器
我们做了一个违背"常识"的决定:不用现成引擎。
市面上主流的3D桌面/启动器产品,几乎全部基于Unity或Unreal等通用游戏引擎开发。这是合理的商业选择——引擎成熟、人才好招、迭代速度快。
但我们没有走这条路。
我们从头写了渲染器。在OpenGL ES 3.2之上,构建了一套面向移动端桌面场景的轻量级实时渲染管线。没有Editor,没有可视化蓝图,全部是C++和GLSL。
为什么?
因为通用引擎是为"游戏"设计的。它们需要处理场景切换、物理碰撞、动画状态机、脚本系统……这些开销,在游戏里是必要的,在桌面上是浪费的。
我们只需要做一件事:在手机屏幕上,渲染一个高动态范围的3D空间,60fps,不掉帧,不发热。
为此我们做了以下工程决策:
1. 自研PBR材质系统
基于微表面模型(GGX分布+Smith几何衰减+Schlick菲涅尔近似),支持Metalness-Roughness工作流。所有材质参数在离线阶段烘焙进自定义二进制格式,运行时零解析开销,直接Upload to GPU。
2. 基于图像的光照(IBL)
预计算漫反射辐照度贴图(Irradiance Map)和镜面反射预滤波贴图(Pre-filtered Environment Map),配合BRDF LUT,实现单次采样的高光计算。环境光源取自HDR全景图,在编译期完成卷积,运行时只做采样和计算。
3. 自定义3D资产打包格式
不使用glTF、FBX或OBJ。我们设计了一套面向GPU渲染的二进制布局:顶点数据按Cache Line对齐,索引缓冲区采用16-bit/32-bit混合索引,纹理数据直接存储为GPU原生压缩格式(ASTC)。加载即用,无需解析、无需转换、无需运行时构建BVH或加速结构。
4. 触摸驱动的视差响应
桌面不是静态的。每一次触摸滑动,都会驱动视角矩阵的实时变换。平移、旋转、缩放——场景的每一帧都在根据用户交互重新计算View-Projection矩阵。这不是"切换页面",这是"环顾世界"。
5. 异步资源加载与帧率锁定
所有3D资产在应用启动时异步加载到显存,主线程不阻塞。渲染循环与Choreographer同步,帧率锁定在设备刷新率(60/90/120Hz自适应),保证滑动跟手性和视觉连贯性。
新版特性
2026.09.09
1 修复部分设备在特定情况随机崩溃的问题。原因是部分3D资源的结束位置未设置0结尾,导致内存访问越界,导致典型的随机延迟崩溃。
2 更新snow主题,冰雪主题,应用图标为圆盘形状。
3 日志数据打包和上传的优化。