Пример #1
0
 public void SetSkinConstraints(ObiNativeIntList particleIndices, ObiNativeVector4List skinPoints, ObiNativeVector4List skinNormals, ObiNativeFloatList skinRadiiBackstop, ObiNativeFloatList skinCompliance, ObiNativeFloatList lambdas, int count)
 {
     this.particleIndices   = particleIndices.AsNativeArray <int>();
     this.skinPoints        = skinPoints.AsNativeArray <float4>();
     this.skinNormals       = skinNormals.AsNativeArray <float4>();
     this.skinRadiiBackstop = skinRadiiBackstop.AsNativeArray <float>();
     this.skinCompliance    = skinCompliance.AsNativeArray <float>();
     this.lambdas           = lambdas.AsNativeArray <float>();
 }
Пример #2
0
        public void ApplyInterpolation(ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime)
        {
            // Interpolate particle positions and orientations.
            var interpolate = new InterpolationJob()
            {
                positions           = positions,
                startPositions      = startPositions.AsNativeArray <float4>(),
                renderablePositions = renderablePositions,

                orientations           = orientations,
                startOrientations      = startOrientations.AsNativeArray <quaternion>(),
                renderableOrientations = renderableOrientations,

                deltaTime         = stepTime,
                unsimulatedTime   = unsimulatedTime,
                interpolationMode = m_Solver.parameters.interpolation
            };

            JobHandle jobHandle = interpolate.Schedule(m_Solver.positions.count, 128);

            // Update deformable triangle normals
            var updateNormals = new UpdateNormalsJob()
            {
                renderPositions     = renderablePositions,
                deformableTriangles = deformableTriangles,
                normals             = normals
            };

            jobHandle = updateNormals.Schedule(jobHandle);

            // fluid laplacian/anisotropy:
            var d = constraints[(int)Oni.ConstraintType.Density] as BurstDensityConstraints;

            if (d != null)
            {
                jobHandle = d.CalculateAnisotropyLaplacianSmoothing(jobHandle);
            }

            // update axis:
            var updatePrincipalAxis = new UpdatePrincipalAxisJob()
            {
                activeParticles        = activeParticles,
                renderableOrientations = renderableOrientations,
                phases         = phases,
                principalRadii = principalRadii,
                principalAxis  = anisotropies,
            };

            jobHandle = updatePrincipalAxis.Schedule(activeParticles.Length, 128, jobHandle);

            jobHandle.Complete();
        }
Пример #3
0
 public void InterpolateDiffuseProperties(ObiNativeVector4List properties,
                                          ObiNativeVector4List diffusePositions,
                                          ObiNativeVector4List diffuseProperties,
                                          ObiNativeIntList neighbourCount,
                                          int diffuseCount)
 {
     particleGrid.InterpolateDiffuseProperties(this,
                                               properties.AsNativeArray <float4>(),
                                               diffusePositions.AsNativeArray <float4>(),
                                               diffuseProperties.AsNativeArray <float4>(),
                                               neighbourCount.AsNativeArray <int>(),
                                               diffuseCount).Complete();
 }
 public void SetShapeMatchingConstraints(ObiNativeIntList particleIndices,
                                         ObiNativeIntList firstIndex,
                                         ObiNativeIntList numIndices,
                                         ObiNativeIntList explicitGroup,
                                         ObiNativeFloatList shapeMaterialParameters,
                                         ObiNativeVector4List restComs,
                                         ObiNativeVector4List coms,
                                         ObiNativeQuaternionList orientations,
                                         ObiNativeFloatList lambdas,
                                         int count)
 {
     Oni.SetShapeMatchingConstraints(oniBatch, particleIndices.GetIntPtr(), firstIndex.GetIntPtr(), numIndices.GetIntPtr(), explicitGroup.GetIntPtr(),
                                     shapeMaterialParameters.GetIntPtr(), restComs.GetIntPtr(), coms.GetIntPtr(), orientations.GetIntPtr(), count);
 }
        void ReallocateParticles()
        {
            if (ps == null)
            {
                ps = GetComponent <ParticleSystem>();
                ParticleSystem.MainModule main = ps.main;
                main.simulationSpace = ParticleSystemSimulationSpace.World;
            }

            // Array to get/set particles:
            if (particles == null || particles.Length != ps.main.maxParticles)
            {
                particles      = new ParticleSystem.Particle[ps.main.maxParticles];
                positions      = new ObiNativeVector4List(ps.main.maxParticles);
                velocities     = new ObiNativeVector4List(ps.main.maxParticles);
                neighbourCount = new ObiNativeIntList(ps.main.maxParticles);
            }

            alive = ps.GetParticles(particles);
        }
