额外 GPU 数据
自版本 2.0.0Photon2 允许你向 GPU 发送额外的逐粒子顶点属性——例如 age、T 或速度。
注意:
- 此功能需要 GPU 实例模式。
- 目前仅支持粒子发射器(其他 FX 对象的支持将在后续添加)。
- 修改原版顶点格式较为困难,且发送大量逐顶点数据效率较低,因此采用此独立系统。
粒子发射器

在 Particle Emitter 的 Inspector 面板中,启用 Additional GPU Data 并选择你需要的数据字段。
支持的数据类型
| 数据 | 类型 | 描述 |
|---|---|---|
Random | float | [0, 1) 范围内的随机值 since 2.1.3 |
T | float | 归一化生命周期:age / lifetime |
Age | float | 粒子年龄 |
LifeTime | float | 粒子生命周期 |
Position (local) | vec3 | 粒子本地位置 |
Velocity | vec3 | 粒子速度 |
isCollided | float | 1 = 已碰撞,0 = 未碰撞 |
Emitter T | float | 发射器归一化生命周期 |
Emitter Age | float | 发射器年龄 |
Emitter Position | vec3 | 发射器世界位置 |
Emitter Velocity | vec3 | 发射器速度 |
🛠 Shader 设置
额外属性在**顶点着色器(vsh)**中,按顺序追加在默认顶点布局之后。
⚠ 警告:
- 务必将新属性声明放在
#moj_import <photon:particle.glsl>之后。- GPU 和驱动的行为可能有所不同;顺序布局不一定总是可靠——需要时请使用
layout(location = x)显式绑定属性。
示例: 如果你启用了 T 和 Velocity,将其添加到你的 shader:
glsl
#version 330 core
#moj_import <photon:particle.glsl>
in float T;
in vec3 velocity;
/*
layout(location = 9) in float T; // 显式位置绑定
layout(location = 10) in vec3 velocity;
*/
void main() {
// 在此处使用额外属性...
}✅ 专业提示: 保持你的布局索引有序——发射器的属性顺序与 shader 声明不匹配可能导致渲染异常或数值错误。