/// <summary> /// Create VGO_PS_ShapeModule from ShapeModule. /// </summary> /// <param name="module"></param> /// <param name="gltf"></param> /// <returns></returns> /// <remarks> /// @notice TextureIO.ExportTexture() may export the same texture multiple times. /// </remarks> protected virtual VGO_PS_ShapeModule CreateVgoModule(ShapeModule module, glTF gltf) { var vgoShapeModule = new VGO_PS_ShapeModule() { enabled = module.enabled, shapeType = module.shapeType, angle = module.angle, radius = module.radius, donutRadius = module.donutRadius, radiusMode = module.radiusMode, radiusSpread = module.radiusSpread, radiusSpeed = VgoParticleSystemMinMaxCurveConverter.CreateFrom(module.radiusSpeed), radiusSpeedMultiplier = module.radiusSpeedMultiplier, radiusThickness = module.radiusThickness, boxThickness = module.boxThickness.ReverseZ().ToArray(), arc = module.arc, arcMode = module.arcMode, arcSpread = module.arcSpread, arcSpeed = VgoParticleSystemMinMaxCurveConverter.CreateFrom(module.arcSpeed), arcSpeedMultiplier = module.arcSpeedMultiplier, length = module.length, meshShapeType = module.meshShapeType, meshSpawnMode = module.meshSpawnMode, meshSpawnSpread = module.meshSpawnSpread, meshSpawnSpeed = VgoParticleSystemMinMaxCurveConverter.CreateFrom(module.meshSpawnSpread), meshSpawnSpeedMultiplier = module.meshSpawnSpeedMultiplier, //mesh //meshRenderer //skinnedMeshRenderer useMeshMaterialIndex = module.useMeshMaterialIndex, meshMaterialIndex = module.meshMaterialIndex, useMeshColors = module.useMeshColors, //sprite //spriteRenderer normalOffset = module.normalOffset, textureIndex = -1, textureClipChannel = module.textureClipChannel, textureClipThreshold = module.textureClipThreshold, textureColorAffectsParticles = module.textureColorAffectsParticles, textureAlphaAffectsParticles = module.textureAlphaAffectsParticles, textureBilinearFiltering = module.textureBilinearFiltering, textureUVChannel = module.textureUVChannel, position = module.position.ReverseZ().ToArray(), rotation = module.rotation.ReverseZ().ToArray(), scale = module.scale.ToArray(), alignToDirection = module.alignToDirection, randomPositionAmount = module.randomPositionAmount, sphericalDirectionAmount = module.sphericalDirectionAmount, randomDirectionAmount = module.randomDirectionAmount, }; if (module.texture != null) { vgoShapeModule.textureIndex = TextureIO.ExportTexture(gltf, gltf.buffers.Count - 1, module.texture, glTFTextureTypes.Unknown); } return(vgoShapeModule); }
/// <summary> /// Set ParticleSystem shape field value. /// </summary> /// <param name="particleSystem"></param> /// <param name="vgoModule"></param> /// <param name="textureItemList"></param> protected virtual void SetModuleValue(ParticleSystem particleSystem, VGO_PS_ShapeModule vgoModule, IList <TextureItem> textureItemList) { if (vgoModule == null) { return; } ShapeModule module = particleSystem.shape; module.enabled = vgoModule.enabled; module.shapeType = vgoModule.shapeType; module.angle = vgoModule.angle; module.radius = vgoModule.radius; module.donutRadius = vgoModule.donutRadius; module.radiusMode = vgoModule.radiusMode; module.radiusSpread = vgoModule.radiusSpread; module.radiusSpeed = VgoParticleSystemMinMaxCurveConverter.CreateMinMaxCurve(vgoModule.radiusSpeed); module.radiusSpeedMultiplier = vgoModule.radiusSpeedMultiplier; module.radiusThickness = vgoModule.radiusThickness; module.boxThickness = ArrayConverter.ToVector3(vgoModule.boxThickness, reverseZ: true); module.arc = vgoModule.arc; module.arcMode = vgoModule.arcMode; module.arcSpread = vgoModule.arcSpread; module.arcSpeed = VgoParticleSystemMinMaxCurveConverter.CreateMinMaxCurve(vgoModule.arcSpeed); module.arcSpeedMultiplier = vgoModule.arcSpeedMultiplier; module.length = vgoModule.length; module.meshShapeType = vgoModule.meshShapeType; module.meshSpawnMode = vgoModule.meshSpawnMode; module.meshSpawnSpread = vgoModule.meshSpawnSpread; module.meshSpawnSpeed = VgoParticleSystemMinMaxCurveConverter.CreateMinMaxCurve(vgoModule.meshSpawnSpeed); module.meshSpawnSpeedMultiplier = vgoModule.meshSpawnSpeedMultiplier; //module.mesh; //module.meshRenderer; //module.skinnedMeshRenderer; module.useMeshMaterialIndex = vgoModule.useMeshMaterialIndex; module.meshMaterialIndex = vgoModule.meshMaterialIndex; module.useMeshColors = vgoModule.useMeshColors; //module.sprite; //module.spriteRenderer; module.normalOffset = vgoModule.normalOffset; if ((textureItemList != null) && (-1 < vgoModule.textureIndex) && (vgoModule.textureIndex < textureItemList.Count)) { module.texture = textureItemList[vgoModule.textureIndex].Texture; } module.textureClipChannel = vgoModule.textureClipChannel; module.textureClipThreshold = vgoModule.textureClipThreshold; module.textureColorAffectsParticles = vgoModule.textureColorAffectsParticles; module.textureAlphaAffectsParticles = vgoModule.textureAlphaAffectsParticles; module.textureBilinearFiltering = vgoModule.textureBilinearFiltering; module.textureUVChannel = vgoModule.textureUVChannel; module.position = ArrayConverter.ToVector3(vgoModule.position, reverseZ: true); module.rotation = ArrayConverter.ToVector3(vgoModule.rotation, reverseZ: true); module.scale = ArrayConverter.ToVector3(vgoModule.scale); module.alignToDirection = vgoModule.alignToDirection; module.randomPositionAmount = vgoModule.randomPositionAmount; module.sphericalDirectionAmount = vgoModule.sphericalDirectionAmount; module.randomDirectionAmount = vgoModule.randomDirectionAmount; }