public ulong CalculateHash() { const float position_granularity = 0.001f; // millimeter const float normal_granularity = 0.00001f; const float color_granularity = 0.001f; const float uv_granularity = 0.0001f; var hasher = new Murmur3(); hasher.AddHash(m_posSet); hasher.AddHash(m_normalSet); hasher.AddHash(m_uv1Set); hasher.AddHash(m_uv2Set); hasher.AddHash(m_uv3Set); if (m_posSet) { hasher.AddHash(m_pos, position_granularity); } if (m_normalSet) { hasher.AddHash(m_normal, normal_granularity); } hasher.AddHash(m_color, color_granularity); if (m_uv1Set) { hasher.AddHash(m_uv1, uv_granularity); } if (m_uv2Set) { hasher.AddHash(m_uv2, uv_granularity); } if (m_uv3Set) { hasher.AddHash(m_uv3, uv_granularity); } hasher.Finish(); return(hasher.Hash64Bit); }