Clean up Hash Functions

Clean up and do fixes to hash functions and newly introduced murmur3 hashes in #61934
* Clean up usage of murmur3
* Fixed usages of binary murmur3 on floats (this is invalid)
* Changed DJB2 to use xor (which seems to be better)
This commit is contained in:
reduz
2022-06-18 16:20:55 +02:00
parent 8e3d9a23aa
commit 141c375581
40 changed files with 391 additions and 236 deletions

View File

@ -110,12 +110,12 @@ class LightmapperRD : public Lightmapper {
struct EdgeHash {
_FORCE_INLINE_ static uint32_t hash(const Edge &p_edge) {
uint32_t h = hash_djb2_one_float(p_edge.a.x);
h = hash_djb2_one_float(p_edge.a.y, h);
h = hash_djb2_one_float(p_edge.a.z, h);
h = hash_djb2_one_float(p_edge.b.x, h);
h = hash_djb2_one_float(p_edge.b.y, h);
h = hash_djb2_one_float(p_edge.b.z, h);
uint32_t h = hash_murmur3_one_float(p_edge.a.x);
h = hash_murmur3_one_float(p_edge.a.y, h);
h = hash_murmur3_one_float(p_edge.a.z, h);
h = hash_murmur3_one_float(p_edge.b.x, h);
h = hash_murmur3_one_float(p_edge.b.y, h);
h = hash_murmur3_one_float(p_edge.b.z, h);
return h;
}
};
@ -146,15 +146,15 @@ class LightmapperRD : public Lightmapper {
struct VertexHash {
_FORCE_INLINE_ static uint32_t hash(const Vertex &p_vtx) {
uint32_t h = hash_djb2_one_float(p_vtx.position[0]);
h = hash_djb2_one_float(p_vtx.position[1], h);
h = hash_djb2_one_float(p_vtx.position[2], h);
h = hash_djb2_one_float(p_vtx.uv[0], h);
h = hash_djb2_one_float(p_vtx.uv[1], h);
h = hash_djb2_one_float(p_vtx.normal_xy[0], h);
h = hash_djb2_one_float(p_vtx.normal_xy[1], h);
h = hash_djb2_one_float(p_vtx.normal_z, h);
return h;
uint32_t h = hash_murmur3_one_float(p_vtx.position[0]);
h = hash_murmur3_one_float(p_vtx.position[1], h);
h = hash_murmur3_one_float(p_vtx.position[2], h);
h = hash_murmur3_one_float(p_vtx.uv[0], h);
h = hash_murmur3_one_float(p_vtx.uv[1], h);
h = hash_murmur3_one_float(p_vtx.normal_xy[0], h);
h = hash_murmur3_one_float(p_vtx.normal_xy[1], h);
h = hash_murmur3_one_float(p_vtx.normal_z, h);
return hash_fmix32(h);
}
};