Ofer Zelichover - 3D Artist
What does it do?
This is a free Renderman exporter for 3DSMax.
It enables you to render your scenes using any Renderman complient renderer.
For now, it doesn't do very much. It is after all a first alpha version, but it is usable to some extent.
It exports your camera, lights and geometry (currenty, all geometry is exported using either polygons or subdivision meshes.)
It exports particles, though not all parameters are exported. The biggest problem with particles is that normalized particle age or the particle lifespan are not exposed to maxscript. If someone knows how to write maxscripts extensions and is willing to expose those parameters, please let me know.
A lot of max attributes are not supported yet.
What does it not do (and probably never will)?
I made this exporter so I can experiment with Renderman, thus, it will probably never be a full production tool.
If you need a working production tool, there are at least two commercial plugins that will do the job much better.
It does not convert your max materials into Renderman shaders (and it will probably never will, unless someone is willing to take on this huge part of the project.) If you wish to create shaders visually, you can use the excellent Shaderman tool by Alexei Puzikov.
Not all of Max's features and attributes are going to be supported.
At the moment there is no primitive support. In fact as mentioned above, all geometry is exported as polygons. I'm not sure if that will change.
Express yourself...
You can use scripting in a few areas of RIBit. Those include for now rib boxes and the shaders parameters in the rendering attribute modifier.
The expressions in RIBit are max scripts and are evaluated when creating the rib file by using the execute command in maxscript. Due to this, it is important to remeber that they are executed in the global scope.
Expressions in RIBit are defined by curly brackets ('{' and '}'). Anything withing these brackets will be treated as maxscript code and will be executed. It is possible to use nested expressions, meaning you can use unlimited number of curly bracket sets, in which case, the inner-most set will be evaluated first and it's result pasted in the containing expression.
There are some predefined variables and functions to ease the expression writing. Other variables and functions will be added in the future.
Variables:
- @F - the current frame number, not padded.
- @F2 - the current frame number, padded to 2 digits.
- @F3 - the current frame number, padded to 3 digits.
- @F4 - the current frame number, padded to 4 digits.
- @F5 - the current frame number, padded to 5 digits.
- @F6 - the current frame number, padded to 6 digits.
- @obj - the current object name.
- @particleID - the current particle ID.
- @particleCount - the current particle count for the current particle object.
- @particleAge - the current particle age (not normalized!).
- @particleSize - the current particle size (as read from maxscript, this usually means the size the is set in the rollout).
- @particlePos - the current particle position in wolrd coordinate system.
- @particleVelocity - the current particle velocity.
Functions:
-
<string>leadingZero <integer>number <integer>padding
Returns number padded with padding number of digits as a string. -
<integer>frameToInt <integer>frame
Returns the frame number of frame as integer. -
<string>toLowerCase <string>text
Returns text in lower case. -
<string>toUpperCase <string>text
Returns text in upper case. -
<color>floatToColor <float>f
Converts a float to color (gray). -
<float>remap <float>inMin <float>inMax <float>outMin <float>outMax <float>val
Returns a value between outMin and outMax based on val relative to inMin and inMax. -
<float>linstep <float>inMin <float>inMax <float>val
Returns a value between 0 and 1 based on a linear step of val between inMin and inMax. -
<float>smoothstep <float>inMin <float>inMax <float>val
Similar to linstep, only the returned value is smoothed stepped.
How did it all start?
It started with the fact that I wanted to practice some of the Renderman things I learned at work. However, I don't really like working with Maya, and prefer Max. The problem is, there is no free Renderman support.
I thought about writing something like this before, but was quite intimidated by the amount of work required, so it was only after Rudy Cortes (of www.rendermanacademy.com) has offered the code he had started working on for any taker to continue, that I actually started working on this project.
I ended up using parts of Rudy's code, but pretty much wrote it from scrach. However, if it weren't for him, I probably never would have started with this...
OK, So what do I need?
Well, first of all you need a Renderman complient renderer.
Here are a few free one (some completely free, some only for personal use):
Now download the latest RIBit version from here.
This is an .mzp file, all you need to do is run in using max's "run scrip" command, and you're all set to go.
Great. It's installed, now what?
The RIBit installation installs two macroscripts: "RIBit Render" and "RIBit Setup", and some modifiers.
First run "RIBit Setup". There you can define the render engines you've got installed on your machine, as well as some general directories the RIBit will use.
Now, run "RIBit Render". This opens up a "Render Parameters" window, where you can change your render parameters and send a render.
You can use the RIBit modifers to control object specific attributes, such as shaders, geomtry export type (polygons or subdivision), and you can add you own RIB commands with RIBBoxes.
I don't like this script, how do I get rid of it?
RIBit installs files in 3 places, to remove it, delete the following:
1. <max_root>\Scripts\RIBit - delete the whole directory.
2. <max_root>\Scripts\Startup\ - delete the file name RIBit_Startup.ms
3. <max_root>\UI\Macroscripts\ - delete the files beginning with "RIBit"
That's all for now. Enjoy, and please send bug reports to: maxscript[at]oferz.com