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