From 676f96ade4969870fe8146d5d5ded782253a714c Mon Sep 17 00:00:00 2001 From: MontyTRC89 Date: Tue, 25 Nov 2025 12:03:56 +0100 Subject: [PATCH 01/10] Fixed color range, now it's 0...1 --- TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs index 1cc738914..cac4c4098 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs @@ -123,7 +123,7 @@ private Vector3 CalculateLightForCustomVertex(Room room, Vector3 position, Vecto output += RoomGeometry.CalculateLightForVertex(room, light, position, normal, false, false); } - return Vector3.Max(output, new Vector3()) * (1.0f / 128.0f); + return Vector3.Max(output, new Vector3()) * (1.0f / 255.0f); } private TombEngineRoom BuildRoom(Room room) From 8b42d80bd402d693891cf2f16773dea27558b914 Mon Sep 17 00:00:00 2001 From: MontyTRC89 Date: Tue, 25 Nov 2025 14:11:14 +0100 Subject: [PATCH 02/10] Fixed more occurences of 0...1 --- .../TombEngine/LevelCompilerTombEngine.cs | 2 +- .../LevelData/Compilers/TombEngine/Rooms.cs | 22 +++++++++++-------- .../LevelData/Compilers/TombEngine/Wad.cs | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs index 02bfd3597..05db41a66 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs @@ -495,7 +495,7 @@ private void PrepareItems() Yaw = ToTrAngle(instance.RotationY), Pitch = ToTrAngle(instance.RotationX), Roll = ToTrAngle(-instance.Roll), - Color = new Vector4(instance.Color.X, instance.Color.Y, instance.Color.Z, 1.0f), + Color = new Vector4(instance.Color.X * 0.5f, instance.Color.Y * 0.5f, instance.Color.Z * 0.5f, 1.0f), // 0...1 range OCB = instance.Ocb, Flags = unchecked((ushort)flags), LuaName = instance.LuaName ?? string.Empty diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs index cac4c4098..f0f6e3dff 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs @@ -123,6 +123,7 @@ private Vector3 CalculateLightForCustomVertex(Room room, Vector3 position, Vecto output += RoomGeometry.CalculateLightForVertex(room, light, position, normal, false, false); } + // Before it was 1.0f / 128.0f, but now we want the color to be in 0...1 range return Vector3.Max(output, new Vector3()) * (1.0f / 255.0f); } @@ -470,16 +471,18 @@ private TombEngineRoom BuildRoom(Room room) if (!entry.TintAsAmbient) { color = CalculateLightForCustomVertex(room, position, normal, false, room.Properties.AmbientLight * 128); - // Apply Shade factor - color *= shade; - // Apply Instance Color - color *= staticMesh.Color; + // Apply Shade factor + // TODO: * 0.5f here too? + color *= shade; + // Apply Instance Color (color is in 0...2 range, let's divide by two for returning it in 0...1 range + color *= staticMesh.Color * 0.5f; } else { color = CalculateLightForCustomVertex(room, position, normal, false, staticMesh.Color * 128); - //Apply Shade factor - color *= shade; + // Apply Shade factor + // TODO: * 0.5f here too? + color *= shade; } var trVertex = new TombEngineVertex @@ -901,7 +904,7 @@ private TombEngineRoom BuildRoom(Room room) Scale = instance.Scale, ObjectID = checked((ushort)instance.WadObjectId.TypeId), Flags = (ushort)(0x0007), // FIXME: later let user choose if solid (0x0007) or soft (0x0005)! - Color = new Vector4(instance.Color.X, instance.Color.Y, instance.Color.Z, 1.0f), + Color = new Vector4(instance.Color.X * 0.5f, instance.Color.Y * 0.5f, instance.Color.Z * 0.5f, 1.0f), // 0...1 range HitPoints = 0, LuaName = instance.LuaName ?? string.Empty }) ; @@ -918,7 +921,8 @@ private static int GetOrAddVertex(Room room, Dictionary roomVerticesDi var trVertex = new TombEngineVertex(); trVertex.Position = new Vector3(Position.X, -(Position.Y + room.WorldPos.Y), Position.Z); - trVertex.Color = color; + // Write the color in 0...1 range + trVertex.Color = color * 0.5f; trVertex.IsOnPortal = false; trVertex.IndexInPoly = index; @@ -952,7 +956,7 @@ private void ConvertLights(Room room, TombEngineRoom newRoom) (int)Math.Round(newRoom.Info.X + light.Position.X), (int)-Math.Round(light.Position.Y + room.WorldPos.Y), (int)Math.Round(newRoom.Info.Z + light.Position.Z)), - Color = light.Color, + Color = light.Color * 0.5f, // Put it in 0...1 range Intensity = light.Intensity }; diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs index 49d12edce..ac97a295f 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs @@ -46,7 +46,7 @@ private TombEngineMesh ConvertWadMesh(WadMesh oldMesh, bool isStatic, string obj { Position = new Vector3(pos.X, -pos.Y, pos.Z), Normal = Vector3.Normalize(new Vector3(normal.X, -normal.Y, normal.Z)), - Color = color, + Color = color * 0.5f, // 0...1 range BoneIndex = oldMesh.HasWeights && oldMesh.VertexWeights[i].Valid() ? oldMesh.VertexWeights[i].Index : new int[4] { meshIndex, 0, 0, 0 }, BoneWeight = oldMesh.HasWeights && oldMesh.VertexWeights[i].Valid() ? oldMesh.VertexWeights[i].Weight : new float[4] { 1, 0, 0, 0 }, Glow = oldMesh.HasAttributes ? (float)oldMesh.VertexAttributes[i].Glow / 64.0f : 0.0f, From caf3f9977e06396790f90e6a4d0d7a2a5dac4fe6 Mon Sep 17 00:00:00 2001 From: MontyTRC89 Date: Thu, 27 Nov 2025 09:52:44 +0100 Subject: [PATCH 03/10] Fixed ambient light range --- TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs index f0f6e3dff..d5e6c7c09 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs @@ -168,7 +168,7 @@ private TombEngineRoom BuildRoom(Room room) newRoom.AlternateKind = AlternateKind.BaseRoom; // Store ambient intensity - newRoom.AmbientLight = room.Properties.AmbientLight; + newRoom.AmbientLight = room.Properties.AmbientLight * 0.5f; // 0...1 // Room flags if (room.Properties.FlagHorizon) From b30de7f9adf16537161364bc80326c5b08804698 Mon Sep 17 00:00:00 2001 From: MontyTRC89 Date: Sat, 24 Jan 2026 07:26:59 +0100 Subject: [PATCH 04/10] Fixed some bad normalization factors --- .../LevelData/Compilers/TombEngine/Rooms.cs | 16 +++++++--------- .../LevelData/Compilers/TombEngine/Wad.cs | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs index 8361e1fe4..2583c7a2b 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs @@ -471,18 +471,16 @@ private TombEngineRoom BuildRoom(Room room) if (!entry.TintAsAmbient) { color = CalculateLightForCustomVertex(room, position, normal, false, room.Properties.AmbientLight * 128); - // Apply Shade factor - // TODO: * 0.5f here too? - color *= shade; - // Apply Instance Color (color is in 0...2 range, let's divide by two for returning it in 0...1 range + // Apply Shade factor (shade is already in 0...1 range from WAD vertex colors) + color *= shade; + // Apply Instance Color (staticMesh.Color is in 0...2 range, convert to 0...1) color *= staticMesh.Color * 0.5f; } else { color = CalculateLightForCustomVertex(room, position, normal, false, staticMesh.Color * 128); - // Apply Shade factor - // TODO: * 0.5f here too? - color *= shade; + // Apply Shade factor (shade is already in 0...1 range from WAD vertex colors) + color *= shade; } var trVertex = new TombEngineVertex @@ -625,8 +623,8 @@ private TombEngineRoom BuildRoom(Room room) } else { - var color = room.Properties.AmbientLight; - trVertex.Color = color; + // AmbientLight is in 0...2 range, convert to 0...1 + trVertex.Color = room.Properties.AmbientLight * 0.5f; } // HACK: Find a vertex with same coordinates and merge with it. diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs index 7d443ac10..95fdfd9c6 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs @@ -46,7 +46,7 @@ private TombEngineMesh ConvertWadMesh(WadMesh oldMesh, bool isStatic, string obj { Position = new Vector3(pos.X, -pos.Y, pos.Z), Normal = Vector3.Normalize(new Vector3(normal.X, -normal.Y, normal.Z)), - Color = color * 0.5f, // 0...1 range + Color = color, // WAD vertex colors are already in 0...1 range BoneIndex = oldMesh.HasWeights && oldMesh.VertexWeights[i].Valid() ? oldMesh.VertexWeights[i].Index : new int[4] { meshIndex, 0, 0, 0 }, BoneWeight = oldMesh.HasWeights && oldMesh.VertexWeights[i].Valid() ? oldMesh.VertexWeights[i].Weight : new float[4] { 1, 0, 0, 0 }, Glow = oldMesh.HasAttributes ? (float)oldMesh.VertexAttributes[i].Glow / 64.0f : 0.0f, From 3ead38c3d5fae19309e8bec46dc67a6cd6e65adb Mon Sep 17 00:00:00 2001 From: MontyTRC89 Date: Wed, 4 Feb 2026 11:37:23 +0100 Subject: [PATCH 05/10] FIxed mesh vertex color range --- TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs index 95fdfd9c6..9083f8526 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs @@ -40,13 +40,15 @@ private TombEngineMesh ConvertWadMesh(WadMesh oldMesh, bool isStatic, string obj { var pos = oldMesh.VertexPositions[i]; var normal = oldMesh.VertexNormals[i]; - var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] : new Vector3(1.0f); + + // TE uses the 0...2 range, we'll fix it in the future + var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] / 0.5f : new Vector3(0.5f); var v = new TombEngineVertex() { Position = new Vector3(pos.X, -pos.Y, pos.Z), Normal = Vector3.Normalize(new Vector3(normal.X, -normal.Y, normal.Z)), - Color = color, // WAD vertex colors are already in 0...1 range + Color = color, BoneIndex = oldMesh.HasWeights && oldMesh.VertexWeights[i].Valid() ? oldMesh.VertexWeights[i].Index : new int[4] { meshIndex, 0, 0, 0 }, BoneWeight = oldMesh.HasWeights && oldMesh.VertexWeights[i].Valid() ? oldMesh.VertexWeights[i].Weight : new float[4] { 1, 0, 0, 0 }, Glow = oldMesh.HasAttributes ? (float)oldMesh.VertexAttributes[i].Glow / 64.0f : 0.0f, From 01b192ca4744e81fe7c8114051af245a0bed029b Mon Sep 17 00:00:00 2001 From: Lwmte <3331699+Lwmte@users.noreply.github.com> Date: Thu, 5 Feb 2026 01:30:41 +0100 Subject: [PATCH 06/10] Remove mesh vertex color divider as we operate mesh vertex colors on a normal range --- TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs index 9083f8526..15311676c 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs @@ -42,7 +42,7 @@ private TombEngineMesh ConvertWadMesh(WadMesh oldMesh, bool isStatic, string obj var normal = oldMesh.VertexNormals[i]; // TE uses the 0...2 range, we'll fix it in the future - var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] / 0.5f : new Vector3(0.5f); + var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] : new Vector3(0.5f); var v = new TombEngineVertex() { From 020f8042c51bba9d0494bc2bd625ec4e0045cfad Mon Sep 17 00:00:00 2001 From: Lwmte <3331699+Lwmte@users.noreply.github.com> Date: Thu, 5 Feb 2026 03:11:24 +0100 Subject: [PATCH 07/10] Update Wad.cs --- TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs index 15311676c..866f13a94 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs @@ -41,8 +41,7 @@ private TombEngineMesh ConvertWadMesh(WadMesh oldMesh, bool isStatic, string obj var pos = oldMesh.VertexPositions[i]; var normal = oldMesh.VertexNormals[i]; - // TE uses the 0...2 range, we'll fix it in the future - var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] : new Vector3(0.5f); + var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] : new Vector3(0.5f); var v = new TombEngineVertex() { From 19e6e48833e12f57c3172b781dee24fabbf1f2f2 Mon Sep 17 00:00:00 2001 From: Lwmte <3331699+Lwmte@users.noreply.github.com> Date: Thu, 5 Feb 2026 03:11:46 +0100 Subject: [PATCH 08/10] Update Wad.cs --- TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs index 866f13a94..8a044e5e3 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs @@ -40,7 +40,6 @@ private TombEngineMesh ConvertWadMesh(WadMesh oldMesh, bool isStatic, string obj { var pos = oldMesh.VertexPositions[i]; var normal = oldMesh.VertexNormals[i]; - var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] : new Vector3(0.5f); var v = new TombEngineVertex() From 4444fe7501c1973a5b38af43877141de22e55d34 Mon Sep 17 00:00:00 2001 From: Lwmte <3331699+Lwmte@users.noreply.github.com> Date: Thu, 5 Feb 2026 03:17:51 +0100 Subject: [PATCH 09/10] Use same comment for all normalization operations --- .../TombEngine/LevelCompilerTombEngine.cs | 2 +- .../LevelData/Compilers/TombEngine/Rooms.cs | 24 +++++++++---------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs index e4169f574..ef5dcab00 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/LevelCompilerTombEngine.cs @@ -490,7 +490,7 @@ private void PrepareItems() Yaw = ToTrAngle(instance.RotationY), Pitch = ToTrAngle(instance.RotationX), Roll = ToTrAngle(-instance.Roll), - Color = new Vector4(instance.Color.X * 0.5f, instance.Color.Y * 0.5f, instance.Color.Z * 0.5f, 1.0f), // 0...1 range + Color = new Vector4(instance.Color.X * 0.5f, instance.Color.Y * 0.5f, instance.Color.Z * 0.5f, 1.0f), // Normalize to 0...1 range OCB = instance.Ocb, Flags = unchecked((ushort)flags), LuaName = instance.LuaName ?? string.Empty diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs index 397ecde5b..a0308d465 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Rooms.cs @@ -123,7 +123,7 @@ private Vector3 CalculateLightForCustomVertex(Room room, Vector3 position, Vecto output += RoomGeometry.CalculateLightForVertex(room, light, position, normal, false, false); } - // Before it was 1.0f / 128.0f, but now we want the color to be in 0...1 range + // Normalize to 0...1 range return Vector3.Max(output, new Vector3()) * (1.0f / 255.0f); } @@ -168,7 +168,7 @@ private TombEngineRoom BuildRoom(Room room) newRoom.AlternateKind = AlternateKind.BaseRoom; // Store ambient intensity - newRoom.AmbientLight = room.Properties.AmbientLight * 0.5f; // 0...1 + newRoom.AmbientLight = room.Properties.AmbientLight * 0.5f; // Normalize to 0...1 range // Room flags if (room.Properties.FlagHorizon) @@ -472,15 +472,15 @@ private TombEngineRoom BuildRoom(Room room) if (!entry.TintAsAmbient) { color = CalculateLightForCustomVertex(room, position, normal, false, room.Properties.AmbientLight * 128); - // Apply Shade factor (shade is already in 0...1 range from WAD vertex colors) + // Apply Shade factor color *= shade; - // Apply Instance Color (staticMesh.Color is in 0...2 range, convert to 0...1) - color *= staticMesh.Color * 0.5f; + // Apply Instance Color + color *= staticMesh.Color * 0.5f; // Normalize to 0...1 range } else { color = CalculateLightForCustomVertex(room, position, normal, false, staticMesh.Color * 128); - // Apply Shade factor (shade is already in 0...1 range from WAD vertex colors) + // Apply Shade factor color *= shade; } @@ -624,8 +624,7 @@ private TombEngineRoom BuildRoom(Room room) } else { - // AmbientLight is in 0...2 range, convert to 0...1 - trVertex.Color = room.Properties.AmbientLight * 0.5f; + trVertex.Color = room.Properties.AmbientLight * 0.5f; // Normalize to 0...1 range } // HACK: Find a vertex with same coordinates and merge with it. @@ -905,8 +904,8 @@ private TombEngineRoom BuildRoom(Room room) Scale = instance.Scale, ObjectID = checked((ushort)instance.WadObjectId.TypeId), Flags = (ushort)(0x0007), // FIXME: later let user choose if solid (0x0007) or soft (0x0005)! - Color = new Vector4(instance.Color.X * 0.5f, instance.Color.Y * 0.5f, instance.Color.Z * 0.5f, 1.0f), // 0...1 range - HitPoints = 0, + Color = new Vector4(instance.Color.X * 0.5f, instance.Color.Y * 0.5f, instance.Color.Z * 0.5f, 1.0f), // Normalize to 0...1 range + HitPoints = 0, LuaName = instance.LuaName ?? string.Empty }); } @@ -922,8 +921,7 @@ private static int GetOrAddVertex(Room room, Dictionary roomVerticesDi var trVertex = new TombEngineVertex(); trVertex.Position = new Vector3(Position.X, -(Position.Y + room.WorldPos.Y), Position.Z); - // Write the color in 0...1 range - trVertex.Color = color * 0.5f; + trVertex.Color = color * 0.5f; // Normalize to 0...1 range trVertex.IsOnPortal = false; trVertex.IndexInPoly = index; @@ -957,7 +955,7 @@ private void ConvertLights(Room room, TombEngineRoom newRoom) (int)Math.Round(newRoom.Info.X + light.Position.X), (int)-Math.Round(light.Position.Y + room.WorldPos.Y), (int)Math.Round(newRoom.Info.Z + light.Position.Z)), - Color = light.Color * 0.5f, // Put it in 0...1 range + Color = light.Color * 0.5f, // Normalize to 0...1 range Intensity = light.Intensity }; From cb628c6a8e6bf5c6e5c3f2aa1241475b9bc3a92d Mon Sep 17 00:00:00 2001 From: Lwmte <3331699+Lwmte@users.noreply.github.com> Date: Thu, 5 Feb 2026 14:04:06 +0100 Subject: [PATCH 10/10] Use full white color for meshes without vertex colors --- TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs index 8a044e5e3..02f3942f3 100644 --- a/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs +++ b/TombLib/TombLib/LevelData/Compilers/TombEngine/Wad.cs @@ -40,7 +40,7 @@ private TombEngineMesh ConvertWadMesh(WadMesh oldMesh, bool isStatic, string obj { var pos = oldMesh.VertexPositions[i]; var normal = oldMesh.VertexNormals[i]; - var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] : new Vector3(0.5f); + var color = (oldMesh.HasColors) ? oldMesh.VertexColors[i] : new Vector3(1.0f); var v = new TombEngineVertex() {