Update mesh config defines to match a single format

This commit is contained in:
Wojtek Figat
2024-12-29 23:03:09 +01:00
parent e7132086a5
commit ab99a25cee
7 changed files with 35 additions and 21 deletions

View File

@@ -5,7 +5,9 @@
#include "../Config.h" #include "../Config.h"
// The maximum allowed amount of material slots per model resource // The maximum allowed amount of material slots per model resource
#define MAX_MATERIAL_SLOTS 4096 #define MODEL_MAX_MATERIAL_SLOTS 4096
// [Deprecated in v1.10] Use MODEL_MAX_MATERIAL_SLOTS
#define MAX_MATERIAL_SLOTS MODEL_MAX_MATERIAL_SLOTS
// Maximum amount of levels of detail for the model // Maximum amount of levels of detail for the model
#define MODEL_MAX_LODS 6 #define MODEL_MAX_LODS 6
@@ -13,11 +15,20 @@
// Maximum amount of meshes per model LOD // Maximum amount of meshes per model LOD
#define MODEL_MAX_MESHES 4096 #define MODEL_MAX_MESHES 4096
// Maximum amount of texture channels (UVs) per vertex
#define MODEL_MAX_UVS 4
// Enable/disable precise mesh collision testing (with in-build vertex buffer caching, this will increase memory usage) // Enable/disable precise mesh collision testing (with in-build vertex buffer caching, this will increase memory usage)
#define USE_PRECISE_MESH_INTERSECTS (USE_EDITOR) #define MODEL_USE_PRECISE_MESH_INTERSECTS (USE_EDITOR)
// [Deprecated in v1.10] Use MODEL_USE_PRECISE_MESH_INTERSECTS
#define USE_PRECISE_MESH_INTERSECTS MODEL_USE_PRECISE_MESH_INTERSECTS
// Defines the maximum amount of bones affecting every vertex of the skinned mesh // Defines the maximum amount of bones affecting every vertex of the skinned mesh
#define MAX_BONES_PER_VERTEX 4 #define MODEL_MAX_BONES_PER_VERTEX 4
// [Deprecated in v1.10] Use MODEL_MAX_BONES_PER_VERTEX
#define MAX_BONES_PER_VERTEX MODEL_MAX_BONES_PER_VERTEX
// Defines the maximum allowed amount of skeleton bones to be used with skinned model // Defines the maximum allowed amount of skeleton bones to be used with skinned model
#define MAX_BONES_PER_MODEL 256 #define MODEL_MAX_BONES_PER_MODEL 256
// [Deprecated in v1.10] Use MODEL_MAX_BONES_PER_MODEL
#define MAX_BONES_PER_MODEL MODEL_MAX_BONES_PER_MODEL

View File

