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>(); }
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>(); }
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(); }
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 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; }