DirectDraw Texture (.ddt)
Matriculado na base de conhecimento da SIGMA/Scitech como sendo DirectDraw Texture (.ddt), trata-se de um formato de arquivamento de imagem inspirado no DirectDraw Surface (.dds). Foi desenvolvido pela Ensemble Studios para uso em gamewares produzidos com sua tecnologia in-house Bang! Engine usada em títulos como Age Of Mythology e Age Of Empires III, a qual sucede a Genie Engine, tecnologia então usada anteriormente em títulos do braço principal desta série.
A principal diferença entre DirectDraw Surface e DirectDraw Texture é que o último armazena informação de “material map” ao invés de armazenar puramente informação de textura, segundo a infraestrutura dos sistemas Qwadro. Isto significa que há informações sobre a textura ser usada como mapa de cor difusa em materiais, por exemplo. Há outros problemas históricos com o formato DirectDraw Surface que foram corrigidos na versão da Ensemble Studios, a destacar, a caganeira (mais uma, aliás) que a Microsoft fez em permitir dimensões arbitrárias entre os layers numa mesma textura.
O formato pode ser identificado pelo FOURCC inaugurando o arquivo com a sigla RTS3 gravada em little-endian. A sigla RTS3 foi um código e codinome para um barço da série Age Of Empires que deu origem à subsérie Age Of Mythology e Age Of Empires III, que tomado abordagens divergentes da série principal. Por razões de consistência, RTS3, quando tratado de título da série, é considerado apenas o Age Of Mythology, o terceiro título da série, e em nível de engenharia de gameware, trata-se da subsérie Age Of Mythology e o título Age Of Empires III.
Especificação
Especificação a partir de engenharia reversa para uso indeterminado ainda no Qwadro, que usa linguagem universal de programação C. Um arquivo DDT começa com um cabeçalho contendo informações sobre a textura seguido de uma lista de pares de “offset” e “size” para cada layer contido na textura.
// header AFX_DEFINE_STRUCT(ddtHdr) { afxNat32 fcc; // 0x33535452 afxInt8 usage; /* 0 = diffuse map 1 = aux diffuse map, 6 = bump map, 7 = aux bump map, 8 = cubemap */ afxInt8 alphaUsageMask; /* 0x01 = player color, 0x04 = transparency, 0x08 = blend */ afxInt8 type; /* 1 = ARGB (LE. BGRA), 4 = DXT1, 7 = GREYSCALE, 8 = DXT3, 9 = DXT5, */ afxInt8 layerCnt; // number of layer (aka faces, for cubemap, and slices, out of Qwadro API conventions) in this texture. afxNat32 w; // width (same for all layers) afxNat32 h; // height (same for all layers) }; // for each layer AFX_DEFINE_STRUCT(ddtLayer) { afxNat32 offset; // begin of raster/S3TC data for the layer/slice/face afxNat32 size; // range of raster/S3TC data for the layer/slice/face };
Responses