Example #1
0
        private static void ConfigureVertexAttributes(Mesh mesh, UltimateMesh renderMesh, RSkeleton skeleton, MeshObject meshObject, BufferObject vertexBuffer0, BufferObject vertexBuffer1)
        {
            var riggingAccessor = new SsbhRiggingAccessor(mesh);
            var influences = riggingAccessor.ReadRiggingBuffer(meshObject.Name, (int)meshObject.SubIndex);
            var indexByBoneName = GetIndexByBoneName(skeleton);

            // TODO: Optimize reading/configuring rigging buffer?
            GetRiggingData(meshObject.VertexCount, influences, indexByBoneName, out IVec4[] boneIndices, out Vector4[] boneWeights);
Example #2
0
        private UltimateMesh CreateRenderMesh(RSkeleton skeleton, MeshObject meshObject)
        {
            var vertexAccessor = new SsbhVertexAccessor(mesh);
            var vertexIndices  = vertexAccessor.ReadIndices(meshObject);

            var renderMesh = new UltimateMesh(vertexIndices, meshObject.VertexCount);

            ConfigureVertexAttributes(renderMesh, skeleton, meshObject, vertexAccessor);
            return(renderMesh);
        }
Example #3
0
        private static UltimateMesh CreateRenderMesh(Mesh mesh, RSkeleton skeleton, MeshObject meshObject, BufferObject vertexBuffer0, BufferObject vertexBuffer1)
        {
            var vertexAccessor = new SsbhVertexAccessor(mesh);
            var vertexIndices = vertexAccessor.ReadIndices(meshObject);

            var renderMesh = new UltimateMesh(vertexIndices, meshObject.VertexCount);

            ConfigureVertexAttributes(mesh, renderMesh, skeleton, meshObject, vertexBuffer0, vertexBuffer1);
            return renderMesh;
        }
Example #4
0
        private void ConfigureVertexAttributes(UltimateMesh renderMesh, RSkeleton skeleton, MeshObject meshObject, SsbhVertexAccessor vertexAccessor)
        {
            // TODO: Just use the mesh buffer.
            var positionValues  = ReadAttributeOrSetZero("Position0", meshObject, vertexAccessor);
            var normalValues    = ReadAttributeOrSetZero("Normal0", meshObject, vertexAccessor);
            var tangentValues   = ReadAttributeOrSetZero("Tangent0", meshObject, vertexAccessor);
            var map1Values      = ReadAttributeOrSetZero("map1", meshObject, vertexAccessor);
            var uvSetValues     = ReadAttributeOrSetZero("uvSet", meshObject, vertexAccessor);
            var uvSet1Values    = ReadAttributeOrSetZero("uvSet1", meshObject, vertexAccessor);
            var uvSet2Values    = ReadAttributeOrSetZero("uvSet2", meshObject, vertexAccessor);
            var bake1Values     = ReadAttributeOrSetZero("bake1", meshObject, vertexAccessor);
            var colorSet1Values = ReadAttributeOrSetDefault("colorSet1", meshObject, vertexAccessor, 128f);

            // TODO: How to reduce the number of attributes if attributes are read directly from a shared mesh buffer?
            var colorSet2Values  = ReadAttributeOrSetZero("colorSet2", meshObject, vertexAccessor);
            var colorSet21Values = ReadAttributeOrSetZero("colorSet2_1", meshObject, vertexAccessor);
            var colorSet22Values = ReadAttributeOrSetZero("colorSet2_2", meshObject, vertexAccessor);
            var colorSet23Values = ReadAttributeOrSetZero("colorSet2_3", meshObject, vertexAccessor);
            var colorSet3Values  = ReadAttributeOrSetZero("colorSet3", meshObject, vertexAccessor);
            var colorSet4Values  = ReadAttributeOrSetZero("colorSet4", meshObject, vertexAccessor);
            var colorSet5Values  = ReadAttributeOrSetZero("colorSet5", meshObject, vertexAccessor);
            var colorSet6Values  = ReadAttributeOrSetZero("colorSet6", meshObject, vertexAccessor);
            var colorSet7Values  = ReadAttributeOrSetZero("colorSet7", meshObject, vertexAccessor);

            AddAttribute("Position0", renderMesh, positionValues);
            AddAttribute("Normal0", renderMesh, normalValues);
            AddAttribute("Tangent0", renderMesh, tangentValues);
            AddAttribute("map1", renderMesh, map1Values);
            AddAttribute("uvSet", renderMesh, uvSetValues);
            AddAttribute("uvSet1", renderMesh, uvSet1Values);
            AddAttribute("uvSet2", renderMesh, uvSet2Values);
            AddAttribute("bake1", renderMesh, bake1Values);

            AddAttribute("colorSet1", renderMesh, colorSet1Values);

            var riggingAccessor = new SsbhRiggingAccessor(mesh);
            var influences      = riggingAccessor.ReadRiggingBuffer(meshObject.Name, (int)meshObject.SubMeshIndex);
            var indexByBoneName = GetIndexByBoneName(skeleton);

            GetRiggingData(meshObject.VertexCount, influences, indexByBoneName, out IVec4[] boneIndices, out Vector4[] boneWeights);