示例#1
0
        public void UpdateParticleMaterial(int index)
        {
            if (solver == null)
            {
                return;
            }

            UpdateParticleResolution(index);

            ObiEmitterMaterialFluid fluidMaterial = emitterMaterial as ObiEmitterMaterialFluid;

            int solverIndex = particleIndices[index];

            solver.restDensities[solverIndex]       = fluidMaterial != null ? fluidMaterial.restDensity : 0;
            solver.viscosities[solverIndex]         = fluidMaterial != null ? fluidMaterial.viscosity : 0;
            solver.surfaceTension[solverIndex]      = fluidMaterial != null ? fluidMaterial.surfaceTension : 0;
            solver.buoyancies[solverIndex]          = fluidMaterial != null ? fluidMaterial.buoyancy : -1;
            solver.atmosphericDrag[solverIndex]     = fluidMaterial != null ? fluidMaterial.atmosphericDrag : 0;
            solver.atmosphericPressure[solverIndex] = fluidMaterial != null ? fluidMaterial.atmosphericPressure : 0;
            solver.diffusion[solverIndex]           = fluidMaterial != null ? fluidMaterial.diffusion : 0;
            solver.userData[solverIndex]            = fluidMaterial != null ? fluidMaterial.diffusionData : Vector4.zero;

            Oni.ParticlePhase particlePhase = Oni.ParticlePhase.Fluid;
            if (emitterMaterial != null && !(emitterMaterial is ObiEmitterMaterialFluid))
            {
                particlePhase = 0;
            }

            solver.phases[solverIndex] = Oni.MakePhase(fluidPhase, (selfCollisions?Oni.ParticlePhase.SelfCollide:0) | particlePhase);
        }
示例#2
0
        public override void UpdateParticlePhases()
        {
            if (!InSolver)
            {
                return;
            }

            Oni.ParticlePhase fluidPhase = Oni.ParticlePhase.Fluid;
            if (emitterMaterial != null && !(emitterMaterial is ObiEmitterMaterialFluid))
            {
                fluidPhase = 0;
            }

            for (int i = 0; i < particleIndices.Length; i++)
            {
                phases[i] = Oni.MakePhase(gameObject.layer, (selfCollisions?Oni.ParticlePhase.SelfCollide:0) | fluidPhase);
            }
            PushDataToSolver(ParticleData.PHASES);
        }