ase-file ::= version scene [ material-list ] [ { geometric-object }* ] [ { light-object }* ] [ { camera-object }* ] version ::= '*3DSMAX_ASCIIEXPORT' integer '*COMMENT' quoted-string scene ::= '*SCENE {' '*SCENE_FILENAME' quoted-string '*SCENE_FIRSTFRAME' integer '*SCENE_LASTFRAME' integer '*SCENE_FRAMESPEED' integer '*SCENE_TICKSPERFRAME' integer '*SCENE_BACKGROUND_STATIC' float float float '*SCENE_AMBIENT_STATIC' float float float '}' material-list ::= '*MATERIAL_LIST {' '*MATERIAL_COUNT' integer [ { material }* ] '}' material ::= '*MATERIAL' integer '{' '*MATERIAL_NAME' quoted-string '*MATERIAL_CLASS' quoted-string '*MATERIAL_AMBIENT' float float float '*MATERIAL_DIFFUSE' float float float '*MATERIAL_SPECULAR' float float float '*MATERIAL_SHINE' float '*MATERIAL_SHINESTRENGTH' float '*MATERIAL_TRANSPARENCY' float '*MATERIAL_WIRESIZE' float '*MATERIAL_SHADING' string '*MATERIAL_XP_FALLOFF' float '*MATERIAL_SELFILLUM' float '*MATERIAL_FALLOFF' string '*MATERIAL_XP_TYPE' string '*MAP_DIFFUSE {' '*MAP_NAME' quoted-string '*MAP_CLASS' quoted-string '*MAP_SUBNO' int '*MAP_AMOUNT' float '*BITMAP' quoted-string '*MAP_TYPE' string '*UVW_U_OFFSET' float '*UVW_V_OFFSET' float '*UVW_U_TILING' float '*UVW_V_TILING' float '*UVW_ANGLE' float '*UVW_BLUR' float '*UVW_BLUR_OFFSET' float '*UVW_NOUSE_AMT' float '*UVW_NOISE_SIZE' float '*UVW_NOISE_LEVEL' int '*UVW_NOISE_PHASE' float '*BITMAP_FILTER' string '}' '}' geometric-object ::= '*GEOMOBJECT {' '*NODE_NAME' quoted-string node_tm mesh '*PROP_MOTIONBLUR' integer '*PROP_CASTSHADOW' integer '*PROP_RECVSHADOW' integer '*MATERIAL_REF' integer '}' node_tm ::= '*NODE_TM {' '*NODE_NAME' quoted-string '*INHERIT_POS' integer integer integer '*INHERIT_ROT' integer integer integer '*INHERIT_SCL' integer integer integer '*TM_ROW0' float float float '*TM_ROW1' float float float '*TM_ROW2' float float float '*TM_ROW3' float float float '*TM_POS' float float float '*TM_ROTAXIS' float float float '*TM_ROTANGLE' float '*TM_SCALE' float float float '*TM_SCALEAXIS' float float float '*TM_SCALEAXISANG' float '}' mesh ::= '*MESH {' '*TIMEVALUE' int '*MESH_NUMVERTEX' int '*MESH_NUMFACES' int '*MESH_VERTEX_LIST {' { '*MESH_VERTEX' int float float float }* '}' '*MESH_FACE_LIST {' { '*MESH_FACE' int ':' 'A:' int 'B:' int 'C:' int 'AB:' int 'BC:' int 'CA:' int '*MESH_SMOOTHING' int '*MESH_MTLID' int }* '}' '*MESH_NUMTVERTEX' int '*MESH_TVERTLIST {' { '*MESH_TVERT' int float float float }* '}' '*MESH_NUMTVFACES' int '*MESH_TFACELIST {' { '*MESH_TFACE' int int int int }* '}' '*MESH_NORMALS {' { '*MESH_FACENORMAL' int float float float '*MESH_VERTEXNORMAL' int float float float '*MESH_VERTEXNORMAL' int float float float '*MESH_VERTEXNORMAL' int float float float }* '}' '}' light-object ::= '*LIGHTOBJECT {' '*NODE_NAME' quoted-string '*LIGHT_TYPE' string node_tm '*LIGHT_SHADOWS' string '*LIGHT_USELIGHT' int '*LIGHT_SPOTSHAPE' string '*LIGHT_USEGLOBAL' int '*LIGHT_ABSMAPBIAS' int '*LIGHT_OVERSHOOT' int '*LIGHT_SETTINGS {' '*TIMEVALUE' int '*LIGHT_COLOR' float float float '*LIGHT_INTENS' float '*LIGHT_ASPECT' float '*LIGHT_TDIST' float '*LIGHT_MAPBIAS' float '*LIGHT_MAPRANGE' float '*LIGHT_MAPSIZE' int '*LIGHT_RAYBIAS' float '}' '}' camera-object ::= '*CAMERAOBJECT {' '*NODE_NAME' quoted-string '*CAMERA_TYPE' string node_tm '*CAMERA_SETTINGS {' '*TIMEVALUE' int '*CAMERA_NEAR' float '*CAMERA_FAR' float '*CAMERA_FOV' float '*CAMERA_TDIST' float '}' '}' quoted-string ::= '"' string '"' //string, int, float, char, alpha, digit ... is assumed primitive