ASE File Format
Author : Nate Miller (
vandals1@home.com)
Date : 06/01/99
Web Page :
http://nate.scuzzy.net/

Update 07/30/99 -- Added info for the MESH_FACE AB, BC and CA sections.

Before starting off please let me tell you that all information in this document is based off nothing more than investigating the contents of ASE files. If there are any problems with it PLEASE let me know, I am guessing at all of this and I would like to know for sure. Please note that it is not in the scope of this document to comment on the formatting of the ASE file, only the data contained within the file is documented below. This document will only cover vertex and face data, normal data and texture data. Now on with the information.

Vertex and Face Data

MESH_NUMVERTEX

This keyword is followed by an integer, this it the number of vertices in the mesh.

MESH_NUMFACES

This keyword is followed by an integer, this is the number of faces in the mesh.

MESH_VERTEX

A single vertex. Keyword followed by an integer and then three floats. The integer is the vertex index, if there are 120 vertices in the mesh the indices will range from 0 to 119. This index number is used later on for face creation. The three floats represent the position of the vertex in 3D space. They are ordered like this: X Z Y. Please see closing notes.

MESH_FACE (unfinished)

A face. Keyword followed by four integers. The first integer in the group is a face index followed by a semi colon. If there are 250 faces in the mesh then the face indices will range from 0 to 249. After the face index there will be this series like this: A: 0 B: 5 C: 4. This series represents the vertices that make up the face. Vertex one of the face is vertex 0, vertex two is vertex 5 and vertex three is vertex 4. The number of MESH_FACE ’s that will be found in the file is equal to MESH_NUMFACES. The AB, BC,CA sections of MESH_FACE are edge visibility flags. Nonzero if the edge is visible, zero if the edge is invisible

Normal Data

MESH_NUMVERTEX

While this keyword has nothing to do with normals it is useful. If there is normal data in the file the number of vertex normals which are contained in the file is equal to the integer following this keyword.

MESH_VERTEXNORMAL

A Vertex normal. This keyword is followed by an integer and three floats. The integer value is an index. The range of this index will be from 0 to MEXH_NUMVERTEX - 1. This index will pair of the vertex normal with the proper vertex in the mesh. The three floats represent the XYZ components of the normal. The three float values are ordered like this: X Z Y.

MESH_FACENORMAL

A normal to a face. This keyword is followed by an integer and three floats. The integer value is an index. The range of this index will be from 0 to MESH_NUMFACES – 1. This index will pair up this face normal with the correct face. The three floats represent the XYZ components of the normal. The three float values are ordered like this: X Z Y. Please see closing notes.

Texture Data

MESH_NUMTVERTEX

This keyword is followed by an integer, this is the number of texture vertices in the mesh.

MESH_NUMTVFACES

This keyword is followed by an integer, this is the number of texture faces in the mesh.

MESH_TVERT

A texture vertex. This keyword is followed by an integer and three floats. The integer value is an index. The range of this index will be from 0 to MEXH_NUMTVERTEX - 1. This index will be used in the creation of texture faces. The three floats represent the XYZ components of the texture vertex. The three float values are ordered like this: X Y Z. Note: The Z value seems to always be 0.0 so I ignore it and only use the XY pair.

MESH_TFACE

A texture face. Keyword followed by four integers. The first integer in the group is a texture face index. This index value will range from 0 to MESH_NUMTFACES. After the face index there will be this series or three integers. This series represents the texture vertices that make up the texture face. Each integer will correspond with a texture vertex.

Closing Notes

Just a few tips for those of you who plan on using ASE files in some sort of application. I use OpenGL for my graphics programming and

The XZY orientation of the data for vertices and normals creates problems when displaying the models. The problem is that the model will not display correctly if you are working on a XYZ coordinate system, which I use for my applications. All you have to do is swap the Z and Y values and this problem will be solved. This is done for vertex data and normal data.

In the ASE file negative Z values go OUT of the screen. For my applications I have negative Z going IN to the screen. When loading the ASE file I just make all positive Z values negative and all negative Z values positive and the problem is gone. This is done for vertex data and normal data.