Maya Particle Disk Cache (PDC) Utils :
PDC Utils help in creating PDC files of external data. These file can then be used to drive particle system in Maya. It contains 2 programs one to create pdc files and another to read them. Both are command line only utility.
Writepdc program creates a pdc file using ascii input files
Readpdc program can read pdc files and display their content on the terminal window
Both programs are compatible with Maya 6 and 7 PDC format. No testing done for prior versions
Download: Source code and executible bundle (89 kb)Updated March 13th 2006
Tutorial: As time permits there would be a tutorial available showing how to put together things. Below are some clues to glue things together
Hints:
- Create a particle system in maya (Dynamics menuset)
- Save scene and set the project directory (Very Imporant)
- Solvers -> Create Particle Disk Cache
- Solvers -> Disable Memory Cache
- Save scene (Important)
- Browse to the project folder and then to particles/yourSceneName folder
- There should be *.#.pdc files in increments of 200 or 250 or something like that
- Now you just need to create your own pdc files using the writepdc tool above with same filename (They should match exactly) and replace/overwrite the one's that maya created.
- You should be able to see the changes in Maya instantaneously
Source Code Credits: Amit Chourasia (San Diego Supercomputer Center) and Peter J. Lu (Harward University) and generous help from John Moreland at SDSC.
| Maya PDC format Simplified | ||||||||
| The PDC file is used by Maya's particle disk caching and startup cache. It is a binary file that holds one frame's worth of data for a single particle object. The unit for PDC files is always cm | ||||||||
| Row no | Content | Byte Count | Description | Default | Extra Info | Example | Example Explanation | Row no | 
| 1 | PDC file header | 4 | Characters indicating that this is a PDC file. This will be the 4 characters "P", "D", "C", " ". | "P", "D", "C"," "  | last one is space character (no commas or quotes) | "P", "D", "C", " " | Compulsory. No changes should be made here. | 1 | 
| 2 | 4 | One Integer indicating the file format version number. | 1 | Avoid changing this untill you know for certain. No documentation about it.  | 1 | Lets stick to default | 2 | |
| 3 | 4 | One Integer holding bit information about whether the values stored in the file are BIG_ENDIAN or LITTLE_ENDIAN. | 1 | Maya only likes Big_Endian. So always use 1.   | 1 | Always use 1 for this | 3 | |
| 4 | 8 | 2 Integers holding extra bit information that various file format version might decide to use. | 0, 0 | Avoid changing these. No documentation about them | 0 0 | Lets stick to default | 4 | |
| 5 | 4 | 1 Integer indicating the number of particles represented in this file | "N" | N is the no of particle you need | 5 | Lets say our particle system contains 5 particles | 5 | |
| 6 | 4 | 1 Integer indicating the number of attributes that have values stored in this file. | " M " | M is the no of attributes you'll write in the file (eg position, particleID, rgbpp,etc) | 1 | We'll just write 1 attribute for position on per particle basis. | 6 | |
|  Header size | 28 Bytes | 28 Bytes | ||||||
| There will be "M" records ie record for each attribute. Each record will consists of the following | ||||||||
| 7 |  Single Record  (There will be M records like this) | 4 | Integer indicating the length of the attribute's name =L where L is the length of the name. | 8 | 8 (no of characters in string "postion") | 7 | ||
| 8 | L | L Characters indicating the name of the attribute | position | position | 8 | |||
| 9 | 4 | 1 Integer indicating the type of data for the current attribute. Choose the number from the following data type map below (Row no10) | Per Object Attributes are set for all particles so they are single numbers. (ie of type 0,2,4 ) See row 10 Per Particle attributes are set for each particle so naturally they are an array of the data. (ie of type 1,3,5 ) See row 10 | 5 | As position is specified as 3 doubles ie a vector and we have to specify this on per particle basis our datatype becomes 5 (vector array). See the info below on choosing data type.(Row No10) | 9 | ||
| 10 | P | Data Type 0 ---> Integer 1 ---> Integer Array 2 ---> Double 3 ---> Double Array 4 ---> Vector 5 ---> Vector Array | 0 ---> Integer (just one int=4 bytes - usually per object attribute) 1 ---> Integer Array ( N ints=N*4bytes - where N is the number of particles, usually per particle attribute) 2 ---> Double (just one double=8bytes - usually per object attribute) 3 ---> Double Array ( N doubles=N*8bytes - where N is the number of particles, usually per particle attribute) 4 ---> Vector (3 doubles=3*8bytes - usually per object attribute) 5 ---> Vector Array ( N vectors=N*3 doubles=N*3*8bytes - where N is the number of particles, usually per particle attribute) |  1.0 1.0 1.0  2.0 2.0 2.0 3.0 3.0 3.0 4.0 4.0 4.0 5.0 5.0 5.0 | x, y, z corrdinates for each particle. Maya stores floating points in double precision using 8 bytes. | 10 | ||
|  Single Record Size  (The record size for each attribute will vary according to data type) | 8+L+(N*B) Bytes | N * B Bytes representing the data for this attribute, where L is the no of characters in attribute name N is the number of particles or 1 for non-array data B is the number of bytes needed to represent the data type. |  N*B= 5*(3*8)=120  8+L+N*B=8+8+120 =136 Bytes | x y z are 3 doubles occuring 5 times | ||||
|  Total File Size  (Summation of header and M record size) | 28+size of M record Bytes | 28 bytes of header M records of size (8 + L + B) (8 + L + B) is going to be different for each attribute |    28 + 1*(136)=148  Bytes | |||||
| Reference: Maya Documentation | ||||||||
| Caution: Since format contains data that is not word aligned there could be potential problems with different compilers. In a loose words what it means is when you read data from memory by providing a memory address or pointer you might get incorrect results. As compilers will hand you the data from a valid address rather than from where you asked from. Our implementation takes care of this. | ||||||||