diff --git a/modules/meshlet/include/vkcv/meshlet/Meshlet.hpp b/modules/meshlet/include/vkcv/meshlet/Meshlet.hpp
index 498257c15c9292adcc9cf5aa342422185077c00b..159bdb1a362fd206201a277376d0df09c508900b 100644
--- a/modules/meshlet/include/vkcv/meshlet/Meshlet.hpp
+++ b/modules/meshlet/include/vkcv/meshlet/Meshlet.hpp
@@ -15,10 +15,12 @@ namespace vkcv::meshlet {
     };
 
     struct Meshlet {
-        uint32_t vertexOffset;
-        uint32_t vertexCount;
-        uint32_t indexOffset;
-        uint32_t indexCount;
+        uint32_t    vertexOffset;
+        uint32_t    vertexCount;
+        uint32_t    indexOffset;
+        uint32_t    indexCount;
+        glm::vec3   meanPosition;
+        float       boundingSphereRadius;
     };
 
     struct MeshShaderModelData {
diff --git a/modules/meshlet/src/vkcv/meshlet/Meshlet.cpp b/modules/meshlet/src/vkcv/meshlet/Meshlet.cpp
index 02bfa9d80ff54f2f6d1cb3a9f450c43366595bb2..f5447a0100cc92875a2db2161ed9333e4261a992 100644
--- a/modules/meshlet/src/vkcv/meshlet/Meshlet.cpp
+++ b/modules/meshlet/src/vkcv/meshlet/Meshlet.cpp
@@ -110,6 +110,24 @@ MeshShaderModelData createMeshShaderModelData(
             data.vertices.push_back(v);
         }
 
+        // compute mean position
+        meshlet.meanPosition = glm::vec3(0);
+        const uint32_t meshletLastVertexIndex = meshlet.vertexOffset + meshlet.vertexCount;
+
+        for (uint32_t vertexIndex = meshlet.vertexOffset; vertexIndex < meshletLastVertexIndex; vertexIndex++) {
+            const Vertex& v         = data.vertices[vertexIndex];
+            meshlet.meanPosition    += v.position;
+        }
+        meshlet.meanPosition /= meshlet.vertexCount;
+
+        // compute bounding sphere radius
+        meshlet.boundingSphereRadius = 0.f;
+        for (uint32_t vertexIndex = meshlet.vertexOffset; vertexIndex < meshletLastVertexIndex; vertexIndex++) {
+            const Vertex& v = data.vertices[vertexIndex];
+            const float d                   = glm::distance(v.position, meshlet.meanPosition);
+            meshlet.boundingSphereRadius    = glm::max(meshlet.boundingSphereRadius, d);
+        }
+
         data.meshlets.push_back(meshlet);
     }
 
diff --git a/projects/mesh_shader/resources/shaders/shader.mesh b/projects/mesh_shader/resources/shaders/shader.mesh
index 628d98416a1b0ea57788019c3510107d98ed731f..97e73cbddb3ed222ef44b72ba4275ffa1c58ff6d 100644
--- a/projects/mesh_shader/resources/shaders/shader.mesh
+++ b/projects/mesh_shader/resources/shaders/shader.mesh
@@ -31,10 +31,12 @@ layout(std430, binding = 1) readonly buffer indexBuffer
 };
 
 struct Meshlet{
-    uint vertexOffset;
-    uint vertexCount;
-    uint indexOffset;
-    uint indexCount;
+    uint    vertexOffset;
+    uint    vertexCount;
+    uint    indexOffset;
+    uint    indexCount;
+    vec3    meanPosition;
+    float   boundingSphereRadius;
 };
 
 layout(std430, binding = 2) readonly buffer meshletBuffer