MaxwellCloner
Description
This extension is a geometry modifier. It loads a particle file, or reads particles stored internally and creates instances of the selected geometry at the particles positions.
Example of how to create a MaxwellCloner modifier, and apply it to an already existing object in the scene.
CextensionManager* extensionManager = CextensionManager::instance(); CgeometryModifierExtension* geomModifExtension = extensionManager->createGeometryModifierExtension( "MaxwellCloner" ); //Get the extension container. When using this method of getting the container, //nearly all parameters have default values, and there is no need to explicitly set them. MXparamList* clonerParams = geomModifExtension->getExtensionData(); //Fill the required data char* filename = "/home/rocco/Emitter01_00023.bin"; clonerParams->setString( "FileName", filename ); //Get the object we want to clone Cmaxwell::Cobject mxObject = scene->getObject( "MyGeometry" ); isOk = mxObject.applyGeometryModifierExtension( clonerParams );
Parameters
Name | Type | Description |
---|---|---|
char* | Particles filename | |
float | Particle radius multiplier | |
float | Motion blur multiplier | |
float | Camera shutterspeed | |
"Load particles %" | float | Percentage of particles to load |
" Start offset" | unsigned int | Skip some particles before loading |
"Create N particles per particle" | unsigned int | Enables Multipoint feature if N > 0 |
"Extra particles dispersion" | float | Dispersion of the extra particles cloud |
"Extra particles deformation" | float | Deformation of the extra particles cloud |
"Use velocity" | byte | Use the velocity vector to as Y axis of the instance |
"Scale with particle radius" | byte | Scale instances with particle radius |
"PARTICLE_POSITIONS" | float* | Array of particle positions |
"PARTICLE_SPEEDS" | float* | Array of particle speeds |
"PARTICLE_RADII" | float* | Array of particle radii |
"PARTICLE_IDS" | int* | Array of particleID's |
"FileName"
Name of the file that contains particles data. It is a NULL terminated string.
Example:
char* file = "/home/paco/Emitter01_00049.bin"; extParam->setString( "FileName", file );
"Radius Factor"
Multiplier for the particle radius that is read from the file. Can go from 0.00001 to 1000000 and the default value is 1.
Example:
float rFactor = 0.3f; extParam->setFloat( "Radius Factor", rFactor );
"MB Factor"
Multiplier to increase or decrease the amount of motion blur of the particles. Can go from 0.0 to 1000000.0. Default is 1.0.
Example:
float factor = 0.3f; extParam->setFloat( "MB Factor", factor );
"Shutter 1/"
Shutterspeed of the active camera. Affects the amount of motion of the particles. It is the inverse of the time the shutter is open.
Example:
float shutter = 125.f; extParam->setFloat( "Shutter 1/", shutter );
"Load particles %"
Percentage of particles to load. Can go from 0.0 to 100.0, default value is 100.
Example:
float percent = 75.f; extParam->setFloat( "Load particles %", percent );
"Start offset"
Skip N particles when loading.
Example:
unsigned int nOff = 10; extParam->setUInt( "Start offset", nOff );
"Create N particles per particle"
This parameter, if set greater than zero, activates the Multipoint feature, creating N more particles around each particle. So, if you have 100 particles and set this parameter to 4, it will create 400 more particles, and the final count will be 500.
Example:
unsigned int nParts = 10; extParam->setUInt( "Create N particles per particle", nParts );
"Extra particles dispersion"
This parameter sets the size of the cloud of extra particles around each original particle. Can go from 0 to 100000. Default is 0.
Example:
float dispersion = 2.f; extParam->setFloat( "Extra particles dispersion", dispersion );
"Extra particles deformation"
Sets the amount of deformation of the new particles cloud along the speed vector of the original particle. Can go from 0 to 100000. Default is 0.
Example:
float deformation = 1.1f; extParam->setFloat( "Extra particles deformation", deformation );
"Use velocity"
Use the particle velocity vector as the Y (up) axis of the instanced geometry.
Example:
byte useVel = 1; extParam->setByte( "Use velocity", useVel );
"Scale with particle radius"
Scale the instanced geometry with the particle radius.
Example:
byte useRad = 1; extParam->setByte( "Scale with particle radius", useRad );
"PARTICLE_POSITIONS"
Particle data can come whether in a file or internally stored in the .mxs file. If a filename is not supplied, the extension checks for internal data, and if successful, loads it. This parameter is a linear array of floats x0 y0 z0 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 ...., its length is 3*numberOfParticles.
Example:
int numParticles = 4; float points[ 3*4 ]; for( int idx = 0; idx < numParticles; idx++ ) { points[ 3*idx + 0 ] = (float)idx; points[ 3*idx + 1 ] = (float)idx; points[ 3*idx + 2 ] = (float)idx; } extParam->setFloatArray( "PARTICLE_POSITIONS", points, 3*numParticles );
"PARTICLE_SPEEDS"
Linear array of particle speeds, floating point numbers, needed to enable calculation of motion blur: Vx0 Vy0 Vz0 Vx1 Vy1 Vz1 Vx2 Vy2 Vz2...., its length is 3*numberOfParticles.
Example:
int numParticles = 4; float speeds[ 3*4 ]; for( int idx = 0; idx < numParticles; idx++ ) { speeds[ 3*idx + 0 ] = (float)idx; speeds[ 3*idx + 1 ] = (float)idx; speeds[ 3*idx + 2 ] = (float)idx; } extParam->setFloatArray( "PARTICLE_SPEEDS", speeds, 3*numParticles );
"PARTICLE_RADII"
Linear array of particle radii, floating point numbers: r0 r1 r2 r3 r4 r5 r6 .... The length of this array can be either 1 or numParticles. If only one radius is given , it is applied to all the particles, otherwise each particle gets its own radius.
Example:
//Each particle its own radius int numParticles = 4; float radius[ 4 ]; for( int idx = 0; idx < numParticles; idx++ ) { radius[ idx ] = (float)idx + 0.01f; } extParam->setFloatArray( "PARTICLE_RADII", radius, numParticles ); //One radius for all particles float r = 0.4f; setFloatArray( "PARTICLE_RADII", &r, 1 );
"PARTICLE_IDS"
Linear array of particle IDs, id0 id1 id2 id3 id4 id5.......needed to enable coherent calculation of multipoint. It is an integer array.
Example:
int numParticles = 3; int ids[ 3 ]; ids[ 0 ] = 23; ids[ 1 ] = 9; ids[ 2 ] = 51; extParam->setIntArray( "PARTICLE_IDS", ids, numParticles );