From 40119127ee006d9e55fbb84e6d38493227712830 Mon Sep 17 00:00:00 2001 From: "Lukas Rieger (Blue)" Date: Fri, 23 Feb 2024 18:02:29 +0100 Subject: [PATCH] Pack normals into one byte instead of 4 to save space :) --- .../bluemap/core/map/hires/PRBMWriter.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java index 8556cc62..beda7d34 100644 --- a/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java +++ b/BlueMapCore/src/main/java/de/bluecolored/bluemap/core/map/hires/PRBMWriter.java @@ -87,9 +87,9 @@ public class PRBMWriter implements Closeable { writeString("normal"); out.write( ATTRIBUTE_TYPE_FLOAT | - ATTRIBUTE_NOT_NORMALIZED | + ATTRIBUTE_NORMALIZED | ATTRIBUTE_CARDINALITY_3D_VEC | - ATTRIBUTE_ENCODING_SIGNED_32BIT_FLOAT + ATTRIBUTE_ENCODING_SIGNED_8BIT_INT ); writePadding(); @@ -105,9 +105,9 @@ public class PRBMWriter implements Closeable { ); for (j = 0; j < 3; j++) { // all 3 points - writeFloat(normal.x); - writeFloat(normal.y); - writeFloat(normal.z); + writeNormalizedSignedByteValue(normal.x); + writeNormalizedSignedByteValue(normal.y); + writeNormalizedSignedByteValue(normal.z); } } } @@ -283,6 +283,11 @@ public class PRBMWriter implements Closeable { write4byteValue(Float.floatToIntBits(value)); } + private void writeNormalizedSignedByteValue(float value) throws IOException { + byte normalized = (byte) (value * 0x80 - 0.5); + out.write(normalized & 0xFF); + } + private void writeNormalizedUnsignedByteValue(float value) throws IOException { int normalized = (int) (value * 0xFF); out.write(normalized & 0xFF);