Skip to content

发射器模块

发射器模块是粒子系统中的一个重要组成部分,用于定义和控制粒子的发射行为。它决定了粒子在空间中的初始位置、速度、方向以及其他属性,从而影响整个粒子系统的效果。

使用方式

发射器模块是粒子仿真器必备模块,以下代码展示如何为粒子仿真器添加一个发射器模块:

ts
let emitter = simulator.addModule(ParticleEmitterModule);
// 设置最大粒子数
emitter.maxParticle = 10000;
// 设置持续发射时间
emitter.duration = 10;
// 设置发射速率(x个/秒)
emitter.emissionRate = 1000;
// 设置粒子生命周期大小
emitter.startLifecycle.setScalar(1);
// 设置发射器发射形状
emitter.shapeType = ShapeType.Box;
// 设置发射器发射形状的大小
emitter.boxSize = new Vector3(10, 10, 10);
// 设置发射器从发射形状的哪个位置发射
emitter.emitLocation = EmitLocation.Edge;
let emitter = simulator.addModule(ParticleEmitterModule);
// 设置最大粒子数
emitter.maxParticle = 10000;
// 设置持续发射时间
emitter.duration = 10;
// 设置发射速率(x个/秒)
emitter.emissionRate = 1000;
// 设置粒子生命周期大小
emitter.startLifecycle.setScalar(1);
// 设置发射器发射形状
emitter.shapeType = ShapeType.Box;
// 设置发射器发射形状的大小
emitter.boxSize = new Vector3(10, 10, 10);
// 设置发射器从发射形状的哪个位置发射
emitter.emitLocation = EmitLocation.Edge;

粒子发射器模块 ParticleEmitterModule 包含一些重要的发射参数,各参数作用如下:

名称描述
maxParticle最大粒子数
duration粒子发射持续时间(单位:秒)
emissionRate发射速率(每秒发射多少个粒子)
startLifecycle粒子生命周期(单位:秒)
shapeType发射器形状(圆形、矩形、球体、锥体)
emitLocation发射位置(基于 实体,表面,边缘)
angle角度(当发射器形状为锥体时有效)
radius半径(当发射器形状为圆形、球体、锥体时有效)
boxSize矩形/盒子 大小


WebGPU is not supported in your browser
Please upgrade to latest Chrome/Edge

<
ts
import { Engine3D, AtmosphericComponent, Vector3, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext } from '@orillusion/core'

import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation } from '@orillusion/particle'

export class Sample_ParticleEmitter {
    async run() {
        await Engine3D.init()

        let scene = new Scene3D()
        scene.addComponent(AtmosphericComponent).sunY = 0.6

        let camera = CameraUtil.createCamera3DObject(scene)
        camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0)

        let ctrl = camera.object3D.addComponent(HoverCameraController)
        ctrl.setCamera(45, -15, 30)

        await this.initScene(scene)

        let view = new View3D()
        view.scene = scene
        view.camera = camera
        Engine3D.startRenderView(view)
    }

    async initScene(scene: Scene3D) {
        // 创建实体对象
        let obj = new Object3D()
        scene.addChild(obj)

        // 添加粒子系统组件
        let particleSystem = obj.addComponent(ParticleSystem)

        // 设置粒子材质
        let material = new ParticleMaterial()
        material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png')

        // 设置粒子形状
        particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS)
        particleSystem.material = material

        // 使用指定仿真器
        let simulator = particleSystem.useSimulator(ParticleStandardSimulator)

        // 添加发射器模块
        let emitter = simulator.addModule(ParticleEmitterModule)
        emitter.maxParticle = 1 * 10000
        emitter.duration = 10
        emitter.emissionRate = 1000
        emitter.startLifecycle.setScalar(1)
        emitter.shapeType = ShapeType.Box
        emitter.boxSize = new Vector3(10, 10, 10)
        emitter.emitLocation = EmitLocation.Edge

        // 开始播放
        particleSystem.play()
    }
}

new Sample_ParticleEmitter().run()
import { Engine3D, AtmosphericComponent, Vector3, View3D, HoverCameraController, Object3D, PlaneGeometry, Scene3D, CameraUtil, webGPUContext } from '@orillusion/core'

import { ParticleSystem, ParticleMaterial, ParticleStandardSimulator, ParticleEmitterModule, ShapeType, EmitLocation } from '@orillusion/particle'

export class Sample_ParticleEmitter {
    async run() {
        await Engine3D.init()

        let scene = new Scene3D()
        scene.addComponent(AtmosphericComponent).sunY = 0.6

        let camera = CameraUtil.createCamera3DObject(scene)
        camera.perspective(60, webGPUContext.aspect, 0.1, 5000.0)

        let ctrl = camera.object3D.addComponent(HoverCameraController)
        ctrl.setCamera(45, -15, 30)

        await this.initScene(scene)

        let view = new View3D()
        view.scene = scene
        view.camera = camera
        Engine3D.startRenderView(view)
    }

    async initScene(scene: Scene3D) {
        // 创建实体对象
        let obj = new Object3D()
        scene.addChild(obj)

        // 添加粒子系统组件
        let particleSystem = obj.addComponent(ParticleSystem)

        // 设置粒子材质
        let material = new ParticleMaterial()
        material.baseMap = await Engine3D.res.loadTexture('https://cdn.orillusion.com/particle/fx_a_glow_003.png')

        // 设置粒子形状
        particleSystem.geometry = new PlaneGeometry(1, 1, 1, 1, Vector3.Z_AXIS)
        particleSystem.material = material

        // 使用指定仿真器
        let simulator = particleSystem.useSimulator(ParticleStandardSimulator)

        // 添加发射器模块
        let emitter = simulator.addModule(ParticleEmitterModule)
        emitter.maxParticle = 1 * 10000
        emitter.duration = 10
        emitter.emissionRate = 1000
        emitter.startLifecycle.setScalar(1)
        emitter.shapeType = ShapeType.Box
        emitter.boxSize = new Vector3(10, 10, 10)
        emitter.emitLocation = EmitLocation.Edge

        // 开始播放
        particleSystem.play()
    }
}

new Sample_ParticleEmitter().run()