Native Data PLG (Секция RW)

Материал из GTAModding.ru
Перейти к: навигация, поиск
Секция RenderWare
Native Data PLG
0x0510

Native Data PLG - секция, используемая в DFF-файлах как расширение секции Geometry. Данная секция представляет геометрию в "природном" для движка виде. Это значит, что данные будут напрямую отправлены на конвеер рендеринга, без дополнительной трансформации (построение оптимального вершинного буфера, разбивка на меши). Наличие этой секции в геометрии означает, что "привычные" куски геометрии - такие, как треугольники, позиции вершин, нормали, цвета, текстурные координаты - должны отсутствовать. Нет надобности и в секции Bin Mesh PLG. Также, во флагах геометрии должен быть включен флаг rpGEOMETRYNATIVE.

Содержание

Direct3D 8

Секция включает в себя секцию Struct, в которой находятся все данные.

chunk STRUCT (size (resEntrySize + 8 + totalMeshesVerticesSize + totalMeshesIndicesSize)
//
  unsigned int platformVersion (версия платформы движка, 8 - PC D3D8)
  unsigned int resEntrySize (размер resEntryHeader + размеры всех мешей)
  // ResEntry data
    unsigned int serialNumber
    unsigned int numMeshes (Кол-во мешей. Упрощённо говоря, меш - это набор треугольников (индексов, вершин), которые рендерятся с одним и тем же материалом. То есть, кол-во мешей равно кол-ву материалов в геометрии)
    // Meshes [numMeshes]
      unsigned int minVert (индекс первой вершины?)
      unsigned int stride (Кол-во байт на одну вершину)
      unsigned int numVertices (кол-во вершин меша)
      unsigned int numIndices (кол-во индексов в меше)
      unsigned int material (ID материала этого меша)
      unsigned int vertexShader (Указатель)
      unsigned int primType (тип примитивов (rwPRIMITIVETYPE))
      unsigned int indexBuffer (Указатель)
      unsigned int vertexBuffer (Указатель)
      unsigned int baseIndex (индекс первой вершины?)
      unsigned char vertexAlpha (вершины могут быть прозрачными (используется компонент alpha цвета вершины)
      unsigned char managed
      unsigned char remapped
      unsigned char padding
    //
  //
  unsigned short indices[totalNumIndex] (индексы)
  Vertex vertices[totalNumVertex] (вершины)
//

Direct3D 9

Секция включает в себя секцию Struct, в которой находятся все данные. В GTA SA PC, в отличии от GTA3, все меши используют общий формат вершин.

STRUCT (size (resEntrySize + 4 + 8 * numDeclarations + 2 * numIndices + 32 + vertexStride1 * vertexNum1 + vertexStride2 * vertexNum2))
//
  unsigned int platformVersion (версия платформы движка, 9 - PC D3D9)
  unsigned int resEntrySize (размер resEntryHeader + размеры всех мешей)
  // ResEntry
    unsigned int serialNumber
    unsigned int numMeshes (Кол-во мешей. Упрощённо говоря, меш - это набор треугольников (индексов, вершин), которые рендерятся с одним и тем же материалом. То есть, кол-во мешей равно кол-ву материалов в геометрии)
    unsigned int indexBuffer (Указатель)
    unsigned int primType (тип примитивов (rwPRIMITIVETYPE))
    // Vertex Stream [2] (из параметров "реально" нужны только vertexBuffer(0 если не используется, любое другое значение - используется) и stride)
      unsigned int vertexBuffer (Указатель. Если это значение равно нулю, массив vertices в Vertex Data [] отсутсвует (см. ниже))
      unsigned int offset
      unsigned int stride (Кол-во байт на одну вершину)
      unsigned short geometryFlags
      unsigned char managed
      unsigned char dynamicLock
    //
    unsigned int useOffsets
    unsigned int vertexDeclaration (Указатель)
    unsigned int totalNumIndex (Общее кол-во индексов)
    unsigned int totalNumVertex (Общее кол-во вершин)
    // Meshes [numMeshes]
      unsigned int numIndex (кол-во индексов в меше)
      unsigned int minVert (индекс первой вершины?)
      unsigned int material (ID материала этого меша)
      unsigned int vertexAlpha (вершины могут быть прозрачными (используется компонент alpha цвета вершины)
      unsigned int vertexShader (Указатель)
      unsigned int baseIndex (индекс первой вершины?)
      unsigned int numVertices (кол-во вершин меша)
      unsigned int startIndex (индекс первой вершины?)
      unsigned int numPrimitives (кол-во треугольников меша)
    //
  //
  unsigned int numDeclarationElements (кол-во элементов вершины)
  // Elements [numDeclarationElements] (элементы)
    unsigned short Stream (номер потока (0 или 1)
    unsigned short Offset (офсет элемента в структуре вершины)
    unsigned char Type (тип (D3DDECLTYPE))
    unsigned char Method (метод (D3DDECLMETHOD))
    unsigned char Usage (назначение (D3DDECLUSAGE))
    unsigned char UsageIndex (индекс элемента, для COLOR - 0/1 (цвет спекуляра), для текстурных координат - 0 - 7)
  //
  unsigned short indices[totalNumIndex] (индексы)
  // Vertex Data [2] (повторяется Vertex Stream []. Второй поток обычно не используется)
      unsigned int vertexBuffer
      unsigned int offset
      unsigned int stride
      unsigned short geometryFlags
      unsigned char managed
      unsigned char dynamicLock
      Vertex vertices[totalNumVertex] (вершины)
    //
//

Пример секции: Файл:Bat.rar

OpenGL

В начале секции описаны элементы, которые используют вершины. Далее описаны вершинные данные.

unsigned int numVertexElements
// Vertex elements [numVertexElements]
  unsigned int paramType // тип параметра, типы описаны ниже
  unsigned int dataType // тип формата параметра, типы описаны ниже
  unsigned int unknown // 1 для цвета и весов вершин
  unsigned int size // размерность элемента (2D, 3D, 4D)
  unsigned int stride // общий размер одной вершины
  unsigned int offset // смещение (в байтах) к данным этого элемента в структуре вершины
//
// Вершинные данные для каждого из элементов (по порядку)
  char vertexData [numVertexElements * stride]
//

Типы параметров 0 POSITION 1 TEXCOORD0 2 NORMAL 3 GLOBALCOLOR 4 BLENDWEIGHT 5 BLENDINDICES 6 COLOR2 // Используется для цветов ночного освещения Типы формата параметров 0 FLOAT3 1 BYTE3 // возможно 2 BYTE4 3 WORD2

Playstation 2

Секция включает в себя секцию Struct, в которой находятся все данные.

STRUCT
//
  unsigned int platformVersion (версия платформы движка, 4 - PS2)
  // Меши. Количество мешей определно в секции Bin Mesh.
    unsigned int meshSize
    unsigned int notSkinned
    char meshData [meshSize]
  //
//

Формат данных меша определён особенностям двжика Playstation 2. Известно, что данные меша содержат не только информацию о вершинах, но и состояния рендеринга и состояния этапов текстурирования меша. Данные меша представляют собой набор тегов и собственно данных, "прикрепленных" к этим тегам.