EvilEngine/PIPT

From Heavy Iron Modding
Revision as of 22:48, 15 September 2022 by Seil (talk | contribs) (Seil moved page PIPT to EvilEngine/PIPT)

PIPT
Pipe Info Table
TypeBinary
Games usedBattle for Bikini Bottom

The SpongeBob SquarePants Movie
The Incredibles
Rise of the Underminer

Ratatouille Prototype
Source codexModel.h

The pipeline information table contains additional material information for level objects. The asset consists of an array of entries, each with rendering information for an entire MODL asset or a single mesh within it.

Format

The file starts with an int which defines the amount of entries, then each entry has the following layout, being 0x0C bytes long in BFBB and 0x10 in Movie:

struct xModelPipeInfo
{
    unsigned int ModelHashID;
    unsigned int SubObjectBits;
    unsigned int PipeFlags;
    unsigned int unknown; // only present in Movie
};
Offset Variable Description
0x00 ModelHashID MODL ID
0x04 SubObjectBits Specifies which RW atomics in the model to apply this pipe info entry to. Each bit is an on/off state for an atomic, starting with the last atomic as the least significant bit (0x1) and ending with the first atomic as the most significant bit.

For example, if a model has 4 atomics:

  • 0x1 is the on/off state for the 4th atomic
  • 0x2 is the on/off state for the 3rd atomic
  • 0x4 is the on/off state for the 2nd atomic
  • 0x8 is the on/off state for the 1st atomic

When a pipe entry should be applied to all atomics, this is usually set to 0xFFFFFFFF.

0x08 PipeFlags Bitfield of various rendering flags. The layout is the following (left side is most significant, right side is least significant):
AAAA AAAA BBBB CCCD EEEE FFFF GGHH IIJJ
  • A - Alpha compare value (0-255). Atomics with transparent textures use this value to filter out pixels below a certain alpha threshold. Only pixels with an alpha > this value will be rendered. Set this to 0 if you want all pixels to be rendered.
  • B - Unknown (0-15)
  • C - Unknown (0-7)
  • D - Ignore Fog (0-1). If set, atomics will not be rendered with fog.
  • E - Destination Blend (0-15). Destination RwBlendFunction for atomics.
  • F - Source Blend (0-15). Source RwBlendFunction for atomics.
  • G - Lighting Mode (0-3).
    • 0 - LightKit only
    • 1 - Prelight only
    • 2 - LightKit and Prelight
    • 3 - Unknown
  • H - Cull Mode (0-3).
    • 0 - Unknown
    • 1 - None. Atomics will be rendered with no front or back face culling.
    • 2 - Back. Atomics will be rendered with back face culling.
    • 3 - Dual. Atomics will be rendered once with front face culling, then once with back face culling.
  • I - Z-Write Mode (0-3).
    • 0 - Enabled. Atomics will be rendered with z-write enabled.
    • 1 - Disabled. Atomics will be rendered with z-write disabled.
    • 2 - Dual. Atomics will be rendered once with z-write disabled, then once with z-write enabled.
    • 3 - Unknown
  • J - Unknown
0x0C unknown Only present in Movie.

RwBlendFunction

  • 0 - N/A
  • 1 - Zero
  • 2 - One
  • 3 - Source Color
  • 4 - Inverse Source Color
  • 5 - Source Alpha
  • 6 - Inverse Source Alpha
  • 7 - Destination Alpha
  • 8 - Inverse Destination Alpha
  • 9 - Destination Color
  • 10 - Inverse Destination Color
  • 11 - Source Alpha Saturated

Movie Model Asset ID

One important detail in the PIPT asset in Movie Game is that, in some of the entries, the model Asset ID will be a hash of the model's name without the .dff extension at the end, being different from if it were hashed from the name with .dff. This can be noted in Industrial Park's PIPT editor in which some of the PIPT entries refer to the model's name without .dff at the end:

It's unknown why this was done this way and whether having the entry reference a hash with .dff at the end will work or not.