Jump to content

Export 3D Model / 3D Model Format


Recommended Posts

  • Replies 115
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Again resurrecting the thread:  Someone mailed me and I got into it again... I used some early stuff already done by others here in the thread and started working on a mass converter to GLTF (uni

tool for viewing BF models https://drive.google.com/open?id=1O0SdQE3Jo0HECUZjbLhbdauZhHoLibAU how to use: 1) Drop models into "BFModels" folder 2) run app 3) open model 4

Here's a test print of the Ice barrier 3d model, with another model for reference (thank you  @Kiliangg ) Im gonna try and paint one of them to the best of my abilities, see how that goes. I ca

Posted Images

My Problem right now that i cant add the original Animations and most of the models are one big model and not Sperated in f.E. Legs, Hands, etc.. so I have edit the hole models without making them look like garbage ^^ anyone got options? or do I have to put in serious work ? xD

Link to post
Share on other sites
  • 8 months later...

Hey guys

I would really like to use the models for the development contest but I have a problem with installing LightSong v0.4. It only gives me the option to exit the setup.

Is there maybe an alternative for getting the models?

 

Link to post
Share on other sites
  • 2 weeks later...
On 23.6.2016 at 8:33 PM, Darian DelFord said:

I am experiencing the same error.  Could you share on how you fixed it?

 

On 20.9.2015 at 9:21 PM, Kiliangg said:

I just dragged the 0.5.exe in the Installation Folder of LightSong v0.4b and boom. it works^^

 

Link to post
Share on other sites
5 hours ago, bobfrog said:

 

 

 

I did that already and am still getting the same error

 

 

 

 

EDIT:::::::::::::::::::::::::::::::::::::::::::::::::::::

 

 

 

Oh I ee what your talking about, now getting another error, let me record so you can see it

Here is the error I am now getting

 

 

 

Link to post
Share on other sites

Hey guys, I thought I'd give you guys a hand, this is the structure of the SKA file. Many unknowns ofc. Did not have the time to take a look at those ;)

char Magic[4]; //0xA7148107

uint Type;

if (Type < 2 || Type > 7)
    return;

int Length;
struct _Headers
{
    uint Unknown1;
    uint Unknown2;
    uint Unknown3;
    uint Unknown4;
} Headers[Length];

int Length6;
uint Unknown1[Length6];

struct _Unknown2
{
    uint Unknown1;
    uint Unknown2;
    uint Unknown3;
    uint Unknown4;
    uint Unknown5;
    uint Unknown6;
    uint Unknown7;
    uint Unknown8;
} Unknown2[Length6];

if (Type == 2)
{
    int Unknown1;
}
else if (Type == 3)
{
    int Unknown2;
    int Unknown3;
}
else if (Type == 4)
{
    int Unknown3;
    int Unknown4;
    int Unknown5;
    int Unknown6;
}
else if (Type == 5)
{
    int Unknown3;
    int Unknown4;
    int Unknown5;
    int Unknown6;  

    int Length3;
    int Unknown6[Length3];  
}
else if (Type == 6)
{
    int Unknown3;
    int Unknown4;
    int Unknown5;
}
else if (Type == 7)
{
    int Unknown1;
    int Unknown2;
    int Unknown3;
    int Unknown4;
    int Unknown5;
    
    int Length3;
    int Unknown6[Length3];

    int Length4;
    long Unknown7[Length4];

    int Length5;
    byte Unknown8[Length5];
}

 

Link to post
Share on other sites

Hereby also the DRS file format. File formats for the classes will follow.

//Definitions
struct CString
{
    int Length;
    char Text[Length];
};

//Structure
char Magic[4]; //0xC57CF11E
int ChunkFileVersion; //Must be 1

int NodeInformationOffset; //Offset to node information?
int NodeHierarchyOffset; //Offset to node names?
uint NodeCount; //Node count

if (NodeCount != 0)
{
    FSeek(NodeInformationOffset);

    struct _NodeInformation
    {
        uint Checksum <format=hex>; //CRC32 probably
        int Identifier;
        int Offset;
        int Size;
    } NodeInformation[NodeCount];

    FSeek(NodeHierarchyOffset);

    local int nodeCount = 0;

    struct Node
    {
        int Identifier;

        struct _NodeData(int child)
        {
            CString Name;
            int ChildCount;
            if (child == 1 && ChildCount > 0)
            {
                MessageBox(idOk, "Error", "Recursive node layout not yet supported");
                return;
            }

            nodeCount = nodeCount + 1;
        } Parent(0);

        if (Parent.ChildCount > 0)
            _NodeData Children(1)[Parent.ChildCount] <optimize=false>;
    };

    int Unknown;

    while (nodeCount < NodeCount)
        Node Nodes <optimize=false>;

    local int i;
    for (i = 0; i < NodeCount; i++)
    {
        FSeek(NodeInformation[i].Offset);
        if (NodeInformation[i].Size > 0)
        {
            struct _Section
            {
                byte Data[NodeInformation[i].Size];
            } Section <optimize=false>;
        }
    }

}

 

Link to post
Share on other sites

Here's CGeoMesh.

int Version;
int Length;

if (Length > 0)
    short Indices[Length]; //Just a guess

int Length2;

if (Length2 > 0)
{
    struct _Points
    {
        float Unknown1; //X
        float Unknown2; //Y
        float Unknown3; //Z
        float Unknown4; //Direction?
    } Points[Length2];
}

 

Link to post
Share on other sites
  • 7 months later...

Going to necro this thread, here's a 010 editor script, have an update for the DRS structure, currently stuck at CDspMeshFile, will continue work tomorrow. Thanks Pesmontis for some documentation.

//Definitions
struct CString
{
    int Length;
    char Text[Length];
};

struct Point
{
    float X;
    float Y;
    float Z;
};

struct CGeoMesh
{
    int Version;
    int IndexCount;
    
    if (IndexCount > 0)
        short Indices[IndexCount]; //Just a guess
    
    int VertexCount;
    
    if (VertexCount > 0)
    {
        struct _Vertices
        {
            float X; //X
            float Y; //Y
            float Z; //Z
            float W; //Direction?
        } Vertices[VertexCount];
    }
};

struct CSkSkinInfo
{
    int Version;
    int VertexCount;

    struct _VertexWeight
    {
        float Weights[4];
        int BoneIndices[4];
    } VertexWeights[VertexCount];
};

struct CDspMeshFile
{
    int Version;
    int Unknown1;
    int MeshCount;
    Point BoundingBoxLowerLeftCorner1;
    Point BoundingBoxUpperRightCorner1;

    //float Unknown2[12];

    int VertexCount;
    int FaceCount;

    struct Face
    {
        int16 Indices[3];
    } Faces[FaceCount];

    byte VertexFVF[5];

    int GeometryVertexSize;
    
    struct GeometryVertex
    {
        Point Position;
        Point Normal;
        //byte Normall24[4];
        
        struct _TextureCoordinate
        {
            float U;
            float V;
        } TextureCoordinate;

        //int BoneCount;
    } GeometryVertices[VertexCount];

    //Point BoundingBoxLowerLeftCorner2;
    //Point BoundingBoxUpperRightCorner2;
    //float unknown01;                // value = -8.884623E+09;
    
    /*struct _Textures
    {
        byte Magic[2];
        int Unknown;
        struct _TextureSet
        {
            int TextureCount;
            char Identifier[4];
            CString Name;
            float unknown;       // array size unknown (!): cause of sync. errors.
                                            //  usually just one float, but irregularities here
                                            //   have given cause to hardcoded exceptions
                                            //    (eg. building_beast_altar_main.drs);
        } TextureSet;
    } Textures;*/
};

struct CSkSkeleton
{
    int Version;
    int Unknown1;

    int BoneMatrixCount;
    struct BoneMatrix
    {
        struct BoneVertex
        {
            float X;
            float Y;
            float Z;
            int ParentReference; //parentRef[0] = parent index, parentRef[1] = index into CSkSkeleton.dBone array, used in SKA
        } BoneVertices[4];
    } BoneMatrices[BoneMatrixCount];

    int BoneCount;
    struct Bone
    {
        int Version;
        
        int Identifier;
        CString Name;
    
        int ChildCount;
        if (ChildCount > 0)
            int Children[ChildCount];
    } Bones[BoneCount] <optimize=false>;

    float Unknown2[16];
};

struct CDspJointMap
{
    int Version;
    int JointGroupCount;
    
    if (JointGroupCount > 0)
    {
        struct _JointGroup
        {
            int JointCount;
            if (JointCount > 0)
                short JointIndices[JointCount];
        } JointGroups[JointGroupCount] <optimize=false>;
    }
};

//Structure
char Magic[4]; //0xC57CF11E
int NumberOfModels; //Must be 1

int NodeInformationOffset; //Offset to node information?
int NodeHierarchyOffset; //Offset to node names?
uint NodeCount; //Node count

if (NodeCount != 0)
{
    FSeek(NodeInformationOffset);

    //Always a root node with Identifier, conflicting
    struct _NodeInformation
    {
        uint Checksum <format=hex>; //CRC32 probably
        int Identifier;
        int Offset;
        int Size;
    } NodeInformation[NodeCount];

    FSeek(NodeHierarchyOffset);

    struct _RootNode
    {
        int RootIdentifier;
        int Unknown;
        CString rootName;
    } RootNode;

    local int i = 1;
    struct _Node
    {
        local int NodeIndex = i;
        int Identifier;
        CString Name;
        int Unknown; //ChildCount?

        local int j;
        local int64 oldPosition;
        for (j = NodeCount - 1; j >= 0; j--)
        {
            if (NodeInformation[j].Identifier != NodeIndex)
                continue;

            oldPosition = FTell();
            FSeek(NodeInformation[j].Offset);
            if (NodeInformation[j].Size > 0)
            {
                if (Strcmp(Name.Text, "CGeoMesh") == 0)
                    CGeoMesh Mesh;
                else if (Strcmp(Name.Text, "CDspJointMap") == 0)
                    CDspJointMap JointMap;
                else if (Strcmp(Name.Text, "CSkSkinInfo") == 0)
                    CSkSkinInfo SkinInfo;
                else if (Strcmp(Name.Text, "CSkSkeleton") == 0)
                    CSkSkeleton Skeleton;
                else if (Strcmp(Name.Text, "CDspMeshFile") == 0)
                    CDspMeshFile MeshFile;
                else
                    byte Data[NodeInformation[j].Size];
            }
            FSeek(oldPosition);
            break;
        }

        i = i + 1;
    } Nodes[NodeCount - 1] <optimize=false>;
}

 

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Terms of Use