上篇文章简介了XR-Frame框架下

如何进行点击场景中进行交互https://blog.csdn.net/weixin_39318421/article/details/137097113?spm=1011.2415.3001.5331

本篇文章,我们讲解xr-frame中的粒子系统。

粒子系统可以以非常低的系统消耗来模拟雨雪天气等物理效果。

上面这个粒子场景,模拟了向下坠落的粒子碰撞到石柱后分散开的物理效果.

这是一个模拟效果,并不是真正开启了物理碰撞,物理碰撞在小程序中消耗会比较大,容易造成卡顿。

场景中其实是用了3组粒子。

第一组实现向下坠落。

第二组通过粒子的球形发射器实现了球形分散的效果,

第三组采用粒子的锥形发射器实现了分散发射的效果。

一:源码分析

xr-frame框架中粒子的标签采用<xr-particle>,然后通过给标签设置属性来改变粒子的效果

(1)首先我们加载一个材质,作为呈现粒子的图片

<xr-asset-load type="texture" asset-id="point" src="/static/point.png" />

(2)第一组粒子

<xr-particle
	        capacity="500" emit-rate="50" gravity="3"
	        size="0.08 0.08" life-time="1 1" speed="0.04 0.1"
	        start-color="1 1 1 1" start-color2="0.2 0.4 0.6 1" end-color="0.2 0.4 0.6 1"
	        emitter-type="BoxShape"
		emitter-position="0 3 0"
	        emitter-props="minEmitBox:-0.5 0 0.5,maxEmitBox:0.5 0.2 0,direction:0 0 -1,direction2:0 0 -1"
	        texture="point"
	      />

这一组粒子采用箱型发射器BoxShape

gravity 属性表示y轴上的重力,

start-color 表示粒子的颜色,这里设置了两个颜色,实现粒子的随机变色,

end-color 表示粒子消逝的时候的颜色。

(3)第二组粒子

<xr-particle
		    capacity="500" emit-rate="70" gravity="2"
		    size="0.08 0.08" life-time="1 1" speed="0.04 0.1"
		    start-color="1 1 1 1" start-color2="0.2 0.4 0.6 1" end-color="0.2 0.4 0.6 1"
		    emitter-type="SphereShape"
			emitter-position="0 -0.7 0"
		    emitter-props="radius:1.2,randomizeDirection:0.5"
		    texture="point"
		    />

这组粒子采用球形发射器SphereShape,实现了球形发射粒子的效果

emitter-props 中的属性代表了发射器的一些参数:

radius代表粒子随机生成球型区域的半径;

randomizeDirection 代表粒子发射方向的扰动程度

具体的效果可以通过设置不同的参数预览。

(4)第三组粒子

<xr-particle
		    capacity="500" emit-rate="50" gravity="-2"
			rotation="0 0 180"
		    size="0.08 0.08" life-time="1 1" speed="0.04 0.1"
		    start-color="1 1 1 1" start-color2="0.2 0.4 0.6 1" end-color="0.2 0.4 0.6 1"
		    emitter-type="ConeShape"
			emitter-position="0 -1 0"
		    emitter-props="radius:2,randomizeDirection:0.5"
		    texture="point"
		    />

这组粒子采用锥形发射器ConeShape,这种发射器可以实现类似于手电光线照射时的颗粒效果。

其发射器的参数含义与球形粒子差不多。详细的说明大家可以查看微信小程序开发文档。

二:粒子属性说明

下面这个表格是对粒子中各个属性的简要说明,可以通过配置这些属性实现想要的粒子效果

名称类型备注默认值用例
anglenumber[]粒子的起始角度,"最小值 最大值(可选)"[0, 0]angle="0 0"
angular-speednumber[]每秒钟粒子旋转的角度(单位:角度)[0, 0]angular-speed="0 0"
atlasAtlas描绘粒子形态的纹理图集atlas="particle-atlas"
atlas-framesstring[]指定纹理图集中的特定帧,以帧名的形式atlas-frames="snow star"
atlas-loopboolean决定纹理图集播放到最后一帧时是否循环trueatlas-loop="false"
atlas-randomboolean粒子的初始形态是否从纹理集中随机选择falseatlas-random="true"
atlas-speednumber粒子纹理的变化速度1atlas-speed="2"
burst-countnumber粒子一次性喷射的粒子数量, 大于-1生效-1burst-count="5"
capacitynumber容许同时存在的最多粒子数量1capacity="5"
delaynumber延时启动粒子的秒数0delay="3"
emit-ratenumber每秒钟允许生成的最多粒子数量10emit-rate="5"
emitter-typestring粒子发射器的类型"PointShape"emitter-type="SphereShape"
emitter-propsmap粒子发射器的属性, 搭配发射器类型使用""emitter-props="radius:1.5"
emitter-positionnumber[]粒子发射器的位置(0, 0, 0)emitter-position="2 0 0"
end-colornumber[]粒子生命周期结束时的颜色[1, 1, 0, 1]end-color="1 1 0 1"
gravitynumber粒子在y轴上每秒的运动距离0gravity="9.8"
life-timenumber[]粒子的生命周期时长区间,"最小值 最大值(可选)"[1, 1]lifeTime="1 3"
render-modestring粒子的渲染模式, 详见billboard模式介绍“default"render-mode="stretched"
sizenumber[]粒子的大小,"最小值 最大值(可选)"[0.3, 0.3]size="1"
speednumber[]粒子的速度大小,"最小值 最大值(可选)"[1, 1]speed="1 1"
start-colornumber[]粒子初始颜色左区间[1, 0, 0, 1]start-color="1 0 0 1"
start-color2number[]粒子初始颜色右区间start-color2="1 1 0 1"
stop-durationnumber粒子存在的总时长(单位:秒), 0表示永远存在0stop-duration="3"
texturestring描绘粒子形态的基本纹理texture="particle-texture"
meshstring以特定网格形态渲染粒子mesh="cube"
use-noiseboolean是否对粒子运动轨迹启用噪声falseuse-noise="true"
noise-texturestring采样的噪声纹理名(可选), 内置柏林噪声noise-texture="noiseTexture"
noise-strengthnumber[]不同轴向上施加噪声干涉运动的力度(可选)[1, 1, 1]noise-strength="2 1 1"

三.附件说明

附件中的代码就是本篇文章用到的模型点击交互识别的xr-frame组件中的代码。
大家可以参考学习,如果不会配置需要查看一下这篇文章,xr-frame基础环境搭建

四.示例小程序

下面这个小程序,是我根据官方指南做的一个简易的示例程序,其中运用了场景的搭建,材质动态修改,模型动态添加与删除,粒子特效等功能,可以作为本片文章的参考。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