@@ -108,7 +108,7 @@ bool MeshBase::Init(uint32 vertices, uint32 triangles, const Array<const void*,
goto ERROR_LOAD_END; goto ERROR_LOAD_END;
// Init collision proxy // Init collision proxy
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
if (!_collisionProxy.HasData()) if (!_collisionProxy.HasData())
{ {
if (use16BitIndexBuffer) if (use16BitIndexBuffer)
@@ -148,6 +148,9 @@ void MeshBase::Release()
SAFE_DELETE_GPU_RESOURCE(_vertexBuffers[1]); SAFE_DELETE_GPU_RESOURCE(_vertexBuffers[1]);
SAFE_DELETE_GPU_RESOURCE(_vertexBuffers[2]); SAFE_DELETE_GPU_RESOURCE(_vertexBuffers[2]);
SAFE_DELETE_GPU_RESOURCE(_indexBuffer); SAFE_DELETE_GPU_RESOURCE(_indexBuffer);
#if MODEL_USE_PRECISE_MESH_INTERSECTS
_collisionProxy.Clear();
#endif
_triangles = 0; _triangles = 0;
_vertices = 0; _vertices = 0;
_use16BitIndexBuffer = false; _use16BitIndexBuffer = false;
@@ -194,7 +197,7 @@ bool MeshBase::Intersects(const Ray& ray, const Matrix& world, Real& distance, V
const BoundingBox transformedBox(min, max); const BoundingBox transformedBox(min, max);
// Test ray on box // Test ray on box
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
if (transformedBox.Intersects(ray, distance)) if (transformedBox.Intersects(ray, distance))
{ {
// Use exact test on raw geometry // Use exact test on raw geometry
@@ -226,7 +229,7 @@ bool MeshBase::Intersects(const Ray& ray, const Transform& transform, Real& dist
const BoundingBox transformedBox(min, max); const BoundingBox transformedBox(min, max);
// Test ray on box // Test ray on box
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
if (transformedBox.Intersects(ray, distance)) if (transformedBox.Intersects(ray, distance))
{ {
// Use exact test on raw geometry // Use exact test on raw geometry

View File

@@ -11,7 +11,7 @@
#include "Engine/Level/Types.h" #include "Engine/Level/Types.h"
#include "Engine/Scripting/ScriptingObject.h" #include "Engine/Scripting/ScriptingObject.h"
#include "Config.h" #include "Config.h"
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
#include "CollisionProxy.h" #include "CollisionProxy.h"
#endif #endif
@@ -54,7 +54,7 @@ protected:
mutable Array<byte> _cachedIndexBuffer; mutable Array<byte> _cachedIndexBuffer;
mutable int32 _cachedIndexBufferCount = 0; mutable int32 _cachedIndexBufferCount = 0;
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
CollisionProxy _collisionProxy; CollisionProxy _collisionProxy;
#endif #endif
@@ -137,7 +137,7 @@ public:
return _use16BitIndexBuffer; return _use16BitIndexBuffer;
} }
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
/// <summary> /// <summary>
/// Gets the collision proxy used by the mesh. /// Gets the collision proxy used by the mesh.
/// </summary> /// </summary>

View File

@@ -214,7 +214,7 @@ void Cloth::SetPaint(Span<const float> value)
bool Cloth::IntersectsItself(const Ray& ray, Real& distance, Vector3& normal) bool Cloth::IntersectsItself(const Ray& ray, Real& distance, Vector3& normal)
{ {
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
if (!Actor::IntersectsItself(ray, distance, normal)) if (!Actor::IntersectsItself(ray, distance, normal))
return false; return false;
#if WITH_CLOTH #if WITH_CLOTH

View File

@@ -1184,7 +1184,7 @@ bool ModelTool::ImportModel(const String& path, ModelData& data, Options& option
// Special case if imported model has no bones but has valid skeleton and meshes. // Special case if imported model has no bones but has valid skeleton and meshes.
// We assume that every mesh uses a single bone. Copy nodes to bones. // We assume that every mesh uses a single bone. Copy nodes to bones.
if (data.Skeleton.Bones.IsEmpty() && Math::IsInRange(data.Skeleton.Nodes.Count(), 1, MAX_BONES_PER_MODEL)) if (data.Skeleton.Bones.IsEmpty() && Math::IsInRange(data.Skeleton.Nodes.Count(), 1, MODEL_MAX_BONES_PER_MODEL))
{ {
data.Skeleton.Bones.Resize(data.Skeleton.Nodes.Count()); data.Skeleton.Bones.Resize(data.Skeleton.Nodes.Count());
for (int32 i = 0; i < data.Skeleton.Nodes.Count(); i++) for (int32 i = 0; i < data.Skeleton.Nodes.Count(); i++)
@@ -1209,9 +1209,9 @@ bool ModelTool::ImportModel(const String& path, ModelData& data, Options& option
} }
// Check bones limit currently supported by the engine // Check bones limit currently supported by the engine
if (data.Skeleton.Bones.Count() > MAX_BONES_PER_MODEL) if (data.Skeleton.Bones.Count() > MODEL_MAX_BONES_PER_MODEL)
{ {
errorMsg = String::Format(TEXT("Imported model skeleton has too many bones. Imported: {0}, maximum supported: {1}. Please optimize your asset."), data.Skeleton.Bones.Count(), MAX_BONES_PER_MODEL); errorMsg = String::Format(TEXT("Imported model skeleton has too many bones. Imported: {0}, maximum supported: {1}. Please optimize your asset."), data.Skeleton.Bones.Count(), MODEL_MAX_BONES_PER_MODEL);
return true; return true;
} }
@@ -1317,7 +1317,7 @@ bool ModelTool::ImportModel(const String& path, ModelData& data, Options& option
// Check if use a single bone for skinning // Check if use a single bone for skinning
auto nodeIndex = data.Skeleton.FindNode(mesh->Name); auto nodeIndex = data.Skeleton.FindNode(mesh->Name);
auto boneIndex = data.Skeleton.FindBone(nodeIndex); auto boneIndex = data.Skeleton.FindBone(nodeIndex);
if (boneIndex == -1 && nodeIndex != -1 && data.Skeleton.Bones.Count() < MAX_BONES_PER_MODEL) if (boneIndex == -1 && nodeIndex != -1 && data.Skeleton.Bones.Count() < MODEL_MAX_BONES_PER_MODEL)
{ {
// Add missing bone to be used by skinned model from animated nodes pose // Add missing bone to be used by skinned model from animated nodes pose
boneIndex = data.Skeleton.Bones.Count(); boneIndex = data.Skeleton.Bones.Count();

View File

@@ -108,7 +108,7 @@ void TextRender::UpdateLayout()
_localBox = BoundingBox(Vector3::Zero); _localBox = BoundingBox(Vector3::Zero);
BoundingBox::Transform(_localBox, _transform, _box); BoundingBox::Transform(_localBox, _transform, _box);
BoundingSphere::FromBox(_box, _sphere); BoundingSphere::FromBox(_box, _sphere);
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
_collisionProxy.Clear(); _collisionProxy.Clear();
#endif #endif
@@ -314,7 +314,7 @@ void TextRender::UpdateLayout()
_drawChunks.Add(drawChunk); _drawChunks.Add(drawChunk);
} }
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
// Setup collision proxy for detailed collision detection for triangles // Setup collision proxy for detailed collision detection for triangles
const int32 totalIndicesCount = _ib.Data.Count() / sizeof(uint16); const int32 totalIndicesCount = _ib.Data.Count() / sizeof(uint16);
_collisionProxy.Init(_vb0.Data.Count() / sizeof(Float3), totalIndicesCount / 3, (Float3*)_vb0.Data.Get(), (uint16*)_ib.Data.Get()); _collisionProxy.Init(_vb0.Data.Count() / sizeof(Float3), totalIndicesCount / 3, (Float3*)_vb0.Data.Get(), (uint16*)_ib.Data.Get());
@@ -420,7 +420,7 @@ void TextRender::OnLayerChanged()
bool TextRender::IntersectsItself(const Ray& ray, Real& distance, Vector3& normal) bool TextRender::IntersectsItself(const Ray& ray, Real& distance, Vector3& normal)
{ {
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
if (_box.Intersects(ray)) if (_box.Intersects(ray))
{ {
return _collisionProxy.Intersects(ray, _transform, distance, normal); return _collisionProxy.Intersects(ray, _transform, distance, normal);

View File

@@ -11,7 +11,7 @@
#include "Engine/Graphics/DynamicBuffer.h" #include "Engine/Graphics/DynamicBuffer.h"
#include "Engine/Graphics/Models/Config.h" #include "Engine/Graphics/Models/Config.h"
#include "Engine/Localization/LocalizedString.h" #include "Engine/Localization/LocalizedString.h"
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
#include "Engine/Graphics/Models/CollisionProxy.h" #include "Engine/Graphics/Models/CollisionProxy.h"
#endif #endif
@@ -47,7 +47,7 @@ private:
DynamicVertexBuffer _vb0; DynamicVertexBuffer _vb0;
DynamicVertexBuffer _vb1; DynamicVertexBuffer _vb1;
DynamicVertexBuffer _vb2; DynamicVertexBuffer _vb2;
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
CollisionProxy _collisionProxy; CollisionProxy _collisionProxy;
#endif #endif
Array<DrawChunk, InlinedAllocation<8>> _drawChunks; Array<DrawChunk, InlinedAllocation<8>> _drawChunks;
@@ -143,7 +143,7 @@ public:
/// </summary> /// </summary>
API_FUNCTION() void UpdateLayout(); API_FUNCTION() void UpdateLayout();
#if USE_PRECISE_MESH_INTERSECTS #if MODEL_USE_PRECISE_MESH_INTERSECTS
/// <summary> /// <summary>
/// Gets the collision proxy used by the text geometry. /// Gets the collision proxy used by the text geometry.
/// </summary> /// </summary>