internal void GenerateColliders(float collisionReductionFactor, List <ICollider> colliders) { var mesh = _meshGenerator.GetMesh(); if (mesh == null) { Logger.Warn($"Primitive {_meshGenerator.name} did not return a mesh for collider generation."); return; } mesh = mesh.Transform(_meshGenerator.GetTransformationMatrix()); var reducedVertices = math.max( (uint)MathF.Pow(mesh.Vertices.Length, MathF.Clamp(1f - collisionReductionFactor, 0f, 1f) * 0.25f + 0.75f), 420u //!! 420 = magic ); if (reducedVertices < mesh.Vertices.Length) { mesh = ComputeReducedMesh(mesh, reducedVertices); } ColliderUtils.GenerateCollidersFromMesh(mesh, _api.GetColliderInfo(), colliders); }
public void UpdateData() { MaterialData.Name = Name; MaterialData.BaseColor = BaseColor.ToInt(ColorFormat.Bgr); MaterialData.Glossiness = Glossiness.ToInt(ColorFormat.Bgr); MaterialData.ClearCoat = ClearCoat.ToInt(ColorFormat.Bgr); MaterialData.WrapLighting = WrapLighting; MaterialData.Roughness = Roughness; MaterialData.GlossyImageLerp = (byte)BiffFloatAttribute.QuantizeUnsigned(8, MathF.Clamp(1f - GlossyImageLerp, 0f, 1f)); MaterialData.Thickness = (byte)BiffFloatAttribute.QuantizeUnsigned(8, MathF.Clamp(Thickness, 0f, 1f)); MaterialData.Edge = Edge; MaterialData.Opacity = Opacity; MaterialData.IsMetal = IsMetal ? (byte)1 : (byte)0; MaterialData.OpacityActiveEdgeAlpha = IsOpacityActive ? (byte)1 : (byte)0; MaterialData.OpacityActiveEdgeAlpha |= (byte)(BiffFloatAttribute.QuantizeUnsigned(7, MathF.Clamp(EdgeAlpha, 0f, 1f)) << 1); PhysicsMaterialData.Name = Name; PhysicsMaterialData.Elasticity = Elasticity; PhysicsMaterialData.ElasticityFallOff = ElasticityFalloff; PhysicsMaterialData.Friction = Friction; PhysicsMaterialData.ScatterAngle = ScatterAngle; }