Пример #6
0
        public void SetShapeMatchingConstraints(ObiNativeIntList particleIndices,
                                                ObiNativeIntList firstIndex,
                                                ObiNativeIntList numIndices,
                                                ObiNativeIntList explicitGroup,
                                                ObiNativeFloatList shapeMaterialParameters,
                                                ObiNativeVector4List restComs,
                                                ObiNativeVector4List coms,
                                                ObiNativeQuaternionList constraintOrientations,
                                                ObiNativeFloatList lambdas,
                                                int count)
        {
            this.particleIndices         = particleIndices.AsNativeArray <int>();
            this.firstIndex              = firstIndex.AsNativeArray <int>();
            this.numIndices              = numIndices.AsNativeArray <int>();
            this.explicitGroup           = explicitGroup.AsNativeArray <int>();
            this.shapeMaterialParameters = shapeMaterialParameters.AsNativeArray <float>();
            this.restComs = restComs.AsNativeArray <float4>();
            this.coms     = coms.AsNativeArray <float4>();
            this.constraintOrientations = constraintOrientations.AsNativeArray <quaternion>();

            if (Aqq.IsCreated)
            {
                Aqq.Dispose();
            }
            if (deformation.IsCreated)
            {
                deformation.Dispose();
            }

            Aqq = new NativeArray <float4x4>(count, Allocator.Persistent);

            deformation = new NativeArray <float4x4>(count, Allocator.Persistent);
            for (int i = 0; i < count; ++i)
            {
                deformation[i] = float4x4.identity;
            }

            m_ConstraintCount = count;
        }
 public void SetPinConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeQuaternionList restDarbouxVectors, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count)
 {
     Oni.SetPinConstraints(oniBatch, particleIndices.GetIntPtr(), offsets.GetIntPtr(), restDarbouxVectors.GetIntPtr(), colliderIndices.GetIntPtr(), stiffnesses.GetIntPtr(), lambdas.GetIntPtr(), count);
 }
Пример #8
0
 public void InterpolateDiffuseProperties(ObiNativeVector4List properties, ObiNativeVector4List diffusePositions, ObiNativeVector4List diffuseProperties, ObiNativeIntList neighbourCount, int diffuseCount)
 {
 }
Пример #9
0
 public void ApplyInterpolation(ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime)
 {
 }
Пример #10
0
 public void SetPinConstraints(ObiNativeIntList particleIndices, ObiNativeIntList colliderIndices, ObiNativeVector4List offsets, ObiNativeQuaternionList restDarbouxVectors, ObiNativeFloatList stiffnesses, ObiNativeFloatList lambdas, int count)
 {
     this.particleIndices    = particleIndices.AsNativeArray <int>();
     this.colliderIndices    = colliderIndices.AsNativeArray <int>();
     this.offsets            = offsets.AsNativeArray <float4>();
     this.restDarbouxVectors = restDarbouxVectors.AsNativeArray <quaternion>();
     this.stiffnesses        = stiffnesses.AsNativeArray <float2>();
     this.lambdas            = lambdas.AsNativeArray <float>();
 }
Пример #11
0
 public void InterpolateDiffuseProperties(ObiNativeVector4List properties, ObiNativeVector4List diffusePositions, ObiNativeVector4List diffuseProperties, ObiNativeIntList neighbourCount, int diffuseCount)
 {
     Oni.InterpolateDiffuseParticles(oniSolver, properties.GetIntPtr(), diffusePositions.GetIntPtr(), diffuseProperties.GetIntPtr(), neighbourCount.GetIntPtr(), diffuseCount);
 }
Пример #12
0
 public void ApplyInterpolation(ObiNativeVector4List startPositions, ObiNativeQuaternionList startOrientations, float stepTime, float unsimulatedTime)
 {
     Oni.ApplyPositionInterpolation(oniSolver, startPositions.GetIntPtr(), startOrientations.GetIntPtr(), stepTime, unsimulatedTime);
 }
Пример #13
0
 public void SetSkinConstraints(ObiNativeIntList particleIndices, ObiNativeVector4List skinPoints, ObiNativeVector4List skinNormals, ObiNativeFloatList skinRadiiBackstop, ObiNativeFloatList skinCompliance, ObiNativeFloatList lambdas, int count)
 {
     Oni.SetSkinConstraints(oniBatch, particleIndices.GetIntPtr(), skinPoints.GetIntPtr(), skinNormals.GetIntPtr(), skinRadiiBackstop.GetIntPtr(), skinCompliance.GetIntPtr(), lambdas.GetIntPtr(), count);
 }