Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou

MAX R2 RELEASE NOTES: 13 JULY 97 -- VER 0.2.15


Confidential -- Yost Group, Inc.


Kinetix, a division of Autodesk, Inc.

MAX R2 RELEASE NOTES: 13 JuLY 97 -- VER 0.2.15

READ THESE NOTES FIRST! There are 2 pages of notes at the beginning of this document (everything before the "Update Notes" section) that you must read before you install the program.

0.2.15 INSTALLATION NOTE: You must either install this version (and the associated new 214libs static libraries) into a clean subdirectory, or delete your 3dsmax.ini if you decide to install it in your old directory.

Note #1: This document is an adjunct to the Maxspec document that is created in parallel. This is based on the programmer's release notes, is in most-to-least recent order, and is meant to be used only as a secondary reference to the Maxspec doc. Please read the Maxspec doc (xxxspec.doc) completely first, and use this for deeper background info and references to sample files.

IMPORTANT: This document covers notes for the 0.2.6 release onward, in First-In-Last-Out order. For all notes pre-0.2.6, reference the 025notes.doc. A good way to get completely up to speed is to read the 025notes.doc first, and then read this document from the bottom up.

NURBS documentation is in the xxxnurbs.doc file that comes along with this build. An xxxntuts.doc file is also included, with Nurbs Tutorials.

All API documentation is in the SDK.

All MAXScript documetation is in the MAXScript Beta section.

All VRML documentation is in the xxxvrml.doc file.

Note #2 (installation): Here are the critical steps required to get this baby running:

Unzip 215MAX.ZIP in a clean directory with the -d parameter.

Unzip 215LIBS.ZIP into the same directory (the directory where 3DSMAX.EXE is). This file contains:







*.MAP (8 map files for the Sunlight system)

(Note that the 0.2.15 versions of these static libraries may be good for a number of versions... basically until further notice.)

Make sure the ACIS.DLL is also in your \max root directory with the above-two files. (That dll is a separate .zip file, and it also is a static library that changes very rarely.) Note that if you run the program and nothing happens, it means that some/all of the static libraries mentioned in steps 2 and 3 aren't installed.

Make sure that the old blue Rainbow Max lock is installed (with its drivers -- you're ok if Max 1.x can run), AND the new tan Rainbow Athena lock is installed behind it.

If, once you're up and running, you get messages about the Upgrade Lock not being present, or any other error from the hardware lock code, you should download the SNTNL533.ZIP file from the Athena Executable directory in the Compuserve beta forum. These are the most current Rainbow lock drivers and fix the problems that may lead to your system not recognizing one or both of the locks

Note #3: Make sure that, if you're using any plugins that aren't part of the official build process, you delete them when you install new builds. Plugins are only good for the specific build/SDK that they're compiled for. SDK's are compiled with odd-numbered versions, and they appear on the Monday evening 24 hours after the release is uploaded.

Note #4: Here's how to report bugs. Every bug report must be composed of three basic sections, the Synopsis, the reproducible Steps, and the Result. Example:

SYNOPSIS: This is one or two sentences describing the problem.


do this

then do this

finally, do this

RESULT: This happens, and it looks incorrect (this other thing should've happened).

Note that if a bug can't be reproduced without a sample file, simplify that file down to just the object that's required to reproduce the bug and zip it up with a .txt file containing the above steps and then post the steps in the beta forum and upload the .zip file containing the .max file and .txt file the bugs library.

Update notes (for version 0.2.15, 7/13/97):


Things are becoming more and more stable. Linkage solutions can be generally made stable by reducing the time increment of the solution (ie, increasing the Calc Intervals Per Frame parameter).

A good example of this is in the two new samples files: DYNHNG1.MAX AND DYNHNGE2.MAX. The first file illustrates a simple two-joint hinge with both gravity and wind forces. It uses a Calc Interval value of 2, and has no stability problems during the solution. But when another hinge is added in the second file, the CI value needs to be pumped up a bit in order to hold the simulation together (also note that in the second example, the wind forces are animated and reach some very severe levels).

Also note that in both the above hinge demos, the Link Info locks have been used to lock the hinges to only rotate about their local X axes, and the position locks are on for all three axes (because the hinges are only rotating). It's essential to use the Link Info/Lock controls whenever putting together simulations involving linkages.

An additional sample file, GOVNOR1.MAX, uses HINGED - instead of pinned - arm linkages (also set up in Link Info/Locks). This is a great example to take apart and study.

Dropped the wind strength effect by a factor of 100, so a value of 1 means about 1 mile per hour now. This is probably too low, and your old files that use wind may need some serious tweaking. We'll be looking at this over the next week or two to see what the optimal value is here.

Fixed a major bug in the Resting/Sliding solution, which is getting us a little closer to the grail case of a box sliding down a ramp. RESTSLID.MAX illustrates what's right and what's wrong with resting/sliding. Right now the solution is very sensitive to the number of calculation intervals per frame. Four gives us one almost-correct solution. Three yields something different. Two and five both lock up the optimization loops cycling between zero force and zero acceleration contact points, which should never happen with frictionless solutions - which is what all of them are right now. There are some very subtle, very difficult to characterize numerical things going on and we're going to install double-precision math in the simulation this week to get more clarity on what exactly is happening. Essentially, sliding contact solutions is where resting solutions were last week... installed and sort of working but unstable. One problem that may be insurmountable is that any resting/sliding solution using multipoint contact (that is, all of the possible solutions) yield up different results for every combination of points. Thus, when the upper box slides across the lower box's face edge, the number of contact points change and the solution at those points change also. There's no avoiding this; the constraints are redundant and the math, once it finds ANY valid solution, stops. The sample file illustrates this in both the three-step and four-step per frame settings.

~YG new features and general issues resolved

At FR's suggestion, changed the ghosting defaults to:

Ghost Frames = 5

Display Nth Frame = 1

Ghost BEFORE (not BOTH)

Changed the way the Displace modifier works with 3D texture maps slightly. Now it uses the vertex positions for the 3D texture instead of the projected UVs. If for some reason someone wanted to use UVs instead, they can select UVW1 from the coordinates rollout of the texture map. Note that the displacement direction is still derived from the mapping.

Changed the name from Athena to MAX R2 Beta in order to get ready for Siggraph.

Cleaned up the new yellow icon that RF gave us and installed it in the EXE. This is a placeholder icon until the actual MAXr2 icon is designed.

MF brought up the fact that Image Motion Blur didn't work with environment backgrounds. While IMB was never actually meant to work with environments, it was obviously something that could be useful in certain cases. The problem, in addition to computing the motion vectors for the 2D environment, was primarily the fact that a blurred environment "competes" for velocity information with the objects that are in front of it. That makes IMB'd environments generally useful as backgrounds for compositing, but perhaps not so generally useful in the cases in which static objects are in front of them.

So, there's now a new "Apply to Environment Map" checkbox in the Image Motion Blur section of the Render Scene dialog which controls this feature. When on, it will blur the background environment map (and it will even blur when the map is screen coords, which will provide a completely nonsensical result, but if you ask for it, it'll do it).

More on the problem of foreground objects in front of blurred environment backgrounds. Here's what happens in the case of the background moving with a stationary foreground object. The pixels around the edge of the stationary object, even if only partially covered (so, for example, the background is 90% of the pixel) don't get ANY blur, so they stand out around the object, against the blurred background. This will look a bit like aliasing, but it's actually not... it's an uneven distribution of IMB pixels around the stationary object. (This same problem can occur with an large object in motion behind a stationary object.) There are ways to mitigate this when the camera or the object is moving by cranking up the object's IMB Multiplier, but that may not always be possible. The only way to completely nail it is to render the environment and foreground objects in separate passes and then composite them.

~YG Bugs Fixed

Fixed a bug that GN found in which the program would crash when attaching a mesh to another mesh if the two meshes had different materials and one of them had a map showing in the viewport. This fix prompted us to add a warning to the attach process. If you select the Condense Material option, a warning will prompt you if the condense is actually going to take place that the operation is not undoable. If you cancel out of this dialog the condense won't happen (but the attach will). If the objects don't have materials, the condense won't happen anyway (so the warning dialog won't appear).

Note that this warning is directly in the Attach dialog and it states that the attach operation may not be completely undoable. Also note that we've tweaked it up so that if the Condense option is not selected, you will always be able to at least undo the attach, but you still may not be able to undo the combining of materials. Before, you could end up in a state where when you undid an attach, the object that was attached would re-appear (however that object wouldn't be removed from the object you were attaching to). You can still get into this state, but now it will only happen if the condense option is checked.

MF brought up an issue in which he had a displacement map that gave him an error upon load that the file couldn't be found. Basically, the Displace modifier had a bitmap assigned to it with no filename and yet a device name of "Targa Image File" -- which isn't an actual. What we did do was make it possible to clear this with the "Remove Bitmap" button. So clicking on the "Remove Bitmap" button and resaving the file will fix it. If there are reproducible steps to get into this situation then let me know.

Fixed a bug that CJ found in which the program would crash if you assigned a Link Controller and then saved the file.

Fixed a bug that DE found that would cause an assert if didn't have a midi device installed, tried to access the controller, which would then let you hit the Create panel while the supposedly-modal midi-not-found error dialog was displayed. Now, when the MIDI device error message box comes up, it is completely modal (as it should have been) so you can't do anything else until you OK the dialog.

While doing the above, went through the motion capture system without a MIDI device to make sure that folks didn't continually get error messages. Some error messages were changed so they didn't appear if you had already been notified of the device error. For example, you will only get the error the first time you enter the motion capture utility (per session of Max). However you will get the error every time you try to enter the MIDI viewer dialog.

Fixed a bug that MF found in which the Cellular map wasn't evaluating sub-materials until you tweaked them.

Fixed a bug that JR reported in which the net rendering packet sizes could return a negative number.

Fixed a problem in which an optimization in the OGL driver had been commented out and then not commented back in. It had to do with wireframe redraw speed (using segments), and it's now commented back in, so the OGL wireframe redraws should be back up to speed.

Fixed a problem in which lofter deformation windows weren't saving their state properly.

Fixed a problem with Grid helper objects in which, if you typed in a very small value, the program would attempt to draw an extremely dense grid. Set it up so that now, if grids exceed 200 lines in either dimension, the grid object degrades to an X-d out rectangle.

Fixed a problem that DS and MR found in which files that were saved with active user-defined grids weren't becoming active upon file load.

As per MR's suggestion, PBomb, Motor, and Push now have range hoops over the icon when the Range checkbox is turned on. The size of the range hoops corresponds to the entered ranges.

Fixed a bug that RF found in which PathFollow wasn't working with Constant Velocity correctly...recycled particles could've gotten stretched.

Fixed a problem in which the viewport display was not updated when switching between coordinate types for 3D maps.

Implemented support for Direct3D drivers this week, and worked with PT from Microsoft for four days to get the driver working. We now have smooth and facet shading, wireframes, text, and textured objects (no decals yet). We can also create previews.

Viewport backgrounds, decals, dual planes, and lit wireframes aren't implemented yet, and running with multi-processing enabled is pretty shaky, but Max is now quite usable with D3D.

Also, there is still a lot of optimization necessary before the D3D driver will be "competitive" with our other drivers (and there are some inherent mismatches in data types that will make this quite tricky), but all-in-all, the driver is coming along quite nicely. The optimal bit-depth for this driver will be 16bpp.

The entire team spent a tremendous amount of time this week implementing new API enhancements from the huge API wishlist that MM has been collecting for the past six months. These enhancements are partially documented in the 215 SDK and will be thoroughly documented by 217 (that's the Siggraph show build, btw).

Fixed a bug that FR found that would cause face-hitting in EditMesh/EditableMesh to hit faces that were behind the face you were attempting to hit. This was a bug in the mesh class, making face sub-object selection less precise. What was happening was that the Z value for all face hits was not being properly computed. So say you clicked on a face of a box... you'd hit two faces: the one closest to you (and facing you) and the one on the backside (facing away). Most of the time the back facing face would end up selected so to avoid this you'd have to turn on the Ignore Backfacing switch (which EditMesh doesn't have, of course, which made this problem worse when using EditMesh). Now the Z values are computed for both these faces and the face that is closest will be selected instead making selection a lot easier.

Fixed a bug that CJ found in which certain modifiers didn't allow you to copy them (through the CanCopyAnim API) and would be copy-able in the Edit Stack dialog even though you couldn't copy them from TrackView.

Fixed a bug that LM found in which, when creating an Oiltank or a Spindle, before you started the creation, the blend key was set at 0.1. When you started to create, it went to 0. If you had Animate on, and were on a non-zero frame, keys were generated for this track.

Fixed a bug that CJ found in the EditableSpline object in which you'd get an assert if you were moving coincident vertices and answered yes to the "Weld Coincident Endpoints" alert.

Fixed a bug that JC found in which the program would crash if you dragged a NONE map from the Medit Browser to the Environment map slot in the Environment dialog.

Fixed a bug that would cause any modeless TrackView filters (ie, Negative is the only one now) to not update their parameter value displays when hitting Undo. The value would internally be undone, but you would have had to have moved the time slider to actually see the undone result.

Found and fixed a bug that caused the manager to crash once in a blue moon (JC had seen this, among others). If two connections are attempted exactly at the same time (within the time it takes to start a thread, which is in the milliseconds), the manager would get a loose pointer and crash. The larger the network, and the greater the number of people submitting jobs, playing around with Queue Manager, etc., the greater the chances were. The way these "server" threads are handled by the manager has been changed to accomodate this.

Fixed a problem that DE found in which bitmaps applied as texture maps would be offset when field rendering. (Note that it didn't have anything to do with IFL files as the report suggested... it would've happened with any map.)

Fixed a problem that RF found in which the 'Merge: Duplicate Material Names' dialog had an X icon for closing the dialog box which did nothing (it's been removed).

Fixed a bug that LM found in the Scatter and Conform objects in which, although the parameter fields undid properly, the field displays wouldn't update after the undo.

Integrated a Heidi fix for the problem in H5 with dotted edges that made Edge mode in 0.2.14 not work and NURBS lattices not display.

Fixed a bug that JC found that appeared to be a bad mesh (badmesh7.max), but in reality was a problem with validity intervals. You could've run into this if you just made an object, animated its segments, collapsed it to an EditableMesh, and then went to a different frame and applied a modifier... the program would've gone to sleep. The problem was that the topology channel validity interval was incorrect... it still reflected the animated topology even though the topology was no longer animated.

Fixed a problem that RF found with the Target Lights in which mouse movement was being read as spurious target distances.

Fixed a bunch of undo display problems that LM found:

In the Material modifier, changes to the Material ID field were undoable, but the value was not updated after the undo.

Ditto Normal modifier, both options.

In the Optimize modifier, all the fields and options undid properly, but the status of the fields/options were not updated after the undo.

Ditto Smooth modifier, Spherify, and Vol Select.

Fixed a problem that LM found in which the Fence selection method and object tooltips were interacting. We now don't put up tooltips when you're in the middle of a fence select. (This is consistent with no tooltips during rect or circle select. They never appeared there since they don't come up during a mouse drag.)

There are still times (unrelated to tooltips) when fence selection causes drit. These can't really be fixed, so if they are deemed important enough, they'll have to be documented. (The problem is that the only way to clean up the drit would be to redraw or reblit the whole scene, and then redraw the fence region to get all of the XOR lines back. This is simply too expensive as a way to clean up a little drit at the line endpoints.)

Note that after the selection is completed, that portion of the scene is redrawn and the drit disappears.

Finally, LM had noted that double-clicking fast and then holding the button down and dragging wouldn't create a fence. This is a NAB because the fast double click did a "point" select and never initiated a drag select of any kind. In particular, this also happens (correctly) for rectangle and circle select.


JR came up with a case in which the keys in the animation seemed to have "gotten out of synch" from the animation in the viewport. These keys appear at a different location in the function curve editor because there is an ease curve applied to the position track. It's important to remember that when you're using ease curves, they warp time.

JR also brought up the long-standing issue of why, when you set the start frame to 0, end to 100 and you get a length of 100 (instead of 101). We've explained this a zillion times, and here it is again (in a nutshell). The simplest analogy is that there are 13 ticks on a ruler yet only 12 inches. So, in an animation that starts at 0 and ends at 100 there will be 101 frames, however the length in time is only 100. This is the way that time and space works... we only report the news, we don't make it.

ME reported a problem with the Surface Controller in which it apparently stopped working after applying a modifier to a box object (that was previously working with this controller just fine). This is a NAB because (as documented in the release notes), the surface controller only works with objects that are parametric (i.e. any point on the surface can be identified by two parameters U and V). This includes most primitives and patches but not triangle meshes -- which is what the box becomes after it is deformed. If you want to get this sort of effect with meshes, then you should use the Attachment controller.

LM had noted that there is a portion of the range in the Capsule object between positive and negative heights that represent illegal values. This is a NAB because we have to jump over that to a large enough value of the opposite sign to make a valid solid.

JC had mentioned a problem with not being able to select complete polygons in a specific file. The planar thresh defaults to 1 and some of the polygons in his file were not planar, so a higher threshold is required.

JR reported a problem in which he'd create an object (any size) and then scale it down to 0.2% of its original size and then do a zoom extents all. Then, he'd create a tape the approximate width of the object and do another zoom extents all... getting the result of everything zooming way out. This is a NAB because after the scaling to 0.2% and the zoom extents is done, we're beyond the valid grid scaling. Thus, the tape is not constructed on top of the box, but rather is quite far from the box. So, pressing ZEall zooms the scene out far enough to show both the box and the tape. Note that this problem shows up for all targeted primitives (lights, cams), and that it isn't even possible to create a sphere at the super-zoomed-in viewport.

~Non YG Bugs and Issues Resolved

Asset Manager utility changes:

crash bug while reading .rla images fixed.

Drag And Drop: the ctrl-key and shift key can now be pressed or released any time during DAD operation to choose between move and copy. The cursor is updated accordingly.

Known Bug: the cursor is updated while the mouse is moving. A still mouse on top of the tree node may not show the latest copy/move cursor. Dan need to make little modification on DADMgr class in order to fix this. I have requested this to Dan.

DAD behavior now changes across partition.

No Key pressed:

Same partition: Move

Different partition: Copy

CTRL Key pressed:

Same partition: Copy

Different partition: Copy

SHFT Key pressed:

Same partition: Move

Different partition: Move

Default .max thumbnails for those max files with no built-in thumbnail is ready.

Delete operation functional. Pressing 'Del' key will delete selected thumbnails. (A confirmation dlg before the delete is to be added)

Alert Message boxes are added when copy, move and delete fails.

Alert Message boxes are added when target file exists for copy and move.

Sorting function has been optimized. It's far better now.

PageUp and PageDown keys functional. Hitting these keys scroll the thumbnail by one page at a time.

A confirmation dlg before the delete file is added

There is a thread synchronization problem that leads to crash bug in VAIIC. (for example press VAIIC button twice while loading thumbnails in a new directory will crash max. Clicking on Sort and size buttons while loading thumbanils may result in strange things). I could not find an efficient solution yet. However I made a temporary solution (atleast for 0.2.15). While thumbnails are loaded, sort buttons, display size buttons and VAIIC are not functional.

ASCII Exporter changes:

Changed sampled rotation keys to be relative to the previous key instead of absolute.

Changed animation detection to take the parent nodes TM into account. The visible result of this should be that if a parent node is rotated the child should not output rotation samples anymore (unless it too had rotation)

Changed all sampled keys to take the parents TM into account.

Implemented simple key reduction for sampled keys.

Found and fixed a problem that caused a crash when resetting the scene after exporting the classic birdwalk.max

Sunlight System changes

City name now reappears in the panel if either lat/long spinner change is cancelled. Fixed bug related to city name reappearing after re-entering the Get Location dialog without selecting a city.

Added ellipses (...) to the Get Location button.

Doors: Base/Height and Elevation/Depth creation options should now be working. Both support 3D object snaps, although the Elevation/Depth option requires it, regardless of the orientation of the current construction plane relative to world. Put another way: when using the Elevation/Depth option, the Z coordinates of the first two points must be different (relative to the current construction plane).

Map Scaler WSM modifier:

Removed aspect ratio spinner.

Implemented the Scale spinner.

MeshSmooth/Tessellate: Fixed selection set propegation. If you apply MeshSmooth to an Editable Mesh in a sub-object state, but have "Apply to Whole Mesh" selected, you see what the original selection "becomes" as it goes through the MeshSmooth. Selected areas or faces, edges, or verts should still be selected. This wasn't working for edges at all in 0.2.14, but it seems to test out ok now. It's also working in Tessellate, where it's harder to see but still an issue.

MeshSmooth: Fixed crash bug that occurred when "separating by" something and not in quad output. (Scopus #66011, among others.)

PathBevel modifier: Finally got transform issues straightened out. Now, the path used for bevelling is always obtained in object space, plus the world space orientation change, without the world space translation. (It's oriented as the user sees the path, but it's not translated way off in left field.) This was failing before when the path's pivot was moved or when a WSM was applied to the path. ("Path" = referenced object selected by "Pick Path", not the modified shape.)

MAXScript. Added Script Controllers. Notes:

The following two problems were uncovered in 0.2.15 after it was finalized and should be addressed in the next beta release:

1. The select() and selectMore() functions have a performance problem that is making them run around 30x slower than normal. This affects several sections of the script that use select functions.

2. The color-coding of text in the listener window can result in incorrect colors for input text if you type on lines containing output or message text.

Five new scriptable controllers are now available in MAX, mirroring the five current expression controllers. They are:

Float Script - float controller

Position Script - position Point3 controller

Point3 Script - Point3 controller

Rotation Script - rotation Quat controller

Scale Script - scale Point3 controller

They function in similar way to expression controllers, providing a properties dialog in which a script can be entered that is used to compute the controller value. The primary advantages of script controllers are:

They can use all the features of the MAXScript language including loops, scripted functions, pathnames, etc.

Almost *any* property of any object in the scene can be used to help compute controller values, including things like mesh vertices, values of properties at arbitrary frame times, and other non-animatable properties that are not accessible in Expression controllers.

They can use MAXScript global variables to communicate and coordinate with other controllers and scripts in MAX.

When you assign a Script controller to some parameter, a properties dialog becomes available through the right-mouse-button menu or the Properties button on the Track View toolbar. This dialog contains two text boxes and several buttons:

Script text box

You type the script to compute the controller value here. See the section below on writing controller scripts for details.

Result text box

This box showsthe results of an evaluation or any error messages caused by errors in your script.

Evaluate button

Cause an evaluation of the controller script to be made and prints the result in the Result box. The evalutation is computed for the current position of the MAX time slider.

Load/Save buttons

(Not yet active) Load and save scripts to text files.

Close button Compiles and checks the controller script and if all is OK, close the properties dialog. Any problems result in a query box asking whether you really want to close the box with an incorrect script. If you do, the controller will yield a null value (0, [0,0,0], etc.) when evaluated by MAX.

Writing Controller Scripts

MAX interprets the text you type into the Script text box as the body of a MAXScript block expression, so you can type as many expressions as you want on as many lines as you want and they are evaluated in turn and the value of the *last* expression is taken as the conroller value. This value *must* yield the right type for the controller, Float for float, Point3 for position, Quat for rotation, etc.

Since the text is effectively 'inside' a block expression, you can declare local variables which are visible only within the script and are temporary for one evaluation. You can also declare or access global variables that are shared with all other scripts in MAXScript and hold their values from one evaluation to the next.

A controller is always evaluated by MAX with respect to a specific animation time. This might be the current time slider or incrementing frame time if an animation is playing or a render is under way. In the case of Script controllers, the time being evaluated is used to establish an automatic 'at time' context around the controller script, so any properties you access (outside of other explicit 'at time' expressions) yield the correct values for the current controller evaluation time. This means you don't have to do anything special in your scripts to work at the correct time. You can access the eval time if you need with the standard MAXScript variable, currentTime. You can also reference scene property values at other times by using explicit 'at time' expressions in your scripts, as in normal MAXScript programming.

Here are some examples:

A position script keeping the object at the centroid of all other objects in the scene as they move about:

local pos = [0,0,0]

for o in objects where o != $foo do

pos += o.pos

pos / (objects.count - 1)

The above script computes the average position of all objects except the current one (written as $foo here) by setting up a local, iterating over all objects except $foo accumulating a total position vector and compute the average in the last line, which is the final result of the script.

A position script keeping the object attached to the highest vertex in a given object:

local high_index = 1, high_z = (getVert $foo 1).z

for i in 1 to $foo.numVerts do

if (getVert $foo i).z > high_z then


high_index = i

high_z = (getVert $foo i).z


getVert $foo high_index

The above script runs over the vertices in $foo remembering the index of the vertex with the largest z and returns that vertex's coordinates as the new pos.


The main problem with the current implementation is that script controllers are not automatically updated when you interactively modify objects that they depend on. If you hit the time slider or if you animate the changes and then play the animation, the changes *are* reflected automatically. Since the scripts can refer to other objects in very indirect ways or conditional ways, it is not possible for MAXScript to automatically determine the objects a script depends on, but I am experimenting with a scheme to let you explicitly specify the objects your scripts depends on if you want interactive updates.

To Be Done:

1. implement load and save buttons

2. improve error messages with source highlighting

3. add a Matrix3 controller for PRS scripted control

Added a new structure type MAXScript

You can now create your own structured objects in MAXScript using the new 'struct' definition construct. This lets you define the layout of new 'classes' of compound objects that you can then create and work with. For example,

struct person (name, height, age, sex)

defines a new 'person' class. You create values

of this class using the 'person' constructor:

bill = person name:"Bill" height:72 age:34 sex:#male

joe = person name:"Joseph" sex:#male

You access structured objects using the standard property accessing syntax in MAXScript:

bill.age -> 34

joe.age -> undefined

joe.age = bill.age - 4

etc. The classOf() function returns the struct class when applied to these objects:

classOf bill -> person

Added #noPrompt to resetMAXFile () primitive function

You can now call the resetMAXFile primitive function with an optional #noPrompt argument which if specified causes the scene to be reset with no query box prompting for verification, eg:

resetMAXFile #noPrompt

Added .targetDistance property to all nodes that have targets

All scene objects that have targets (target cameras, target spots, tape measures, etc.) now support a new property .targetDistance. You can both get and set this property. Setting the property moves the target along its current direction to the distance specified. For example,


$cam2.targetDistance = 100

Added the following new camera properties:

.orthoProjection :boolean

.showCone :boolean

.showHorizon :boolean

.showRanges :boolean

.clipManually :boolean

the remaining user-visible camera parameters will be made available in a later beta release.

Added support for locals in top-level block expressions

In prior releases, MAXScript would not allow local variables to be declared inside block expressions at the top-level, or in other words, outside of function or handler bodies. This is now supported.

Added new MAX system global, hotspotAngleSeparation

The Hot Spot/FallOff Angle Separation value that is set in the Rendering Preferences panel can now be accessed through a new MAX system global variable:


This variable is read-only at the moment.

Fixed a bug that corrupted certain syntax error messages

Changed the name of the "File In Script" button on the MAXScript utility panel to "Run Script" to make it more understandable

Added code to make viewports redraw properly after running a script using the MAXScript utility panel "Run Script" button.

Changed the Listener window to use RichEdit text boxes bringing the following new features:

line selection margin down the left side

drag-and-drop copying of text within listener and between script editor windows

support for ctrl-c, ctrl-x, ctrl-v cut & paste accelerators

support for ctrl-b parenthesis balancing feature currently available in script editor windows

ctrl-z undo after a command evaluation now removes *all* the text printed in the listener, making it easy to clean out large print-outs

color-coding has been added to distinguish between input text, output text and error message text. There are 3 new MAXScript system globals to control these colors:

Text Type Variable Default Color

typed input text inputTextColor black

ouput text ouputTextColor blue

error message text messageTextColor red

Added .height property to all rollout panel control types

This lets you override the default setting height for rollout panel items. For example,

button foo "Stop" width:75 height:25

makes a nice big stop button.

Script editor windows now position the cursor at the click point when you active with a mouse click, prior releases activated but didn't position cursor, requiring a second click to do so.

Added GeoSphere parameters

.radius :float, default 25.0

.segs :int, default 4

.baseType :int, default 2

.smooth :boolean, default true

.hemisphere :boolean, default false

.baseToPivot :boolean, default false

.mapcoords :boolean, default false

Added Prism parameters

.side1Length :float, default 25.0

.side2Length :float, default 25.0

.side3Length :float, default 25.0

.height :float, default 10.0

.side1Segs :integer, default 1

.side2Segs :integer, default 1

.side3Segs :integer, default 1

.heightSegs :integer, default 1

.mapcoords :boolean, default false

Added Pyramid parameters

.width :float, default 25.0

.depth :float, default 25.0

.height :float, default 25.0

.widthSegs :integer, default 1

.depthSegs :integer, default 1

.heightSegs :integer, default 1

.mapcoords :boolean, default false

Fixed a 1.2 to 2.0 compatibility problem accessing strength property on a Noise controller (which is now a sub-controller)

<make sure can get controller!!>

Fixed a recently-added crash in createFile () primitive.

~QE Bugs Fixed

BUG #: 66613


CODE FIX: Partial NAB and partial fix. The Edit Spline local coordinate systems fail in this case because the axis systems may be totally different. It makes no sense to rotate about a common point and yet different axis. Object level is the same way. However, the bug in which the axis tripods weren't displayed is now fixed.

BUG #: 66614


CODE FIX: Partial NAB and partial fix. The Edit Patch local coordinate systems fail in this case because the axis systems may be totally different. It makes no sense to rotate about a common point and yet different axis. Object level is the same way. However, the bug in which the axis tripods weren't displayed is now fixed.

BUG #: 33506


CODE FIX: The prompt line now displays XYZ deltas, distance and angle while creating Line objects. It also displays them while inserting into shapes in Edit Spline and Editable Spline. Note that the angle displayed is always in respect to the XY plane (which is an absolute angle from the previous vertex to the vertex at the mouse location, in the local XY plane of the shape). It wasn't clear from this record as to whether or not you want the angle to reflect the angle at the previous intersection. Comments?

BUG #: 66384


CODE FIX: RGB Tint Map button has a disable/enable checkbox now.

BUG #: 66353


CODE FIX: ArcballCallback::BeingDestroyed() is not called 60 times when the dialog is closed anymore.

BUG #: 66871


CODE FIX: Tabbing is not out of order in the Render Map dialog anymore.

BUG #: 66813


CODE FIX: The number of children linked to a group is reflected now in the "number of children" textbox when the properties of the group are displayed.

BUG #: 66663


CODE FIX: It now puts up a more informative message when it can't find the Custom Sample Object File.

BUG #: 59835


CODE FIX: Fixed a problem with NGon inscribe/circumscribe in which we had a backwards radio button display.

BUG #: 66746


CODE FIX: In the new particle systems, when selecting Group from the SbN dialog, the group highlights (ie, flashes in the wireframe views) now.

BUG #: 67017


CODE FIX: In the new particle systems, the viewport now correctly updates when picking an object as instanced geometry.

BUG #: 67278


CODE FIX: Make a Blizzard doesn't crash the program anymore.

BUG #: 66742


CODE FIX: In PArray and PCloud, Pick Object based emitter is correctly updating the object name in the Modify panel now.

BUG #: 65123


CODE FIX: The Undo step for "Pick Wrap-To Object" is labeled correctly in the Undo steps list now.

BUG #: 67708


CODE FIX: Edit Spline insertion now works properly.

BUG #: 67499


CODE FIX: Fixed this memory leak in ref.cpp.

BUG #: 67655


CODE FIX: Mapping coords are automatically generated for Patches now.

BUG #: 67698


CODE FIX: Detaching this object from this group doesn't cause an Assert anymore.

BUG #: 67701


CODE FIX: Resetting after merging this file doesn't crash the program anymore.

BUG #: 67286


CODE FIX: Anomolies are gone now when using the Speckle map.

BUG #: 67564


CODE FIX: The TAB key to move around fields works in the Selection Floater window now.

BUG #: 67691


CODE FIX: Tab key in Object Properties window goes through fields in order now.

BUG #: 67219


CODE FIX: IDS_DB_NU_MSG has been split into 3 separate resource items (IDS_DB_NU_MSG1, IDS_DB_NU_MSG2, and IDS_DB_NU_MSG3).

BUG #: 67859


CODE FIX: Max doesn't crash anymore when exiting the Motion Capure utility's "Test" mode while playing back the animation.

BUG #: 67356


CODE FIX: The "Increment Based On Direction" section of motion capture's Joystick Input Device refreshes now when Accumlate is checked.

BUG #: 67560


CODE FIX: Using the 'TAB' key doesn't move numbers to the right anymore when using it to move around the fields in the Transform Type In window.

BUG #: 67692


CODE FIX: Fixed a bug in which the Z-order of selection in the EditMesh modifier was incorrect. Now, the first face that you pick will be front-facing, and then if you pick again, you'll get the backfacing face behind it. You'll then be in backface-pick mode until you pick twice on a face to get the front-facing face again.

BUG #: 67486


CODE FIX: Fixed this problem with FreeLibrary calls not matching LoadLibrary calls.


BUG #: 66884


NAB: The fact that the Method Class DADMgr::AutoTooltip does not show a tooltip is a NAB because the tooltip only shows if the text is too long to fit in the button (but it does show).

BUG #: 67363


NAB: The named Track View buffer is limited to 13 open Track Views per scene because the other three trackviews are taken by the Expression controller, the Medit Browser, and something else that I can't remember right now. Regardless, this is doc'd at 13 in the 025NOTES.DOC, search on wish#2142. If the docs aren't clear about how there are 16 total, but only 13 available for named views, then the docs need to be modified. Contact TechPubs re that.

BUG #: 67556


NAB: It's a feature that in PArray the object fragmentation chunks have their wireframes overlayed on the shaded view. This shows you the structure of the chunks explictely while you're setting up the effect.... the wireframes don't show up in the scanline renderer.

BUG #: 67726


NAB: Save does a Save. Save As does a Save As.

BUG #: 66883


CODE FIX: The fact that DADMgr::GetInstance is called twice is a NAB because it calls GetInstance on both the source and target DADMgr... It needs to do this in case of swapping (among other reasons). Since they are the same DADMgr it gets called twice. The DAD code also does a little behind the scenes sleight of hand to make sure that GetDADBitmapCarrier() will return a different pointer for the source bitmap than it does for the destination bitmap. This is a feature.

BUG #: 67694


CODE FIX: The fact that the object color defaults to the incorrect color in this case is a NAB because, when changing the color by clicking on the current color swatch to bring up the color picker, the result is a color that is not in the palette. When the object color palette dialog is brought up a second time, it can't find the color in the palette (so it jumps to the last color and uses that as the current color). If you want to use colors outside the predefined palette, then you should define a custom color. (Verified that defining a custom color and assigning it to an object will yield that color being highlighted as the current color when you enter the dialog a second time.)

BUG #: 67485


NAB: This issue about FreeLibrary calls not matching LoadLibrary calls is a NAB because, when a process is shutdown, Windows NT and 95 free all dynamically-loaded libraries without any need for an explicit call to FreeLibrary. This BoundsChecker error should really be a warning. (And, although it would be nice to get rid of the error by explicitly calling FreeLibrary, this is not simple. The GFX libraries start up their own threads on load, and there's no way that we're going to free the libraries while the threads are still running. Additionally, the thread semantics are different for HEIDI, OpenGL, and D3D. The undobody DLL was written by David Phipps - based on our code - so we'd rather not touch it when it really isn't broken in the first place.)

BUG #: 67153


NAB: Mesh::Init() always gives an unresolved external symbol is a NAB. You're getting an unresolved external because the function is not exported -- it's not exported because it is not intended for developers to call.

BUG #: 67364


NAB: The Delete Track View dialog does not list named Track Views sequentially because they are listed alphabetically.

BUG #: 67365


NAB: The fact that the Delete Track View dialog does not list displayed Track Views is a NAB because you can't delete track views that are open.

BUG #: 67819


NAB: The fact that the object in question disappears when a Boolean/Union is performed is a NAB because it's an invalid boolean (so it will automatically switch to display operands). Switching it back to Result will cause it to disappear since there is no result.

BUG #: 67869


NAB: The fact that Zoom Selected Object does not expand objects to see a selected child object in a collapsed hierarchy if a non-linked object is also selected is a NAB because Zoom Selected just zooms to the first selected object it finds. It can't zoom to more than one selected object at a time (since they may be in completely different parts of the track view).

BUG #: 67870


NAB: The Track View's Sound Options dialog is modeless. Not modal. Modeless. What's the bug here?

BUG #: 67697


NAB: UVW Map doesn't release memory when deleted because the memory isn't free'd due to the operation being undoable. You'll notice that if you do a file reset after deleting the sphere (which flushes the undo buffer) the memory is freed.

~QE NoFixes

BUG #: 66979


NO FIX: The file path will never be remembered for the custom sample object. The .max file system would have to be rewritten a la the bitmap manager for this trivial issue to be even possible.

BUG #: 48093


NO FIX: This wish for VP isn't going to happen.

BUG #: 67369


NO FIX: These controllers are going to remain as they are.

BUG #: 67477


NO FIX: The face that filenames with -'s are loaded in Interdrive networks is an Interdrive bug and we're not going to fix it.

BUG #: 67551


NO FIX: The Modeless Browser will never have Minimize/Restore functionality.

BUG #: 67816


NO FIX: This isn't an MDI application, and CTRL-TAB can't switch between windows without extensive recoding of the window handler.

BUG #: 67367


NO FIX: Switching to a Track View viewport using the keyboard shortcut will launch a new Track View rather than opening the most recently stored Track View. The TrackViewport code is too convoluted to make this happen, and the spec is just wrong in this case. Please inform TechPubs of this.

Update notes (for version 0.2.14, 7/6/97):


Stabilized the resting/sliding collisions checks even more. Resting is doing well, but sliding still needs more work this week. Zero-velocity resting/sliding combinations are now quite stable, but motion or additional force can destabilize the solution.

Fixed a problem in which forces were being calculated forward to the target frame instead of backward from the last good frame. Improved stability well enough that files that solved with 2.5% damping before solve with 1% damping now. See sample file DYNCHIME.MAX.

Changed the name of the new Force spacewarp to Push (to make it more descriptive as to exactly what it does).

Implemented greyouts in both Push and Motor.

Strength fields in Push and Motor are now called "Base Force" and "Base Torque" to reflect their actual function subject to variation and feedback. This means that all the spacewarp names and fields are consistent and accurate reflections of their functions.

Push and Motor spacewarps have been integrated into the Dynamics system. See sample files SHOVTEST.MAX and GOVNOR.MAX. The govnor.max file is a motor spinning a bar with linkages on either end. If you run either the target speed or base torque up you can still run into some instabilities (as noted above).

PBomb is now also operational in Dynamics. See BOMBTEST.MAX for a selection of different sized objects falling, being hit by a blast, and then falling some more.

~YG new features and general issues resolved

SK suggested a fix for a long-standing problem with our shading model that we've compensated for with our "Soften" switch. In particular, the problem was that the evaluation of the specular highlight would stop abruptly, causing aliasing. We've implemented his suggestion as the default for both the Phong and Blinn shading methods, and it seems to really work great. The only problem is that it is a bit more computation-intensive, and might slow things down a bit.

In order to make it easy for you to benchmark this against the old method, we've renamed the Soften switch to "Old Spec" just for this build (it'll be gone by build 15). Please take a serious scene and set it up with the old method, with pixel coverage of every pixel in the frame. Do some benchmarks and then get back to me with your results. There are still a few optimizations that might be possible in this new algorithm if it turns out that we're appreciably slower now (which I don't think we are, but I need a sanity check from y'all before I can confirm that).

Implemented the last new features in the particle system (to tweak up the spawning additions from last week):

Spawns/Affects (suggested by MR): This is the percentage of particles that will spawn.

Spawns/Multiplier/Variation: The percentage range by which Multiplier will vary, frame by frame.

Note that the above changes have made some of the 0.2.13 sample files incompatible with the current code (notably cemit1.max and rotspry2.max). Those will now crash on load.

Changed the names of the various creation sub-categories like "Basic", "General" and "Default" all to "Standard".

Implemented a request from QE for the Shape objects to have their General parameters rollup closed by default.

Fixed a problem that DS found in Video Post in which, when the time display was changed to SMPTE, Video Post was still displaying its time in Frames. Now, VP is sensitive to the SMPTE setting, although the tick-based options such as Frames:Ticks and MM:SS:Ticks have no meaning in VP, and in those cases VP will display in frames..

~YG Bugs Fixed

Fixed a bug that both JC and TB found in which, when welding coincident endpoints of splines after doing mirror/copy operations, the welded points would have incorrect tangents.

Fixed a bug that MGB found in which the Lathe parameters were sticky after a File/Reset.

Fixed a problem that JB noticed in the Lofter deformation windows in which the Pan icon was to the right of the zoom extents icons, making it inconsistent with the TrackView view controls. Pan is now the leftmost control.

Fixed the same problem in Video Post -- the Pan function is now the leftmost control there as well.

Fixed a problem that LM found in the Waveform controller in which, if a waveform was set to Clamp Above or Clamp Below, and then Disable was turned on for that waveform, the Characteristic Graph for This Output and Final Output at that level and lower would've been disabled.

Fixed a bug that LM found in the EditableSpline object in which the Lock Handles control wasn't working correctly.

Fixed a bug that RL found in which the Scatter object's Display% wasn't sticky after rendering if a modifier was applied to the base object.

Fixed a bug that MGB found in which the Conform object's parameters were sticky after a File/Reset.

Fixed a bug that MGB found in which the Object name field wasn't updated when picking a PArray emitter object from the Modify panel.

Fixed a problem that MF found in the Cellular map in which, if two of these maps were siblings, going between them the Go to Sibling button wouldn't update their displays correctly.

Fixed a bug that MM found in which unhiding by name wasn't working correctly with hidden open grounds. Code has been added sot hat now, if you have an open group hidden, when you unhide by name any part of it (or the dummy node), it will unhide the whole group.

Fixed a bug that AM found in which, if you applied a MeshSelect modifier to a group of references (of each other), you wouldn't get the "One or more of the objects in your selection references another. To edit the modifier you've applied, select the objects individualy." alert. Now you should always get the warning and it will only apply the MS modifier once.

Fixed a bug that JC found in which, if you selected and hid a group of vertices in an EditableMesh object, then saved the file and reloaded it, the vertices wouldn't be hidden upon reload.

Fixed a bug that MF found that would inhibit the Displace modifier from using a masked material upon file/open after previously saving the file.

Fixed a problem that KR found in which the new material "condense" functionality within the EditableMesh Attach function wasn't condensing materials from R1-generated files into multis efficiently. In his example, the code now reduces the number of materials down to 47 from 294.

Fixed a very interesting regression bug that LM found in which textures in R2 appeared to be blurrier than in R1, and bump maps in R2 appeared to be more aliased than in R1. This was caused by a fix that we installed in early April for a bug in the Pyramidal filter that was causing it to not increase the sample size with distance correctly (so that very distant maps could alias). Specifically, in R1 the depth was calculated in the map-pyramid by:

depth = .7f*LOGB2(fmax(du,dv)); // R1 Method

the change was to compute it as

depth = LOGB2(.7f*fmax(du,dv)); // New Method

The effects that LM noticed were a consequence of this. It's clear why the maps would look more blurry, and it could be compensated for by scaling down the sample size globally. The second effect that he noticed (aliasing along the map seams) turned out to be happening in the Bump map sampling, and this was a bear to figure out. Finally, we got some success with it by decreasing the sample size in the "new method" by changing the scale factor from .7 to .45 (after some experimentation). This seems to fix both the bluriness and the bump mapping problems, and at this point it needs further testing so that folks can compare the texture blurriness and bump map filtering to R1 and let us know if it's equivalent. (This is very important to regress and we'd appreciate feedback re your R1->R2 comparitive studies.)

Fixed a problem in which Edit Spline and Editable Spline weren't rotating multiply-selected vertices about their own centers in "Use Pivot Point Center" mode.

Fixed a bug in text objects in which the leading and kerning spinners both read 100.0 before the first text object was created.

Fixed a problem in which text ascenders and descenders were altering the placement of the text. Old text objects in files saved previously use the same type of alignment (pivot centered on entire text object) until the font is changed. Then the pivot aligns to the baseline of the first line of text. This is the only way to align the text so that descenders do not affect the positioning of the text. Newly-created text objects automatically align this way, preventing problems with vertical alignment shifting with string content changing.

Fixed some problems with cloned (copied) text objects. Copies were losing some vital information (alignment, manual update).

Fixed a bug that TM found in which the Attach function in the EditPatch modifier wasn't creating multi-materials inclusive of the materials in the attached objects.

Related to the above, fixed a problem in which detaching patches was not setting the material in the newly-created patch object.

Fixed a bug that JJH found in which moving pivots from their default locations caused scenes to scale incorrectly when using the Rescale utility.

Fixed a bug that JJH found in which the Cellular map wasn't updating correctly until you toggled the state of the Show End Result button.

Fixed a bug that SA found with booleans in which, if you did a boolean union with a mirrored object and that object had negative scale and the two operands weren't overlapping, the object's normals would get flipped.

Installed new GFX calls that allow the main MAX app to tell GFX windows whether they are maximized, windowed, or invisible. This should be useful for optimizing OGL page flipping and Direct3D efficiency.

Upgraded HEIDI to version 5.

Installed some OpenGL display optimizations that are very effective for some boards.

Basically, when a GL board uses the blit model of double- buffering (as opposed to the swap model), it is possible to get GL to update the screen without redrawing the whole scene.

But GL hides whether it is using blit or swap buffering, so these are now user-settable options in the OGL config dialog.

In particular, two checkboxes were added:

Full Screen SwapBuffers Destroys Back Buffer


Windowed SwapBuffers Destroys Back Buffer

Both of these default to TRUE, since the OpenGL spec does not guarantee that the backbuffer is not destroyed. But for many cards, these options can be unchecked and then OGL performance improves dramatically when viewports are damaged but the scene hasn't changed (as when dragging Medit or TV around, or tooltips come up).

The Full Screen and Windowed cases are treated differently since some OGL implementations go to page-flipping when there is a single maximized viewport in MAX. (Page flipping destroys the back buffer, and hence stops my optimizations from working)

The Allow Incremental Scene Updates checkbox has been removed, since this info can now be deduced from the other options. The Redraw Scene on Window Expose options have been left in for completeness, but in order for the new SwapBuffers optimizations to take effect, this needs to be unchecked.

In general, Glint cards run optimally with the top three options unchecked, and Intergraph cards need the first option checked. (We need to talk to the Intergraph guys about getting the blit option working at least for Windowed viewports.)

More optimizations are on the table to be tried for the non-blit case (i.e. Intergraph), but this should give a big boost to people using non-Intergraph cards.

Changed the layout of the OpenGL config dialog slightly. Now, the two options mentioned above are indented under Redraw Scene on Window Expose, and they are grayed out if the Redraw Scene box is checked. (The two new options only had any effect if the Redraw Scene box was unchecked, so now this is visually obvious.)

Got the CS_SAVEBITS style working for viewport tooltips. This means that when viewport tooltips disappear they don't cause the scene to be rerendered or even re-blitted (this was noticed by RF). Instead, they save the underlying screen bitmap, and then put it back when they get destroyed. (This is how menus work -- notice that the dropdown or right-click menus are very fast even in complex scenes in OpenGL...)

Notified 3DLabs, Intergraph, Dynamics Pictures, Accel-Graphics, and E&S of the new redraw logic, so that they can optimize their implementations of OpenGL to take best advantage of our logic to avoid unnecessary redraws. (It appears that 3DLabs is already in the best position wrt this, and Intergraph is in the worst...)

Changed the way backface culling works in the OGL driver. Before, in order to get mirrored objects to display properly, culling had to be disabled (for mirrored objects only). Now culling works properly for all objects, mirrored or not. (Thanks to Mark Cresswell for providing info about an OGL call to allow inverted polys to cull properly...)


MF reported a problem in which the Displace modifier seemed to be ignoring UVW channel 2 (dispbug2.max). This is a NAB because currently, Displace uses channel 1 when the 'use existing' option is selected.. In the future (ie, R3) we may want to be able to allow folks to select which channel displace uses. However, in no case will it ever be able to use both at once... it can't, it has to be one or the other.

ME reported a problem in which the omni light decay function always uses the near attenuation end parameter (and that the image should not change if attenation near end is not checked). This is a NAB because the near range is used to basically define the point where 'r' is 1 and then the decay is computed as 1/r^2. So, if decay is turned on, the near limits need to be used (regardless of the state of the 'use' checkbox).

~Non YG Bugs and Issues Resolved

Section Object: Changed creation method from center-corner to corner-corner.

Ascii Exporter: Fixed an indent problem where a null character was written out at the start of some lines.

Object Snaps:

Changed the caption on the checkbox to read "Use Axis Constraints"

Removed the realtive button and relaxed all the constraints on absolute snapping in viewport configurations

Turned off all the restrictions on absolute mode. So you can have absolute in any type of viewport with any coordinate system. I don't see any major problems. So I think we can get away with pulling out the relative button. There is a little bit of wierd behavior but I don't think there's anything that a little documentation wouldn't resolve.

Example #1 Convince yourself that you can still effectively do relative translation.

1) create a box which isn't aligned to the grid.

2) Lock the selection and turn on move mode

3) Turn on snap (by default the grid snaps are active).

4) Move the box by picking two grid points as origin and destination.

The box moves by an integral number of grid units, equivalent to relative. Note that translation follows a slightly different paradigm than in R1. The first point of the translation is no longer required to be on the selected object.

Example #2 This demonstates some slightly disturbing behavior when translating tall objects in a perspective view.

1) Create a tall cylinder

2) Turn on snapping

3) right click the snap button to bring up the dialog

4) turn on endpoint in addition to grid

5) move mode

6) Begin the move by selecting the upper end of one of the vertical edges.

7) Click and drag and notice that the cylinder jumps to the horizon.

8) Continue dragging down so that the cylinder returns to the foreground.

Two things to notice: First of all the cylinder is no longer on the construction plane. Why? because you grabbed it by one of the uppper vertices and "aligned" this vertex to a point on the construction plane. Consequently it's now below the construction plane. There is an option on the second page of the dialog called "Use axis constraints". You can turn this on to project the displacement vector onto the selected axes.

Secondly the initial jump of the object to the horizon. When you begin the drag from one of these upper vertices, as soon as you move beyond a small threshhold it starts to look for the destination point. It finds one immediately by projecting the cursor point onto the construction plane. Unfortuantely, by virtue of the initial vertex being off the plane, the point it finds first is way up towards the horizon. I think this is part of the reason that absolute moves were diallowed in perspective viewports. I don't find this troubling enough to dissalow it. Once you begin thinking in terms of a displacement vector, it's easy to predict what you'll get. Maybe this is too gearheaded of me. You could restrict the points to the construction plane but this defeats most of the advantage of snapping a move.

Example #3 This demonstrates some correct but somewhat puzzling behavior in object coordinate systems.

1) create a box

2) rotate the box about it's z axis roughly 45 degrees.

3) Turn on move mode

4) Select the local axis system

5) Turn on snap (grid snap is on by default)

6) Can you guess how this is gonna behave? Click and drag between two grid points which have the same x value but different y values. The box moves at a diagonal. This is correct once you think about it because the displacement you asked for had no x component, the box moves entirely along it's local y axis.

Bottom line is that, if you're going to snap to grid points in the perspective view, do it below the horizon, or rotate the view so that you're looking more down on it instead of at an oblique angle.

Implemented saving and loading of the osnap settings to the max file.

Fixed filereset to turn off all the snaps except the grid.

Expanded the popoup to include a "none" and "last" option. These appear at the top of the popup, before the categories begin. They are greyed when appropriate.

Mapscaler WSM: Removed the mapscaler space warp from the interface. Made the IsPublic() return FALSE. The UI has been hooked up for the WSM object but it doesn't do anything yet (it's waiting on BT's return from vacation).

Fillet/Chamfer: Controls for Fillet and Chamfer are now on one rollout, in two groups. Rollout button renamed to "Edit Vertex". Tab order should be correct now. Functionality unchanged.


Changed layout of Panel Fill rollout so that the various settings are now more clearly grouped by the radio buttons. Same controls are also enabled/disabled based on the current radio button setting. Also adjusted tab order for this dialog, although last time I tried it, it seemed like MAX got a bit lost when tabbing through all the controls. I don't know if this is my dialog, or if tabbing isn't really fully supported. (It is worth noting that not all plugins disable controls appropriately. The examples I found were Cone, Tube, and OilTank objects, which have a Slice On toggle but do not disable to corresponding Slice From and Slice To settings.)

Changed "Door Open" to "Open Door". Did not put in a "%" sign, since it would need to change to "degrees" for Pivot door.

Am still playing with door creation, trying to make it work (at all, and smarter) with object snaps and in Elevation/ Width creation mode.

Both creation options now support object snaps, although there are still some bugs in there (it is possible to create an inside-out mesh...)

Fixed Sliding door "Open" title on the parameters panel. (I used "Open" instead of "Open Door" because it matched better with Windows, even though it is not under a group heading as in Windows...)

Asset Manager:

Tool bar icons are upated with icons deliverd from RF.

Drive icons for the tree control are upated with icons deliverd from RF.

DAD cursors upated with cursors deliverd from RF. (only .max file dad cursor is changed, other image DAD cursors are Max core cursors). I felt core max dad cursors are huge in size. Do we need to keep .max file DAD cursor same as the huge image file DAD cursor?..

"View File" toolbar button has been removed

An Alert dlg is displayed of the "Clear Cache" button is clicked.

An Confirmation dlg is displayed after a new cache directory is chosen.

VAIIC: if the original file pointed by the thumbnail of missing, an alert pops up after the user finish a DAD or invoke any menu item from the right click menu.

"View Selected Image" (or double click on the thumbnail) used to pops up max image viewer for all types of file. Now it pops up media player for multiframe files (avi's).

"View File" used to pops up a dlg little different from Max File/View File dlg. (with an extra "view" button on dlg ). Now it's exactly same as Max File/View File dlg.

When DAD is performed with CNTRL-key down, the dad cursor changes to one with '+' to indicate explorer like copy operations.

Previously collapsing a node in the tree control changes the current selection from a child node to the collapsed node but never used to update the thumbnail. It's fixed.

DS made necessary changes in the DADMgr and now images can also be dragged to the texmap slots (diffuse map, bumb map etc) in which case it creates a bitmap-submap for the corresponding map.

Fixed a nasty alert-crash bug while reading corrupted images.

Sorting bug fixed. Previosly, repeated sorting on the same set of thumbnails used to take progressively longer time. It's fixed.

Added the max profiler project and the acap project which supports it.

Basic usage: The profiler is a utility that allows you to capture the call sequence in a running app or plugin, along with timing statistics for that run. There are two steps to the process. First, you must re-built the subject to be profiled. To do this, simply add "/Gh" to the VC5 settings, and ensure "Program Database" is chosen for the debug info. In the link tab, add the acap.lib (which resides Max's lib directory) and ensure "Generate Debug Info" is enabled. Rebuild your project. Note that this profiler works equally well on debug or release builds, but your performance mileage may vary. The profiler appears as a utility, with associated rollup and floater. The floater has record/stop, save, and clear buttons which allow you to capture parts of the execution. The panel lists output options and filename. In general, one will use the defaults. Press record, do your thing, press stop, press save. The results will be sent to the file you specified.

Note that the profiler will ship only as a part of the SDK -- it's not going to be released in the commercial build.


Fixed source line error display to function when failing code is invoked from listener window.

Added frame dump to function callback trace when an error is signalled. The callback trace shows the nesting of MAXScript function calls that are in effect when an error occurs. The new frame dump lists all the local variables and function parameters for each of the nested functions at the time the error occurred.

Fixed MAX crash caused by attempting to add a MAXScript Modifier to an object before MAXScript has been initialized (by choosing it in the Utility command panel). The MAXScript Modifier does not appear in the Modifier list until MAXScript has been started.

Added access to the following properties for all lights:












And these properties for spot & directional lights:




The following properties are not currently accessible:




The Editable_mesh class was missing so you couldn't test for editable mesh objects using classOf(), etc. Another r1.2/Athena version compatibility bug. Fixed.

Several of the properties on Light objects were getting jumbled, for example .hotspot changed contrast and .fallOf changed the hotspot. This was due to there being new items added to light ParamBlocks in Athena. Fixed.

Enhanced runtime error reporting to show error line in source window if the running code was compiled from a source file (either via fileIn() or evaling code in a script editor). If the source file is not currently open in a window, MAXScript will open the file in a new editor window. The line containing the code in which the error occured is highlighted and scrolled into view. The error message is either displayed in a message box, or the listener window. In both cases, the message box or listener window is brought to the front and the editor window containing the code causing the error is immediately behind that. (p8 in 027manual)

Connect / ShapeMerge: Fixed undo bugs, especially QE 63748. Undo/redo of Delete Operand/Shape wasn't working, and undo pick operand wasn't properly updating the UI. Everything should be undoable in both of these effects now. QE should be aware that multiple operands can be selected and deleted at once; these deletions should then be undoable. (This is the new, tricky code.)


Fixed bug that came up when using sub-object face output and Twist, among others. Correct deformable region bounding box was not being passed to modifiers.

Fixed CookieCutter output: previously, it was outputting all the verts and merely deleting faces. Now, it deletes those verts that only lie on deleted faces. (For instance, if you used CookieCutter & Invert to try to cut a star out of the top of a sphere, you'd get a star with all the points of the sphere, most of which weren't on any faces.)

Fixed bug that came up when using sub-object face output and Twist, among others. Correct deformable region bounding box was not being passed to modifiers.

SurfDeform: Fixed some scaling issues. SurfDeform had been doing really absurd scaling outside of the surface. It's reasonable now. SurfDeform seems to work great with PointSurfs and CV Surfs. Still researching compatibility with other sorts of surfaces.


Fixed crash bug with new extrude grid capping. However, the result with grid capping is still kind of lame, since the verts that aren't attached to any visible edges don't move at all. I'm looking for a way to improve this. I think I know a way, but it might not be kind to mapping coordinates.

Fixed smoothing of faceted objects when "Separate by Smoothing Groups" and "Smooth Result" are both checked.

Stripped all "hidden verts" before beginning smoothing. This is hopefully temporary until I get hidden verts working more robustly in the MNMath library.

Tessellate Modifier, Polygon faces: Put fix in that allows it to handle highly nonconvex shapes like the letter M, which it failed to tessellate before. Now produces nice tessellated extruded M.

Connect: fixed Mirror bug. (Mirror an instance of a connectable object, then make a connection between the original and the mirror. Some normals were getting flipped in 0.2.13.)

PathBevel: Previously, when you applied a WSM to the Path you were using for a Bevel guide, the Bevel would jump substantially. This is now fixed.


Location map now displays the cross at the current lat/long when the dialog is initially entered.

City list no longer always highlights a city; if the user has spun the lat/long from the params panel, the cross will appear at that location, but a city will not be selected in the list.

City name now appears on the parameters rollup. If a non- city location is selected on the map, or the lat/long spinners are used, the city name is removed.

Sunlight system no longer inserts a camera at the light location, since directional lights can now be used as views. In addition, it appears the filing is not affected, so this should be compatible with older MAX files containing sunlight cameras.

TEST NOTE: Ensure .max scenes containing older sunlight systems can be successfully loaded, used, and saved.

Worth noting: sunlight.dlo will look in the following locations for its maps (in this order):

<location of sunlight.dlo>\GeoLoc

<configured MaxStart dir>\GeoLoc

<Max root dir>\GeoLoc

<Max root dir>

The first usually being StdPlugs, although it could be PlugIns, and the last a recent change to support the possibility of improper unzipping at a beta site.

Changed default RGB values of light to 225,225,225.

Modified creation proc; operation is now as follows:

pick: sets the center of the compass

drag: adjust relative screen size of compass (release to set)

move: adjust orbital scale

click: complete

The compass size is later adjustable via the Modify panel. The Sunlight parameters are adjustable via the Motion panel (when the light is selected, not the compass).

~QE Bugs Fixed

BUG #: 57938


CODE FIX: Hard coded the delete key for deletion of Video Post events. You'll most likely have to delete your maxkeys.kbd file to get this to work.

BUG #: 49753


CODE FIX: Deleting an Image Event will not delete Layer Events above it in the VP heirarchy anymore. Code has been added to check if the (about to be) deleted event has children. If so, the parent is preserved.

BUG #: 31672


CODE FIX: Dragging in the VP queue doesn't leave an orphan level line in this case anymore.

BUG #: 66259


CODE FIX: You can copy and paste loft deformation controllers now. Care should be taken because if the Make Symmetrical button is on and your paste operation changes one of the symmetrical curves, you may get some unexpected results.

BUG #: 59835


CODE FIX: Reversed the meaning of inscribed/circumscribed in NGons and re-tested with r1.2 files. Note that NGons in files saved from recent versions of MAX will have flipped scribing. Regarding Gengons, those aren't going to change.

BUG #: 46565


CODE FIX: Loft objects now retain path and shape steps from previous one and work just like the sides parameters in NGon, Cylinder, etc. Resetting sets both of these back to the default of 5 steps.

BUG #: 32829


CODE FIX: You can now select multiple control points on deformation curves and if the X and/or Y coordinates are exactly the same, you can use the type-in fields to alter the multiply-selected points. NOTE: Sometimes the Insert tool will create points that, even though they lie on a line between two points at the same Y coordinate, do not have the same Y coordinate due to mathematical rounding. The display might show 100.0 for all points but the difference is down several decimal places.

BUG #: 66140


CODE FIX: PArray Object Fragment speed has been tremendously accelerated (by about an order of magnitude).

BUG #: 66133


CODE FIX: The PathFollow range value is now blanked when Unlimited is checked.

BUG #: 66465


CODE FIX: When a group is cloned with the controller instantiated, the original group doesn't change its position anymore when the clone is deleted. This bug actually had nothing to do with groups or cloning per se. It was a problem when deleting objects whose controller was multiply instanced. The fix was to make sure child nodes are deleted before the parent... this keeps the system from trying to adjust the child's transform controller to keep it in the same position when the parent is deleted. There is still a bug related to this. If you make a box with a sphere as a child, and another box with another sphere as a child, and the two spheres have the same (multiply instanced) controller, if you delete one of the boxes, the sphere which is a child of the other box moves. This is basically un-fixable. The shared controller can't at the same time maintain the position of the child of the deleted box, and NOT move the other sphere. That's just the way it is.

BUG #: 66550


CODE FIX: Although we NAB'd this issue about the # of sample slots configured in the Options dialog should be stored in the 3dsmax.ini file, we were wrong about that. The # of sample slots is supposed to be saved in the .INI file.

BUG #: 66544


CODE FIX: The Saturation spinner on light color works the way you'd expect now. The problem lies in the fact that we are displaying the colors as 0..255 integers, and due to quantization errors, the conversion from rgb to hsv and back doesn't always give exactly the same result you started with. What was happening is you would change the hsv, it would convert it to rgb to update the rgb spinners and then inadvertantly update the hsv spinners, converting back from rgb, and this set the 2 back to a 1. It was fixed so that it doesn't convert back, but the underlying problem is still there (although it's totally harmless).

BUG #: 66549


CODE FIX: You can TAB from a light's Multiplier Value to Contrast Value field now.

BUG #: 66254


CODE FIX: The Assign Controller dialog is not titled "Replace Controller" anymore.

BUG #: 65995


CODE FIX: The Track View is now immediately updated after Applied IK.

BUG #: 66610


CODE FIX: The "Delete" key works correctly in Edit Mesh in this case now.

BUG #: 66660


CODE FIX: If you open a MAX file with custom sample object in sample slot after you delete the .INI file, the program doesn't crash anymore.

BUG #: 66857


CODE FIX: Selecting the close button in the VFB during a Render Map operation doesn't crash MAX anymore.

BUG #: 66859


CODE FIX: Render Map set to Active Time Segment doesn't render past last frame of the MAX file anymore.

BUG #: 66865


CODE FIX: The Render Map function works with JPG files now.

BUG #: 67020


CODE FIX: Map amount spinners are red bracketed with Animated Map Amount values now.

BUG #: 67022


CODE FIX: The behavior when Shift-Right Clicking on RGB Spinner in Basic Parameters is correct now.

BUG #: 66628


CODE FIX: Reflection maps are not rendered on each frame anymore in this case when First Frame Only is selected. When multiple instances of a map were present, First Frame Only and Nth were not working right. This applied to the FlatMirror, Reflect/Refract, and the Thin Wall Refraction map. They should all be retested thoroughly (with and without field rendering turned on).

BUG #: 66980


CODE FIX: Re-selecting Auto in Magnify Windows updates the window now.

BUG #: 67039


CODE FIX: Bitmap::GetPixels() scales the values properly when reading 24 bit files now.

BUG #: 66760


CODE FIX: In Edit/Edit Named Selections, B-A in the subobject level is now consistent with its behavior in the object level. Note that in general, checking isn't done at the subobject level to remove empty named selection sets. That would slow down subobject performance (which we're not going to do) and besides, empty named selection sets don't do any harm. So (for example) at the object level, if you delete all the objects in a named selection set, that named selection set will automatically be removed. However if you delete all the selected vertices in a vertex named selection, the named selection set will not be removed. In this case it wasn't a big deal to check if the set resulting from the subtract op was empty and delete it (so we put that in), but don't expect this to be a general solution.

BUG #: 64046


CODE FIX: In PCloud, Pick Object changes the Particle Formation type to Object-Based Emitter now.

BUG #: 65930


CODE FIX: Prism doesn't have this display artifact anymore.

BUG #: 58954


CODE FIX: UDeflector will now work correctly with Grouped objects. PROVISO: the underlying code to make this happen is quite complex, and has a number of limitations that relate to animation within the group. It ought to be doc'd that if there is a substantial amount of animation within the group relative to the group node's animation, the evaluation of the collision object won't be correct. But if the motion of the geometry within the group is small compared to the motion of the group through space, it'll work correctly. The best advice is to use separate UDeflectors on each animated element if you have animated elements within groups. (Since this is based on relative motion, there's no way to provide a hard and fast rule here.)

BUG #: 66142


CODE FIX: The Particle Deflector's Height parameter has been renamed to Length (since that was better than having two Width parameters).

BUG #: 66627


CODE FIX: Sample slot shows up as hot now when you D&D a map from a sample slot to a map button.

BUG #: 66738


CODE FIX: Creating a PCloud icon with Object-based emitter selected isn't strange anymore.

BUG #: 66740


CODE FIX: In the new particle system,s the Pick Object based emitter operation is now placed in the Undo stack.

BUG #: 66502


CODE FIX: Text in Particle Age Rollup is spelled correctly now.

BUG #: 65000


CODE FIX: Use Maximum Range/Scatter now locks the value of the largest range to the other two spinner's numeric fields in this case.


BUG #: 67008


NAB: Moving tje cursor through the browser listbox causes rapid alternating of hand/arrow because the cursor is rapidly alternating between the hand and arrow state. When the cursor is over an entry, it's an arrow. And when it's between entries, it's a hand. That's how it works.

BUG #: 66839


NAB: The Transform type-in dialog cannot be closed with ESC key because it's not a dialog... it's a floater. And floaters don't close with the ESC key.

BUG #: 67072


NAB: Reset Map/Mtl does not clear settings from assigned object at map level because at the map level, the Rest Map/Mtl function only is supposed to reset the parameters of the map to its default params. It's not supposed to delete the map itself.

BUG #: 66852


NAB: Optional Pixel Data is not shown in the VFB when you use the Medit Render Map function and output an .rla because the gbuffer channels are not supported by Render Map (whose purpose is only to render maps for input... not for final rendering of output imagery).

BUG #: 66733


NAB: Note that we were wrong in our assessment of 66550 (noted above), and we fixed that (which makes this report a nab).

BUG #: 66850


NAB: The fact that the Render Map Time Output Range accepts invalid values is a feature. It's useful to be able to do this (and there's absolutely nothing wrong with it).

BUG #: 67121


NAB: This is mostly a NAB with a minor partial fix. The way that the rotation limit is dispayed is to draw an arc around the link from the node whose limit is being displayed to its first child. This way the bone from the node to its first child can be used as a "meter" to tell where within the limit the joint currently is. If a joint has no children then the question is what should be used as a meter... It's been changed slightly so that now the link from the node to its parent is used instead (in this case). Note that this still results in the limit rotating in the opposite direction, but at least you can tell where in the limit the joint is.

BUG #: 67109


NAB: The MIDI Controller activates the Velocity trigger because setting the sustain to non-0 is supposed to cause it to work this way (it's a feature).

~QE NoRepros

BUG #: 66878


NO REPRO: Entering a UNC convention path in the Render Map dialog doesn't result in an error message here (on 3 different machines). It sounds like you've got a network problem there.

BUG #: 66745


NO REPRO: Can't reproduce this problem in which the map path is not remembered if entered via a UNC. Again, this sounds like the same problem that you're having with 66878, above.

BUG #: 66882


NO REPRO: Class Animatable::ClearAllAppData and RemoveAppDataChunk work fine here. We copied the code from the report into a test project, compiled it, and stepped through all the code -- everything functioned exactly as it should. Note that if you're going to submit API bugs like this with test code, then you ought to have CJ look at these first so he can verify that there's really a bug there. Going through these (for nothing) is a huge amount of wasted work.

BUG #: 64972


NO REPRO: Can't reproduce this crash when switching to Std. primitives panel when Pick Object has been selected for a Scatter object.

~QE NoFixes

BUG #: 67095


NO FIX: The "Editable Mesh Window" does not respond to the "ESC" key when wanting to cancel the cloning of a subobject for a reason. The question that is asked in this dialog is 'Do you want to create a new object?". The answer is yes or no. Answering no doesn't abort the clone but simply doesn't make a new object. Windows actually handles the messages for this dialog since it is a standard message box so we couldn't change it if we wanted to. BTW, if you want to abort the clone you can simply hit undo after choosing yes or no.

BUG #: 66866


NO FIX: A MIDI Controller Event is seen as Note Event because basically, within a MIDI channel the MIDI device uses the same array to store note events from either keys or controllers. As a result, we can't differentiate between the two. This shouldn't be a big deal and the only time that it would be a problem is if you had a MIDI controller using a particular note and a keyboard using a particular note and you wanted them each to control different parameters. To solve this problem you could always use different notes or at the very least used different MIDI channels.

BUG #: 66741


NO FIX: When planar from object XYZ used, show map in viewport doesn't work because GFX isn't currently built to be able to handle it.

BUG #: 67130


NO FIX: File/Rest doesn't reset the state of the rollups in the Modify panel or the Display panel, and probably a bunch of other panels. You'll just have to change the automation procedures to account for this.

BUG #: 66689


NO FIX: Named Selections at the subobject level do not appear in the Edit Named Selections Window when an object is modified with the Edit Mesh modifier because sub-object selections names will never appear in the drop down when you happen to select verts/faces/etc that match a subobject selection. This is because it would slow down subobject editing too much if every time the subobject selection was modified, all named selection sets had to be searched for a match.

BUG #: 66732


NO FIX: Unlike its behavior with objects, "Zoom Extents All" takes into consideration hidden subparts of an object because the zoom extents process for subobject selection uses the objects deform bounding box, which, it turns out, considers all faces whether hidden or not. Changing this would requiring rewriting massive amounts of code.

BUG #: 67113


NO FIX: The fact that wireframes don't backcull under OGL is a fact of life. OGL only allows entire faces (and not just edges) to be culled. The following is a quote from the OpenGL limitations section of the 025notes.doc:

Wireframe objects do not support backface culling, since OpenGL does not (efficiently) support variable-edged polygons (and Athena usually has two triangles appearing as one quad, by use of hidden edges).

Update notes (for version 0.2.13, 6/29/97):


The sliding/resting code is continuing to go well (slowly, but well). Two new sample files:

DYNREST1.MAX which demonstrates a box sitting on another box -- tbe lower box is immovable and the upper box has gravity, and a single collision pair contains both boxes. Now, this may not sound like much, but that box just sitting there needs more caluculations than any linkage done so far. The reason is that the software has to handle all the contact points - regardless of how many or where they are from frame to frame - and optimize across all points to find a solution for the forces for which nothing intersects.

DYNSLID1.MAX, which is a ball rolling on a block) illustrate that you can now put on object on another and they won't fall through each other (at least sometimes), and you can bounce a ball on a surface and as it comes to a rest/rolling motion, it won't fall through the surface.

The key is to make sure that the Step Size is high enough to give the calcs enough accuracy to keep from accumulating error from frame to frame.

~YG new features and general issues resolved

To complete the dynamics forces/constraints methods, we've had to add two new spacewarps that operate on dynamics and particle systems: Motor and Force. They're functional for particle systems now, but not for dynamics yet (and the greyouts aren't working yet either). Their UIs have all the features necessary to work completely with Dynamics, however, and that's the main point (since we're at feature-freeze and we had to get this in the code asap). Unfortunately these are truly techno-geek-engineer oriented, but we do have a dynamics simulation system, and it doesn't get much geekier than Newtonia physics.

Force is both a particle spacewarp and a dynamics effect. It has some unusual features that cannot be duplicated with either PBomb or Wind. See FORCTEST.MAX for a simple example of what this can do with particles. With proper settings, this should be able to set whole particle fields into stable oscillations. Notes:

On Time: the time before which this spacewarp has no effect

Off Time: the time after which this spacewarp has no effect

Strength: the magnitude of the base force exerted by the spacewarp on the object/particles. Units of measure are defined by...

Newtons/Pounds: The two standards of measure for force and weight in the world. Generally speaking, a Pound is about 4.5 Newtons, and one Newton is one kilogram-meter per second-squared. When applied to particle systems, these have only a subjective meaning because so much is dependent on the stepsize and the particle mass is assumed (here's another thing to add to SimpleParticle along with spin and spin vector: mass). When used as a Dynamics effect, the value listed is precisely the value used.

Feedback On: enables force feedback in the cylinder. In other words, the more the particles/objects are moving in the direction indicated by Target Speed and the icon with the speed indicated, the less input will Force supply, subject to the setting of the Gain, explained below.

Reversible: enables breaking thrust. In other words, if the particles/objects move too fast, the applied force will reverse. This is an added feature of feedback.

Target Speed: the controller setpoint (the instantaneous speed the force will try to induce).

Gain: the speed with which the force will attempt to correct the motion of particles/objects. Lower values result in less total input to the system. High values result in instability as the force overcorrects. This is a first order gain only.

Periodic Variation Enable: activates noise in the applied force subject to the parameters below.

Period: the time over which the noise variation makes a full cycle.

Amplitude: the amount of the output magnitude that can vary with the noise signal.

Phase: the angular offset in the noise variation.

Two noise/phase signals are allowed for the first amplitude. They will sum correctly.

Particle Range Enable - enables range checking in particle mode only

Range - the maximum influence range for the spacewarp in particle mode

Icon Size - the length of the icon cylinder case.

Motor is both a particle spacewarp and a dynamics effect (it has some pretty nifty applications as a particle spacewarp). See TORKTEST.MAX for an example of some simple settings. Notes:

On Time: the time before which this spacewarp has no effect

Off Time: the time after which this spacewarp has no effect

Strength: the magnitude of the base torque exerted by the spacewarp on the object/particles. Units of measure are defined by...

N-m/Lb-ft/Lb-in - Units: Newton-meters, pound-feet, or pound- inches, the three most common units of measure of torque in the world. When applied to particle systems, these have only a subjective meaning. (The second is about 1.3 times the first, and the third is twelve times stronger again.) When used as a Dynamics effect, the value listed is precisely the value used.

Feedback On: enables torque feedback in the motor. In other words, the more the particles/objects are rotating in the direction indicated by Target Revs and the icon with the speed indicated, the less input will motor supply, subject to the setting of the Gain, explained below. This has much less effect with particles because particles are not constrained to rotate about any single point in any way.

Reversible: enables breaking torque. In other words, if the particles/objects rotate too fast about axes aligned with the motor axis, the applied force will reverse.

Target Revs: the controller setpoint (the instantaneous angular speed the motor will try to induce). For a particle, it is measured about the axis of the motor, and for an object, it is measured in absolute terms as the state vector angular velocity of the object.

RPH/RPM/RPS - "Revolutions Per... Hour, Minute, or Second" Defines the units of measure for Target Revs. All the internal calculations are done in radians per tick, if anyone cares.

Gain: the speed with which the motor will attempt to correct the motion of particles/objects. Lower values result in less total input to the system. High values result in instability as the motor overcorrects. This is a first order gain only.

Periodic Variation Enable: activates noise in the applied torque subject to the parameters below.

Period: the time over which the noise variation makes a full cycle.

Amplitude: the amount of the output magnitude that can vary with the noise signal.

Phase: the angular offset in the noise variation.

Two noise signals are allowed. They will sum correctly.

Particle Range Enable - enables range checking in particle mode only

Range - the maximum influence range for the spacewarp in particle mode

Icon Size - the length of the motor case.

Implemented a method for spawning trails in the PArray, SuperSpray and Blizzard particle systems. With PArray, particle fragments can also spawn trails. See sample files CEMIT.MAX, CEMIT1.MAX, CEMIT2.MAX, and SPWNTRLS.MAX. One control was added to the Spawn rollout labelled "Spawn Trails". Here's what happens when you check that option:

All other spawn modes are unavailable.

Number of Spawn generations is limited to 1 (greyouts in place)

Each particle, at each frame of its life, spawns "Multiplier" more particles at the current position at that time. The base direction of the spawned particles is opposed to the parent's velocity, and scale, direction, and speed chaos factors apply to that base direction. If the particle is a standard particle, spawn are the same particle. If the particle is instanced geometry, the mutation queue is active and available. Life queue is available regardless of particle type.

Issues relating to material handling aren't totally resolved yet, and we might have to add control to only spawn trails for a percentage of the overall particles/fragments.

This is a major enhancement/change and needs serious testing.

Implemented a few suggestions from PW relating to the joystick mocap device's parameters:

Accumulate: When this option is checked, the joystick position no longer represents an absolute position but instead represents a change in the current position. For example, the old way (with Accumulate off) if you assigned the joystick X and Y to an object's X and Y position, you could move the object within a rectangle defined by the limits of the joystick but you could not move the object outside of that rectangle. With Accumulate on, moving the joystick forward (for example) will cause the object to start moving forward and the object will continue to move until you return the joystick to the rest position. Basically, this makes the joystick work more like the POV hat.

Inc/Dec Inc Absolute: These options are available when one of the four joystick buttons is selected. The original way buttons worked was that the parameter would increment when the button was down and decrement when the button is up (the Inc/Dec option). There are two new options now. The 'Inc' option will cause the parameter to increment when the button is down and just stay the same when the button is up. The 'Absolute' option causes the parameter to jump discontinuously when the button is down and return to 0 when the button is up. This is good for on/off type animations (i.e. making a light blink). After implementing the accumulate option it was tested by hooking the joystick up to a camera. This allowed movement of the camera around the scene with the joystick almost like a video game. But there was one vital thing missing... when moving the camera around in an attempt to imitate a first person walk/fly through, you really want the camera to move in the direction it is facing, not along the world X/Y axis. This is relatively tricky, because to do this, the position depends on the current orientation. However, since it seemed like this would be extremely useful, it was implemented.

There's a new section in the joystick device's parameters called 'Increment Based On Direction' that lets you set this up. You have to pick a rotation controller from which the direction will be derived. Typically this would be the rotation controller of the camera you are moving. The direction parameter determines which axis will be used as the direction. For a camera this would probably be Z since the camera points in the Z direction. You may want to use other axis in other cases... for example if you had a car that was facing along it's local Y axis then you'd choose Y.

The component parameter specific to which component of the motion in the direction specified applies to that particular joystick device binding. For example, if you were controlling a camera's position you'd have a joystick device binding plugged into each of the X, Y and Z slots of the position motion capture controller. For the joystick device binding plugged into the X slot you'd choose the 'X component'. For the Y slot you'd choose the 'Y Component' and so on.

One other last note... while working on this a fairly serious bug (more serious after these new features were added) was found and fixed that caused some devices to speed up when recording. This affected any device that was accumulating... which before these new features was just the POV hat and MIDI notes.

Two sample files are included that demonstrate the new Accumulate feature:

JOYFLY.MAX demonstrates using the joystick to control a plane (with a camera). Load the file and make sure all viewports are disabled (except for the camera view) for speed. Also make sure the 'Play During Test' option is selected (check out the flag blowing in the wind on the top of the mountain) and make sure the throttle is set to it's minimum position. Now hit test. Inch the throttle up to make the plane move forward (the throttle is the slider to the left of the joystick BTW). Moving the joystick forward and back causes the plane to dive or climb. Tilting the joystick to the left or right causes the plane to bank and twisting the joystick causes the plane to turn left or right. Also, pressing the trigger will fire the planes (ineffective) laser guns (<g>).

BATLZONE.MAX has a simpler to control camera and feels a little like Battlezone (the video game).

Implemented an API wish from EB to get the age each particle in a particle system. Any particle system that derives its particles from SimpleParticle has access to this.

To test the above, we implemented a new texture map called "Particle Age". It varies the color as a function of the particle's age. Here's a description of the parameters:

Color (1-3): This is the color of the texture map. Color 1 is the color given when a particle is born and Color 3 is the Color given when a particle is dead. Color 2 is an 'in-between' color.

Age (1-3): These parameter specify an age as a percentage of a particle's life. When a particle is an age less than Age 1, the texture map will evaluate to Color 1. When the particle's age is greater than Age 3, the texture map will evaluate to Color 3. When the particle's age is exactly equal to Age 2, the texture map will evaluate to Color 2. In between age 1 and 2 or 2 and 3, the texture map will interpolate between the colors.

All three colors are mappable.

Sample files:

PARTAGE.MAX: Demonstrates how well this texture works with the particle motion blur texture (i.e. particle age on diffuse and particle mblur on opacity).

PARTAGE2.MAX: A simple example in which this new texture is used with a Blend material to blend into a second material just as the particle is dying. This second material has an effects channel which is used by a video post glow. As a result, when you render this file from Video Post, you'll see that the particles glow just before they die.

Implemented a new option that RL suggested for applied IK. Below the Apply IK button there is now a new checkbox called "Apply Only To Keys". When this option is selected and you click on the apply IK button, IK will only solve at times where a keyframe exists for one of the end effectors.

Here's an example of where this is used: Say an animator has animated an IK chain using a follow object and the "toolbar IK" on, but has not applied IK. Now they make a change to the chain which causes the chain to no longer be locked to the follow object at times where the follow object had a keyframe (this was previously the only place where the chain was locked to the follow object since IK was not applied). Now they just want to update the chain at times where the end effector has keys instead of applying IK which would generate a key at every frame. So they turn on this new option and hit apply IK.

EB requested that we implement a Background Color Channel in the GBuffer for developers to be able to acquire the color of the nearest object (or background) behind the frontmost object. The main purpose of this is to help in antialiasing using the z buffer and z-coverage channels. The background color channel is the color of the object behind the front one (ie, the next color back in the Abuffer). The background color channel is really only valid when the coverage of the front object is less than total, OR when the front object is transparent. However, if on a given pixel the front object completely covers the pixel and is opaque, then the background color channel will NOT contain the color of the object behind the front object. ( the renderer tosses completely occluded fragments away in the scan conversion pass, so this information is not available). In this case it will contain the image background color (from the environment map or background color). When used in conjunction with the alpha channel and z-coverage channels, a developer has full access to all of the information necessary to do seamless image processing (like DOF, etc).

Set it up so that now, if you're using File/Merge to merge objects into a scene and you hit same-named objects in the incoming file, hitting the Cancel button will totally cancel the operation (it used to cancel the remaining merges, but leave what you'd already merged in the scene).

Implemented a suggestion from RF for a Constant Velocity control in the Pathfollow spacewarp. A new "Constant Speed" checkbox resides in PathFollow just below the Parallel/Offset radio buttons. When active, the reference frame attached to the path moves along the path at a constant rate. For Parallel motion, this means that the motion of the particle along it's path is at a constant speed. For Offset motion, it means that the root of the particle's reference frame traverses the path at constant speed. See sample file PATHFOLW.MAX.

~YG Bugs Fixed

Fixed some problems relating to merging Nurbs objects, and the fixes were deep enough to now require deep regression testing on merging, especially things with unusual references, like world-space modifiers, lookat controllers, etc.

Fixed a problem that LM found in which the Light's shadow parameter fields weren't updating when animated.

Fixed a bug that RF found in which, when you did a 'File Replace' all the objects in the scene became selected. Plus, the old material that got replaced still had brackets in Medit as if it was still in the scene. It now selects just the objects that were replaced. (Which may or may not be what folks want it to do, but that's analogous to what we do with Merge. Theoretically we could also just leave the selection alone. If anyone has any opinions about it, let me know.)

Fixed a problem in which performing a Reset while VFB's were displayed didn't remove them. Now, all ViewFile and Render VFB's are destroyed on Reset (it also deletes the last rendered image bitmap).

Fixed a problem that JB found in which, when loading old files, Medit showed Blinn materials, when the first six were all Phong. What was happening is due to the loading of an old 6-material file, the activeSlot came out to be "off-screen": you were seeing its parameters. (this is hard to explain but was trivial to fix).

Fixed a bug that JB found in which map/masks of certain materials could become reversed. (A bug got introduced when putting in noise antialiasing that changed the noise Turbulence results.)

Fixed a display bug with non-updating viewports (moving objects were leaving trails). In the following special case, the update was not working correctly: Use SZB, dual planes OFF, non-selected objects animating, click the frame increment (+/- 1) button, and look in any non-current viewport. Trails would be present. Hitting "play" (or scrubbing the time slider), selecting all animating objects, or turning dual planes on would hide this bug.

Finished up patch/sub-object material code so that patches with different sub-object materials display properly in the viewports.

Fixed a bug in which the Window selection option wasn't working in the EditPatch modifier's Patch SO level.

Fixed a bug in which right-clicking during shape creation was causing a crash.

Fixed a bug that LM found in which the program would crash if you used the Segment/Break command on a spline object with animated vertices.

Plugged the Viewport/Color preference methods into the new particle systems so that you can set their emitter colors.

Finished implementing code to make ESCaping from the generation of particle systems totally generalized. You can ESCape from anything now.

Fixed a bug that DC noted in Torus Knot in which the names of a few of the object settings in TV didn't match the ones on the modify panel. (Lump Offset, and Warp Count) There were also a large number of nonanimatable track for TN in TV, and they've been removed.

Fixed a bug that LM found in Scatter in which the Duplicates param was called Number of Instances in TrackView, and another one in which the Translation on Face tracks were labeled XYZ instead of ABN.

Fixed a bug that LM found in the Star shape in which the Fillet Radii were called Corner Radii in TrackView.

Fixed a bug that LM found in the SDeflector in which the Icon Size was animatable.

Fixed a problem that RF and JR found in which transforms could get trashed in the OpenGL driver. (It was an index that was off by 1, and that could cause memory to get trashed.)

Fixed a bug in VP that MF found in which, if you had multiple cameras in the scene and you were using a Scene Event, if the cameras had similar name prefixes, going in and out of the Scene Event dialog would return a different name than the one you'd chosen. This was a Windows bug in which Windows was returning the first matching string based on the length of the string in the list box. If you searched for "aa" and in the list you had "a", "aa", and "aaa", Windows would always return "a" as it (lengthwise) would match. It was fixed by going manually through the list box and comparing each string in order to identify the correct selection.

Fixed a problem that RF found in Video Post in which, if you created an Image Input event, then changed the label, and then changed the filename, the label and filename would get out of sync. Now, we reset to the "Unnamed" label when choosing a new file.

Fixed a long-standing problem from r1 in which TrueType fonts weren't handled correctly. The outlines weren't being produced with the proper curvature, so you'd get flattening in areas that should be smooth curves. (You could've seen this by typing an Arial upper-case O, making it big, and then looking at how it wasn't completely smooth. Truetype fonts now generate the proper outlines, but note that this was implemented so that old files retain the same text shapes as in MAXr1.x. This preserves topology so that booleans and such aren't affected. Once you change the font on such a text object, howeer, the font generator changes to the MAX 2.0 improved version, giving you a better outline. It would be a good idea to check out your TrueType fonts to make sure that they all look ok.

Fixed a bug that JR found in which the Lofter's new Constant Cross-section option was not working correctly when path-steps was set to 0.

Fixed a spline weld bug that CG found in the EditableSpline object.

Fixed a bug that LM found with the units parser that would cause an undetermined unit (ie, the 5 in 1' 5 5/8") to be interpreted as the primary unit type (ie, in this case, feet). Now, once you enter a primary unit designator on a US standard field and then enter a number without one, it will assume the secondary unit type. For example, entering 1'2 (no designator on the second value) results in 1'2" being displayed. This assumption was necessary to parse fractional values with whole inches: 1'5 5/8 now returns 1'5 5/8". You can override this: 1'5'5/8' adds 1', 5' and 5/8' to result in 6'7 4/8". Weird but flexible...

Fixed a bug that TB found in which color preferences weren't working.

Fixed a bug that CG found in which the % along Path field wasn't showing key brackets when animated.

Fixed a bug that LM found in the Bomb spacewarp in which Undo wasn't implemented for parameter changes.

Fixed a bug that LM found in the Bomb spacewarp in which not all animated parameters would update properly when moving the frame slider.

Fixed a bug that LM found in the Bomb spacewarp in which canceling a parameter change at a non-zero time with the animate button on would generate keys.

Fixed a bug that LM found in the Bomb spacewarp in which the 'Fragment' label was spelled incorrectly.

Implemented a suggestion from LM about the Bomb spacewarp so that now, when Falloff is turned on and you're editing the bomb object's parameters, the falloff sphere will display in the viewports.

Note that bomb fragments are created based on the order of faces in the face array. This would sometimes result in two faces that were part of the same fragment yet were completely disconnected. This is what was happening with the faces that appeared to fly-off prematurely -- those faces where part of a fragment that was within the falloff region. So the algorithm has been changed a bit so that every face in a fragment must have at least two vertices in common with some other face in the fragment. If this is not the case for a particular face then it is broken off into its own fragment. Note that this can result in fragments with only one face even when the minimum value is set to something greater than 1.

Fixed a bug that JB found in which particle systems bound to a PathFollow spacewarp that was referencing an animated spline would slow waaaaay down in the viewports. Also fixed a problem in which the particles would move slightly when changing transform modes and switching viewports. There's still an issue about particles moving slightly when selecting the animated path in this case, but there's nothing that we can do about that one. (It's no big deal.) Note that this bug involved making some slight changesto the way notifications are sent while the pipeline is being evaluated. Making this sort of change is actually quite scary and now the pipeline needs general regression (but we think that we've got it under control).

Fixed a problem that LM reported with displaying mip-map textures in OGL.

Fixed a crash that would happen if you created a Ring Array, went to the Motion panel, selected the RA dummy, undid twice, and then redid once.

Fixed a bug in Video Post that DT found in which, if you brought up the modeless Negative Filter dialog, changed a value, and then started working with keys on that track in TrackView, the sysem would go wacko. This was due to the undo code in the Filter manager conflicting with the fact that Video Post doesn't generally support undo.

The upshot of this is that the system is stable now, but there's a reference bug that we haven't been able to resolve yet... If you undo a parameter value in the Negative filter, it will undo the value but it won't repaint the spinner field, so it'll look as if the undo didn't happen (it did). We're working on this.

We also had to add a "flush" to the undo buffer when a filter is deleted. This was necessary because the controller may have had "undoable" events hanging around and there is no way to "selectively" get rid of them.

Disabled Render/Video Post menu when in a modeless filter's interactive mode so that folks can't bring up a second copy of Video Post.

Fixed all sorts of bugs that had been in Video Post forever relating to the accuracy of frame snapping, zooming, and scaling. For now auto-pan is disabled, but we're working on it.

Fixed a bug from LM in which you'd get an assertion if you selected an entire IK chain (with IK controllers) and moved it with the toolbar IK button on.

Fixed a bug that GN found in the File Import scaling code in which, if you were importing an old 3DS file, the units weren't be respected and the only way to have a correct scale reading of an import from a metric 3DS model was to have Max preferences set to inches.

Updated the stroke utility plug-in to match the UI of the internal version (for the 2-button mice folks who can only use the utility version).

Fixed a problem in which Tri-object fence picking had effectively been disabled in the high-level code (triobj.cpp -- way above GFX). It's been re-instated it, and now it seems to work fine (but the many variations need to be tested and this code is ripe for regression failures).


MM brought up a bunch of issues about how, when you've got an open group, you could use some of the display commands to hide members of that open group. Bottom line is that we don't allow you to hide any individual members of open groups. And if you do a Hide By Hit on an open group member, it will hide the entire group. That's the way it works. (If folks think that HbH ought to be disabled in this case as well, we can do it, but it's convenient to be able to Hit a group member and have the group hide... otherwise you'd have to close the group before hiding it.)

RF reported an issue in which, when you archive the scene, the maps used by Medit materials that are not in the scene are archived as well. Our opinion is that changing it si that it doesn't archive the maps used by non-scene medit materials would be a mistake... sometimes you want to send your whole project to someone, including the maps you are working with in Medit. An option is out of the question at this point, so we're just going to leave it along.

JB had a file in which, if you clicked on the Glow Test Blend material and went to Material 1: Diffuse, Shininess Strength was set to 0, instead of 30. This is a NAB because of the change in the way map amounts are applied. The Shininiess Strength was deliberately set to zero, and the amount set to the product of the former Shininess Strength and the former map amount. The effect will be the same. If you go back over the old notes about how Shininess Strength was changed (in the 025notes.doc file), you'll get the background here.

JB noted that in a certain case, the Shininess Strength Noise map in his file sometimes seemed to be coming in inverted, and/or not updating properly. "If you go to frame 100, the object should be both invisible and have no shininess at all, but in the sample sphere you're seeing a shiny "ghost" bubble.)" We can't reproduce this, but what apparently must've happend is that he "corrected" the Shininess Strength to be 30%, which will not give the same results using the new algorithm. (see the note about the new way of computing Shininess Strength, above).

LM reported a problem in which a vertex in a spline object developed a "kink" in it after you moved it. This is a NAB because, if you look at the TrackView for this shape, the handles for this vertex are animated. (At least, they both have keys and this is causing the kink.. the handles are moving to their previously animated positions, causing the problem.) This is one of the gotchas of animated handles.

PC and RF brought up the fact that, although you can net render an avi file to a single machine from the Render Scene dialog, you can't do it from Video Post. This limitation is due to the fact that all plugins, when called from Video Post, have to open and close themselves on each frame.

GN noted that if you make a shape and look at its properties, it shows that there are a bunch of vertices and faces for the shape. This is a NAB because the vertex and face display in the properties dialog displays the number of vertices and faces in the mesh that's generated at render time when/if the Renderable checkbox is checked.

EB requested an API to get the particle mesh. That's already possible with the GetRenderMesh() method.

~Non YG Bugs and Issues Resolved

Removed SoundLab from the build due to its MFC dependancies that were destabilizing the rest of MAX. If you forget to unzip this new build into a clean directory, or if you forget to delete your /stdplugs from your old directory, you'll get a startup error. Make sure that SLABPLUG.DLC is gone.

Added the Physmap (Map Scaler) to Athena. Map Scaler is a space warp which fixes the size of textures applied to an object, regardless how that object is scaled. A bigger wall will have more bricks, but of the same size. This is currently both a space warp and a WSM modifier (with no params). It needs to be resolved for 0.2.14 exactly what form it's going to settle into.

Section Object changes:

Changed the root name of the created shape from "SectionShape" to "SShape"

Added welding and changed the segment type to "curve" when you convert the section object to an editable spline. Please regress.

Fixed viewport update of the section grid when the size is animated.

Added Length/Width parameters to TrackView.

Change the update mechanism to update when the length/width is changed if the effect is limited to the section boundary and the update mode is "When Section Moves". This essentially means that "When Section Moves" mode is really "When Section Moves or Changes Size" - but I'll leave the UI as is.

Fixed the name of the section object in the modifier stack. It is now "Section".

Polygon Counter utility: Simplified the layout and gave it a real class id.

ASCII Exporter: Added ColorPerVertex output for meshes. This introduced a new checkbox in the UI's "Mesh Options" section: "Vertex Colors" - which dictates whether or not vertex colors are exported.

Object Snaps:

Fixed a bug which was screwing up relative translations. It should now behave as it did in R1.

Suppressed display of the snap preview when in relative mode. This required adding a method to the transformer class. It's called SnapPreview. It has an empty implementation.

Changed the design so that when animating, you can't do a snapped rotation or scale. I also implemented the snap preview method for the ScaleTransformer and the RotateTransformer. These suppress the snap preview when animating.

Fixed a bug which caused snap previews to be drawn when the mouse passed over non-active viewports.

Fixed a bug in which rotation and scaling would be computed about the wrong point when snapping was on.

Fixed a bug whereby changing snap categories would clear all the snaps.

The snap button becomes disabled when animate mode is engaged if either the rotate or translate mode is selected.

Fixed a problem when moving objects in relative when the snap button was on. The objects would just slide along as if snapping was totally off.

Fixed a crash bug which occured when a node was deleted while it still had an Osnap marker displayed on it. This was most often seen with RESET, but could also occur when canceling a clone and conceivably could happen when canceling creation of some objects.

Finished the overide system. This feature lets you specify a particular snap mode for only the next point. In AutoCAD, this is referred to as a snap "Override" because it overrides the "running" snap settings for just the next input. This is often how people work with snaps. This feature is engaged by shift-right-clicking in the viewport. This is how it works in AutoCAD and I only ask that you work with it a while before dismissing it as kludgy. AutoCAD users will be immediately familiar and it really does work well once you learn to use it. That being said, it is somewhat more awkward in MAX, because MAX supports the click-drag-realease creation paradigm. Despite the added awkwardness, I learned to use it quickly and think it will be the way power users approach snapping.

1) Start MAX

2) Drag out a box

3) Turn on snapping by depressing the snap button

4) Bring up the snap dialog and turn on grid points

5) Start to drag out a spline, lay down the first two points on the constuction grid

6) Hold down the SHIFT key and right-click

This will bring up a cascading mini-menu of snaps organized by category

7) Pick a snap, for example midpoint from the default palette.

Notice that in the snap dialog the overide status indicates that override is on and the type of the override 8) Run the cursor over the box and notice that you can now snap to midpoints.

9) Click on a midpoint

10) Run the cursor over the box and notice that override is now off. i.e. you can only snap to the current "running" osnap, namely grid points.

Now try the trickier case of picking an overide while holding down the left mouse button. For example while dragging out the base of a box. You have to keep that left button down while you pick the overide with the right.

66146 FIXED "Osnap options dissappear when switching to NURBS category"

66230 FIXED "The icon markers in the tab dialog keep dissapearing" This was a different bug in which all the markers would fail to load.

65769 FIXED "Having two osnap dialogs up ...." You can only have one dialog up.

The Overide indicator now gets YELLOW_WASH when set.

Removed accelerators from the object snaps. In light of the new overide system, this feature did not seem to add enough functionality to justify the effort required to make it work well. The dialog will now be used exclusively for running snaps and it seems reasonable to require clicking on the checkbox.

The grid is now forced on

Implemented an offset type-in for snapping but stubbed it out cause it was not ready.

Implemented saving and loading of the osnap settings to the max file.

Fixed filereset to turn off all the snaps except the grid.

Asset Manager utility:

Cache Limit now functional. Every time AM quits, it checks and update the maximum cache size. It also updates the cache size when the user specifically change the maximum size in the cache settings dlg. The cache is to be sorted by date before deleting (because cache is cleared in the FIFO order). Since this sorting takes time, the cache delete operation works on a separate thread.

Suppose the user sets the max size to 1mb. As soon as the cache size crosses 1mb, from that point onwards whenever a new thumbnail is created, cache will have to be sorted (once per session) the oldest thumbnail has to be deleted. that means once the cache size reaches 1mb, from that point there is performance lose. In order to avoid this situation, cache size is reduced to 50% whenever it reaches the limit. In this case cache will come down to 500kb...and when it crosses again 1mb, it will get reduced to 500kb again..and so..

Status bar text now also reports progress of listing, sorting and loading thumbs. (progress bar also get shown for listing and loading, but not for sorting, as I need to figure out a way find the total sorting time in advance).

Known bug: Status bar text works whenever a new directory is visited, but not when the user choose a different sort from tool bar..strange!

Aspect ratio of the image is now preserved in thumbnail.

Bugs in DAD with max 1.x thumbnails fixed.

Bug in painting the thumbnails while scrolling at the thumbnail creation period fixed.

VAIIC: all thumbnails will now display the orginal image name instead the coded thumbnail name

Paint bug (garbled thumb names after restoring form VAIIC) is fixed.

The filter settings (combo box) are preserved between sessions.

Scroll position for thunbnail is retained after window move.

Premier filter: "Setup at End" button removed.

Connect: Fixed assertion failure that occurred when rats-nest mesh was used as input.

Added STL exporter modifier to the build for prepping and outputting stereo lithograpy data.

Added fillet/chamfer spline modifier.

Added Door objects/category.

Added Windows objects/category.

ShapeMerge compound object:

Took out projection options; always use top projection now. To apply the shapemerge to a different side of the mesh object, rotate the sub-object operand mesh (and the shape if appropriate).

Took out the output sub-object level. This is unnecessary because I set the selection sets accurately on every sub-object level, so an EditMesh or a Face Extrude modifier will be able to find the correct selected components.

Added a new radio: "Remove Interior / Remove Exterior". This allows the user to output the part of the mesh that represents the shape (Remove Exterior) _or_ the part of the mesh outside of the shape (Remove Interior).

Note that the Interior/Exterior toggle also affects the face selection in the "Merge" operation.

Fixed the bug that caused it to take out the wrong face group sometimes. (It should always take out the right group henceforth.)

Fixed some bugs that cause CookieCutter / Face Selection not to work on some detailed shapes, such as letters. Unfortunately, other bugs that do this still remain.

Basically, if I can't complete a shape outline, I can't select the faces inside it or target them for deletion. There are several places in the code where I can fail to complete the outline, so this problem is correspondingly the result of a number of small bugs. I'll get through them as fast as I can.

But apart from that caveat, nested shape selection & cookie cutter operations work. The error rate is such that "MAX Text" is often missing a letter or two. This will improve soon.

Replaced Output Sub-Object Level. This is necessary, because if for instance you wanted to XForm selected faces, you would have to use MeshSelect or something. However, MeshSelect won't work with ShapeMerge's radically changing topology.

Took out Precision, which was useless.

Changed Interior/Exterior switches to a single "Invert" checkbox.

Fixed projection so now each shape uses its own -Z axis to project onto mesh. This was Jack's idea, which I had misunderstood, and it works much better than the stuff I had thought of. (Especially since you can now have different projections for different shapes.)

Moved "Invert" box to a less subordinate position.

ShapeMerge & Connect: Fixed automatic assignment of mapping coordinates. (Both of these objects hand the SetGenUVW() command down to their mesh operands.) Note that some flukes are turning up in ShapeMerge, CookieCutter style, when used with mapping. (I've recorded this as a bug.)

ShapeMerge / Connect / MeshSmooth: Removed "When Selected" update option.

MeshSmooth: Fixed part of the bug when MeshSmooth applied to the new form of grid capping. Now, it has an assertion failure in a new place! (To be fixed for 0.2.14.)


Finished design. Redesigned incoming sub-object selection: now instead of a box labelled "Use Selection Level" with a Default/Object/Vertex/Face/Edge radio and an "Invert Selection" checkbox, I have a box labelled "Selection" with checkboxes "Apply to Whole Mesh", "Selected Verts Only", and "Invert Selection". Checking Apply to Whole Mesh makes the other two grey out.

To try these out, try the following: - Make a box

Collapse it

Shift-move a clone of it

Go to the modifier panel and select the top four verts on the box.

Move them up in Z, making the box taller.

Apply Preserve, using the first box as the original.

The verts are moved back down, restoring the original edge lengths.

Set the iterations to 0.

Click "Invert Selection"

Crank the iterations back up to around 25.

The selected verts don't move, but the non-selected verts are pulled up to restore the original edge lengths.

Turn iterations back down to 0.

Click "Apply to Whole Mesh"

The other two checkboxes grey out, since they don't apply.

Turn iterations back up.

The top and bottom verts move together -- all verts are affected.

Go back in the modifier stack to the editable mesh.

With the top verts still selected, leave the vertex sub-object level.

(The verts are still selected, but we can't see that.)

Go back to the Preserve

De-click "Apply to Whole Mesh"

(Nothing happens, since what's coming up the pipeline is the whole mesh.)

Click "Selected Verts Only"

The original result, with only the top verts moving, appears.

(Crank iterations up & down to see this clearly.)

So why is this useful?

Remove the Preserve modifier.

Shift-move a reference to the second editable-mesh box.

Apply Preserve to the reference, using the first box as the original.

Now suppose you want to see what happens to the Preserved box as you interactively drag the verts.

Select the second box and go into sub-object / Vertex mode.

(The third box changes!)

Pick a single vert and drag it.

(The third box changes again as you pick the vert.)

Go to face sub-object mode.

The third box changes again! Well, this is intolerable.

Leave sub-object mode, and select the third box.

Click on "Apply to Whole Mesh"

Select the second box again.

Now you can go between sub-object levels and select different mesh components without the third box jumping around.

Drag a single top vert up in Z.

The change on the third box is less dramatic, but still occurs, as it moves the selected vert back and moves the other verts up.

The "Handkerchief":

Reset Max.

Create a patch grid.

Apply a MeshSelect.

Collapse the result into an editable mesh. (For some reason, this doesn't work without the MeshSelect on my machine.)

Make a copy, and then a reference of the copy, as we did above.

Apply Preserve to the third grid, using the first as the original.

Check "Selected Verts Only"

Check "Invert Selection"

Set iterations to 100.

Select the second grid.

Go to sub-object/vertex.

Select a single vertex, and drag it up in Z.

Observe the third grid. This is what this effect is all about.

Undo that, and select the two far corner verts (those along the high-Y side). Drag them up.

Ok, so we got a cape, where's a superhero?

(This is not intended to be a complete cloth simulation system, but it gives somewhat cloth-like behavior in some circumstances. It's essentially cheap cloth.)


The algorithm still needs some tweaking. Results will hopefully improve.

Because I turned a radio into two checkboxes, old Preserves will not load perfectly. Those with the old "Default" or "Object" radio options will, but the old "Vertex" "Face" and "Edge" options will all become "Apply to Whole Mesh" -- very wrong in the case of "Vertex".

Assign Vertex Color utility:

Removed the the "Ambient" option from the utility as it was redundant.

Found and fixed a bug that caused evaluation using the "Scene Lights" option not to include ambient light from the scene.

Added the capability to calculate multiple colors per vertex to the EvalCol routines. This does not affect the UI (utility or modifier) as it is source code capabilities only.

Made the "Light model" radio button sticky within the same session. It still defaults to "Scene Lights" every time you start MAX.

Made the utility work with nodes without material. Previously the wireframe color was simply stuffed into all verteces, but now a dummy material is created (with the wireframe color as its diffuse component) and shaded. FYI: This is exactly what the renderer does when it encounters wireframe materials.

Sunlight System: Creates and animates realistic "sunlight". The "sun" is directional light that follows the geographically correct angle and movement of the sun over the earth at a given location. You can choose location, date, time, and compass orientation. Date and time can be animated. Shadows are rendered accurately, making this plug-in suitable for shadow studies.

Fixed the Sentinel lock code so that it added less overhead to the object creation process.

Internet Automated Help Download utility and Help command: Added the Internet automated help file download utility plugin. This uses MFC, linked statically. Test files are up on A "driver" file includes a list of source files and their destination on the user's hard disk relative to her installed path. Select "Update Help" and try it out. Note: I am still adding support for firewall proxies, so you must turn off your "connect through proxy" checkbox in the Internet applet in your control panel, and connect to the Internet using an ISP other than KTX (I use Best, for instance). This will be resolved by Monday.

New menu items appear off the Help menu which jump the user to key Kinetix Internet sites.

Note that the code is currently dependant upon you having a net browser installed in your computer. If you don't, you'll get a startup message that you don't have WININET.DLL. Just hit OK to get through it.

Perlin Marble:

Fixed a bug in which the program would crash if you replaced the second map reference.

Placed the Size and Levels spinners side-by-side to save vertical space.

Scaled down the spinner/mouse response in the Level spinner. With a range like 0-10, a drag operation was like an on/off switch.

~QE Bugs Fixed

BUG #: 64282


CODE FIX: For the new particle system,s the location in the Modify panel is now retained when switching tabs.

BUG #: 65816


CODE FIX: Outline in Edit Spline now outlines properly (plus code has been added so that old files using outlining from MAX 1.x retain the old outlining method to preserve forward compatibility).

BUG #: 65817


CODE FIX: You can drag a negative spline outline now in both Edit Spline and Editable Spline.

BUG #: 65876


CODE FIX: Grid capping doesn't have hidden edges at its sides anymore. Note that if you go through these steps in the report, you'll now get a crash in MeshSmooth (in MNMesh.cpp, line 1674). This needs to be reported to SA.

BUG #: 64890


CODE FIX: In the new particle systems, Pickgroup now functions correctly with the SbN dialog.

BUG #: 65036


CODE FIX: PBomb parameters have the correct Track View labels now.

BUG #: 65224


CODE FIX: Particle system parameter values are now updated correctly after Undo operations.

BUG #: 65323


CODE FIX: You now have the ability to set Metaparticle coarseness differently for the interactive and production renders. There are two parameter fields for this... one for the viewports and the other for the scanline renderer.

BUG #: 65139


CODE FIX: Medit accepts bogus UNC pathnames and bogus anything else pathnames as well. This bug had nothing at all to do with UNC pathnames. All you had to see the problem was to type "anything", and it would become accepted. The problem was do to when we added the "create ifl on the fly" code, we had to stop enforcing the "file must exist" rule to the "Input" file picker. This was to allow typing something such as "file*.tga", which, individually, doesn't exist. Within Video Post and other places where files are selected for input, it would check if the file existed explictly. In Medit, however, no check was being made. Now, a specific check is made for IFL creation. It will check for either a "*" or a "?" wild card anywhere in the filename. If none is found, it will then check to see if the given filename can be found. If not, it loops back to the file picker. This will go on until either you select (or type) an existing filename or cancel out of the file picker.

BUG #: 31678


CODE FIX: Right click deselects and updates status fields in VP now.

BUG #: 65268


CODE FIX: : List types- Groups' in Merge dialog is now functional.

BUG #: 65069


CODE FIX: Queueman's Auto Refresh now turns off when the manager goes down (so you don't get tons of spurious errors from the QM trying to query the manager). The "Transport Error Handling" code has been transferred into QueueMan so it can now trap fatal errors (that would render the connection dead) and act accordingly. Once a connection goes down (the manager dies, for instance), it displays an error alert and then shuts down the connection (and auto-refresh with it) for that session.

BUG #: 31656


CODE FIX: Video Post Image Input Events between Layers can be swapped now.

BUG #: 31601


CODE FIX: The Video Post Frame Bar doesn't obscure the Queue Range Bar anymore. The Queue has been moved down a line (so the frame bar isn't on top of anything), but this is far from as simple as it seems. There's a tremendous amount of code that depends upon the queue starting at line 0, and it now starts at line 1. We did some preliminary tests and couldn't find any problems, but it's possible that this "little" change has completely destabilized Video Post. It needs a tremendous amount of testing now.

BUG #: 66212


CODE FIX: Creating a shape and then clicking on it in another viewport doesn't cause a crash anymore.

BUG #: 66250


CODE FIX: File/Preferences/Colors settings aren't lost anymore when Athena is restarted.

BUG #: 66251


CODE FIX: File/Preferences/Colors Selection Value works fine now.

BUG #: 66252


CODE FIX: File/Preferences/Colors, at the bottom of Main UI list the ">>>@!&*#<<<" is gone now.

BUG #: 64913


CODE FIX: In the new particle systems, subframe sampling now functions correctly when emitter rotating. This change is implemented in SuperSpray, Blizzard, and PArray (it's irrelevant for PCloud). See ROTSPRAY.MAX, ROTSPRY2.MAX, and ROTSPRY3.MAX for examples. To see what's going on, open one of these files, select a particle system, move to frame 50 or 60, and move to Particle Generation. A new checkbox supplements the two that were there, and the labels have changed. Now, "Subframe Sampling" encompasses over all three, and the three boxes read "Creation Time", "Emitter Translation", and "Emitter Rotation". They are in reverse order of impact severity and probably in order of utility. Play with the three checkboxes. Note that Emitter Rotation has no effect on the translating particle systems and Emitter Translation has no effect on the spinning emitter. Note that Emitter Rotation does add a performance hit, but it's less than what we originally thought it would be. And the three sample methods are INDEPENDENT, and they're also independent of Emitter Motion Inheritance. That wasn't true before. Experiment. (Note that if you're dragging the time slider, you may have to mouse up for the particles to completely draw themselves. That's normal behavior.) This is much more effective than before... faster and smoother. Each of the emitter effects stands out independantly. (This is new stuff, by the way, and we can't find anything in any of the literature that implies that anyone's ever decoupled the four subframe sampling/inheritance motion parameters before in any other particle system package.)

BUG #: 64573


CODE FIX: The Smooth modifier has been modified to be able to handle this type of extreme corner case situate that Connect has generated. (This one was really tricky and we should have NABed it (especially after finally realizing that 3DS/DOS' auto-smooth has the same limitations), but it became a challenge and it's nailed. Here's what's going on -- The auto smooth algorithm assigns smoothing groups based on the following criteria:

If face A is within 'threshold' tolerance of face B then A and B are in the same group.

Item number 1) in transitive. Meaning that if A is within threshold tolerance of B and B is within threshold tolerance of C then A and C are in the same smooth group.

So in the example bug file, what happens is that the side of the cylinder is (correctly) smoothed into the portion of the mesh generated by Connect. The portion of the mesh generated by Connect is then (correctly) smoothed into the rear cap of the cylinder. Now using criteria 2) AB are smooth and BC are smooth, therefore AC are smooth. In other words, the smoothing "leaks" from the side of the cylinder through the connecting mesh to the cap of the cylinder.

Of course this may not be what folks want, and it was an unbelievable challenge coming up with an algorithm to deal with it. Although we've implemented it, this algorithm is as slow as molasses in the wintertime. And because it's so slow and because compatibility needs to be maintained with the old smooth algorithm, this an option (which defaults to off) called 'Prevent Indirect Smoothing' (for lack of a better name).

One final note... after turning on this new option for 64573.MAX, you'll some apparent glitches in the smoothing in the shaded view. Zoom into to one of the glitches and then render and you'll see that it looks fine. We're looking at why GFX is doing this.

BUG #: 58426


CODE FIX: Edit Spline/Attach/Reorient doesn't ignore the object pivot point anymore. The attach/Reorient operations in Edit Spline, Editable Spline and Edit Patch now do exactly what is requested... The shapes are aligned and reoriented so that (1) the pivot points coincide and (2) the attached shape is reoriented so that its local axis is aligned with that of the attaching shape. This needs to be tested with various combinations of "affect pivot only" operations.

BUG #: 59835


CODE FIX: Implemented an Inscribed/ Circumscribed option in NGons as requested. Old files with NGons load as Circumscribed to retain the same appearance.

BUG #: 66151


CODE FIX: Create Material Preview doesn't crash the program anymore when image size is set to the lowest allowed value (which is now 10%).

BUG #: 66239


CODE FIX: Quadtree depth of zero with fully tranparent objects doesn't cause the program to crash anymore (the depth now must be at least 1).

BUG #: 66286


CODE FIX: The Close option from the Group menu is now enabled when a subgroup is detached from a group using the Redo Detach function. (Note that step#4 of this report references an "Edit/Attach" function, and it should reference "Group/Attach" instead.)

BUG #: 66343


CODE FIX: You can now disable the submaterial of a Double-Sided Material. Disabled submaterials now render as black (in both the Medit renderer and the scanline renderer, but the viewport renderer will never be able to represent this correctly).

BUG #: 66411


CODE FIX: These render anomolies when disabling the submap in the Wood map are now gone.

BUG #: 66386


CODE FIX: You can Drag and Drop from speckle map 1 to speckle map 2 now.

BUG #: 66390


CODE FIX: You can drag and drop splat color #1 map to color #2 map now.

BUG #: 66391


CODE FIX: You can drag and drop stucco color #1 map to color #2 map now.

BUG #: 66392


CODE FIX: You can drag and drop water color #1 map to color #2 map now

BUG #: 66103


CODE FIX: The redeclaration of do_nth in SetDoNth() in samples/mtls/acubic.cpp is fixed now.

BUG #: 66260


CODE FIX: Pivots don't move without their objects in certain wireframe viewports in OpenGL mode anymore.

BUG #: 66409


CODE FIX: In QueueMan, you now get a confirmation when a job is activated and the confirmation option is on.

BUG #: 66474


CODE FIX: In QueueMan, attempting to connect to an invalid manager doesn't force you to reboot QueueMan to reconnect to a valid manager anymore. This was a somewhat extensive internal addition to QM (because there wasn't much in terms of error recovery if an attempted connection were to fail). Other places where QM would be left hanging were found and an internal "reset" method has been added for these situations. (It may take a few minutes to time out, so be patient.)

BUG #: 66490


CODE FIX: In Queman, the Log file readout deals correctly with zero in the minuet slot now. (The minuet is played in C minor as opposed to RAP molto pulsante.)

BUG #: 65981


CODE FIX: Max doesn't crash anymore undoing Assign Controller after a Link Controller has been assigned.

BUG #: 66582


CODE FIX: Cross-linking End Effectors between IK chains doesn't crash Max anymore. Note that this is one of those configurations that is hard to detect and prevent folks from doing. The program doesn't crash anymore (however the result of such a cross linked configuration is not something that anyone would actually want). This is essentially another form of a circular dependency.

BUG #: 66620


CODE FIX: Track View's Edit Keys\Slide Keys prompt is correct now.

BUG #: 31625


CODE FIX: The start point in VP range bars is now sensitive to click select.

BUG #: 66141


CODE FIX: PBomb's duration setting can't have a negative value anymore.

BUG #: 66538


CODE FIX: Render region in perspective view doesn't cause Max to disco loop anymore.

BUG #: 66504


CODE FIX: The static text for Color Swatches in RGB Multiply says Color instead of Map now.

BUG #: 66120


CODE FIX: Manual Update retains setting now when switching sample slots with Drag/Rotate active.

BUG #: 66625


CODE FIX: The Material Effects channels used in the Environment Map doesn't reset to 0 anymore. Note that this wasn't so much a bug as a request for a feature to make the environment map's MaterialEffects number be used when rendering to the Gbuffer.

BUG #: 66352


CODE FIX: Disabling Top Material of Top/Bottom Material works correclty now (disabled materials are black when rendered).

BUG #: 66345


CODE FIX: The Blend Materials Mix Amount enables now when you disable Mask via the checkbox.

BUG #: 66389


CODE FIX: Drag and drop for RGB Tint Map works correctly now.

BUG #: 66267


CODE FIX: Create Material Preview Playback FPS is sticky now.

BUG #: 66245


CODE FIX: The Command Panel scroll bar updates properly when the right click menu is used in this case now.

BUG #: 66241


CODE FIX: The fact that the Expression Debug Window reported an infinitesimal value for zero in certain cases is actually a NAB, because the display was actually showing exactly the values in those variables (which weren't exactly 0 due to roundoff). But it was certainly annoying seeing those values, so the display has been modified to show a fixed 4 digits of precision. This has a benefit of "reasonable" values, but will be less useful if people have expressions using more extreme values. (But overall, this may be an improvement.)

BUG #: 66257


CODE FIX: The Display\Display Properties\Trajectory checkbox is now immediately updated using the keyboard shortcut (in both the display panel and the display floater).


BUG #: 49802


NAB: All views change to a Top view after choosing the single view configuration in viewport layout because after pressing OK, all other view types are "erased"... only the info on the currently-chosen configuration (in this case the single Top view) is saved. Later, when you've chosen a layout with more views, all "undefined" views (all but the first view type) are set to the default view type, which is "top". To see this, choose a single view as in the write up, but make it a front view instead. Then, when going back into the layout dialog, any multi-view layouts will show "front" for the first viewport, and "top" for any additional ones.

BUG #: 66550


NAB: The 212spec.doc may say that the # of sample slots configured in the Options dialog should be stored in the 3dsmax.ini file, but it's incorrect. That data is stored in the .max file. The spec will be changed for 214.

BUG #: 31677


NAB: The range in the VP Execute Sequence dialog doesn't reflect the overall queue length because it reflects the length that you've manually set in the two fields. It has nothing to do with the overall length (and neither does the range fields in the Render Scene dialog). Both VP Execute and Render Scene ranges work exactly the same way. Instead of the explanation in the bug report, consider the following: Go to video post and add an event (the same 8 frames long event for instance). Go to the Execute dialog and set to render to a range from 0 to 4. Now go back to Video Post and add another event of over 8 frames (a default scene event of 100 frames would do fine). If you now go back to the Execute dialog, would you want to have the range updated to "0 to 100" or would you want it to remember the last change you did (the "0 to 4" range)? It's completely arbitrary, and we're not going to make any assumptions here. Note that in the Render Scene dialog there is a third option of "Active Time Segment that doesn't apply to Video Post. That may have confused the person who originally wrote this report.

BUG #: 62716


NAB: The reason why you're not seeing the grayish color for the inactive modifer in the stack is because you're not using a true-color display. When you use a 65K-color display, the color quantization just doesn't have the granularity to display the subtlety necessary to show this. That's life.

BUG #: 66044


NAB: The prism creation method is different than the boxes, and we're not going to conform them (they are different objects). This is how it's supposed to work.

BUG #: 66139


NAB: When you've got a magnify window open while playing an animation, the extra display overhead is going to slow things down. If you want to play an animation at full speed, close Medit. This has been documented behavior since r1... the magnify window just exacerbates the situation.

BUG #: 66607


NAB: The MIDI Motion Capture Dialog is not accessible while the MIDI Viewer is open because this dialog is modal (it's supposed to be that way).

BUG #: 66623


NAB: The Track Name edit field in the Motion Capture controller dialog is for users to provide custom names for their tracks. It's supposed to be empty at this point (until you give it a custom name, at which time it is no longer empty.

BUG #: 66280


NAB: The Mapping checkbox in the Render Scene dialog doesn't turn off the Environment map because the Mapping checkbox just controls object mapping. We actually implemented this specifically from user requests. If you want to turn the environment map off you can do it in the Environment dialog.

BUG #: 66135


NAB: Rotating Maps along U or V causes distortion, but when you're rotating in UVW space, this is what happens (mathematically it's correct).

BUG #: 66261


NAB: The undo list must be lost when the creation of an object is aborted in both a different viewport and the original one. As I wrote in my notes about bug# 64436 for version 0.2.10, this is a special case in which the first object created allows you to edit its parameters before that object is actually part of the scene. As a result it is possible that the object can be deleted (by canceling the creation as the bug illustrates) however the object is added to the scene after the object was edited (which is strange if you stop and think about it) so the undo for the parameter change is still left on the undo stack. The solution (and there is no other way around this) is to special-case the hell out of it. Now, if you cancel the creation of the first object (the one that lets you edit its parameters before it is in the scene) then the undo stack will be flushed. This shouldn't destabilize things, but you never know...

BUG #: 66624


NAB: Volume lights will always use the far attenuation setting regardless of whether attenuation is turned on. (An omni volume light without any attenuation isn't very interesting... it will result in an entirely white image.)

BUG #: 66622


NAB: Undoing an Edit Time\Delete Time(or Cut Track) operation does not restore the selected block of time because time selection in the TrackView is not part of the undo stack.

BUG #: 66414


NAB: In QueueMan, when creating a report, a log file is also created, but it's only temporary (while you're in that session of QueueMan). The log file is downloaded whenever it is requested (which is what happens when you ask for a report). It's then deleted when you exit Queue Manager.

~QE NoRepros

BUG #: 64825


NO REPRO: Can't reproduce this problem in which a Redraw All Views is necessary after doing a boolean operation (w/Heidi). Tried with both dual planes on and dual planes off.

~QE NoFixes

BUG #: 66619


NO FIX: Saved named Track Views do not restore expanded objects or tracks because the open/close state of objects is not not saved (and can't be).

BUG #: 66422


NO FIX: Named Track Views don't restore track selection when reopened because it would be literally impossible for us to save the selection state of tracks without rewriting the entire TrackView.

BUG #: 63562


NO FIX: The Help ? on MEDIT and the Browser does come and go. As we noted for bug #40130 (Question mark icon in the Environment dialog not hooked up), the only thing that we can determine here is that it looks like an NT4.0 bug. If you have the minimize/maximize icons in the title bar of a modeless dialog, the question mark just ceases to function. Notice that the question mark in the Environment Dialog and in the Transform-type in floater are also dead. We asked for help with this when we NO FIX'd this for #40130, and we still need help. If you can find an MS engineer who can help us with it, that'd be great. Otherwise, that's just the way it is.

BUG #: 66164


NO FIX: Any Accom problems are now unfixable by us because the Accom folks took our only testing unit back. You have two choices... either ask us to remove the Accom driver completely (which we are more than happy to do), or try to get us another unit. Regardless, all Accom issues are closed until either of those happen.

BUG #: 64776


NO FIX: The Indeo Video R3.2 codec does render at the wrong resolution, but it's a NOB ("Not Our Bug"). This is a certainly a problem, but it is completely within the Indeo codec. We stepped through our code and verified that we are, indeed, sending a 600x270 pixel bitmap to the codec. Don's guess is that the codec requires the height to be a multiple of 4, but he wasn't able to specifically verify that. Multiples of 4 allow for faster processing since 4 * 8 (bits in a byte) = 32, and the Pentium (Pro) processors are 32-bit CPU's. That may be why they set up that codec to work that way.

BUG #: 64654


NO FIX: It would be too convoluted internally for the middle mouse button to enter stroke "mode", so we're going to deal with this by conforming the Stroke utility to the Stroke system and folks who don't want to use the middle mouse button can use the utility.

BUG #: 31623


NO FIX: Right-Click does not cancel range bar editing and never will cancel range bar editing because there's no undo in Video Post and there never will be (undo is required for right-click canceling).

BUG #: 65471


NO FIX: Zoom Extents won't work in cases where the object overflows our internal limits. The problem before was that the zoom was going too far, and the internal numbers representing the view were meaningless (i.e. it had truly zoomed out too far). We now limit the zooming range to our internal limits, so as to at least allow recovery. (BTW, the zoom out never worked, in that you'd never see a centered sphere even before putting in the limit. The viewport numbers were totally meaningless, and the zoomed view was "random"). Finally, note that in step#3 of this report, it says to "make the radius huge". What does "huge" mean, technically? In a single-precision system, "huge" is an extremely relative term. In the future, please try to be specific. ("Huge" in this case, would be a sphere with a 10,000,000-unit radius, which is beyond the scope of the single precision math.)

BUG #: 66130


NO FIX: Zoom extents all will always need multiple clicks to center very small or very large objects in the scene because of the iterative code within the zoom extents system.

BUG #: 66134


NO FIX: Not closing a spline will cause the spline to change orientation if you decide to continue working on it in another viewport than the one you started it. We're not going near that code at this point.

BUG #: 66215


NO FIX: Medit keyboard shortcuts (nor any keyboard shortcuts) don't work if edit fields have focus. Never have and never will. If you want to use a shortcut, get your cursor out of an edit field.

BUG #: 66221


NO FIX: It's too late for this wish for Hedra to have keyboard entry fields.

BUG #: 66223


NO FIX: Inconsistencies in parameter order between the command panel and TrackView are all over the program, and they're irrelevant. Fixing them would break loading of old files.

BUG #: 66541


NO FIX: You'll never be able to resize the modal browser in all directions. There are constraints as to how small it can get, and the issue about the resize arrow on the title bar going into move mode is not going to be fixed.

BUG #: 66542


NO FIX: You can't return to a "blank" Custom Sample Object button. Just turn the checkbox off if you don't want that object.

BUG #: 66551


NO FIX: We never could figure out how to update the sample slot display when hitting the Apply button in the Medit Options dialog. That's just how it goes.

BUG #: 46201


NO FIX: Boolean operations will just fail in these cases due to floating point roundoff. One of the line segments involved is a low-slope line which, when diced up by the boolean code, won't properly intersect-test. The fact that you can move things around slightly and get it to work is a good indicator of this. It might theoretically be possible to change the code for R3 to use double-precision math but this would affect old files which use the code to reconstruct the booleaned shapes (and it's way out of the scope of R2).

Update notes (for version 0.2.12, 6/22/97):


Rewritten the three overly simplistic linkage correction case routines into twelve more efficient (and simpler) ones. This means that there are twelve distinct linkage types allowed in Dynamics that should each be tested exhaustively. Within the next week, we'll have to document all of these different cases, but we're not quite there yet (this is a bear). Some examples are: ball joint (three translation locks), prismatic joint (two translation and three rotation locks), universal joint (balljoint plus one rotation lock), plane constraint (two translation locks with the same two rotation locks), sliding hinge (two rotation locks and the two matching translation locks), and hinge (sliding hinge plus the third translation lock).

Coding of resting/sliding is going forward, and by 0.2.13 we ought to have it nailed. Things are much more stable (and they solve quicker) in this release. Check out dynlink4.max (which would've been impossible in last week's build).

~YG new features and general issues resolved

Implemented a suggestion from RF to change the location of the file from the Scenes directory to the Autobackup directory because having it in a directory shared across machines (as Scenes may be) could cause problems. The autobackup directory is always supposed to be a local, non-shared directory. Both Hold and Fetch get this file from the Autobackup directory.

Implemented a suggestion from DS (and other folks over the last year) to change the way Snapshot works so that if you snapshot an object with a WSM and you choose the Mesh option, it will include the WSM effect in the snapshot. Note that if for some reason the object is bound to a WSM and you don't want the Snapshot to capture the WSM effect, you can disable the WSM in the Modify panel before doing the Snapshot.

Implemented a suggestion from PW in the EditPatch modifier so that when you extend/add a patche, it automatically welds the vertices that share a common vertex (ie, if they're at the same position). Old files are not affected, because otherwise they would change topology.

Set it up so that the EMesh object's Vertex Collapse function leaves the new vertex in a selected state for faster editing (Weld already did this).

Now, in the Collapse utility, when Modifier Stack Result is chosen, the "Collapse To" section is greyed out.

The Spacewarps that affect Particle systems AND Dynamics now have the phrase "Dynamics Effects" added to their "Supports Objects of Type" rollouts.

Implemented a suggestion from PM to save the state of "show texture" option in the material definition (i.e., in the .mat file). This makes drag & drop operations to the scene from the either the Material/Map Browser or Asset Manager very simple. So, if you put a material that has an active texture map (i.e. showing in the viewports) into the material library, then later assign that material to an object, the map will show automatically in the viewport. Note that this won't make any existing materials in material libraries automatically display texture maps when they are assigned, even if their ShowMap bit was set when they were put to the library. To make this work you have to re-put materials into the library after re-activating the texmap.

Implemented a suggestion from RL's to change the TrackView reverse time function so that it also swaps tangents. For a bezier key, the in and out tangent types will be swapped. For TCB keys, the ease in and ease out values will be swapped.

Implemented suggestions from RF (and others) for the regular old Bomb spacwarp to make it more functional. (These were long-standing wishes that we'd had on the list for too long.) Here's a list of the new functionality:

Spin: The rate at which the object fragments will rotate (specified in revolutions per second). This fragment rotation rate is also affected by the Chaos parameter (which causes different fragments to rotate at different speeds) and the falloff parameter (which causes the force of the explosion to be weaker the farther the fragment is from the bomb).

Falloff: The distance from the bomb (in world units) of the effect of the bomb. Fragments past this distance will not be affected by the bomb's strength or spin (but will be affected by gravity). This is useful for blowing up the base of a building and have the top part of the building topple.

Falloff On: When this checkbox is on, the Falloff option is active (otherwise all fragments are affected by the bomb).

Fragment Size: Two parameters define the number of faces per fragment. Any given fragment will have a number of faces somewhere (randomly) between the min and max parameter.

Seed: A seed to the random number generator.

Implemented a suggestion from PW to add sub-object material ID assignment to the Patch SO level of the EditPatch modifier. (You can also select by ID.) The only problem currently is that the patch display in the viewport does not properly display the sub-material colors. We're working on it.

Modifications to the Stroke Recognition System:

Hid the Change and Delete buttons when Review Strokes is run from the Define Strokes dialog.

Hid the Review button in Define dialog when launched by using Change in Review Strokes

Renamed the options 'Sort Order' to 'Show As'.

Added a warning prompt when deleting a stroke set.

Renamed the Preference (Stroke) command to Stroke Preferences.

Using Show As to switch between Command Name and Stroke Name now keeps the current item selected (it used to move the highlight to the top of the list).

Added a Set Constraints command so you can bring up the constrain floater without changing your transform mode.

Set the viewport as active that the stroke is drawn in. This corrects a bug in which you could arc rotate a view but it wouldn't do it in the view the stroke was drawn in.

~YG Bugs Fixed

Fixed a bug that RF found in which, if you picked protractor targets within the Create panel no protractor had been created yet, it would crash.

Changed the protractor icon to be something different from an omni light.

Fixed a problem in which the UI wasn't updating properly when you first selected a tape measure while in the Modify panel.

Fixed a bug that LM found in which, if you created an object in R1, applied a UVW Mapping modifier to it, then saved the file and loaded it into Athena and then shift-moved the sphere as a copy, the UVW mapping would've been rotated 180 degrees on the copy.

Fixed a problem that RF found in which moving keys in TrackView and right click canceling didn't reset the Time and Offset status at the bottom of the screen. It now correctly redraws the prompt line.

Fixed a bug that PW found in which the second texture mapping channel in patches wasn't working. All primitives have been converted to use the new methods, so they should be working OK.

Fixed a problem that LM noted in the HSV controller in which the RGB spinners acted as integer spinners on HSV rather than RGB. Note that the light displays the color parameters as INTs. If what he reported is actually to be considered a bug (which is debatable) it is a bug in the light's parameters. Internally, the values are stored as floats. We did fix a problem with the conversion of RGB to HSV (which was causing weirdness when you adjusted the omni light color in the command panel and the key type was set to HSV).

Modified the protractor object so that it displays the line to the first target using the target line color, and the line to the second target using the same color as the protractor itself (which is the UI tape measure color).

Fixed a problem that JB and RF found in the MoCap utility in which, if you left-clicked the mouse while in test-mode, it would put you into a mode in which it thought you were sliding the command panel around.

Fixed a problem that LM found in which focus would go to the program below Max if you clicked on OK in the Unwrap UVWs options dialog.

Fixed a bug that JC found in which, if you open a new file (any file), attached notes to the metronome track, add note keys/markers, saved the file, and then reopened the file, that whole track would be gone. (Note that note tracks assigned to waveforms weren't being saved either.)

Fixed a problem that JC found in which the Track View wasn't remembering its open location.

Fixed a problem that DC found in the C-Ext object in which Back Segments was called Front Segments in TrackView, and Front Segments was called Back Segments.

Fixed a "semi-reproducible problem" that JB reported with animated Opacity maps sometimes causing problems with Glow effects. The way effects ID's work with the Blend material was previously relatively lame. If you had an ID=1 on one of the materials, and 0 on the other, then if the ID=1 material was blended in with the tiniest amount, its ID would get written. Even if the blend was 99.9% the other material, the id would say it was the .1% material. That's why Step (4) of the bug report said, "the Glow effect seems to take over the entire sphere". One question about this is that we didn't find any sort of "semi-repeatable" problem here. What was fixed was a totally repeatable phenomenon (and that means there may still be something that we couldn't reproduce). Hopefully this will fix his problem.

Note that this change will also effect the Top/Bottom material, and any material that does fractional blending of sub-materials.

Fixed a bug that MGB found in which, if you used an inverted selection when merging a file, all items were merged.

Fixed a bug that MF found in which Motion Blur render settings were not being saved with the .max file.

Fixed a problem that LM found with the TrackView names of light objects in which Attenuation/Far/Start was labeld Attenuation Start in TV and Attenuation/Far/End was labeled Attenuation End in TV.

Fixed a problem that LM found with the TrackView names of Cameras in which Near Clip was labeld Near Plane in TV and Far Clip was labeld Far Plane in TV.

Fixed a problem that LM found with the TrackView name of the Position track in the Top/Bottom material in which it was labeld Threshold.

Fixed a problem that LM found with the TrackView name of the various tracks in the 2D map's Coordinates rollup not matching up.

Fixed a problem that LM found with the TrackView name of a few tracks in the Cellular, Flat Mirror and Particle MBlur maps not matching up.

Fixed a bug that RF found in which changing parameters in the new particle systems and the PathFollow object and performing an UNDO will undo the parameter change but not update the UI.

Fixed a problem that RF found in which bump map import of R4 projects using noise was excessive when brought in to Max. (SXP's used as bump maps were coming in with the amount 10 times too high.)

Fixed a memory leak that RL found when rendering with Constant sized particles. There may still be an incredibly minor leak here, but if there is, we can't locate it. If anyone can find an example, we'd like to see it.

Fixed a problem that BH found in which when rendering and the entire MAX window was covered by another and then exposed (must be the entire window) Hypermatter's transformation controllers got a call of GetValue(0,...), which sent the dynamics timestepping engine into a funk, or at least back to frame 0. Given that folks might hide Max when running a long render, the more frequently they'd check on the renderer's progress the longer it would take. This was caused by the object color swatch redrawing and now it doesn't evaluate the object at frame 0 in this case.

Fixed a problem that RF found in which changing the Type of a sub material within a multi material would not up force a viewport update.

Fixed a problem that RL found with Image Motion Blur in which the effect of the blur was too pronounced at very low velocities. It wasn't using the z-coverage in pass 1 of the algorithm to attenuate the affect of edge pixels. (This was causing an extra pixel or so of blur.) Plus, when computing the amount of each pixel to smear into adjacent pixels, it was based on dividing the pixel color by the length of the velocity vector. This has been changed to now divide by 1+length (which for very small velocities cuts the blur down, but has no visible effect at higher velocities). With these changes, the amplitude of the effect looks much more compatible to what you get from SMB.

Fixed a bug that JR found in which the new protractor would crash the program if you clicked on both pick boxes or the same box twice while in Create mode.

Fixed a problem that MGB found in which Hide by Hit was sticky after changing modes or panels, and that was a bit clumsy. Now, both HbH and Freeze-by-Hit mode are canceled if you change to another command panel, or if you choose another hide or freeze operation in the Display panel.

Fixed a bug that RF found in which the Network Neighborhood option was not working in the Choose Directory dialog.

Fixed a bug that LM found in which hitting Cancel in the new Attach dialog did an attach anyway.

Fixed a bug that LM found in which the program would crash after Undoing a Set Active operation on a controller within a List controller.

Fixed a problem in which the boolean, morph, scatter and conform objects were enabled when particle systems were selected.

Fixed a problem in which, if you put named trackviews away in a specific order, they wouldn't be stored in that order (instead they'd be stored in the order that they were created).

Fixed a bug that RF found in the Select By Name dialog in which the program would crash in certained cases when using that function.

Fixed a bug that PN found in the group bounding box calculation that caused an exponential explosion in message passing (thereby effectively hanging up the program).

Fixed a problem that RF found in which the display in the Medit Browser control panel would get munged when turning off the Show Materials checkbox while browsing the Mtl Library.

Fixed a bug that RF found in which merging files was spuriously giving the duplicate Material Names warning.

Fixed a bug that RF found in the scaling system that would cause attached objects to scale to infinity while in SO vertex mode while using the Local coordinate system. (Note that he also mentioned in this report that the axis tripod would be oriented in a strange way while scaling spheres in SO face mode, and that's a NAB because the local coords are constructed by the average face normal and since these were spheres selected, that average normal was just a random direction.

Fixed a bug that PW found in which there was a memory leak in the EditableMesh object when doing sub object vertex or face selection and modifier animation, saving the file, and then loading it back in. This was a tricky one... mesh objects don't create strips when loading. This isn't a problem unless the mesh has a modifier following it (it has nothing to do with the modifier being applied to a sub-object selection, BTW). When a modifier is after the mesh, and the modifier is animated, the mesh isn't getting displayed, but instead a temporary copy of the mesh is displayed and as a result strips were being built on the fly and then tossed out with out the memory being freed. It's fixed now, and actually mesh objects with animated modifiers should be more efficient now (since strips aren't constantly being rebuilt).

Fixed a problem with Medit keyboard macros in which the Go to Parent shortcut (which worked fine with multi/sub-object materials) didn't work when you were at a map level. The problem was that for maps and materials with spinners, one of the spinners would get key focus when you entered the maps rollup panel, so all keys went to the spinner field. Code was added to set the focus to the main Medit window whenever you open up a rollup panel.

Fixed a bug that LM found in which the Noise modifier's iteration parameter had inconsistent affects on the result. Basically, when iterations was non-integral it would have the affect of iterations+1. There would then be a discontinuity when you went from an integral iteration value to a non-integral value.

Fixed a bug that LM found in which, in Editable Mesh, changing the Material ID on faces was not undoable.

Hopefully fixed (well, worked around actually) a VC5.x compiler bug that RF found which caused random errors when reading/writing flics. It took us awhile to find a set of optimization switches that would make this go away, but it did (at least in our single test case). Fingers crossed on this one.

Fixed a display problem in the Protractor helper in which, if the target objects were animated, the protractor left drit on the screen as you moved the frame slider around.

Fixed a bug in which Texture Correction mode was not working in SZB.

MM reported a group problem (in 3 reports, but they were the same thing) in which we have to decide how to resolve the issue of allowing folsk to Hide/Freeze individual members of open groups. How we "fix" these bugs depends on various design decisions regarding allowing hiding members of open groups at all. And if we do decide to do that (which is partially disallowed now), then how do we deal with cases in which folks hide all but the group dummy? Lots of questions here, and we may resolve all of them by finishing the process of locking out the ability to hide any members of open groups via any means.


RL mentioned that he couldn't get the "Create Rotation Lock Key" shortcut to work. We can't repro that here, and it might be because the TrackView might've had focus (in which case these accelerators aren't going to be active if you're using separate macros for each of the windows).

RL had mentioned that he couldn't us a NewIK bone as the source of an expression. You can do this by using the node's position as a vector variable by selecting the node itself when assigning a controller to a variable.

LM noticed that in the new particle systems, subframe motion sampling was just for translation (and not rotation). Since the rotation case can't be efficiently handled, we're not implementing it. For the purposes of subframe sampling we consider only linear piecewise motion of the emitter (so if it spins without going anywhere it doesn't count). As for the "bunching" that he noticed, this may have been a symptom of the slightly skewed offset motion we corrected a few weeks ago.

LM noticed that you can't turn off mapping coords for objects that had their textures showing. That's just the way automatic mapping coord enabling works.

RF had reported a problem with SuperSpray in which, when a particle is bound to a Path Follow, changing the speed of the particles moves the particles along the original emitter direction and not the Path. This is a NAB because the PathFollow takes over the particle speed after the particles have hit the PF "capture point". PF takes over the particles and moves them according to the PF Travel Time settings! (The speed of the particle outside the PathFollow capture has absolutely no meaning.)

JB had reported a problem with PathFollow in which he had a situation in which the particles didn't appear to follow the path (they stayed in their original orientation). The problem is that the particles follow either an exact copy of the spline starting at the time they are captured, or they follow an offset spline from the same point. Since the particles are distributed through space at the discreet time intervals at which they are captured, an entire frame's worth of valid captured particles are clocked into the PathFollow object at the same time, and since they all follow identical paths under the Parallel setting (which his example used) their relative positions remain unchanged. You might think that it would be possible to modify the PathFollow object so that the actual point of capture is calculated on a subframe basis, but since the test isn't continuous the effect hoses the motion of the particles at the capture point (creating odd eddies and jumps and very bizarre orientation jumps). It's also extremely slow to do it that way (even if we could get the oddities out of it) because the test for the true capture point is nonlinear and iterative. There is no easy solution for this and we suggest using OFFSET splines instead.

Note that there is another feature that can handle situations like this. Bubble noise stands outside the collision object/spacewarp influence. Therefore, a little slow "bubble noise" can add some randomness to otherwise identical paths in grouped particles clocked through a collision object. This was necessary, originally, so that you could do things like shoot particles with bubble noise out of a speargun underwater into a spacewarp and have them be affected by the spacewarp but sill bubble.

RF reported a problem in which Flat Mirror wasn't responding to the state of the 'Use Environment Map' checkbox (it always acted as if it was checked). Can't repro that here.

RF had noted that a reset (or even closing and reopening Max) will not reset the 'Custom Palette Filename' last used in the flc setup dialog. (R1 also did this.) This is a NAB because the .bmi setup parameters work exactly like .ini parameters. When you change them, they are changed "permanently".

MGB had noticed that no undo entry is put onto the stack for Hide-by-hit. This is a NAB because the undo entry is only put there when you leave HbH mode.

EB asked for a mirror Z-channel in the Gbuffer to store the distance for mirrored object to the nearest line of sight. This will have to wait for r3...

~Non YG Bugs and Issues Resolved

Asset Manager utility:

.max file DAD/file merge operations modified. Instead of merging the file at the beginning of DAD, the thumbnail file is now merged with the current scene only after the mouse button is released. The user can then move around the mouse and place the file in the location disired.

Known bug: In some cases, max will pop up dlg if there are duplications in file merge. if the user press 'cancel' or 'skip' there, AM lose control over the current command mode and weired things may happen. - fly-offs in tool bar are replaced by check buttons.

Bugs on View/Properties operations on .max thumbs fixed

.max file DAD bug (known bug pending from yesterday) got fixed.

Certain UI buttons and menu items are disabled when more than one thumbnail selected

2 bugs in Copy and move operations fixed.

Copy, Move, delete buttons removed from toolbar

Thumbnail painting has been optimized. Scrolling is faster. (Especially in directories with large number of images)

Automatic thumbnail update toggle update button added to Toolbar and functional. A "View cache" button also added but not funtional yet.

Cache directory edit control has been moved from toolbar to Preference dlg box and functional. A cache limit control also added but not functional yet.

Cache browse button removed from toolbar.

Preference Dlg changed to Cache Settings. Spinner added for Cache limit. (only UI is functional). the initial directory of the browse dlg is the current cache directory. Removed redundant "Cache Settings" group box. Tool tip changed from "preferences" to "Cache Settings".

"Clear Cache" is functional.

Whenever cache directory is changed, the user is prompted with a dlg box asking whether to clear the existing cache or not.

Long file name bug fixed.

"View New Image" is reanamed to "View File" and swapped positions with "View Selected File"

Tool tip "Toggle Automatic Thumbnail Update" to "Automatic Thumbnail Update"

Sorting and sizing toolbar buttons have white background instead of GREENWASH

Section Shape object

Set it up so that the "Create Shape" button creates an editable spline, instead of the stupid linearShape object. It works much better now, the segment type is curve and the knot type is corner, so if you edit the knot to make it bezier type you can affect the segments with the tangents now. (just like it should have been all along) NOTE: Collapsing the section object itself still results in a linearShape.

Question: What should I do with the pivot point of the shape created by the "Create Shape" button? Currently it inherits the pivot of the section, and I would prefer not mucking too much with it. If anyone feels strongly about it I could perhaps center it to the shape, but I don't know the scope of that yet.

Implemented a way to let the section be confined to the area of the section grid.

The three options in the new "Section Extents" area are:

"Infinite": Same as before, the section cuts the whole scene. [Default]

"Section Boundary": Only objects whose bounding box touches the section grid will be included in the section.

"Off": The section is off. (No sections are calculated)

I put "Infinite" to be the default option to be compatible with old VIZ scenes.

NOTE: Instead of a check-box with "Confine to section size" I decided to put it in radio buttonbs and include the "Off" option, mainly in response to the following question [from CServe]:

Fixed the problem that the geometry used for sectioning was the one from the render settings - not viewport settings. Sectioning objects with adaptive tesselation (or with render/viewport settings) caused a section that was not conforming to what you saw in the viewports.

Found (and fixed) a potential crash bug in the code where the PolyShapes sub object selections weren't updated when the shape was updated. This one could have been fatal, but I haven't seen it crash.

Fixed a problem in the code that would crash the lofter when using Section shapes as components in loft objects.

The inherent slice algorithm creates a zero length line segment at each vertex. For some reason these segments weren't optimized away immediately - they were kept in the section object until it was welded (at CreateShape). I added a simple test to never add those segments in the first place.

Removed redundant "Section Size" border from section size roll-out.

Fixed a evil i/o bug that caused an "Obsolete Data" prompt when the section object was loaded. The implementation of the Save() method in the section object is totally non-standard and doesn't allow for any changes in the i/o structure. I had to tweak this one hard to stay compatible with VIZ and still get in the boundary parameter. The "Obsolete" prompt problem was a collision of chunk ID's with the linearShape - this is a can of worms. Any change to the chunk ID's of LinearShape or ShapeObject might cause the section object to malfunction - I don't think it can be fixed without breaking VIZ scenes, so this is still the case, but at least it should work now. (and the chunkID's are fortunately choosen so that a collision is unlikely)

Set it up so that the section tool creates the spline using the sectionObjects current TM instead of the TM from the last update. The result is that you can update the section, move it and then create the SectionShape, and the shape will be created in the new position.

Recalculated the pivot point for the SectionShapes so that it is now centered to the new shape (and not to the center of the section grid).

Found and fixed a bug where the "Update Section" button was greyed out when the "When Selected" option was selected.

Fixed a bug where Animate wasn't suspended when the Shapes were created. The result was that if you created a shape on frame 100 with Animate on, the shape started at origin on frame 0 and moved over time to the creation position.

ASCII Exporter

Added parsable file identifier and version tokens, so that importers can keep track of the file version.

Added static and animated background color to the output.

Object Snaps

Conceptually, the major change here is tha we've kept the old Absolute/Relative and Snap Flyout buttons as is, and we've removed the new OSnap Button.

Activating the traditional Snap button (for either 2, 2.5, or 3D) activates all chosen snaps. Setting which snaps are active is done through the OSnap floater (Grid Point and Grid Line snapping has already been added as new snap classes).

The OSnap Floater was added to the Tools Menu, and is launchable by a right-click over the Snap Flyout in the bottom toolbar (behavior and access is now similar to Transform Type-In)

The preferences for Angle Snaps are added to the OSnap floater's option tab.

The current Snap/Grid Settings (modal) dialog will become just the Grid Settings dialog (since all snap controls are handled in the floater, and adjusting the grid can not be modeless) and this will be accessed from the View Menu. The implementation of this isn't finished yet, but will be for 0.2.13.

The priority system is retired, since we have n-number of snap possibilities now. (Note - MCAD and ACAD worked on a priority system periodically for 3 years and the conclusion was that it became increasingly counterproductive with the number of snap options. They have since spent their energy improving the search speed for the snaps.)

Result - all snaps are accessible for creation and editing and are be consistent. Notes:

Modified the osnapmanager to support snapping to the root node. This is primarily for grid snapping but might be useful in some other cases. Snaps which respond to the root node get called after the scene traversal. This means that you will only snap to the grid if you haven't snapped to anything else.

Change the statusbar to display the actual XYZ coordinates of the snapped point when appropriate.

Fixed a bug in GetCPDisp. This mainfested as snpping the wrong height when in left , right views.

Added a flag to the snappoint method to indicate snapping off the plane. This is only used in GetCPDisp when you want to snap a height and it makes no sense to snap to the plane you started on.

Modified snaplength to not affect a snapped length.

Modified the osnapmanager to respect the state of the 2D,2.5D, 3D flyoff.

Fixed the problem getting the cycling accelerator to show up in the preference dialog.

fixed subobject rotation and scaling.

Reworked the UI to unify the two snapping systems.

The osnap button on the status panel has been removed.

The SnapType button now defaults to 3D.

When this button is depressed, the snap system is on.

Right clicking this button launches the modeless snap/grid dialog.

This dialog now contains three pages: the object snaps, the snap Options and the Grid settings.

The Snaps page of the dialog is essentially the same. When more snaps are loaded than will fit in the space, the list of snaps becomes scrollable. This work like the command panel. Place the cursor over some empty space and you will get the hand icon. you can then click and drag to scroll.

The Options page has been renamed and has some additions. The Angle snap value and the Percent snap value are in a new group called "Snap Values". The "absolute Snap" checkbox has been grouped with the "Axis COnstraint" checkbox. These two options only affect translation and their group box is labeled accordingly.

BUG: When the snap dialog is up, if you toggle the absolute button on the statuspanel, the checkbox in the dialog isn't updated.

The Home Grid page is entirely new and has absorbed the controls for setting up the grid. I did away with the dynamic update checkbox because the dialog is modeless.

Modified the "Views | Grid and Snap Settings" menu item. This item now launches the grid/snap dialog.

Modified the snap stack mechanism. This is now a configurable accelerator. The default assignment is the right arrow key.

BUG: The keyboard accelerator can't be changed because the string isn't loading correctly.

Modified most of the primitives to participate in the snap preview system. This gruesome chore was necessitated by making the object snaps work in 2D, 25D and 3D. A plugin object can specify whether it will snap in 3D or snap in the plane. The preview needs to correspond with each objects creation strategy. Note that you can have the 3D flyoff set and still be limited to the plane if that's all that the object snaps to.

On a related note. I modified most of the primitives to snap in 3D. This is an experiment. It is #ifdef'd _3D_CREATE in buildver.h. Doing this makes it much faster to create in 3D. You can create most of the 3D primitives off of the construction plane. I did not change any 2D entities other than to provide for the preview snap.

The current list of snaps is as follows:

Grid Points: snaps to the grid just like grid intersections did

Grid Lines: snaps to the grid just like grid lines did

Vertex: Snaps to vertices of triobjects. Must be within snap strength of the vertex.

EndPoint: Snaps to the ends of edges on triobjects or splines. Must hit an edge.

Edge: Contrains to the edge you're hitting.

Midpoint: Snaps to the midpoint of the edge you're hitting.

Face: COnstrains you to the face you're hitting. Backface culled.

Center Face: Snaps to the barycenter of a triagular face.

Perpendicular: Snaps to the perpendicular point on a spline relative to the previous point. Tangent: Snaps to an approximate tangent point on a spline relative to the previous point.

Pivot: Snaps to the pivot of any node.

Bounding Box: Snaps to one of the eight bounding box corners of any node.

There are some new snaps being developed by the NURBS guys. They'll describe them.

Implemented categories for the osnaps. This looks like the other categories in MAX. It appears on the first page of the osnap dialog.

Implemented osnaps overrides for snaps. But it's busted at the momoent and will be fixed for 0.2.13.

Changed the dialog to read "Use Axis Constraints"

Tessellate modifier: Fixed bug 64123, shooting points off to infinity when operating only on selected faces.

MAXScript is integrated in Athena now. Notes:

There are various doc files and samples in the Athena MAXScript library in the beta forum.

Made several internal improvements in support of the MAXScript DLL extension mechanism. The SDK & docs for this should be available on Monday 6/24.

Made improvements to the function 'getPropNames()'.

Now you can call it on MAXWrapper classes (for example, Box, Line, Bend) and it will return the properties common to all instances of that class. In conjunction with this, you can now add an optional keyword, #dynamicOnly, to the getPropNames() call when you apply it to an individual object and it will return the dynamic properties unique to that instance.

For example,

getPropNames $box01 #dynamicOnly

You can also call it on the superclass 'Node' to get the list of properties common to all scene nodes (such as .position, .name, .wireColor, etc.).

Added the beginnings of an OLE Automation client system. With this, you can use MAXScript to create OLE Automation (now called Active-X) objects within MAX and control OLE Automation servers, for example, making an Excel spreadsheet and inserting MAX object info directly into cells there. There is a new function, createOLEObject(), that you use for establishing a connection to OLE Auto Servers. For example,

xl = createOLEObject "Excel.Sheet"

will open a connection to Excel and create a sheet object and put it in the variable xl. The single argument to this function is an OLE progID string.

You can then access properties and call methods on the new OLE object. For example,

will return

"Microsoft Excel"


xl.application.visible = true

will make Excel visible on the desktop. You get properties on OLE objects just as you do in MAXScript. You also refer to OLE methods as properties of an OLE object. For example, a sheet has a method 'cells' which takes a cell coordinate & returns a Cell OLE object.

xlc = xl.cells 1 1

puts the top-left-hand cell into xlc. Set its value like this:

xlc.value = 123.45

Currently, only IDispatch interfaces are supported and not all meaningful data types can be sent back and forth. Look for a more complete implementation and a big example in the next release or so.


Fixed a memory bug, and the eonnect.max sample scene now works fine.

Fixed bug that adds new characters to the end of operand names when saving & loading. Unfortunately, names previously corrupted by this bug can't be fixed, but no further corruption will occur. (An example of this corruption is in "Cookie.max", new with 0.2.11, where the operands are called GeoSphere014 and Circle01e0.)

Now no longer possible to create Connect with any old Geom object (such as a particle system); rather, the object must be convertable to a TriObject.


Fixed bug that occurred when you switch to left projection in sample scene Cookie.max.

Improved behavior around cone points.

Switched Left/Right, Front/Back pairs, since they'd gotten mixed up. Front projection was actually a back projection, etc. (I still have to address Operand Centers, or whatever that's going to be, and check that I'm doing things in the right coord system.)

Measure: Added X,Y,Z worldspace dimensions.

Restore: Fixed Restore so it won't do anything when the number of points in the modified object is different from the number in the referenced original. (thus fixing a crash bug). This is a DOC ISSUE -- we should make sure users know this will do nothing unless the point-counts match.

PathDeform/PatchDeform/SurfDeform: Fixed dialogs so spinners will grey out along with checkboxes when there is no valid path/patch/surface.

PathDeform: Fixed bug that made max crash when the old 1.x PathDeform spacewarp object was selected (after importing to Athena).

MeshSmooth: Allowed negative relax values, as in Relax.

PathBevel: Now respects pivot point of path spline.

Added new Perlin Marble project to the build. This is a Marble Procedural shader based on the Perlin Turbulence algorithm. (See SIGGRAPH '85 Conference Proceedings, "An Image Synthesizer" p287) Perlin Marble calculates a turbulence factor based on scaled noise which is used to perturbe a sine function. It's not working quite right yet (in order to update it, you have to go to another sample slot and then come back), but besides that it's basically functional. Notes:

Size: scales the input point bringing out larger phenomenum

Levels: adjusts the freqency for the turbulence function.

The turbulence factor is then used as an index into a color table made up of the two color swatches and two color contrast modifiers

The resulting image is similar to fluid flow turbulence in nature.

Material Parameters:

Size: scales the point used to calculate the turbulence. Its effect is to make the marble veins grow larger and to match larger pieces of geometry. A greater value, provides larger flows.

Levels: controls the number of iterations in the turbulence calculation. The maximum number of steps in the solid texture is levels + 1. Since we use around 8 steps of color in our lookup table and the function rapidly converges, levels above 10 are not provided. Low levels produce more contour like output.

Color 1: Marble main color

Color 1 Contrast: Positive values make a lighter shade of Color 1, while negative values a darker shade.

Color 2: Marble secondary color

Color 2 Contrast: Positive values make a lighter shade of Color 1, while negative values a darker shade. ### added an API to the VRML 2.0 Exporter and removed

Modified the Polygon counter helper (changed the layout). Need to still cut down more width though.

NURBS: As noted in 212NURBS.DOC, Ulofts are installed. But note that they only work with Point curves in 0.2.12. CV Curve support is going to come in for 0.2.13. (SM will upload info about this to the Nurbs message area on Monday.)

~QE Bugs Fixed

BUG #: 64973


CODE FIX: Linking a follow object to bones with IK controller doesn't crash Max anymore.

BUG #: 32688


CODE FIX: Decreasing Position Key Info Time value doesn't case the object to jump with the Trajectory display on anymore.

BUG #: 32297


CODE FIX: After exiting the Edit Stack dialog, the program now remembers the place in the stack that was current prior to the Edit Stack. Note that if you just rename a modifier as in the example in this report, you'll be returned to your original place in the history after you leave the edit mod stack dialog. However, if you rearrange the stack (collapse, delete mods, etc.) you may not be returned to the same place in the history.

BUG #: 63578


CODE FIX: Instancing and Spawning of Grouped geometry works correctly now. In the example in the report, the spheres mutate into the boxes, both boxes are highlighted during selection, and the group's name is placed in the Object Mutation queue. Notes: If what's picked is an object, the object goes into the Queue. If it's a group, the group goes into the Queue. If there are subtree elements below the picked object of group, they become part of the instanced particle only if USE SUBTREE is checked in Particle Type. (For examples, see SPAWNTST.MAX and GRUPTEST.MAX. The former is a single emitter pushing out a stream of particles. In the scene there are two trees and one group along with the emitter. All are in the Mutation Queue. Advance to frame 30 to experiment. Note that the group is handled as a single object and that toggling Use Subtree affects both the original particles and the first spawn. The latter file is a collection of emitters each instancing a complex group/tree collection of objects. Go to frame 1, select one of the particle systems, and start picking objects to see what happens.)

BUG #:: 65079


CODE FIX: The QueMan Log file 'Frame started at:' time is correct now. Actually it was correct before as well, but the time was stored in UTC instead of LOCAL time. That was so machines in a different time zone that were rendering a specific job would conform to the machines in the job's time zone. Bug given the likelihood of that happening, we blew that "feature" off and have now gone to LOCAL. So, all times will be handled using local time. And (as mentioned above), if any machine pariticipating in a network rendering farm has its time set to another time zone, none of the elapsed/remaining/reporting time will reflect reality. (Reality?)

BUG #: 64221


CODE FIX: We now show the pixel size of the region in Specify Cropping/Placement dlg via the implementation of a button that lets you switch between UVWH and XYWH.

BUG #: 63319


CODE FIX: Max now asks to save when making Medit changes and then selecting New/Reset/Open or select a .max scene from the File list.

BUG #: 65141


CODE FIX: Changing the Map Type of the Instanced Map updates the original map now. The only catch is that anything that is not a Material a Texture Map that references a Material or Texture Map will need to keep an eye out for someone pluging in a new reference (in its SetReference() routine), and then if its UI is being displayed, update the map button. We did this for the Environment map, the Light projector map, and the Displace modifier. (Fog was already set up this way.)

BUG #: 65221


CODE FIX: Importing this DXF file doesn't cause the program to apparently hang anymore. Note that Max wasn't really "hanging" in this case... it was just importing incredibly slowly. The bug was that whenever a line3d came in, it was creating a spurious null spline segment: at the end it deletes these one at a time, and since the way this works is an n-squared algorithm, and there were 6500 spline segments (therefore it got extremely slow). It'll still take awhile to import, but on my dual P6200 it was less than five minutes (and most of that was redraw time).

BUG #: 64677


CODE FIX: Sort by Type in the SbN dialog works as documented now.

BUG #: 64430


CODE FIX: SbN treats groups correctly in Unhide by Name now. (We also fixed the same problem with Unfreeze by Name.)

BUG #: 39661


CODE FIX: Went through all the parameter block #defines and made sure they were synched up. Also added #defines for a few obvious modifiers. In general, if a plug-in doesn't implement GetParamBlock(), the param block can still be found by enumerating the references. All the helpers (which have parameter blocks) provide access to the parameter blocks. Note that the atmospheric gizmos provide access to their parameter blocks in GIZMOIMP.H. Cameras and lights have direct access to their parameters as provided in OBJECT.H.

BUG #: 46797


CODE FIX: The program doesn't crash anymore after you Undo the deletion of an object having an instanced edit mesh and a named SO selection.

BUG #: 57918


CODE FIX: Align to Normal functions correctly on gizmo in local coordinates system now. Although a bug was fixed here, it's important to note that the normal align function (in sub-object mode) rotates and position the object relative to the first normal selected. So if the first normal selected is offset from the gizmo, then that same offset will result in the alignment.

BUG #: 32152


CODE FIX: Fixed the bug where drit was left after repeatedly doing extreme scrolls from left to right in TrackView, but note that autoscroll will not let you scroll beyond the bounds of the scroll bars.

BUG #: 65723


CODE FIX: After Unhide by Name, canceling out of SbN dialog doesn't cause a crash anymore.

BUG #: 47186


CODE FIX: Named SO face selections don't fail with instanced EditMesh's anymore.

BUG #: 65384


CODE FIX: Drag & Drop from Navigator to Type button in MEDIT doesn't show as valid when it should be invalid in this case.

BUG #: 65404


CODE FIX: (Partial Fix and Partial No Fix) Closing the Modal Browser will not cause Max's primary window to regain focus anymore. But since the Modeless Browser and Navigator are independant windows, they're going to remain as they are. (It's certainly not a hassle for this to happen.)

BUG #: 65431


CODE FIX: The Custom Background checkbox turns itself on now when you add a map to the button.

BUG #: 65315


CODE FIX: Undo with the Link End Effector button active doesn't crash Max anymore.

BUG #: 65353


CODE FIX: The MIDI Motion Capture input Device rollup isn't titled Mouse Input anymore.

BUG #: 65386


CODE FIX: Saving and reopening a 1.2 volume select doesn't alter the selection anymore.

BUG #: 65485


CODE FIX: Using Insert Track's Replace Controller function in this case doesn't crash the program anymore. Note that this one was a little tricky... the path object referenced by the path controller that was merged in also needed to be merged in. Track Insert has been fixed so that it will merge in objects indirectly referenced (as in this case). One other side-effect of this is that if the replace option is selected then the undo stack will be flushed and the operation will not be undoable.

BUG #: 65496


CODE FIX: Copying an object with a Noise controller doesn't instance the controller's Noise Strength track anymore.

BUG #: 65514


CODE FIX: Multiple instances of Motion Capture controller dialoges are updated properly now.

BUG #: 65523


CODE FIX: Undo/Redo of Add Note keys is updates immediately now.

BUG #: 65542


CODE FIX: Named Track Views now remember their size and position when they are closed and then reopened.

BUG #: 65815


CODE FIX: "Edt Tag" now reads "Edit Tag"

BUG #: 65863


CODE FIX: Scale is accurately represented now in Transform Type In (and the teapot reverts back to its original orientation in the example).

BUG #: 65954


CODE FIX: The MIDI Viewer Channel window displays the correct channel number now.

BUG #: 58538


CODE FIX: In Mesh Select, faces meeting these conditions are now selectable.

BUG #: 65094


CODE FIX: Mesh::buildFaceNormals doesn't crash the program anymore (because developers can't access it anymore). This was an internal routine that wasn't supposed to be called from outside the mesh class. Its type was changed from "public" to "private" so that it is no longer even possible for a plug-in to call this routine. (Mesh:buildNormals will indeed build the face normals too -- without crashing!)

BUG #: 65947


CODE FIX: Interface::CreatePreview works correctly now.

BUG #: 65908


CODE FIX: Mirroring doesn't apparently flip normals in OpenGL anymore. Actually, the normals were fine, and the problem is that the backface culling got flipped, and it turned into "front face culling". Backface culling is now disabled for mirrored objects: i.e. no matter how the backface cull display property is set for the object, backface culling is turned off (for OGL only!).

BUG #: 65471


CODE FIX: Zoom Extents now works in ortho views after you've zoomed way out (you may still have to hit it a few times). The zooming way out was causing internal variables to overflow, and the then all future calculations using those variables were hosed. It now checks for the overflow, and doesn't let the zoom go beyond that point.

BUG #: 65578


CODE FIX: The Expression Controller's invalid expression dialog isn't named "X" anymore... It now says "Error Parsing Expression".


BUG #: 64442


NAB: Delete in the Edit Menu would not remove the Edge sub-object when an Edit Patch modifier is applied to an entity because there is no edge delete operation in the Edit Patch modifier. Therefore, there's nothing to hook the Delete to -- It defaults to the object level. This is the same issue that was NAB'd last week in another report.

BUG #: 64613


NAB: Animated Volume Select on shapes cause the cursor to flicker because it is, in fact, forcing a recap of the object (because there's an animated shape and the volume select is converting it to a mesh).

BUG #: 65517


NAB: And IMB track is created even if the multiplier is not animated because when no controller is present it implies the multiplier is to be the default, 1.0. If the multiplier is set to any other value, a controller is necessary to hold the value, even if it isn't animated.

BUG #: 65379


NAB: When you select the Bend in step 8 of this report, you're seeing the Disabled icon state that you happened to be in at that time. The report says that the previous setting didn't stick, but it actually did stick. It's just not shown because you're coming from an icon state that's Disabled (not Inactive in Viewport), and it's not going to randomly switch from state to the other, since the Bend's state is on for BOTH Disabled and Inactive in Viewport.

BUG #: 65382


NAB: None of these time values are acceptable precisely because the number is not evenly divisible into the number of ticks per frame. (You must be checking to see that we really read these reports, right?)

BUG #: 65555


NAB: The new IK Rotation Threshold is dependent on Position Threshold because rotation thresholds are not supposed to be used as constraints... that's not what they do. Their purpose is to indicate to the system what the minimum tolerance for error is. (The system may very well do better then this error.)

BUG #: 65823


NAB: Edit Named Selection's "subtract" function works this way because we designed it to work this way. (That's the way it works.) It was never designed to be consistent with combine.

BUG #: 65822


NAB: Edit Named Selection just works this way. There's no reason why it should provide a warning because it just did exactly what you told it to (and if you don't like it you can cancel the dialog or even undo the operation after you've canceled).

BUG #: 65871


NAB: The scale offset is not accurately calculated by Transform Type In because in the world case it must decompose the scale using a more general method (since the local axis may not be aligned with the world axis). Decomposing negative scale often results in a rotation. Note that the scaling generated at frame 100 is absolutely correct -- however in this case it generates negative scale along all three axis and a rotation to achieve the exact same result.

BUG #: 65912


NAB: The mirror tool introduces extra rotational and scale components for exactly the same reasons as #65871.

~QE NoRepros

BUG #: 64268


NO REPRO: When gamma settings are changed while Medit is open, Medit updates as it should on three different systems here. If someone at KTX can repro this, have AP call me and walk me through it (do not recycle it again). Otherwise, this record is closed.

BUG #: 62716


NO REPRO: Three of us have tried this on three different machines. If an object has both disable options selected, it will appear brown not blue (in no case does it appear gray). Regardless, do not recycle this again. If you can reproduce a problem, have AP call me and walk me through it.

BUG #: 65427


NO REPRO: Can't reproduce this problem in which Manual Update doesn't retain its setting.

~QE NoFixes

BUG #: 32144


NO FIX: The Track View's Selected Objects Only filter will deselect tracks without controllers, and there's nothing that we can do about it. There is no reasonable way to remember that a track was selected when the track has no controller. So (as a result) when the filters are changed, any tracks without controllers will become deselected (however the rest of the selection will remain).

BUG #: 60008


NO FIX: TV node selection requires a double-click after renaming the object in the command panel because we've set it up so that when you're finished typing in a name to the name field, keyboard focus is set back to the viewports (so accelerator keys will become active). If we fix this "problem", we'll loose that capability, which would be at least as bad. Life is a bunch of tradeoffs, and this is one of them.

BUG #: 58039


NO FIX: Moving the Distribution Object parameters UI under the Scatter/Scatter Objects rollout to become a separate rollout would require a complete restructure of the parameter blocks and control greyouts for that object, and it's way too late to do something like that.

BUG #: 64599


NO FIX: What you might be seeing in this case is that when you try to drag a material from a slot that is already magnified, it won't let you drop it on another magnify window, since each slot can only have one magnify window. That's just the way it is. Please do not recycle this issue again.

BUG #: 34524


NO FIX: This is as good as it's going to get as far as scaling a mirrored object about an arbitrary axis (note the X axis we're scaling about in this example is rotated from any of the object's local axes).

BUG #: 65385


NO FIX: When you Drag & Drop NONE to a sample slot, the cursor shows as valid when it should be invalid, but fixing this means adding and changing a significant number of DnDManager calls that will require touching every DnDManager instance, of which there are dozens. Since it's a trivial problem, we're not going to touch it.

BUG #: 65387


NO FIX: There is no way for us to put a radio button in the Volume Select modifier to "convert" the old 1.x volume select modifier method to 2.0 functionality. We can't serve two masters here. Folks will just need to delete and apply new VS modifiers if that's what they want.

BUG #: 65383


NO FIX: Yes, the animation length of a Max scene cannot exceed 447392 (ie, approx 4 hours), and it never will.

BUG #: 65914


NO FIX: The Reset Xform Utility will flip normals on mirrored objects and simply scaling faces negatively (which is the same as mirror) will do the same thing. The renderer and viewport displays can only compensate for negative scale (which is stored in the transform matrix).

Update notes (for version 0.2.11, 6/15/97):


Linkages are starting to work. (This stuff is really tough.) There are still plenty of instabilities when velocities get too large, but we're working on that. Notes (take a big breath...):

The second-order linkage stretch correction algorithm parses the linkage using its knowledge of where the links are and where the links should be and recursively corrects out misalignment left over from the corrective forces. But there are still problems when the motion is too great, and the linkages will fly apart. Linkages tend to be stable for a long period of time and then explode. The algorithm is sensitive to the number of linkage points (even a simple pin can result in several Dynamics linkage and applies full 3D corrective translation and rotation, so it can't cause numeric problems with the force solutions).

Our current problem is that while the first order correction, which is applied at the points fixed in the math to minimize relative accelerations, was not perfect, it induced no additional error (while allowing the persistance of some instability). The second order term, on the other hand, applies a numerically perfect correction for the entire object state, and the linkages stay nice and stable. However, the accumulated error (that left over from the first order correction) now manifests as an increase in system energy from frame to frame, thus the links started to accelerate to the point where we get floating point overflow after a large number of frames. We've got a few directions that we can go in at this point. Primarily, this involves deriving and implementing a separate solution to correct the numerical error subsequent to the first and second order force loop corrections based on an entirely different math. That is, while the current solutions are closed form force and momenta equations, we can superimpose an energy method correction subsequent to the numerical corrections that removes the effects of the numerical error. This is also closed form. It would work like this:

Force/Momenta equations solve for positions and velocities

Numerical error leads to slight position and velocity errors

Numerical corrections fix position errors

The addition of numerical corrections is equivalent to adding energy to the system.

A separate energy solution compares the precorrected state and post corrected state and corrects velocities and momenta to match corrected position.

Steps (3) through (5), together, constitute and physically correct and complete solution. They also represent a slower solution, because energy methods involve lots of dimensionless, brute force math that use lots of squares and exponents.

The reason this is possible is because force/momenta and energy methods are completely disjoint, unrelated, and divorced solutions, each having their own strengths and weaknesses. Solving for linkage forces quickly is a strength of force/momenta systems because it relies on relatively fast tensor math, but it accumulates error. Preserving system states over increments (given firm position data) is a strength of energy methods, because we need to work only with velocity and rate data. (Note that the schism between energy method kinematicians and force/momenta advocates is just as bitter - and half a millenia older - than that between PC and MAC users.....) Once you get into computers and out of the perfect world, you CAN use each to correct the weaknesses of the other, but no published author had come out and said that. A cadre of rather outspoken Scots are the biggest work-energy advocates, and their condemnation of the force-momenta school currently in vogue is quite spectacular. Likewise, the careful but cutting criticism of energy methods woven into the papers of the Americans makes for very amusing reading. Get the picture?

The other alternative is to always add some damping to the system. This is the temporary solution that's in 0.2.12. The sample files that illustrate this are DYNLINK1, DYNLINK2, DYNLINK3, and DYNCHIME. The damping is temporary because it's not viscous and it's not at the joints yet, but implemented only as sort of a thick ether everything has to move through. Eventually we'll be using damping values from the IK joint params.

Moved the Update Display w/Solve checkbox up to where the SOLVE button is, and removed the Frame Numbers from the status line (and went back to percents) because of the flashing problem. If you want to see frame numbers while you solve, turn on the display update.

~YG new features and general issues resolved

Re-implemented the low-level MIDI support code so that the MIDI device could be shared among different parts of the program -- in particular to support the 'Media Control Station 2' for time slider control simultaneously with the MIDI device for motion capture. A MIDI manager system had to be implemented to enable this. Technically, if another plug-in had a use for MIDI they could use this new system without interfering with motion capture or time slider control. (Note that this didn't cause any actual change to the UI or functionality but it's important to mention since it represents a fairly significant internal change.)

Implemented support for MIDI devices to control the time slider and time controls. Added a couple of items to the animation page in the preference dialog. There is now a section called 'MIDI Time Slider Control' (which is off by default). A setup button brings up a dialog which lets folks set options. Here's a description of those options:

Presets: Currently there is only one preset (the JL Cooper 'Media Control Station 2'). This is just a convenience for folks, since Custom can support any device (I'm not sure if we want to try to get other presets for other devices, but without all of the devices in hand, there's not much we can do). In any case, selecting a preset will set all the spinners directly below to preset values for that device and disable the spinners. If you choose Custom, then the spinners will be enabled and you can enter the note numbers into the spinners.

Sensitivity - This applies to the jog wheel. A lower value will give more precise positioning of the frame slider and a higher value will cause the frame slider to move faster. This parameter ranges from 0-100 with 10 being the default. This parameter is actually the number of ticks that the frame slider is moved in response to 1 unit of movement from the jog wheel. If you set your time display to show ticks and set the sensitivity to 1 you'll see that you can move 1 tick at a time with the jog wheel.

Any changes made in this dialog, or the on/off state in the preferences dialog are saved in the INI file.

The MCS2 is a great device for controlling time in Max with. It's fairly compact and extremely robust (the jog/shuttle wheel is very nicely built). The list price is $299, and I've set up a deal for all Athena beta testers to get 1/3 off if you call them up and mention that you know Gary Yost and you're a 3D Studio MAX beta tester. Here's their info:

JLCooper Electronics

142 Arena St.

El Segundo, CA 90245

voice 310/322/9990

fax 310/335/0110

Ask for Chuck Thompson (extension 811)

Implemented the Start/Stop setup for the motion capture system (this had a dialog but had never been implemented).

The dialog now looks a lot like the MIDI Time Slider Control setup dialog. You can pick the Media Control Station preset or setup the controls yourself. Basically, the motion capture system needs to know the record, stop, and play buttons.

Once configured, here's how it works:

If you press the Play button, the animation plays as normal.

If you press and release both the Record and Play buttons, then the motion capture system will start recording. Note that you can press the play button before or after the record button and release the play button before or after the record button. All that matters is that when releasing one of these two buttons, the other button is pressed. The recording starts when the button is released.

If you just press the Record button, you will be put in test mode.

Pressing the Stop button stops recording, exists test mode or stops playing the animation.

These settings are saved in the MAX .ini.

Added Undo/Redo to the TrackView keyboard accelerator list, and they default to the same Ctrl-Z/Ctrl-A keys as in the Main UI. (To test this, be sure to reset the TrackView keyboard macro category if you have your own keyboard macro file.) In addition to adding this important feature, it fixes some previous problems in which Ctrl-Z worked inconsistently before in TrackView.

Significantly enhanced the way materials are handled when objects are attached to each other. The following message (from the Kinetix forum last winter) is what initially prompted us to look at this:

"Here's something that I tell to all of my animators: "Try to avoid attaching objects to create one mesh. Attach them all to a dummy object instead (this is one I just found out about). The reason is that if you attach multiple objects, Max creates a multi/sub object material for you, which in most cases is a nightmare to move around in. You can have hundreds of sub-materials (no joke) and if you change one of those sub-materials, then they don't all change, only ONE of them changes. This is stupid and bad and evil. For example, if you had 50 rivets all with the same material, and then you attached them to a pipe, Max will now create a multi-sub object material for you which will probably have 51 materials in it--one for the pipe, and 50 for the rivets. So if you want to change the rivet material, you have to change all 50. This is an awful thing, and it sucks a lot, and it makes me angry. Instead of making me angry, link the rivets to the pipe, or create a dummy object and link them all to the dummy. (Blizzard.)"

Max simply doesn't work the way he describes. When attaching objects with the same material a multi material is not created. He may have been referring to attaching two objects, each of which have multi materials and although the multis are different they may contain common materials. In this case a new multi is created which contains all of the materials in the two multis. So if there was a material that appeared in both of the original multis, then that material will appear twice in the new multi. However, if the original material was instanced between the two multis then it will also be instanced within the new multi. So even if he did manage to come up with his 51 length multi in his rivets example, all 51 materials would be instances so if you changed one, you'd change them all. In any case the above is still not desirable. There are a few problems that still showed up with materials when attaching.

If one of the objects being attached had mat IDs greater then the number of mats in its multi, then the face mat assignments would've shifted after the attach. This problem was best illustrated by the box object which gets 6 different mat IDs by default. Attaching boxes would work fine as long as the boxes had a multi material with 6 or more mats. This problem has been made worse now that we've modified other primitives so that they have more then one mat ID by default.

There's the problem described above... when combining to different multis that have common materials in there slots, the resulting multi will have duplicates (although at least those duplicates will be instances).

This isn't completely related to attaching, but it is fairly easy to end up with slots in your multi that are unused. For example, say you have 20 mats in your multi and you're using IDs 1-20 in you object. You later decide you don't need mat #14 anymore. Mat #14 has to be left in your multi even though no faces in the object use ID 14.

So, we've handled as many of these cases as we can by adding a dialog that comes up when you do an attach or a multi-attach from the EditableMesh object to address the above three problems. The dialog has three radio buttons and a check box. Here's what they do:

"Match Material IDs to Material": When this option is checked, the material IDs of both objects are modified so that they are no greater then the number of mats in the multi. So, for example, if you had a box with a single material assigned to it, the IDs would be changed so that instead of ranging from 1-6 they would all be 1. If you had a multi with 2 mats, the IDs would be changed so that they ranged from 1-2. After the attach the box will appear the same as before the attach.

"Match Material to Material IDs": When this option is checked, the material is modified so that the number of materials in the multi is equal to the largest mat ID assigned to a face in the object. For example, if you had a box with a single material assigned to it, then that single material would be replaced by a multi with 6 slots (all of which contain that original material). If you were attaching two boxes together, then the end result would be a 12 long multi where the first 6 mats were the mats from the first box and the next 6 mats were the mat from the second box. Also, the objects will look the same after the attach as they did before. The reason a user would choose this option is because it preserves the mat IDs. If you knew that after the attach you wanted to assign different mats to each side of the box then you would use this option.

"Do Not Modify Mat IDs or Material": This option causes the attach to work like it has in the past. If the mat IDs in the object are greater then the number of mats in the multi, then the object may look different after the attach.

"Condense Material and IDs": This solves the third problem. It removes and duplicate materials, or materials that aren't used from the multi that results from the attach. This only makes sense when used with the 'Match Material IDs to Material" option (it's disabled in other cases) because if you chose the Match Material to IDs option, then duplicate materials are created on purpose to match the Mat IDs (but would be removed by the 'condense' option if it was enabled).

Note that this dialog isn't available when doing an attach from an edit mesh modifier. It would take a prohibitive amount of work to make all of this possible from within an edit mesh modifier.

Implemented a suggestion from JB for enhancing the Tape object with angle readouts. It now shows the angle that it makes with the world space axes and the world space planes. (Note that it's helpful to "pin" the head of the tape object to the modify panel before manipulating it and it's target object.)

Implemented a new Protractor helper object. This helper can reference two other objects in the scene. It then displays the angle between the two lines from it to the two reference objects. As noted above, it's very helpful to pin the Protractor to the modify panel while using it. Note:

There's an annoying "feature" with the node assignment from within the Create panel. After you create a protractor and attempt to pick the first reference object, Max jumps out of create mode and you have to go to the modify panel to choose the second reference object. This is certainly annoying, and we're working on a fix for it. If you create a protractor and then go immediately to the modify panel to do the reference node assignments, everything works fine. Reassignment of reference nodes, deleting them, etc, also works fine.

Modified the Ascii output utility so that it will dump ascii files of shape objects as well as meshes. Additional features:

You can select shape objects via mouse or By Name.

There is a new checkbox, "Object Space". This is unchecked by default, which gives the object's coordinates in world space, as it always has. When this is checked, the coordinates output are the object space coordinates, with no transforms applied.

Another new checkbox, "Shapes As Beziers" applies only to shape objects. Normally, shapes are output in polyline format, with a vertex for each interpolated point on the shape. If Shapes As Beziers is checked, and the shape can convert to a bezier form, the output in the file is given as knot coordinates and vectors for each knot. It has no effect if the object is a mesh.

This spring, while working on an IMAX film project, the Xaos folks had requested better volume light sampling, which required a significant enhancement to the Volume Light plugin. This is in the form of a new option in the volume light's parameters under 'Filter Shadows' called 'Use Light Smp Range'. When this option is selected, a different filtering method is used (which includes the ability to blur the shadows... the critical element that was missing before). The 'Smp Range' parameter from the light parameters determines the amount of blurring. This can be quite slow when the Smp Range parameter is set to larger values, but at smaller values (like the default of 4) it works extremely well and is very effective at anti-aliasing the volume shadow. In fact, when using this option you can usually get away with a smaller 'Sample Volume %' (which makes overall rendering times faster).

Sample file: VOLFILT.MAX. Render at frame 0 (where the Smp Range is 4), clone the VFB and then render at frame 100 (where the Smp Range is 18). Notice how the shadow at frame 100 is blurred both on the surface and in the volume. (It takes longer, but it is much more accurate and has absolutely no aliasing.)

The default for newly-created volume lights has been changed to this new option since it works so well and it's always bothered us that the volume lights default to an option which almost always results in aliasing. This is certainly a better default even though it is a little slower, but if folks object, let me know and we could change it back.

Implemented a method for clicking on the green triangle in the TrackView associated with an animated vertex of an EditableMesh object and making that vertex become selected. Notes:

Ctrl and Alt keys will add or remove from the selection set.

If the object is not selected in the viewport, you won't see any change although it will still select the vertex.

If the NURBS team (or anyone else) wants to support this, they just need to implement the new Animatable method: SelectSubAnim().

Set it up so that you can double click to select an item in the Copy Named Selection Set dialog of the EditableMesh object and exit the dialog at the same time. Also did the same for the MeshSelect modifier.

RF suggested that we make the Display Subtree option with the SelectByName dialog default to on. Instead of that, we've made all of the checkboxes in that dialog sticky within each session.

Implemented a suggestion to make a separate unique cursor for Add Keys mode in TrackView.

JC had asked why files get left in the network\temp\ directory, even when there isn't a crash. The main reason files are left in the temp directory is that servers don't clean it up until they receive an "End of Job" command from the manager. This situation can happen if, for instance, a server stops working with a project (be it a crash, an error, etc.) and the job is thus terminated. In that case, that particular server never received the command to clean up its mess. We can't simply delete everything in there blindly (because the manager shares this with the server). What we did, however was to add code to provide an optional method of handling this for folks who want more control over it. Notes:

MAXSERVERTEMP: There is now a new environment variable that, if present, will be used instead. In other words, if it doesn't find MAXSERVERTEMP in the environment, everything works just as before (the old code runs). If it does find it, it checks for a valid path (it has to be a full path... not just a drive) and then adds "\maxtemp" to it, and it'll use that instead of the default \Network\Temp path. At Max boot time, and every time a new job is submitted, this directory is wiped clean. This also answers GP's wish to be able to point this path anywhere so folks can use different drives for large project files.

So, as mentioned above, it will add "maxtemp" to whatever path you set. For instance, if you set MAXSERVERTEMP to "c:\temp" (this is the what we suggest), it'll add "\maxtemp" to it (and the new temporary path for the server to receive jobs and maps would be: "c:\temp\maxtemp").

Creating Environment variables in NT. You can't do this via the old command-line console method (since when doing that, the variables are window-specific). You need to go to the Control Panel/System applet (Environment page) and add the variable there. Also note that in order to run server as a service, this variable must be set at system level, and not at user level.

Safety measure: It checks the path to make sure you haven't put anything "important" in that path. At Max boot time, if it sees files that shouldn't be there to begin with (*.exe, *.dll, *.sys, etc), it will completely abort server.exe (with an appropriate proper error message).

Implemented a suggestion from MR to make PArray's "Particle Rotation", "Spin Time" and "Spin Variation" parameters animatable (so you can accelerate or decelerate spin or change the variation of these settings over time). We've basically completely revamped the way particle spin works. There's a sample file called SPINTEST.MAX that illustrates this.

~YG Bugs Fixed

Fixed a bug that LM found in which, if you created a Multi material and dragged from one submaterial to another (selecting instance), you'd erroneously get an "Illegal Operation, Can't make a circular reference" error message.

Fixed a bug that JC found in which the program would crash if you applied a Lattice modifier to a loft object and then added an EditSpline to an instanced component of the loft and modified the spline. There's still a display/redraw bug here, but it's minor compared to the crash (and it's on our list ot fix).

Fixed a bug in which the program would crash if you made two objects and clicked on the Scatter button, then turned on the Pick Distrib Object button and while that mode was on, clicked on the Conform button.

Fixed a bug that JJH found in the Multi Material in which, if you set the number of submaterials to 0, the program would crash.

Fixed an Object Motion Blur rendering anomoly that RF found which had been there since r1 beta days. (ombbug2.max)

Fixed a problem that RF found in which, if you had an object (a cylinder for example) with a multi sub-object material applied (4 IDs for example) and you swapped two of the materials, the sample sphere would swap but the object's materials in the shaded view would not (until you clicked in any viewport, which forced the change).

Fixed some rectangular target spot problems that LM found that had to do with spots that had both near and far attenuation set to 0.

Fixed a pixel merging problem that RL found (rl_aa.max) that illustrated a logical hole in the new optimized pixel merge code. (I had mentioned back in mid-April that the new pixel merge code was going to cause some antialiasing problems, and here's one of the lingering ones.) The merging angle threshold has been decreased from 24 to 16 degrees, and a hueristic test has been installed to detect this type of case.

Fixed a bug that LM found in which, if you adjusted the length of a Tape object at a non-zero frame with Animate on, the spinner didn't show as animated, a controller wasn't shown in TV (but the length value did change over time).

Implemented some float-only versions of sin, cos, sqrt. Using these in the HEIDI driver gives another 3% speedup!

Fixed a bug that GP found in which the change that was made for the network rendering service names wasn't enough. There are actually two names for a service (one for NT and the other for the user (one short and the other more descriptive)). One had been changed but the other had not been.

Fixed a bug that LM found in which, if you applied a UVW MApping or a Displace modifier to an object at a non-zero frame with Animate on, keys were created for Length, Width, and Height at frame 0 with a value of 1.

Fixed a problem with the command panel variable name of the Optimize modifier's Bias parameter in which the Bias for L1 was labeled as the Bias for L2 in TrackView.

Fixed a bug that MF found in which, if you chose to delete one TrackView in a certain case, it would delete all of your saved named TrackView.s

Fixed a bug that PV2 found in the new particle systems in which we weren't using the most efficient GetFaceAread code possible (the longhand dotproduct trig method was still in a lot of places).

Set it up so that hitting ESC or right-clicking while in the Pick Distribution mode for Scatter and Conform knocks you out of the mode.

Fixed a bug that LM found in which the program would crash if you loaded a custom sample slot object in Medit, brought up the browser and clicked on the Active Slot button.

Fixed a number of bugs that LM found in the Bitmap Cropping/Placement dialog: The image would jump slightly when you toggled the Apply checkbox on and off while in Crop mode. Brightness would jump (due to a gamma correction problem). UV weren't limited to a [0,1] interval. It would crash in a certain case. And you could drag the left side of the crop box past the right, and the top past the bottom.

Fixed a bug that LM found in the Dents map in which the program would hang if you adjusted the Itterations parameter with the Animate button on on a non-zero frame.

Fixed a problem that LM found in MEdit in which, if you clicked on the Type button, browsed from Mtl Editor, and selected one of the materials, clicked OK, and selected Instance. Now, when you do that, you'll get the message "Mtl/Map is already in slot" when you try to instance a medit mtl into another slot.

Fixed a bug that LM found in the checker map in which the undo stack would get out of synch when undoing UVW param changes made with the UVW ArcRotate floater.

Fixed a bug that RF found in which the program would crash in certain cases when selected objects in the Edit Named Selection dialog.

Fixed a memory leak problem with transforming the new IK bones that LM found.

Fixed a bug that PW found in the Volume BoxGizmo's height field in which it wasn't working when the height was interactively dragged into negative ranges.

Fixed a problem that RL found in which, if you scaled keys in the fcurve editor, the bezier handles wouldn't be proportionally rotated and the curve would change shape.

Changed the color of the Key Mode Toggle button from green to blue.

Fixed a bug that RL found in which the SDeflector / Display Icon / Radius was actually equal to the diameter, not the radius. It's now labeled Diameter.

Fixed a bug that LM found in the Conform object in which the Wrap_to Object field name wouldn't get cleared after an Undo.

Fixed a problem that LM found in which the display icons for the deflectors, pbomb and the conform spacewarp were animatable.

Fixed some TrackView naming inconsistencies with various objects. More to come yet, but we're working on it.

Fixed a bug that DH found in the volume light code in which you'd get bands emenating from the light at high attenuation multiplier settings.

Fixed a problem that MGB found in which the Apply Blur button in the Reflect/Refract map wasn't forcing an update when you toggled it on or off. (Note that he also noticed that if you turn the Blur amount to 0, it's not the same as turning blur completely off. That's because of the inherent sampling in the map. If you don't want any Blur, turn Apply off.)

Fixed a bug that RF found in which the 6th sub-material showing in a Multi was not accessible.

Fixed a bug that RF found in which the program would crash when replacing certain objects that were created in 1.2 and saying Yes to the "Do you want to replace materials along with objects?" prompt.

Fixed a bug that JR reported in which cameras didn't show in the SelectbyName dialog if Geometry was hidden by category.

Fixed a long-standing bug in the tape measure display in which the little tape measure "glyph" was being drawn wrong, and two line segments were missing. (It's doubtful that anyone ever noticed it.)

Fixed a bug that RF found in which, if you detached a set of faces, the undo stack would read "Detach Vertices" instead.

Fixed a bug that MGB found in which the scene dirty flag wasn't being set after changing params in the Dynamics simulation.

Fixed a problem that PW found with bones in which the bone nodes were scaling with the rest of the hierarchy (they're not non-scaling objects).


RL had asked for the Bounce value in both Dynamics/Edit Object and in Material/Dynamics Properties to note be capped at 1.0 (as compared to the Sdeflect and Udeflect bounce, which can go over 10000). This has to be that way because the math is exponentially more complex in the dynamics simulation than when applied to the deflectors, and there's no allowing for it in the solutions. If the bounce goes greater than one (unity), the math becomes imaginary. While interesting in a philosophical sense, this has no practical use in the solutions.

DC had noted that the Gengon's Smooth function doesn't work unless Fillet is greater than 0. The ends, sides, and fillets are smoothed separately, and to avoid rendering artifacts, we don't smooth the flat fillets with the sides. Once the fillet segments increase, the entire circumferance is smoothed.

RF had noted that if you did an Align, then an Apply within the Align dialog, and then another Align and then canceled out of the Align dialog, it canceled both of the aligns. Canceling the dialog is supposed to cancel everything done in that session of the dialog. We explicitly decided to do it this way when we originally implemented the align system (and in fact had to do quite a bit of extra work to make it happen).

PW asked for an API call so that when you reference an object, you get a reference message when that reference object moves/rotates/scales. This is a NAB because you do currently get a REFMSG_CHANGE message when any aspect of an object changes.

RF had noted that if you send out a network job to your workstations and then view an avi file, the program will crash. While this is a bug, it's not a YG bug... it's a problem with the MFC core within Soundlab and it's being sent back to the KTX programmer responsible. (Note that it'll also crash if you bring up any of the bitmap config dialogs while net rendering to the same workstation.) The workaround for this is to delete the SLABPLUG.DLC file in your /stdplugs subdirectory.

MR had asked a question about selecting by material from Medit. "From the material editor, when you "select by material", would it be possible to have the list also show hidden objects." We can't allow the selection of hidden objects due to architectural reasons. Workaround: go into the browser and browse/scene, and you can see what objects are using the material (even hidden ones).

~Non YG Bugs and Issues Resolved

Added the Section shape object from 3D Studio VIZ to the build. This operates on the current selection when you make the object, and lets you create cross-sections that beceome shapes. See the spec for more info.

Added the Assign Vertex Colors utility to the build. This is really two plugins in one... A utility plug-in (Assign Vertex Colors) and a Modifier (Vertex Colors). The utility uses the material, and optionally the lights in the scene, and evaluates the color at each vertex. Then it applies the modifier that keeps the vertex colors in the pipeline. The modifier is private and can only be applied by the utility, and it doesn't have any controllable parameters.

The Utility have the following options:

Light Model: "Ambient", "Diffuse" and "Scene Lights". These options controls how the light should affect the material evaluation.

Ambient: Only white Ambient light is used

Diffuse: A white diffuse light directly above the point

Scene Lights: Use the existing lights in the scene.

Apply to Selected: Calculates colors and applies the modifier to all the selected objects.

Update All: Recalculates the VC information for all objects that have the modifier applied. If a modifier is referenced by multiple nodes (can happen if you cloned a node with an applied modifier) the existing modifier will be deleted and new modifiers will be applied to these nodes. The VC information can be dependent on many factors, for example, light parameters, materials and the objects position in the scene.

More info about this in the spec.

Added the Ascii Exporter plug-in to the build. Documentation is in the spec.

Added the Preserve modifier to the build. The basic concept behind Preserve is that often, using deformations or pulling points on a mesh cause it to stretch in ways not normally encountered in real-world materials. Preserve is an approximate, oblique way to try to generate more matter-like behavior from meshes. It does this by "Preserving" the edge lengths (of all the edges), the face angles (of all the corners of all the faces), and the volume of the mesh. This modifier requires a second node containing an unmodified copy of the mesh, to give the "original" values.

Here's an example of how to see what this does with a static scene:

Create a standard GeoSphere.

Make a copy somewhere nearby (with shift-move).

Apply Edit Mesh to the copy.

Select a bunch of verts near the top of the sphere.

Move them up in Z, about one radius' distance.

Apply Preserve (while still in vert sub-object mode).

Click on "Pick Original", then pick the unmodified sphere.

The selected verts move back towards the sphere.

Click on "Invert Selection", near the bottom of the panel.

The selected verts stay in their modified location, and all the other verts are dragged towards them.

Hopefully, the result looks something like stretchy cloth.

Here's an example of how to see what this does with an animation:

Delete the Preserve from the modified GeoSphere.

Go to the create panel, at frame 100, and make the modified GeoSphere into a morph.

Setting the Pick Targets dialog to "Instance", pick the original GeoSphere as a morph target at frame 0.

Apply Preserve to the morph, using the original geosphere as the original again.

Set the selection level to Vertex, and check Invert Selection.

Turn down the number of iterations to 15 or so.

Play the animation.

The stretchy-fabric geosphere is picked up by the selected points.


Original/Pick Original: Method for selecting "original" node, which should have the same topology as the node being Preserved.

Iterations: This is an iterative algorithm; more iterations produces a more accurate result, at the cost of speed. (I haven't even begun to optimize this yet, so I should be able to speed it up.)

Preservation weights: The relative importance of different things you can try to preserve. I imagine these will usually be left at the defaults. Advanced users may want to change the balance. Higher face-angle values produce "stiffer" meshes, for instance.

Use Selection Level radio: With "Default" clicked, Preserve will act on the sub-object selection level it's given (as is normal for a modifier). The user can select one of Object, Vertex, Edge, or Face to override this and use the specified level.

Invert Selection: Operates on non-selected components instead of selected ones. (When acting on the whole object, however, this checkbox has no effect.)

This last box, with the Selection stuff, was added at the last minute because the situation with the edit mesh modifier immediately before the Preserve comes up quite often. The Invert Selection is especially useful at such times. None of this actually changes the selection info of the model, it just changes which points Restore moves.

Known problems:

Volume is not producing any useful contribution that I can see.

Sometimes there are sudden, dramatic distortions when going from one iteration to the next on a sub-object selection preserve. This is a bug, and I'm working on it.

Cool application: Tighten a region of a mesh by applying a Transform modifier to the original and scaling it down. Then apply Preserve to the region you want to tighten. All the edges try to shrink down as much as they can, which tends to minimize surface area ("pull the skin tight") in the selected area.

ShapeMerge: Cookie Cutter and Face selection are working. Here's a mini-tutorial:

Create a large mesh, such as a geosphere or box, in the top view

Create a shape within the boundaries of the mesh in the top view. The shape should be a closed loop such as a rectangle, circle, or ellipse.

Make the mesh into a ShapeMerge, click Pick Shape, and click on the shape.

Click on "Cookie Cutter".

The surrounded faces are removed from the mesh.

Click on "Merge" again.

Select "Face" under "Output Mesh Selection"

(No visual cue is given at this point.)

Add a Mesh Select modifier, and go to the face sub-object level.

The faces "inside" the shape should be selected.

Delete the Mesh Select modifier.

Add a Face Extrude modifier, and adjust the amount to something interesting.

The faces "inside" the shape are extruded, producing an embossed shape.

There's a sample file COOKIE.MAX included that shows you the result of having done this and animated the position of the original shape.

I'm still debugging more complex examples, such as letters. Some multi-spline shapes work -- I had a rectangle-within-a-rectangle going fine earlier, but an oval-within-an-oval had trouble.

The Asset Manager now supports .max file Drag and Drop. It's still fairly unstable, but if you go to Prefs/Files and turn on the Save Viewport Thumbnail Image option, your .max files will be saved with thumbnail postage stamps, and when you browse them with the browser you'll be able to drag those postage stamps into the viewports to merge those scenes into the current scene.

~QE Bugs Fixed

BUG #: 64846


CODE FIX: The PBomb's fields now grey out correctly.

BUG #: 64549


CODE FIX: The Particle Spawn Delete button is correctly disabled in this case now.

BUG #: 64281


CODE FIX: In the new particle systems, the various instances of the % character slightly truncating spinners are fixed now.

BUG #: 64733


CODE FIX: Grouping link objects generates the correct information in the properties dialog now. Now, if a group is selected, the parent will be the parent of the group. (Note that there is an error in the way this report is written up. The parent of Group02 should be the top sphere, not Group01.) Also fixed the "In Group" display. If a (closed) group is selected, "In Group" will be the group which the selected group is a member of, instead of the group itself.

BUG #: 64834


CODE FIX: When you drag a Projector Map to the Type button as an INSTANCE, it should NOT put up the option to keep the old map as a submap, and it's been fixed so that it doesn't.

BUG #: 64627


CODE FIX: When you D&D from the Browser (Scene & Selected) to a sample slot and the material is already in a sample slot, we now put up an alert saying "Mtl/Map is already in another material editor slot" and cancel the operation. (Note that this report mentioned something about the Type button in the summary, but not in the steps.)

BUG #: 64750


CODE FIX: Fractal enabled states are correct with multiple copies of the cellular map now.

BUG #: 64835


CODE FIX: You can D&D to projector maps in the Create panel after changing viewports now.

BUG #: 64754


CODE FIX: D&D of None submap button to the Type button doesn't bring up the Instance/Copy dialog anymore.

BUG #: 64748


CODE FIX: Target objects don't receive a valid cursor for drag and drop in this case anymore.

BUG #: 64594


CODE FIX: The "Rename this material" text box is not disabled in this case anymore.

BUG #: 64603


CODE FIX: Both the Modal and Modeless browsers update if you open a different mat lib from what the other is showing. When the Modeless browser was up, and you brought up the Modal browser, the Modeless browser was still active. That was incorrect, and the Modeless browswer window is now disabled while the Modal browser is up.

BUG #: 64599


CODE FIX: You can reliably D&D from the sample slot to magnify windows in this case now.

BUG #: 64607


CODE FIX: Undoing an exploded nested group doesn't caus a crash anymore.

BUG #: 64836


CODE FIX: The Speckle Type button isn't blank anymore.

BUG #: 64592


CODE FIX: Selecting Current under Renderer in the Material Editor Options dialog doesn't cause the Slots radio button to disappear anymore.

BUG #: 64632


CODE FIX: These various D&D from browser to browser issues have all been addressed by the fact that you can no longer D&D from browser to browser AT ALL. (the cursor so indicates)

BUG #: 64665


CODE FIX: The Select By Name dialog is modal and it shouldn't have had a minimize option at all (it's been removed).

BUG #: 64643


CODE FIX: The Clone dialog in the Edit Menu now retains the info from previous clones.

BUG #: 64653


CODE FIX: Naming a clone with a very long text string doesn't crash the program anymore.

BUG #: 64677


CODE FIX: Sort by Type now sorts by category, using the same order as the checkboxes in the List display.

BUG #: 64470


CODE FIX: Select Invert now conforms to the 'Combos' filter.

BUG #: 64445


CODE FIX: Select All now works with the Combo filters.

BUG #: 64452


CODE FIX: Select None now works with the Combo filters.

BUG #: 64499


CODE FIX: Select by Color now respects the selection filters..

BUG #: 64503


CODE FIX: Select by Color now conforms to the 'Combos' filter.

BUG #: 64734


CODE FIX: You can now get to the Properties information of groups through the Edit Menu.

BUG #: 64471


CODE FIX: Using Ctrl-C to stop a server that is not 'pinging' the manager doesn't cause a crash anymore. Note that this is the bug that has been hanging around in different forms for quite a while (it caused the manager and server to crash when exiting through Ctrl-C). Using the sequence in this report, it was reproducible enough in the debug build to be able to catch it.

BUG #: 63393


CODE FIX: Stopping a server or manager service (by force from the Services dialog) doesn't generate an error anymore.

BUG #: 64823


CODE FIX: The Vol Select Gizmo transform controller can be reassigned, copied, and pasted into now.

BUG #: 64537


CODE FIX: When 'Combine' is used in the Edit Named Selection Set dialog, the sub-dialog that appears to name the new selection set doesn't have spurious text in the edit field anymore.

BUG #: 64535


CODE FIX: When 'Intersection' is used in the Edit Named Selection Set dialog, the sub-dialog that appears to name the new selection set doesn't have spurious text in the edit field anymore.

BUG #: 64691


CODE FIX: The bell curve in the Key Info Dialog for Morph keys in the Track View is now updated dynamically when adjusting Tension, Continuity and Bias.

BUG #: 64758


CODE FIX: Reset now returns the Bone creation parameters to their default settings.

BUG #: 64574


CODE FIX: The particle mesh display is now selectable in the viewports. This was much more complex than it seemed, and created an opportunity to rewrite how the mesh is placed in the views, caching geometry along the way. This means that explosion fragments and all particles are now cached (which of course also means that there were massive changes to the particle system display code).

BUG #: 64371


CODE FIX: Particles are now selectable when generated on negative frame numbers.

BUG #: 64583


CODE FIX: The wireframe display of mesh particles uses the instanced object's color now.

BUG #: 64629


CODE FIX: When the None material is D&D'd from the browser to objects, the objects now update correctly in the shaded viewport.

BUG #: 64268


CODE FIX: Gamma Settings are now applied to sample spheres without having to hit Apply in the Options dialog. Note that it was also fixed so that all VFB's will get refreshed when the display gamma is changed.

BUG #: 64628


CODE FIX: Now, when Maps is unchecked in the Browser, the maps radio buttons are hidden.

BUG #: 65028


CODE FIX: Instancing a map on another channel via the Navigator isn't an illegal operation anymore.

BUG #: 65250


CODE FIX: Stopping Net Render services doesn't take excessively long anymore.

BUG #: 65022


CODE FIX: Assigning materials to objects with the Manual Update switch turned on doesn't crash the program anymore.

BUG #: 64994


CODE FIX: This display problem when moving around an empty mesh is fixed, but note that the Nurbs folks still have to deal with it on the nurbs side. (I've passed it over to CT for him to look at.)

BUG #: 46894


CODE FIX: The behavior between <enter> and clicking OK when cloning an editmesh is consistent now.

BUG #: 36055


CODE FIX: The Keyboard Entry axis fields for these primitives are reset now by File/Reset.

BUG #: 31712


CODE FIX: Zoom Horizontal Extents Keys zooms to the keys in all cases now.

BUG #: 32937


CODE FIX: It doesn't appear that you can add a Visibility track to the Objects node anymore.

BUG #: 33175


CODE FIX: Add Keys in Function Curves mode doesn't behave like a move tool with Lock Selection enabled anymore if you click anywhere in the Edit window not over a key.

BUG #: 65149


CODE FIX: Auto Boning/Copy Joint Parameters now works for New IK bones.

BUG #: 65263


CODE FIX: Render environment parameters flag the file as dirty now.

BUG #: 33163


CODE FIX: An error message is now given when a .MAX file is loaded that contains a sound file which no longer exists. (Note that we're using standard error logging routines so this dialog shouldn't come up when network rendering, but that needs to be tested.)

BUG #: 32151


CODE FIX: The Track View's Sound Options dialog now respects standard shortcut key commands as as much as we could make it happen. We removed checkboxes as tab stops... note that in other places in the program, checkboxes are not tab stops and therefore are not affected by the space bar. There's nothing that we can do about the escape key either.

BUG #: 64202


CODE FIX: The Track View Metronome doesn't behave irrationally anymore.

BUG #: 58104


CODE FIX: The two FFD space warp modifiers now have the "Supports Object of Type" rollout.

BUG #: 65077


CODE FIX: In QueueMan, connecting to a second manager doesn't cause 'read-only' mode to function incorrectly anymore. (The title bar was being "set" to read only mode but never "reset" to something else.)

BUG #: 65084


CODE FIX: Network log files are now available on servers running as services. Yeesh... this was a big oversight. The path to the log file wasn't complete. Instead of using a full path name, it was using just "Network/Max.log" which will always work when running from a shell. But when server is running as a service, there is no implicit path (so we need to refer to the file with its full path name).

BUG #: 65020


CODE FIX: The Copy/Rotate Drag Mode Medit sample slot keyboard shortcut works correctly now. Note that we also set it up so that the middle mouse button now does a drag-rotate while you're in copy mode.

BUG #: 65021


CODE FIX: Toggling off the Pick Material From Object button doesn't causes Max to regain focus anymore.

BUG #: 65264


CODE FIX: Removed the close window button from the Units Mismatch dialog.

BUG #: 65268


CODE FIX: List types-Groups in the Merge dialog is now functional even without Helpers checked.


BUG #: 64840


NAB: You can't uncheck Generate Mapping Coords when Show Map in Viewport on because of the automatic texture coord enabling system. You can apply the UVWMap modifier and then turn off the texture coords if you want to do that.

BUG #: 64465


NAB: Select Invert doesn't work with basic filters because we ignore all entities that don't pass the filter test. (As the comment in the report says, this is the way it is with R1.2, and that is by design.)

BUG #: 64681


NAB: From the 0.2.5 release notes: "Made the Merge dialog consistent with the Select by Name dialog's capabilities." This report is referring to the SbN dialog, which has nothing to do with the Merge dialog.

~QE NoRepros

BUG #: 64762


NO REPRO: Can't reproduce this case in which the Delete key becomes unusable when dealing with morph targets.

BUG #: 62716


NO REPRO: Can't reproduce this case in which inactive modifiers appear gray (not blue) in stack. Modifiers that are completely disabled appear grey in the stack, and modifiers that are disabled only in the viewport appear blue in the stack.

BUG #: 65145


NO REPRO: Couldn't reproduce this problem in QueueMan inwhich disabling the second server temporarily shows all remaining jobs as active. When I unassigned the second server from the first job, it became an empty square (as it should) and the remaining jobs remained intact (as they should). Only when the second server (now excluded from the first job) picked up the second job did it go green. And only it went green. If there are some cases in which this does not happen, we'll need more information about exactly all parameters in order to try to find them.

~QE NoFixes

BUG #: 64649


NO FIX: Cloning particle systems with primitives causes both 'instance' and 'reference' to be active because the primitives (or any geometric objects) are legally instanceable and referenceable. If you choose instance/reference, the particle system will be copied and the geometric object will be instanced/referenced. That's just the way it works.

BUG #: 59457


NO FIX: This wishlist for an Interface::FileSaveSelected() with out a dialog box function is not going to happen (in part due to problems determining what filename would be used for the operation. The same as with FileSave? There are a number of confusing related issues, and it ain't gonna happen.

BUG #: 64621


NO FIX: The Configure Paths / Modify dialog disappears in this case because we are using the file browser as a directory browser (which is really "pushing it") and we get ambiguous messages from the MS file browser code. There is absolutely nothing to distinguish cancelling the dropdown from pressing the Use Folder button. We're not going to rewrite this code from scratch just to change this behavior.

BUG #: 31704


NO FIX: The blue cylinder icon is the standard catch-all branch icon for TrackView.

BUG #: 64598


NO FIX: This wishlist item to add the ability to add a map/material to the sample slot by typing the name in the edit field and hitting ENTER will eliminate our current ability to cycle through the material list. We'd prefer to leave it as it is.

BUG #: 65170


NO FIX: The Image section of the Displace modifier is not going to change. We are at feature freeze now with the exception of any essential changes.

BUG #: 65171


NO FIX: We're not going to add a Use Map checkbox to the image section of the Displace Modifier. We are at feature freeze now with the exception of any essential changes.

BUG #: 32717


NO FIX: Now that GregF is owning the 3DS i/o dll, we'd like to pass this over to him. If he's not interested in doing it, then it'll just have to slide.

BUG #: 52418


NO FIX: Now that GregF is owning the 3DS i/o dll, we'd like to pass this over to him. If he's not interested in doing it, then it'll just have to slide.

BUG #: 65073


NO FIX: This is certainly a real bug, but it's not ours... It's related to the underlying MFC architecture of the SoundLab plugin. We discovered this by tracing the crashes to code deep inside the MFC system, and then realizing that this is the only dll using MFC. If you remove SLABPLUG.DLC from the system, the bug goes away. Here's the call stack at the time of the crash:

RtlEnterCriticalSection@4 + 14 bytes

_lock + 115 bytes

_msize + 11 bytes

AfxUnlockTempMaps(int -1) line 63 + 19 bytes

AfxTermThread(HINSTANCE__ * 0x0302d494) line 293

DllMain(HINSTANCE__ * 0x03010000, unsigned long 3, void * 0x00000000) line 175


AfxUnlockTempMaps() is in mfc/src/winhand.cpp

AfxTermThread() is in mfc/src/thrdcore.cpp

DllMain() is in mfc/src/dllmodul.cpp

BUG #: 33169


NO FIX: The Sound Options dialog and Open Sound dialog don't display the ampersand character (&) correctly because the '&' means underline the next character. It's noted in the report that this is also a bug in the Open Sound dialog. This dialog is a Windows dialog (so even some parts of Windows treat this character that way). Just the way it is.

BUG #: 65168


NO FIX: The Center spinner doesn't need to be disabled in this case. (And note that now that we're at feature freeze, these type of cat4 bugs aren't relevant.)

BUG #: 65169


NO FIX: This text regarding the Mapping checkboxes in the Displace modifier is not going to be reworded.

BUG #: 32418


NO FIX: Snapshot is never going to be modified to work this way.

BUG #: 31086


NO FIX: The Expression Controller variables are never going to be assignable to tracks without controllers.

BUG #: 64105


NO FIX: We're not going to create a new Volume Select modifier that worksin World Space at this time (ie, feature freeze). Put it on your r3 wishlist.

BUG #: 65081


NO FIX: In QueueMan, when in 'read-only' mode, even though server properties cannot be accessed, it's not greyed out. We tried our hardest to get that MFC code to respond to greyout commands in this case, but just couldn't do it. It's so trivial that we're just going to blow it off.

BUG #: 65024


NO FIX: Disabling the color swatches for non-standard multi-sub-object materials is effectively impossible because there's no API for determining if a material has settable diffuse.

Update notes (for version 0.2.10, 6/7/97):


The hierarchial linkage solution is taking longer than we anticipating, but it's progressing well (even though at its own pace). We have a number of checks in place to facilitate linkage solutions, but nothing exposed at the surface yet. Notes:

Found a drawback to our original solution using multiple frictionless unilateral contraints to handle hierarchies. Actually, this is a restriction with the described solutions in the literature as well (but it's glossed over, of course). Basically, the algorithms place a restriction on the interaction between linkage locks. For example, using the method to lock one rotation, for example, in X, requires that we also lock translation in either Y or Z. We're putting in some warning displays and option boxes that pop-up to handle these situations. For example, one will be:

"<object> is locked in rotation about the <> Axis but not locked in translation along the <> or <> axes."

Specifically, to lock rotation in X, we need to lock translation in either Y or Z. To lock rotation in Y, we lock translation in either X or Z. To lock rotation in Z, we lock translation in either X or Y.

There will also be a warning telling folks if two serially-linked objects are in a collision-checking pair. If animators set this up properly, there won't be any problems, but if the two objects are simplified, and interpenetrate, the solutions will suffer very badly. Example of serial linkages that should be collision checked: clothespin, pliers.... et cetera. This is only an alert warning, and won't crash out of the simulation and won't change anything, but if the solution is slow, the animator will at least know why.

Another series of checks verifies that any children of objects in the simulation are also in the simulation, and bails out with an error message naming the problem child if such a situation exists. The precise message is:

"<object> is in Simulation, but Parent object is not."

IF an object's linkage parameters are locked (at all) that the parent is required to be in the simulation. The specific message is:

"<object> has locked axes to a Parent outside the Simulation."

Only the completely free child of an unsimulated parent will solve correctly.

As mentioned above, hierarchies will NOT solve yet, but the preprocessing steps are present and working. Hopefully this will be working smoothly by 0.2.11.

Implemented a suggestion from various folks for a display-as-you-solve mode. There's currently an "Update Display w/Solve" checkbox in the Timing & Simulation rollup. When on, the scene will redraw on each frame. Note that this option will be moved under the Solve button for 0.2.11.

Made some Frame Counter Display changes. During the solution, instead of showing the percent completed, it displays the Frame#. There's currently a problem with redrawing the Cancel button while this is happening, but it's functional (even though it's popping in and out) and we'll get to that eventually.

~Stroke Recognition system

Enhanced the Review Strokes dialog by adding a the list of the assigned strokes for your reference, which makes the whole thing much more useable. Additionally, in order to make the process of reviewing strokes possible while defining them, a Review button has been added to the Define Strokes dialog (enabling read-only review of your previously-defined strokes). So, there are two ways to launch the Review Strokes dialog:

From the Define Strokes dialog, in read-only mode. This is for you to review the strokes you've already defined. (The Change and Delete buttons are currently disabled in the mode, and 0.2.11 they'll be gone completely.)

From the Review Stroke stroke itself (default, horizontal left->right stroke). This puts you in read/write mode, letting you Change a stroke (thereby bringing up the Define Strokes dialog to change it). Once inside the Define Strokes dialog in this mode, the Review button is likewise greyed out.

Removed the "No Objects -- Just Execute the Command" radio button and just made it a text string that appears black when valid and gray when invalid.

Added three new definable commands:

Move Mode (Set Constraints)

Rotate Mode (Set Constraints)

Scale Mode (Set Constraints)

These put up a little dialog box under your cursor with the following choices:







A choice from this menu (by double clicking) puts you into the specified mode and sets the contraint.

Note that we'll be adding another command for 0.2.11 called Set Constraints that just brings up the constraint dialog for you to constrain your current mode.

Changed the prompt when drawing a stroke to: Drawing stroke -- Release mouse button to finish or press ESC to cancel. This is because there is a problem with right clicking to cancel now that the stroke program is on the middle mouse button. We've discussed it here and can't figure out anything to do about it. So, you need to press ESC to cancel in mid-stroke. The other (more direct) thing that you can do is just 'scribble' to cancel. This brings up the Stroke Not Found dialog and you can quickly exit it.

Issues that are worth noting about strokes:

It is sometimes handy to define several similar strokes for the same command. For example, say you assign Undo Scene Operation to a U shape. Sometimes when you draw a U you might only make a J shape. That is, one end is lower than the other end. This is easy to do by accident. You aren't likely to define a stroke as a J because it's too difficult to do on purpose. But having it defined makes it quicker even if you make the mistake when drawing the U. The same is true for strokes that double back on themselves. For example going down and then back up one can sometimes not come all the way back up. Just define that one too. This is easy with the Define button in the Stroke Not Found dialog.

Strokes that operate on groups of objects are best done using L, U or O shapes since their extents encloses a volume. If linear strokes are used, then it is important to use crossing selection.

We're looking at adding a mode to help making strokes easier for tablet users. That'll most likely show up in 0.2.11 or 0.2.12.

~YG new features and general issues resolved

Implemented a suggestion from DS for the Frame advance and back hotkeys to also work in TrackView. (Forward Time One Unit and Backup Time One Unit are now assignable in the Main UI and Trackview categories, and they default to the same keys for both.)

Installed macros for navigating in the the virtual viewports: (Virtual Viewport Pan Up/Down/Left/Right and Zoom In/Out)

Added a status panel message indicating when an autosave is in progress.

Implemented MF's suggestion regarding adding vertical gray lines at every major division in TrackView.

Implemented DS's suggestion to draw the background of selected tracks in TrackView in white so that it's easier to tell which track is selected.

Attachment controller: A warning alert now appears when making the second key (only) with the Animate button off. If you use the Set Position function to change the position of the object at a time such that animation will be created (and the Animate button is off) a warning will come up asking you if you're sure that you wanted to animate the position of the object. If the answer no, the new key will be removed. This is because the Attachment controller is the only controller that actually makes keys with the Animate button off (see the Attachment controller docs for more info).

Implemented LM's suggestion to make the gizmo start/end points of the Affect Region modifier separated at creation. (Previously they were on top on one another, so the first thing you needed to do is move them apart so you could select the head or tail.) The second point now starts out 25 units from the first... there's no way to know where you're going to want the second point but this makes it a bit easier for you to grab it to position it where you want.

Note that this gizmo, along with all other gizmos, will probably appear black in this build because gizmos are now user-color-preference-able. You'll have to set the color in the prefs dialog or delete your .ini file to get the new default colors.

Implemented zooming and panning with the Intellimouse in the TrackView. (We might get it into Video Post, but no guarantees.)

Implemented an IK suggestion from both MS and DS regarding enhancing the usefulness of the blue cross end effectors by making it possible to link them to other nodes. This involved adding new options to the 'End Effectors' section of the IK master controller's parameters in the Motion panel.

Basically you can define a parent node for the end effector. This isn't a real parent... it's not going to show up in the track view or anywhere else. (The blue cross end effectors aren't real objects so they can't have "real" parents.) However, the end effectors will inherit the transformation of this parent just as a normal object would inherit transformations from its parent.

The main purpose of this feature is so that you can animate a character and then later decide that you want to scale the entire character and its animation. To do this, link the character's root node to a dummy object and link all the character's end effectors to the dummy. Then scaling the dummy will scale all the bones as well as the animation of the end effector.

One other use of this new feature is for things like hands. Most of the time you want the feet end effectors to animate in world space so that the feet don't slide. Hands are a little different. Usually as the character moves you want the hands to move with it and then you can animate the hands relative to the character. To do this, link the hands to the character's root node.

One restriction on this type of linking is that you can't link an end effector to an object in the chain. This would create an endless loop (since the position of all objects in the chain depend on the position of the end effector -- the end effector couldn't in turn depend on the position of a node in the chain).

Add keyboard macros for all of the floaters available from the Tools menu (Selection Floater, Dislay Floater, and Mtl/Map Browser).

Implemented a suggestion from LM to add a field to the Align dialog that tells you what object you are aligning to. The target name now appears in the title bar.

Implemented a suggestion from DS for the ability to comment out lines in the 3dsmax.ini and plugin.ini file. The line is now skipped if the first character is a ';'.

Implemented a suggestion from GP to change the names of the network rendering services so they can coexist with version 1.x services.

Changed the default number of history files shown on the File menu to 9 (note that you have to delete your .ini file to see this).

Implemented a method of saving scene thumbnail images in the .max file. This is via an option that saves an image of the active viewport to the file. The purpose of these thumbnail images is so that file browsers can have access to an image of what's in the file. The browser utility (currently called the Asset Manager) will eventually support these. You can toggle this state via a checkbox in the Preferences/Files page. This preference is saved in the 3dsmax.ini file, of course. Additional notes:

Independent of the state of this checkbox, autobackup files never have thumbnails saved.

Everytime a regular .max file is saved, if the the thumbnail option is enabled, an updated thumbnail image is saved.

For ease of browsing, the thumbnail image is stored in its own stream, called "ThumbnailImage". This stream can be read without reading the rest of the Max scene data.

Thumbnails are stored as a standard Windows 24-bit DIB (Device Independent Bitmap), with a maximum width/height of 64 pixels. (The aspect ratio of the viewport is preserved in the image so that it won't distort the view.)

Turning on thumbnails adds about 9k to the size of the MAX file.

Changed the perspective view zoom extents fudge factor so that ZE leave the perspective view further zoomed out, as per JP's request.

Implemented a suggestion from RL for the default zoom in the TrackView to use horizontal mouse motion to zoom in and out instead of vertical mouse motion.

Implemented a suggestion from RL to save the zoom flyoff position with named TrackViews.

~YG Bugs Fixed

Fixed a problem that PW found in which you could bring up multiple controller dialogs in TrackView for the same controller. (Note that it was previously fixed for all controllers except the Waveform controller, and now it's fixed for the Waveform controller as well.)

Fixed a problem that MM found in which the interpolation parameters of splines weren't being loaded when you load old files with Line objects.

Fixed a problem that MM found in which the Line object wasn't defaulting to the standard of 6 steps, Optimize ON, Adaptive OFF.

Fixed a problem that MM found in which the spline steps value was not being written to disk properly when Adaptive was checked on Line objects. This is fixed but files saved prior to this will not have the proper steps.

Fixed a problem that MM found in which the steps value was being lost when Line objects were converted to Editable Splines.

Fixed a bug that MF found in which the VFB was not displaying the grey scale correctly when in monochrome mode.

Added the ability to ESCAPE when doing an animated map-rendering in Medit, and also enabled zoom/pan in the VFB while doing map renderings here.

Fixed a bug in RenderMap that would cause it to start rendering verrrrry slow and, in the case of 3D textures, incorrectly. (the W of coordinate of UVW wasn't getting inititalized to zero: sometimes it would be set to "Not-A-Number" which caused zillions of floating point exceptions.

Cleaned up a bunch more minor leaks and issues with Bounds Checker. It's going to be fun to get into the code seriously with that tool (along with Purify) in July and August and really tighten things up.

Fixed a problem that RF found, in which if you clicked on the frame slider and slowly dragged the slider back 1 frame, it would advance one frame instead. And if you clicked on the frame slider and dragged it slowly forward, it would've advanced by two frames instead of 1.

RL asked if "MIDI Controllers act like Velocity (instead of reading "real" values from the input.)" We use the value transmitted in the velocity field of the message which is the value of the controller (for example the position of the fader).

Fixed a bug that PW found in which, if you created an Applied IK Chain with a dummy end effector, assigned a keyboard shortcut to Applied IK, went into the Motion panel and used the Applied IK shortcut, it would crash.

Fixed a problem that JB found in which the 'Flip' param when using a Look At Controller was not getting saved in the .max file (in addition to any other change from the default axis).

Fixed a bug that SA found in which the boolean object wouldn't always update properly when the Update When Selected option was used.

Fixed a problem that RL found in the IK system in which the solution for an orientation constraint would appear to be backwards in certain cases.

Renamed 'Controller' to 'MIDI Controller' in the MIDI device params for the motion capture system.

Hooked up color preferences for the following entities:

Space warps

Gizmos and selected Gizmos.

The only thing left to hook up is the new particle systems and the camera horizon.

Note that as far as all these go, the centralized places were fixed. So if for example, a particular modifier doesn't seem to respect the modifier color, it should be up to the associated author of that modifier to fix it. If anyone finds specific cases, just let me know.

Note that the defaults for some of these colors were also set. If they appear black, then you need to delete your INI file (or the color portion of it) so that the new defaults can take effect.

Fixed a bug in which the animation would start at the incorrect time when pressing the Play button with the playback speed set to anything other then 1x.

Fixed a bug that LM found in the FFD modifier in which the convention for FFD (box) was WxLxH (Width, Length, Height) in the name that appeared in the modifier stack, but clicking on Set Number of Control Points, the order was Length, Width, Height.

JC had noted some problems with using the Camera Match modifier and patches. These are NABS because the Camera Match modifier has to turn the patch into a mesh. Then when an Edit Patch is applied to the mesh it's converted back into a triangle patch.

Fixed a problem in which there was a blank space for the category title at the top of the Utility Panel's button sets dialog. The shipping utilities have now been given 'MAX STANDARD' as a title (which is what modifiers have). Also fixed a similar bug in the modifier configure set dialog in which space warp modifiers didn't have a title and they now have the title: 'SPACE WARPS'.

Fixed a problem in which, if you created a spline (for example), applied a bend and then an extrude, the result is a mesh, but if you went back to the bend you should've been able to apply an EditSpline modifier at that point because the output of the bend was still a spline. Unfortunately you couldn't, because the EditSpline button was greyed out. But now, the modifier button state will update correctly when you toggle the Show End Result button OFF.

Boldfaced the 1x label in the Time Config dialog to highlight the fact that that's the default.

Fixed a problem that RF reported in which it was possible to select more than one server when outputing to an AVI file (Non Concurrent device) and rendering to the network manager. (The "Single" dialog was allowing folks to select more than one server at a time.)

Fixed a bug in network rendering in which, when selecting a server, it would not get assigned to the job but another server that was not selected would. You could get this if you selected "All" and then de-selected a server. The job would go with the selection inverted (the de-selected server would be assigned). Needs to be regressed.

Fixed a bug that LM found in the Video Post queue in which drag and drop of queue entries was not working correctly in the case in which you had more events than would fit in the window and had the window scrolled down so the first events were scrolled off to the top.

Fixed a bug that JB found in which the system would crash if you did an extremely small window zoom on a viewport bitmap background (due to the allocation of huge amounts of RAM, and hitting the dreaded WinNT out-of-memory crash, which we have no control over). We now put up an alert if resizing the background is going to use more than 16Mb of memory. This allows for a 2k x 2k (by 32 bits) resize with no warning. Above that, the warning pops up and asks if you want to display the bitmap. Answering yes works as before. Answering no turns off the background display.

Right now the default response is "yes". Should it be "no"?

Fixed a bug that MR found in which the program would crash if you went Preferences/Rendering, and set the hotspot/falloff separation angle to 0.1 degrees, then created a target spot, and bumped the falloff down to 0.1 above the hot spot, and then toggled back and forth between the Create and Modify panels (with the light still selected).

Fixed a heinous memory leak in the renderer that MF found (map-bug.max) that would've happened with Xform-animated patch objects.

Fixed a bug that JJH reported in the Blend material in which a bump map applied with a mask was being applied to all areas, included the masked ones. The Standard material has been modified to restore the normal when it is done. Plus, as JJ noted, the immediate result was that bumped normals didn't show up in the G-buffer, so the renderer was modified so it will capture the normal from the first call to "SetNormal" and use it for the Gbuffer. (If there is no call to SetNormal, it uses the unperturbed normal , of course.)

Implemented a function that the Asia/Pacific folks requested with regard to concerns they had with Max and plugins running under the Kanji operating systems. With Max having so many plugins available, but many of them not localized for Japan, their users end up frequently running a combination of Kanji Max along with English versions of plugins. For the most part this works, but one problem occurs in many of the plugins. Say for example a user creates a box. Since this is the Kanji version of Max, the default name for it is the Japanese translation of Box01. Now, some plugins (when they work on objects) display the name of the object in their dialog box. However, if this is a non-localized plugin it is using an English font (and therefore can not display the Kanji name). They still wanted the button label "Box" to be translated into Kanji since that only appears in Max, but they wanted the default object name "Box01" not to be. We've been able to implement this request for separate methods for button names and initial node names. There always were two separate methods (ClassName and InitNodeName). For example, the button text and initial node names for lights and cameras have always been distinct. But in many cases the two methods were returning the same string out of the resource, so having two methods is only part of the solution. All objects have been changed in maxsdk\samples\objects to return separate strings for these two methods, and mail has been sent out to all object-creation authors to update their code as well.

Fixed a problem that would cause the services (both manager and server) to blow up if you had them installed without the proper permissions. They will now correctly whine about it,and once the proper permissions are set, they'll work fine.

Fixed a bug that MR found in which lights that were linked appeared to move correctly with the parent object when moving the time slider, but when you rendered, the lights stayed where they were at the first rendered frame. This was fallout from the shadow-generation optimizations that we installed a few weeks ago.

Restructured the Standard material internally to see if it was going to be possible to break out the illumination model as a new plugin type. It worked out pretty well, and we're going ahead with it (hopefully to be done for 0.2.11).

In the process of restructuring the Standard material, a bunch of problems with the Constant shading mode showed up:

Fixed a problem in which Constant shading mode was using the Metal shader instead of Phong. This was not true in R1.x - it was broken in r2 awhile back rearranging some stuff.

Fixed a problem in which Constant shading NEVER was doing specular correctly: that is, the diffuse came out like flat shading, but the specular was interpolated normal Phong.

When you do Constant specular correctly, the hilites can create discontinuities between faces. The sub-pixel fragment merging thinks the faces are being smoothed, and therefore that it's ok to merge fragments. This causes jaggies along the face edges. This was fixed by adding a new material requirement flag MTLREQ_DONTMERGE_FRAGMENTS, that lets a material inhibit the sub-pixel fragment merging. This flag is used when Constant shading mode is on.

Fixed a bug that JC found in which, if you orphaned a camera/light target by picking another node, it wasn't selectable.

Fixed a bug that JC found in which the program would crash if you orphaned a camera/target node, deselected the scene and then did a Hide Unselected.

Fixed a bug with the new IK controller in which, when you pasted joint parameters to a selection of nodes, the data * would only go into one of those nodes.

Fixed a bug that LM found in which the program would crash when Undoing/Redoing a series of operations.

Fixed a bug that JK found in which a boolean operation that worked in 1.x didn't work in Athena.

Fixed a bug in which clicking on the X button wouldn't close the MIDI viewer dialog.

Fixed a bug that JK found in the affect-region modifier in which the curve overshoots its drawing area if you covered the dialog with another application and then exposed it again.

Fixed a bug that JJH found in which BoxGizmo and CylGizmo had misnamed rollups. (They were both called 'Sphere Gizmo Parameters'.)

Fixed a problem that KR found in which planar mapping wasn't working correctly in certain cases. Previously when mapping a face selection that already had a previous mapping, the existing texture face topology was used and just the verts were remapped. Now, the texture face topology is recreated to match the face topology... so if the previous texture face topology was something wacky (as in this case -- some of the texture faces were sharing texture verts within the face, which amounts to degenerate texture faces) then the mapping wouldn't come out wacky. Bottom line is that mapping selections of faces should work better.

Code was also installed to remove orphaned texture verts. Orphaned texture verts are harmless... you can't see them and they don't affect anything, but they do take up memory, and they're culled now.

Added APIs to access the background color.

Fixed a bug that JC found in which Path Deform when used on a combustion apparatus, moved the apparatus but left the combustion effect behind.

Fixed a bug that SA found in the stripping code in which the vertex colors wouldn't be updated correctly after deleting vertices.

Continued implementing more of the file backward compatibility scheme that will enable R3 files to be loaded back into R2 in the future. This is an ongoing project that we hope to have finished by July.


PW had brought up an issue in which, when he attached instances of splines to each other, multiple copies of those splines were created. This is a NAB because these shapes are instanced, and when you attach a spline to one, it attaches it to all of them. Then when you do it a second time, you wind up with twice as many as you might expect (because the first attach also attached it to the remaining splines). It's weird, but that's how instances work.

MF noted that while using an intellimouse wheel and zooming in and out of the VFB, the cursor displayed is always a "pan hand" regardless of whether you zoom or pan with the intellimouse wheel. This is a NAB because pan hand only displays when you press the mouse wheel, not when you rotate it. While the button is pressed you are in a mode, so it displays the pan hand. When you rotate the wheel, it zooms, but there it doesn't display a zoom cursor because you haven't gone into zoom "mode". It's just a sequence of incremental zoom operations. ( If it put up a zoom cursor, it would be impossible to know when to remove it)

RL asked if we could make it possible for the Look At object to inherit scale from the parents. That's out of the scope of r2.

RL had sent in a problem file with IK (ik02.max) in which he had problems with the solution. It's a NAB because the bones for that leg are created almost perfectly in a straight line. This is bad for IK, which needs you to create the bones with a slight bend so that the solution 'knows' which way you want them to bend. If you turn off the limit in this file for Bone25's X rotation and look at the solution you'll see that the bone is bending in the opposite direction as the other leg. If you turn on Show Initial State and reposition Bone25 (right knee) so that it is on top of Bone20 (left knee) and then position Bone26 (right ankle) so that it is on top of Bone21 (left ankle) you'll see that it then solves correctly.

MS brought up a situation with IK in which, if you make an IK chain (simplest example of two bones) and then move the end-effector around interactively, it will appear to flip at two places during a 360-degree rotation. This is a NAB because all that's happening when you drag an end effector interactively is that the solution is being found for the spatial position that you happen to be in at that spot in the viewport. If you actually set keyframes for those positions, you'll see that it never flips, because when solving in time, it's solving incrementally from frame to frame to the closest possible solution The two methods of solving (spatially vs over time) are completely different. Another way to look at it is that the velocity of the end effector affects the solution. If you transform the end-effector a long distance quickly, it will find a solution that's much different than a very small incremental solution.

MGB had noticed that when you use Zbuffer wireframes in the viewports, whenever sections of the wireframe coincide with a grid line, the wirframe is not drawn. This is a NAB because when in Zbuffered wireframe mode, the grid itself is an object and is zbuffered with the rest of the scene. So, if you draw a sphere (for example), half of the object will be below the grid, and hence the grid lines will be drawn in front of it where they are colinear. And in the case in which the grid and object lines are at (approximately) the same depth, the "winner" (which line appears on top) is always going to be drawn-order dependent. So, you can come up with a case in which you draw a box and the bottom of the box may not be below the grid... it may be coplanar with it. Here's a test to illustrate... Turned on 2D snap, and create a box whose corners are on grid intersection points. Then turn on Zbuffered wireframe display in all four views and move the box around (with snap still on). Sometimes the bottom of the box is drawn on top of the grid lines and sometimes the opposite happens (usually with the major grid line and one of the lines of the box). This is because the end-points of the grid line segments don't coincide with the endpoints of the box lines, so round-off can make either one appear above the other. Next, go into both face and edge SO modes and do selects-and- moves. Again, you'll see the same sort of popping in and out of the box wireframe, for the same reason as above. The bottom line is that the ONLY reason why Zbuffered wires exist is for adaptive degradation. Our intent was for folks to degrade to Zbuf wires instead of regular wires because that would give you a visual cue as to your object intersections. It wasn't for modeling.

RF reported a strange problem that only appeared under OpenGL in which, if you deleted faces at the SO face mode of the EditableFace object and were at the "Delete Vertices Also" alert, if you moved the alert it would redraw the screen and the faces would appear to become deleted (even though you hadn't answered Yes or No). This is a NAB because with either SZB or OGL, if you have "redraw scene on window expose" enabled (in the driver configuration dialog), then the scene is redrawn whenever another window is moved over the viewports. When you hit the Delete key (to deleted the selected faces), the faces are immediately deleted, and the message box asking about isolated verts is brought up. Moving this box causes the scene to be redrawn (by default, with OGL), and the deleted faces no longer show up. Notes:

As mentioned above, this also happens with SZB if you change the default window expose behaviour.

The alert is asking about deleting isolated verts, not faces. Thus, whether you answer Yes or No is irrelevant -- the faces are deleted either way. (So, unlike what the bug report says, it's not as though you pressed Yes -- the answer doesn't matter.)

Although we could theoretically bring up the alert before deleting the faces (as that would remove this seemingly-odd behaviour), it's not consequential (i.e. the faces are going to be deleted no matter what) so it's not worth touching. If you want the faces back, you'll have to hit the Undo button either way.

DM had noted a problem in the Kinetx forum in early February in which, if he made a sphere with a 21,000,000-foot radius, none of the viewport tools would work anymore. Unfortunately, this is just beyond the precision of the z-buffer and the clipping range (and it's not going to change). After trying this out, it was amazing to see how much stuff still did work! (And a File/Reset brings everything back to normal.)

Resolved a few issues regarding running multiple copies of Athena at once:

Looked at the general issue in which all simultaneously-running copies of Athena that are launched from the same directory read/write the same .ini file by default. (This won't cause a crash, but it means whichever copy of Athena writes to the file last, wins.). We looked at this, but since it's standard multi-app behaviour on Windows, there's nothing to worry about (and nothing we could do in any case).

Making previews from two (or more) copies at the same time won't work, because they each write to the same _preview.avi file. We just need to document this. Rendering to the same filename from multiple copies of Max won't work either.

Autobackups could theoretically cause a crash in the case in which both copies were attempting to write to the same file at the same time. At best, this just corrupts the backups, at worst, the back-patch header writes might get confused (and cause the crash). Since we open .max files in "Share Exclusive" mode (meaning that when we have the file open, no other app, including another copy of Athena, can open it), we're probably safe here (at least as far as crashes are concerned), although without really thrashing it, it's hard to say for sure. Multiple simultaneous auto-backing copies of Max are still not a good idea though, since each copy is potentially overwriting the backup a separate copy of Max made. This should be documented. Note that we disable autobackup during net rendering, so having two copies of MAX running, with one in net render mode, is not a problem at all.

Someone brought up an issue about how the TrackView value fields don't reflect the current unit method. So, for example, if your current units are set to meters, the value fields in TV are still in units. (note that the KeyInfo dialogs do respect the unit method correctly) There are a couple of reasons why this can't be fixed. One is that the value field generally applies to the selection of keys, which could have different units. The other is a technical reason... the unit parsing code is built into spinners and this field is just an edit field.

~Non YG Bugs and Issues Resolved

Object Snaps: A new version of the Snaps document (210snaps.doc) is included with this build. It describes the four new snap types supported (Tangent, Perpendicular, Pivot, and Bounding Box).

SurfDeform: Reinstalled, since Wayne made the Nurbs SDK more thread-safe.


Fixed "When selected" update bug.

Added right-click/escape exit from Pick mode.


Fixed bug that was causing an assertion failure at line 707. (Often occurred merging shapes into pole of sphere.)

Added update options.

Added options for mesh sub-object selection level (so the user won't have to apply a MeshSelect). These are not yet "wired in", though.

Added "precision" parameter:

Sometimes ShapeMerge will make a new point extremely close to one of the original edges. This creates very thin, shard-like triangles that don't render well.

To prevent this, we can instead "bump" the point onto the edge. This renders nicely, but doesn't precisely reproduce the shape on the mesh's surface.

Thus "precision". At its default setting of 100%, ShapeMerge produces a very precise reproduction of the shape that may not render well. With lower settings, around 95% or 90%, points are moved slightly to make better rendering.

Technically, this is based on where the point falls in the mesh's face. If precision is 95%, and the point is more than 95% of the way from one of the faces' verts to the opposite side, it'll just merge with the opposite side.

Precision's limits are 50%-100%. Anything below 80% gets hard to recognize.

There's one current drawback to this, in that sometimes with lower precision, a point is moved _within_ one of the original faces, rather than moved to an edge. There are technical reasons for this which I'm working on. (Display non-visible edges and slide precision up & down to see why this happens. It's essentially moving the point to an invisible edge.)

Fixed assertion failure at line 913 or so by removing the assertion. The result is wrong, but not terrible, and it's better than crashing. I continue to work on finding the right solution to the problem, which is particularly common when moving shapes over the tips of cones.

ShapeMerge was supposed to be design-complete by now, but I'm still working on it. Mesh subobject selection, cookie-cutter trimming, and face selection are still missing. However, these bugs are significant enough to make the face selection or cookie-cutter trimming work pretty poorly, so I've got to nail them down first. Probably won't happen till next week sometime.


Fixed 2 bugs that caused assertion failures with some Booleans. Seems very stable with booleans now.

Put Face/Poly icons back, so what was "Eliminate Hidden Edges" in 0.2.9 is now "Operate On:" with 2 buttons, a triangle and a square. Tooltips are now installed, and they read "Faces" for the triangle and "Polygons" for the square.

Added undo/redo for the face type icons.

Added Update options (Always, Selected, Render, Manual). "When Selected" isn't working properly yet. (These options will go into Tessellate once they're working & tested.)

Fixed a bunch of bugs. I finally got a memory debugger working (boundschecker) and fixed a couple bad spots that have been giving me minor trouble for weeks. Also fixed cylinder bug pointed out by Jack Powell, although the result isn't terribly pretty.


Added "Faces"/"Polygons" tooltips to the icon buttons.

Added undo/redo for the icon buttons.

Changed "Face Type:" to "Operate On:", which seemed more in keeping with calling the triangle icon "Faces".

Changes to the Browser utility:

Renamed to Asset Manager in preparation for its also being able to browse .max scene files. Will most likely end up being named Asset Browser by the time we're through.

UNC naming is functional for network drives.

The Tool Bar has been changed to be a Max Custum Toolbar, including Fly offs for both Sorting and Thumbnail size selection. An Edit box added to select cache location (the cache can also point to network with UNC naming). Filter has been moved from the Preference dialog box to the toolbar.

Note, if some of your icons don't have images in them, or if accessing a flyout causes a crash, it means that you didn't install 0.2.10 in a new clean directory, and you've got old files floating around that are conflicting with it.

Preference dialog box is almost empty now. Cache options such as Max size etc., can be added there.

Local Drag and Drop is now functional. Thumbnails can be dragged and droped onto the directories in the tree control. (Ctrl+drop will copy, Shift+drop will move images, like Explorer) Visual Feedback on target directory like DROP_HIGHLIGHT is not functional yet.

Main menu is removed. (since all menu items are also in the toolbar)

Slide show removed

~QE Bugs Fixed

BUG #: 63736


CODE FIX: In the new particle systems, Mat'l Mapping & Source is now correctly disabled when Tetra is selected.

BUG #: 64292


CODE FIX: In Metaparticles, the Tension value correctly affects particles now. There was a sign problem in this parameter, in addition to some VC5.0 problem that were effectively hosing metaparticles completely.

BUG #: 64322


CODE FIX: Crash doesn't occur anymore when picking an object with a 45+ character name for the reference coordinate system and then attampting to make an array.

BUG #: 47827


CODE FIX: This crash with changing layouts with this particular file is fixed. Note that the file in question has a bogus viewport record in it, and that caused the label lookup for the layout dialog to crash. We now check for invalid labels, and just leave the label blank (in the layout dialog) if one is found. Note that if you now swap layouts, and then save out vpcrash.max to vpcrash2.max, then everything works fine (and, in particular, the viewport labels are all correct). So, the mystery is how this .max file got trashed.

BUG #: 64308


CODE FIX: The Indeo codec does not support 32-bit compression, so it should never have appeared in the list. (Both HEIDI and OGL return 32-bit DIBs, and we were putting up the list for 24-bit-compatible codecs, which was the mistake.) So, now that we properly only allow 32-bit codecs in the list, Indeo is not an option anymore. (Note that if you're running in 8-bit mode, then 8-bit compatible codecs appear in the list -- this wasn't changed.) Also, in case this somehow happens again, an alert will appear, stating that the image format and codec formats are incompatible, and then it will abort the preview creation gracefully.

BUG #: 64194


CODE FIX: Interface::CreatePreview() won't crash Max anymore if there is no argument passed.

BUG #: 64392


CODE FIX: The Expression Evaluator doesn't fail anymore when an integer is required. We now truncate the value. While fixing this, an issue came up in which control-N would bring up the expression evaluator whenever the focus was in a custom edit field, even if that edit field wasn't connected to a spinner (eg the edit field in the select-by-name dialog). This was wrong, and it's been fixed. Now, ctrl-N only brings up the evaluator when the focus is in the edit portion of a spinner field.

BUG #: 64084


CODE FIX: The display is now updated when switching between SO modes with hotkeys.

BUG #: 64393


CODE FIX: The screen is updated correctly in this case now. (This was the same bug as #64084.)

BUG #: 56118


CODE FIX: Objects are not scalable anymore when scale locks are on.

BUG #: 64140


CODE FIX: ITrackViewNode::SwapPositions() works correctly now. Note that it was swapping the position of the controllers, but not the names.

BUG #: 59245


CODE FIX: InitSnapInfo() in maxsdk\include\SNAP.H is now exported. This had to be reworked so that the InitSnapInfo call is now made via the Interface class, because the snap data is not available via DLL linkage. The definition has been removed from the snap.h file and is now part of the Interface class definition in the maxapi.h file.

BUG #: 64319


CODE FIX: Fixed a problem with not disabling the Steps spinner properly when Adaptive was checked in the spline objects.

BUG #: 58755


CODE FIX: Edit Named Selections has dots after the menu item now.

BUG #: 32707


CODE FIX: The hand scroller now grabs within the Hierarchy/Link Info's Inherit rollout.

BUG #: 32710


CODE FIX: IK Binding an end-effector to a follow object doesn't leave the follow object in the selection-state highlight anymore.

BUG #: 36727


CODE FIX: Selecting Close from the System Menu for the About Combustion dialog closes the dialog now.

BUG #: 62660


CODE FIX: Configure Button Sets shows the correct buttons now.

BUG #: 63138


CODE FIX: The Set Controller Defaults dialog's close button works now.

BUG #: 33165


CODE FIX: The Track View's Add Keys function prompts with the correct information in Function Curves mode now.

BUG #: 58505


CODE FIX: Fixed the lofter capping problem that was causing ktx_rays.max (and other files) to cap incorrectly. This was an awfully tough on to nail, but it ended up being a simple clean fix (a cached bounding box was not being reset on a shape transform).

BUG #: 32427


CODE FIX: Ortho pan performance doesn't drop when objects are selected anymore. This was caused by the axis being invalidated in all four views, hence causing all four views to be redrawn. It now checks for whether the axis needs to be invalidated in the other views, and only does so if necessary.

BUG #: 32430


CODE FIX: Panning in a perspective view with large objects after doing a ZE works fine now.. Actually, there were several problems relating to this. First, the perspective panning should've been using the focal length of the (virtual) camera to figure out the panning distances. (Now it is.) Second, the viewport zoom code was moving the virtual camera's location, but wasn't updating the virtual camera's focal distance. This caused problems with both panning and arc rotate. That's fixed too. (In particular, you can now create an object at the origin, zoom out (way out, if you like), rotate the view reasonably (without rotate selected turned on -- you couldn't do that in R1.2!), and then pan it as expected.)

BUG #: 34524


CODE FIX: Mirrored splines (and other objects) don't NU scale differently anymore. Lots of notes about this one, which was a problem that we've actually encountered before and in fact had installed code which fixes it (but which was commented out before r1 shipped with a note stating that the code caused other problems). The code was pondered over and it seemed OK except for one minor thing which was fixed, so it was re-enabled. Now, this code only get executed when you're NU scaling and it should work (at least) most of the time (in fact we can't find a case where it doesn't work). It's likely that the case where this code fails is just as obscure as this bug. Regardless, we'd like to keep this code enabled and see if anyone can find the case where it fails (if it even does still fail, since we did fix one problem with it). The problem that this bug illustrated is that when an object is mirrored and then NU scaled along an off-axis, rotation is created as a byproduct of the scaling. The scale controller doesn't know how to deal with rotation, so it just tosses the rotation out. As a result, the object appeared to rotate (the rotation that was tossed out would have counteracted this rotation). The fix properly deals with the rotation generated by the NU scale. And as mentioned above, enabling this code at worst will enable some other totally obscure NU scale related bug (so at the very least you shouldn't worry about it destabilizing the program in general).

BUG #: 60009


CODE FIX: Track View filters settings are now saved with the .max file, even if you haven't closed the TrackView before you save the file.

BUG #: 60005


CODE FIX: Closed Track Views now reopen in whatever mode you had them in before you closed them.

BUG #: 62613


CODE FIX: Binding a non-geometric object to a spacewarp doesn't reset the scaling anymore.

BUG #: 36894


CODE FIX: In EditableMesh objects, the Face/Tessellate/Edge Tension field doesn't become greyed out anymore if the Sub-Object mode is changed or exited when Face-Center is active. In addition, the Tessallation and Explode radio buttons are not interconnected in the described way anymore.

BUG #: 33174


CODE FIX: Track View Note keys are now correctly cloned using <Shift>+move.

BUG #: 32936


CODE FIX: Adding a Note track doesn't cause a blue dashed line to appear at the current time line anymore.

BUG #: 32951


CODE FIX: Track View's Show Selected Key Stats updates the selected key's time value correctly now when the time display method is changed.

BUG #: 60007


CODE FIX: Double-click works in Track View\Delete Track View correctly now.

BUG #: 33957


CODE FIX: Implemented the API that JR requested to access the 5 checkboxes in Key Steps (Selected Objects Only, Use Current Transform, PRS).

BUG #: 64124


CODE FIX: File\Reset now collapses the Environment and Medit Materials tracks.

BUG #: 36787


CODE FIX: File\New\Keep Objects now restores Out-Of-Range types.

BUG #: 64746


CODE FIX: Binding a child node to its parent for bones w/IK controller doesn't crash the program anymore (it correctly brings up the illegal-bind alert). Note that you can bind an IK controller node to a node that is an ancestor but not part of the system. For example, if you create a chain of bones with the assign to root option off then the root of the chain is not part of the system and so it is a valid bind candidate.

BUG #: 64868


CODE FIX: Doing an undo of bone creation after switching applications doesn't crash the program anymore. Now, if you switch to another app while making bones, it will terminate the create process.

BUG #: 64832


CODE FIX: Multiple animated Volume Select mods don't leak memory anymore.

BUG #: 64436


CODE FIX: The program won't crash anymore if you begin to create an object via the keyboard creation process, then click once in the viewport, and then Undo the parameter change. This is a special case in which the first object created allows you to edit its parameters before that object is actually part of the scene. As a result it is possible that the object can be deleted (by canceling the creation as the bug illustrates) however the object is added to the scene after the object was edited (which is strange if you stop and think about it) so the undo for the parameter change is still left on the undo stack. The solution (and there is no other way around this) is to special-case the hell out of it. Now, if you cancel the creation of the first object (the one that lets you edit its parameters before it is in the scene) then the undo stack will be flushed. This shouldn't destabilize things, but you never know...

BUG #: 64464


CODE FIX: The Z-axis constraint resets correctly in this case now.

BUG #: 64604


CODE FIX: A check has been installed which prevents D&D between the modeless and modal browsers.

BUG #: 64751


CODE FIX: D&D of maps in cases in which you're dragging an instance of a map into one of its own slots is now trapped with an "Illegal Operation" -- "Can't Make Circular Reference" alert (and the drop is inhibited). Note that a crash would also happen (that's now fixed) if you clicked on a map button, selected checker, clicked on one of checker's sub-maps, browsed Medit and double-clicked on the checker map.

BUG #: 64752


CODE FIX: D&D of Material as an instance from the Navigator doesn't cause a crash anymore. (This was the same bug as 64751, above).

BUG #: 64626


CODE FIX: D&D on multiple selected objects now brings up the selection/individual dialog when you drag over an object that already has that material assigned to it.

BUG #: 64624


CODE FIX: The Interactive radio button for the Blend Material is sticky now.

BUG #: 63453


CODE FIX: A crash doesn't occur anymore when a mirrored loft's subobject shape is shift-cloned along the Z-axis and you undo the operation.

BUG #: 64860


CODE FIX: IK Controller Parameters don't appear in the Hierarchy/Link Info panel in this case anymore.

BUG #: 64757


CODE FIX: Rotation Joint Parameters paste to multiple selections of joints correctly now.

BUG #: 64755


CODE FIX: Instancing a submaterial to the Type button works now. Note that we're unsure of the stability of this fix. There was some code previously installed to explictly prevent this, but it was put in so long ago that we forgot why it was there. That preventative code had to be removed in order to fix this bug, so who knows... it was either vestigial or we just caused another bug (or bugs). It needs heavy testing.

BUG #: 63157


CODE FIX: Opening old MAX 1.2 material libraries crashes MAX.

BUG #: 64569


CODE FIX: Spinner values in the Medit can be undone and redone now.

BUG #: 64625


CODE FIX: The Medit Browser doesn't list Blend materials as "Facing" and "Back" anymore.


BUG #: 39947


NAB: Align Min/Center/Max fails for the Lathe modifier's X-axis in this case because the axis in question on the line is zero dimension. Modify the line so it's a 3-D curve (turn the verts into Bezier corners and drag the handles out) and you get the expected alignment.

BUG #: 32432


NAB: Objects can be moved beyond the viewport clipping plane in a perspective view. The suggestion in this report is that we locate the clipping planes based on the scene size. We already do that. What we don't do is update the scene size on every frame. That turns out to be fairly expensive and would slow the interative throughput dramatically. We do recalc the scene size (and the clipping planes) when changing selection sets, changing view types (eg Top->Left), or when a complete redraw (pressing '1') is done.

BUG #: 62902


NAB: Patch grids do not react as expected with linked xforms and heirarchical linking because the linked Xform deformation is not dependent on the position of the object, only the change in position of the control object. Therefore, if you move the object and the control object together (which is what happens when they are both linked to the same parent) a deformation will occur (since the control object is being moved). The reason that the deformation is not dependent on the position of the object is that the deformation happens in object space (after all this is an object space modifier).

BUG #: 64438


NAB: The Volume Light attenuation color is functioning correctly in this case, because the attenuation color changes the color of the light as it is attenuated. Thus in this example, toward the end of the attenuation range you're shining a blue light on red fog, with the result being black. (Try rendering a blue box with a red light and you'll see that it is black). Since the light and the surface have no color in common, the light doesn't reflect off the surface. This is the same principle that those red/blue anaglyphic stereoscopic glasses/images work on.

BUG #: 64440


NAB: Delete in the Edit Menu deletes the object correctly in this case. The MeshSelect modifier just selects, not deletes subobjects.

BUG #: 64476


NAB: Make unique doesn't change instanced modifiers because the modifier is not instanced. It is the entire derived object that is instanced. We went through this whole issue with SE/techpubs before r1 shipped and you might want to discuss this with him for more info.

BUG #: 64660


NAB: This link behavior is normal expected behavior, because the parent controllers are never instanced. When one of the child objects is unlinked, the controller is modified to account for the change in parents. Since the controllers are instanced, they are both modified. When both children are unlinked, one of the children has not disappeared (but is merely on top of the other object.) Why? Because the controllers are instanced.

BUG #: 64602


NAB: If multi/sub-object submaterials are other than "standard", the color swatches at the multi level don't work because the standard material is the only one that has an adjustable diffuse color, and that's what the multi is accessing with the color swatch at the multi level. With materials like Blend, exactly what color would you be adjusting?

BUG #: 64597


CODE FIX: The Material library is updated without explicitly saving when D&D or doing a Put to Library. This is intentional and an important feature. When you do a Put To Library , or drag a material into the library, we do an "auto-save" so that folks don't have to remember to save their library explictly later. This treats the library like a "state" machine, which is very important in this case.

~QE NoRepros

BUG #: 64448


NO REPRO: Cannot repro this case in which doing a 'Select All' with Mesh Select crashes the program.

BUG #: 64496


NO REPRO: Cannot repro this case in which doing a 'Region Select'/Edge in Mesh Select crashes the program.

~QE NoFixes

BUG #: 31028


NO FIX: The Track View Notes dialog does not wrap text, and it's not even clear whether or not it should wrap text. (We never said that it should in the spec anywhere). Plus, since the Windows text edit field doesn't provide this as an option, it certainly isn't worth the time it would take us to write it. Call us lazy if you want!

BUG #: 64488


NO FIX: A reference line can't be inserted into stack in this way, and it would be extremely convoluted to make it possible to insert a 'Reference line' arbitrarily (since it would involve splitting derived objects apart). The modifier pipeline is way too complex to even get close to issues like this (ever).

BUG #: 64494


NO FIX: This wish to remove the reference line from the stack is already doable. Note that there is no harm in the empty derived object and if you really want to get rid of it you can do so by selecting the base object in the TrackView and clicking on copy and then selecting the 'Modified Object' and clicking on paste.

Update notes (for version 0.2.9, 6/1/97):

~OpenGL Virtual Viewport

Implemented the ability to zoom and pan in a perspective viewport when using the OpenGL driver. This feature, called the OGL Virtual Viewport, is particularly for folks who are doing film work and need to align 3D elements very precisely to 2D matte backgrounds. The VV is accessed through the Viewport Configuration/Regions dialog, and (as mentioned above) is only enabled when running with the OpenGL driver.

The VV lets you to zoom in on a subregion of any viewport (perspective, camera, spot, ortho, whatever) without any distortion of the viewport objects or background. Here's how it works:

Basically, independent of your viewport screen resolution, you can have up to a 4096x4096 virtual viewport (this is the OpenGL limit) and then just window into that region for what you want to see in the MAX viewport.

There is a white zoom rectangle in the Viewport Config/Regions page which shows the relative size of the real viewport window inside the virtual viewport that is current. The window can be dragged around to "pan" within the virtual region. The zoom level can go up to 4x, and note that if you've previously been zoomed in and then reset your zoom level to be zoomed farther out, you won't get the additional image in the white rectangle until you actually update the display (this is because of the need to conserve memory).

The zoom and offset parameters are saved in the .max file, but the use of the virtual viewport is always toggled off on file load. This is because SZB does not support this feature, so we don't want it turned on in .max files.

Keyboard macros:

One keyboard macro (Virtual Viewport Toggle) has already been added (to make it easy to use both view modes conveniently).

Additional macros for zooming and panning dynamically while you're in this mode will be added this week for the 0.2.10 build.


Most Max operations work fine in virtual viewport mode. But note that it really is a virtual viewport, so the viewport label only appears in the upper left of the virtual region, and won't appear on screen if your viewing window does not include the upper left. (The right click is still traped where the label would be, so you can still get to that menu.) Also, the arc rotate circle is based on the virtual region, etc.

Right now, there is a bug with region select, in that the XOR'ed region boundary is drawn in the wrong spot. The actual objects that get selected respect the region drawn out -- it is only the dashed line display that is wrong. (This is much harder to fix than it might look, but we're working on it.)

Tooltips were appearing in the wrong place in virtual viewport mode, so right now they are disabled when working in a zoomed view. We may or may not be able to get those working in this mode.

There may be other problems where we mix screen coords and world coords in one operation. Some/most of these will probably never work, and we'll just have to document the limitations.

Due to the nature of this functionality, this cannot be implemented with SZB (so don't bother asking for it). Anyone doing feature film work with a need for this feature ought to be able to afford an OGL-accelerated board.


Not much new on the surface in the Dynamics system this week. We're still grappling with the hiearchial/resting/sliding solutions (as it turns out, it's not possible to separate these out as we previously thought, so they all have to be done simultaneously). High hopes for 0.2.10.

The Edit Object dialog now retains the state of the last object edited. It remembers which object was last being edited while Dynamics is open not only within a session, but it will remember the next session when you open the existing, saved simulation and do an Edit Object.

~YG new features and general issues resolved

At RL and MF's suggestion, we've changed the Motion Blur default durations for IMB and OMB to .5. As mentioned last week in the 0.2.8 RNs, things have changed when you use IMB or OMB with video post SMB. The IMB and OMB duration used to be absolute. Now it is relative to the sub frame duration.

At JB's suggestion there's now an "Open All" command in the rollup panel right-button menu.

Implemented a suggestion from RL re the new particle system's Particle Spawn/Lifespan Value Queue in which (since these are relatively low numbers) the menu space would be better utilized (and less scrolling necessary) by a long thin window down the right side of the roll-up with buttons on the left.

Cleaned up some minor UI issues with PCloud:

Assigned the 'C' scaling to the Rad/Len spinner.

When Sphere Emitter is chosen, the Width and Height spinners are disabled.

When Cylinder Emitter is chosen, the Width spinner is disabled.

When Object-based Emitter is chosen the Width and Height spinners are disabled.

Implemented a New button for the Uniqueness seed in the particle systems as per KM's suggestion (this is similar to the atmospheric apparatus New Seed button). (Note that it uses the system clock, so note that if you push the button twice in one second the seed won't change.)

JC had noted that it would be very useful to be able to save/load presets for the Scatter object, and although it was nontrivial, we've added it (it is nice). In the process we fixed a general problem with the load/save system for all particle systems.

Changed the label of the Keyboard Pref page checkbox to "Use Only Main U.I. Shortcuts".

Implemented a suggestion that MM had regarding changing the way object tooltip display works with grouped objects. Now, when an object is in a group, the tooltip shows "[Group01] Object01" whether that group is open or closed. But note that if Group01 happens to be in ParentGroup, then the tooltip will read "[ParentGroup] Object01".

Added an API that CJ asked for in the MC utility. Here's his note about it:

In the keyboard device I keep track of specific keys that are registered from the device bindings. In device::Cycle() I track the changes for each registered key (saving up/down status and event time), that later can be queried from the device binding.

Because I want to have a number of parameters, like attack/decay/release slopes and they are time dependent I need to know the current time from the device binding's Eval() method. I currently manage it by saving the last Cycle() time in the keystatus kept by the device, but it's kind of kludgy. A time parameter to Eval() would be great.

Finished the work we started last week on the Arc-Rotation code in which it now rotates around subobject selection sets. This involved setting up the Interactive (keyboard driven) rotations to also go about the subobject center.

Added a new preference to the Preferences/Viewports dialog that allows folks to select two options for the middle mouse button. You can choose from the Pan/Zoom option (which is what the middle mouse button has been doing up until now) or the Stroke option which activates the new Stroke Recognition system.

The state of this option is saved in the INI file.

A new keyboard accelerator called 'Middle Mouse Button Toggle' toggles this option so you can seamlessly switch back and forth between both modes.

Note that you'll probably want to increase the speed of the middle wheel/button to match your mouse speed. You can do this by going into the Control Panel's Mouse applet, to the Wheel page, and clicking on the Wheel Button settings button (crank it all the way up for best results).

Implemented a suggestion from RL in the TrackView Fcurve editor that lets you switch between the Xzoom and Yzoom if you're in one of the constrained zoom modes to the other constraint by holding down the Ctrl key while zooming. So, if you have X-axis-zoom active, you can press Ctrl and it toggles you to Y-axis-zoom. (Note that this is just a temporary switch and does not actually change the state of the fly-off.)

MeshSelect modifier: Added a Select by Material ID option to the face SO level of the MS modifier. A spinner lets you set the ID that you want selected. Pressing the 'Select By Material ID' button then executes the selection. Holding down the CTRL key will add to the current selection and holding down the ALT key will subtract.

Implemented a suggestion from PW for the ability to select a bone by clicking on the end effector or the orange axis icon.

Implemented a suggestion from KM for the UVW Unwrap modifier to give folks more precision abilities. Added three spinners at the bottom of the Unwrap UVW edit window. These display the commonality of values for selected texture coordinates. They then let you type in values to modify the selection. These spinners use the texture coordinates, not pixel coordinates. (It isn't really feasible to add an option to use pixel coords (as suggested) since the Unwrap modifier works with texture maps in general (not just bitmaps), and pixel coordinates only make sense with bitmaps. This will also handle the part of the wish that asked for snapping vertices to the edge of a map. Instead of snapping to the edge of the bitmap, you can just type in the value 0 or 1 in to U, V, or W depending on which edge you want.

The Medit "Render Texture Map" sample-slot right-click command was previously only able to render a static image of the map on the specific frame requested... no matter whether or not the map was animated. This was very limited, considering all of the cool map animation effects you can get in Medit. So, we've added the ability to render an animation sequence now (and that required an entirely new "mini rendering" dialog UI in that function). Once you choose the function, you have the ability to set the:

Single Frame

Active Segment

Range: Start_____ End_________

Nth ?

Width, Height

File Name:______________

Save to File (button)

Note that there are still some loose ends to deal with here regarding saving state to the INI file, escaping while rendering (which you can't do now) and a few other minor things we'll get to. (Also note that this VFB is not a zooming/paning VFB while it's rendering, and we're not sure if it ever is going to be.)

Significantly tightened up the Spawning rollup in the new particle systems. Some of the radio buttons that are now laid out across-wise needed to be reworded to fit, so the Scaling "Smaller, Larger, Both" buttons are now "Down, Up, and Both". Likewise the "Slower, Faster, Both" are "Slow, Fast, Both". Also, the text "Generations after First" has been changed to "Spawns" because it implies the number of additional particle generations, which is what we're talking about here. The Multiplier area has been removed and Multiplier has been placed under Spawns.

~YG Bugs Fixed

Fixed the problem mentioned in last week's notes about how a File/Merge with groups wasn't deleting old groups if they were open. Also fixed it so that during a Replace operation groups are ignored and instead, all group members are shown (regardless of whether group is open or closed). This lets you replace things node by node regardless of group status.

Fixed a bug that JB found in which the Blend material was broken.

Fixed a bug that both RF and MM found simultaneously in which the program would crash if you clicked on the By Object checkbox in the Medit Browser while doing a Get Material / From Selected.

Fixed a problem that RF found with visibility tracks not importing correctly from MAXr1.x files.

LM brought up a case in which he rendered an .rla file (8bpc), brough up the VFB color picker (and the Type showed as 64-bits) and then moved the picker around (the % on RGBA didn't show the % sign when the percent was >=10%) and then brought up View File (and the type showed as "Undefined Type"). Partial fix and partial NAB. We fixed the problem of the "%" not showing up, and now when you use ViewFile, the type shows 32Bits. It's not a bug that it shows 64 bits when you're viewing the rendered image. The rendered images is always at 64 bits. It doesn't tell you the resolution that it will be saved at... that's just the way it works. It's telling you the type of bitmap in memory.

Fixed a bug that MF found in which the labeling of Multi/Sub-Object material wasn't displaying the material ID at the sub-material level. Plus, in the "Material/Map Navigator" the material ID label appears flush left.

Fixed a bug that MM found in which the last few materials in a multi material were inactive.

Fixed a bug that MM found in which the program would crash if you dragged a submaterial to a node and then dragged the root multi material to the same node and said "Replace it" at the prompt.

Fixed a bug that JW found in which instancing objects within a PArray would crash in a particular case.

Fixed a bug that MS found in the ChamferCyl fillet routine in which the fillet param would be inoperable under certain circumstances.

Fixed a bug that MR found in which SuperSpray and PArray weren't working with Image Motion Blur.

Fixed a problem that RL found with the particle system's Tetrahedron size (they were too big). The size of these particles has been reduced by a factor of six, given the same input.

Found a problem with the new particle system deflector implementations and made a minor change in order to make SDeflector's operation consistent with Planar Deflector's operation. There's a sample file called CONTAIN.MAX which is a good example of these working correctly now.

Fixed a bug that MM found in which the program would crash if you toggled the Edges Only bit and then changed the topology of the object. Changing the state of that bit caused the mesh to regenerate the edge list. Doing this free'd the old copy of the edge list, but this was bad since that old edge list pointer was being stored other places in the object pipeline. When that free'd data was accessed it would crash.

While using Purify (the new beta version) and BoundsChecker during tracking this down, a number of memory-related problems presented themselves and were fixed.

Fixed a problem that JB found in which the Animate Button color preference wasn't hooked up.

Fixed a bug that CJ found in which the Motion Capture Utility didn't update when controllers were deleted.

Fixed a problem that LM found in which the the Acquire function in the UVW Mapping modifier was not an un-doable action.

Fixed a bug that GP found in which, if you went into the MoCap dialog on a machine without a joystick and hit test, the error dialog would come up re needing a joystick and then required many mouse clicks to make it disappear.

Fixed a strange and heinous bug in which some motion capture files would cause the entire OS to freeze when you tried to record. There apparently is a bug in the NT joystick driver in which NT will freeze up when one of the joystick APIs is called from another thread. Critical sections have been placed around these APIs so they won't be re-entered (which appears to work around the problem).

Fixed a bug that JB found in the Displace modifier in which luminance center wasn't working correctly in certain conditions. (Note to JB that bitmap blur is different then texture map blur.) Texture map blur was also adjusted so that it would reach its maximum at 10.0 as well.

Fixed a problem that JW found in which the scale parameter on the Face Extrude modifier had an inconsistent value range and dimension.

Fixed a bug that RS found in which the program would crash when loading files with noise space warps that were bound to objects.

Fixed a bug that JC found in which, if you deleted bones in spider.max and then Undid the deletion, the program would crash.

Fixed a bug that LM found in which, if you had cut a space warp binding in the Edit Stack dialog and attempted to paste it into the ====== line, it wouldn't paste.

Fixed a bug that RL found in which the program would crash if you used the Mesh Select/Edge/Select Open Edges button with an edge selected.

Fixed a bug that LM found in which you'd get an assert in a specific case when doing a Select By (vertex) Color. Note that part of his report about the color swatch displaying black at seam vertices is a NAB (because there is no common color at the seam vertices). At the seam, the vertices have both white and blue color verts associated with a particular vert. So the vertex color is not actually black (thus doing a Select by Color with black will not select any verts).

Fixed a crash bug in the Motion Capture utility that JB found. Note to JB re his other notes in the bug report:

Prob A: Not much can be done about this. The progress bar APIs automatically hide the track view, medit, and video post so you can mess with them during the operation.

Prob B: The operation was aborted before any new keys were created. Hit undo to get your old keys back.

Prob C: If you stop the motion capture it will still create sample keys within the specified interval. Undo will remove them.

Prob D: There not much that we can do about the fact that folks can right click on the panel or viewports. When that menu comes up, the motion capture will appear to pause while the menu is up. This is harmless... you simply shouldn't right click during a motion capture.

Fixed a problem that LM found with 32-bit rla files that had ZCoverage on inhibiting creation of GBuffer channels.

Fixed a problem that RL found with the Expression controller in which the Assigned To label was implying that the references weren't working by reporting an error. The references were actually working, and now the "Assigned to" label properly shows the assigned node's name.

Implemented more color preferences (that previously weren't hooked up): Here's the list of what's not done yet:


patch lattice


space warps



selected gizmos

particle emitter

camera horizon

end effector string

selected joint limits

joint limits


Fixed some vestigial issues relating to Undoing changes in Video Post filters. (Negative is the only filter that actually uses this code... only animatable filters ever will use it.)

Fixed a problem in the Job Submission dialog in which the "Properties" button would be enabled even before connecting to a manager. If you pressed it (with no server selected) the dialog would present an error and then exit Max.

Fixed a bug that JC found in the IFL utility in which, if you entered entered a segment from 30 to 20 (inverted), the IFL utility would create an output that depended on your file list. The old algorithm would sort the list inverted and get the nth element from there. Now it correctly inverts the count as opposed to the list.

Note that JC also reported a problem with this utility in which, if he wants an IFL to start on frame 20 of a sequence and end on frame 30, entering those values results in an IFL that starts on frame 19 and ends on frame 29. This is a NAB because if you have a bunch of files numbered 0,1,2,3... your first file is file # 0. If you select frames 20 through 30, the first image file is actually # 19 (the 20th file) and the last one is # 29 (the 30th file).

JC also asked for a PING-PONG button in this utility. Ping-ponging is not a function of an IFL (it's a function of the application that loads the IFL, for example in our bitmap plugin we've got Loop and PingPong options).

Fixed a bug with Tab order in the IFL utility.

Fixed a bug in which the Hide/Face option in EditableMesh objects wasn't working properly in shaded viewports.

Fixed a bug in the compound object selection code in the TrackView in which, when you clicked on a operand in the TV to jump to that operand in the modify branch, the TV didn't always redraw to show the little blue circle icon as selected.

Added tooltips to both the MeshSelect modifer and EditableMesh object's face level selection methods.

Modified code in the Boolean and Morph object so that you can right-click or ESC out of their pick modes and you'll get back into the previous mode. Note that if you right click or escape out of the pick mode while in the Create panel, then you will be taken out of the create mode as well as the pick mode. There's nothing that we can do about that, but this doesn't happen in the modify branch of course.

Fixed a bug that YB found in which there was no standin class for motion capture devices, so if a file was loaded and the motion capture DLL wasn't present, the file would fail to load.

Fixed a Material Effect Channel bug that PW reported in which using a Blend material and multiple effect channels would give you an incorrect result when inverting the mask channel.

Fixed a problem that JJH reported in which tabbing in the Multi-material didn't follow any set pattern.

Fixed a viewport right-click menu problem in which if you changed the shading mode to one of the "Other" selections, the third item on the object right-click menus would get changed to the name of the shading mode.

Fixed a display bug that JB found in which the display of spawned particle systems wasn't updating correctly when you used the Play button to play an animation after scrolling around with the time slider.

Fixed a bug that TM found in which, if you set the PArray Variation value to a non-0 number, it would crash when rendering.

Fixed a problem that MR found in which the PArray "Fragment Materials" spinners weren't greyed-out when the "Use Material From" state was set to "Icon".

Note that MR and RL have brought up issues relating to particle system updates and interruptability. This is actually worse in 0.2.9 than it used to be, not better (due to the new shaded particle rendering). We will attempt to add ESC intercepts during spawn and fragment operations over the next few weeks, but it's extremely nontrivial so it'll take time. Please have patience.


JB had asked if the Cellular texture was working as a Displacement map. (It didn't seem to for him.) The Displace modifier uses the UVW coords as 3D positions when evaluating 3D textures. So, if you want a 3D texture map to line up with the displacement you have to select UVW1 from the 'Coordinates' rollup instead of XYZ. Another thing to watch out for is to make sure that you have enough geometry to accurately represent the displacement. Otherwise you'll get aliasing -- which looks like random displacements. There's a sample file included with this release as an example of a cellular displacement map/texture map that lines up (CELLDISP.MAX).

PW asked for the ability to play sound during a MoCap recording. This isn't going to happen. For one, if a MIDI device is being used, the sound card may not be able to deal with both playing back the audio and dealing with MIDI. But more importantly, the motion capture code is running in another thread and there would be tremendous problems getting the sound to playback simultaneously (there could also be serious problems with the CPU being over taxed).

RL had noted that changing the name of an object that's participating in a Dynamics simulation removes it from the simulation. This is because Utilities don't participate in the reference hierarchy, and there's no way around that. If you want dynamics that participate in the reference hierarchy, get Hypermatter!

RL made a comment that in Dynamics, bounce seems "low". "Both surfaces have to be at 1.0 to get a superball effect. Shouldn't we be able to get a "full return" bounce from a single object's setting?" Yes, you need both surfaces to have bounce values of unity to get superball bounce. You don't get a perfect bounce with only one bounce coefficient because that would allow you to bounce a superball off sand and get a perfect bounce.

RL had noted that the dynamics simulations seem a bit slow with default Gravity. "They look more realistic to me with Gravity at 2.0." People don't realize how big the things that they're building are. Draw a cube in default units and likely as not it's fifty or sixty units (INCHES) across. That's why miniatures are filmed at higher speeds, so the image on film can be effectively slowed down. Once we get everything working in the Dynamics system, we can look at perhaps some additional standardization here.

~Non YG Bugs and Issues Resolved


Added status bar and progress bar

Browser.cfg is functional. Now the browser location, sorting/thumbsize settings and the current directory are saved after each session.


Crash bug from 0.2.8 fixed.

Changed triangle/poly icons back to "Eliminate Hidden Edges" option. (Probably for this week only.) This will allow the beta users to get used to quad output before they're faced with what looks like quad input.

Implemented keyboard motion capture device. Notes:


Key Assignment:

Assign - Press this to assign a key.

Drop List - Shows you which key is currently assigned You can also assign special (like arrow keys) keys here

Envelope: The graph shows you a representation of the amplitude curve over time.

Attack - This is the time it will take after pressing the key for the value to fade in to its maximum.

Decay - After the value has reached the maximum value, this is the time it takes to go down to the value indicated by Sustain.

Sustain - After the initial Attack and Decay slopes, sustain represents the value that will be hold until you release the key.

Release - After releasing the key, this is the time it takes to fade out.

Parameter Scaling:

Time - This is the scale of the Attack, Decay and Release parameters. It represents the number of seconds one unit is. If this value is 1.0 then an Attack value of 1.0 will equal to one second.

Range - This is the maximum output of the controller.

~Object Snap (OSnap) System (non YG)

Integrated VIZ-type Object Snaps into Athena. In addition to information about OSnaps here and in the spec.doc, check out developer notes in 029snaps.doc.

Object snaps are turned on by clicking the Osnap Toggle on the status bar. Right click to display the Osnap dialog. This is a modeless dialog which you can leave up while you work. The list of snap modes is determined by which snap plugins are present at startup. The list scrolls when necessary.

You can select multiple snap modes simultaneously. Each snap mode has an accelerator key which will work in mid drag. Note that the plugin accelerator button must be active.

Object snaps work anytime that SnapPoint is called. In particular, it works during object creation and transformation.

Resolving ambiguities:

For each cursor position, there may be numerous potential snap points. By default, the "best" one is displayed. You can cycle through the candidate list by pressing the TAB key. This functionality is implemented with a special eventrouter for the TAB key. (JH: I could probably be convinced to reimplement this as a user configurable accelerator. On the other hand, I think there's a case to be made for leaving it as is. )

Notes on Translation:

Snapped translation generally ignores the state of the transform constraints. (i.e. all moves are in 3D) If you want the constraint to be observed, check the appropriate box on the settings page of the Osnaps dialog. (JH: I'm open to suggestions as to how to integrate this better. One thought is to add an XYZ flyoff for unconstrained movement.)

Absolute mode is now allowed in perspective viewports, which was impossible in MAXr1.x. Please be on the lookout for bugs that this may cause.

The original snap implementation required the first point to be on the selection set. This requirement has been relaxed. For example, select a sphere, lock the selection and move it by the length of a neighboring box.

Notes on rotation and scaling: You can rotate and scale a selection about a snapped point. This may not be working at subobject level.

Known Bug: When the osnapmanager detects a hit, it changes the cursor to indicate that it has a lock. This is currently disabled.

~QE Bugs Fixed

BUG #: 62656


CODE FIX: Translations don't become exaggerated when switching from create to move in this case anymore.

BUG #: 63475


CODE FIX: In the Particle Spawn rollout, the Pick Object button is disabled (along with the rest of the Mutation Queue controls) when Standard or Meta Particle types are selected.

BUG #: 59874


CODE FIX: Space Warps applied to particle systems don't cause bursting/puffing anymore. This was a fascinating problem. All Max particle systems (including Spray and Snow) have or had this problem. It is simply more apparent when subframe offset parameters are available that serve to distribute each frame's particles through a volume, because each volume of particles from a particular frame is being clocked through the spacewarp force integrals en masse. As a volume of particles is born, we push that volume into Max's update system and each particle is represented by an age, position, and velocity. When particles appear through a volume defined by motion and timing subframe offsets, the particles further from the "source" (those with the timing offset values nearest unity) have an effective age offset*dt longer than the particles whose offsets are zero and near zero. Thus, those particles (even if they appear one frame's motion distant from the emitter) should actually have already applied that time's force integral at the first time at which they appear. On the other hand, particles with near zero offsets should have no force applied on the first frame of their existence since they will, in effect, not have lived long enough for forces to take hold yet. For particle systems whose individual particles already include an offset parameter, the repair is trivial: in the first instant of their lives we apply only a pro rata share of the spacewarp force integral according to offset*dt rather than using dt alone. See the sample file PUFFTEST.MAX. Note the smooth streams of spacewarp modified particles emitted from the PArray, SuperSpray, and Blizzard icons. This is the first time in Max that particle motion has come this close to real, analog motion. Also note the absence of PCloud from this sample scene. Because PCloud creates particles through a volume, no puffing or grouping of particles is ever possible in the absence of spacewarps. However, as soon as a spacewarp appears in the motion solutions, we have precisely the same problem as with the other particle systems. However, because the timing offset is not a part of the particle definition, there is no easy way to accomodate the pro rated force integral. For PCloud, the only way to fix this is to add a psuedo offset that will serve to alter the first frame's group's force integrals. Since PCloud distributes particles at random throughout a volume, we've made this change there as well. For Spray and Snow, since they create particles across a surface and the distance from the surface is related to the age, the only way to fix this problem is to add a complete subframe timing age offset solution (which is not going to happen).

BUG #: 63676


CODE FIX: Meshsmooth strength adjustment doesn't crash the program anymore.

BUG #: 63494


CODE FIX: The state of the Opaque Alpha switch in the Matte/Shadow material is sticky when loaded now.

BUG #: 59842


CODE FIX: You can now drag the third value of 0 in the new extended primitives. The mouse move UP now tops out the range of the fillet or blend, and the mouse move DOWN minimizes it. This was done for L, C, ChamferBox (which also allows zero fillets now), Spindle, Oil Tank, Gengon, ChamferCylinder.

BUG #: 63650


CODE FIX: In the new particle systems, the BBox display option is now disabled when Instance Geometry isn't selected.

BUG #: 63616


CODE FIX: You can't highlight multiple presets in the Load/Save Presets rollout aymore. (Note that this was also fixed in the Mutation Queue lists.)

BUG #: 64295


CODE FIX: In Metaparticles, when Automatic Coarseness is selected, the Coarseness value is disabled now. This is the general param disabling bug that was in 0.2.8 (affecting all disabled spinner fields everywhere in the program).

BUG #: 64279


CODE FIX: In PCloud, Variation is disabled when Random Direction is selected. (This is the same problem as 64295, above.)

be: 64288


CODE FIX: The Metaparticle parameters are correctly disabled now. (Same as 64295, above.)

BUG #: 64085


CODE FIX: In PCloud, the Width setting doesn't affect the letter size when the Sphere or Cylinder emitter is selected anymore.

BUG #: 64115


CODE FIX: Edges only display doesn't crash the program anymore.

BUG #: 63850 ]


CODE FIX: The conversion of a Line object to an EditableSpline object via the EditStack shortcut menu results in an "Editable Spline" object type now (instead of a Line). Other results in the bug report (attaching a line to another line object with "Line" object type remaining) are NAB. Note that the report also mentions that a Line ought to inherently be an ESpline object when you switch over to the Modify panel (without even converting), but that's a NAB as well. A Line is a Line is a Line is a... (until you convert it).

BUG #: 31837


CODE FIX: Importing a PRJ file that does not contain any 2D shapes doesn't invoke the Shape Import dialog anymore.

BUG #: 56916


CODE FIX: Max calculates the ZBuffer properly at the objects edges now. The Z buffer value now corresponds to the center of the FRAGMENT, not the center of the PIXEL. This change was necessary to make the coverage make sense. (We made a change last year to accomodate a developer doing a VP plugin (for contouring) which made z be for the pixel center. Since renderer now does sub-pixel fragment merging, the problems they previously had will not reappear with this change.

BUG #: 63830


CODE FIX: The Submit button is not available anymore when no servers are selected in the NJA dialog.

BUG #: 33535


CODE FIX: In the Net Job Assignment Dialog, pressing <Enter> after entering a Network Manager IP adresss connects to the manager now.

BUG #: 63681


CODE FIX: The MeshSelect face selection icon tooltips are there now.

BUG #: 63548


CODE FIX: Moving particle system icons along with other objects doesn't temporarily turns off the effect of space warp bindings until you do a redraw anymore.

BUG #: 63476


CODE FIX: All object types now reset to their default category now.

BUG #: 63829


CODE FIX: These spinners grey out correctly now (this was a system-wide bug in 0.2.8).

BUG #: 60031


CODE FIX: Now, if you just create a rotation end effector, it will locate the end effector at the end of the chain instead of the world origin.

BUG #: 33817


CODE FIX: The bank limits for the Path Controller have been pumped way up to (-999999 to 999999) now.

BUG #: 58440


CODE FIX: The trailing s in the Unwrap UVW's modifier has been removed so that it fits neatly into the button now.

BUG #: 48102


CODE FIX: The middle mouse button is hooked up to the Stroke Recognition system now.

BUG #: 64218


CODE FIX: Selecting View Large Icons from Browser with Browse From=New doesn't cause Max to crash anymore.

BUG #: 58974


CODE FIX: Particles display in shaded modes in the viewports now. Note that this makes particle display (even in wireframe mode) noticably slower, because we can't use our old custom draw code anymore. Plus, it has totally hosed our ability to ESC from particle system creation, and we now have to rethink the entire approach to that (which we're doing).

BUG #: 60004


CODE FIX: Clicking on the Scatter object's source operand in TV now selects it in the Modify panel as well.

BUG #: 59259


CODE FIX: The Percentage of Particles function works correctly now. Note that this is a granular function, with the coarseness determined by whether or not you've got the Use Rate or Use Total setting selected. We have it on our list to possibly increment the spinner field with the arrows by this granular amount.

BUG #: 32377


CODE FIX: Tab now tabs correctly between edit fields in loft deformation windows.

BUG #: 58105


CODE FIX: The Text object's Update button is now disabled when the Manual Update checkbox is unchecked.

BUG #: 63458


CODE FIX: Keyboard Entry parameters now exist for Patch creation. This was fixed for both quad and tri patches. (Note that this was a fairly significant change to the code, but was necessary because the patch grids were using their own code to deal with the parameter rollups, and they were coded before a lot of the UI features such as hilighting the spinner in red when the value has a key on that frame.)

BUG #: 64090


CODE FIX: Selecting a patch or surface as a particle system emiter doesn't hang up the program anymore. Note that technically this wasn't really a patch/surface problem... it was a problem with any flat object in world space. Also, PCloud isn't designed to work with flat objects, so the fix was to arbitrarily define a zone around the flat object to be "filled".

BUG #: 64286


CODE FIX: Now, when you select a particle creation method that's not supported by the mesh display mode, the Viewport Display method reverts to Ticks correctly.

BUG #: 64219


CODE FIX: You can render Free Direct and Target Direct viewports now.

BUG #: 64222


CODE FIX: Saving a Material Library file works correctly in this case now.

BUG #: 64217


CODE FIX: The bitmap plugin can read bitmap paths that includes the "." character now.


BUG #: 63308


NAB: For the nth time, this is not a bug. (There is no discontinuity in the animation, which is the whole point.)

BUG #: 64220


NAB: You cannot put the Magnify window behind Medit by clicking on the Medit title bar because the Magnify window is a child of the Medit. The Browser isn't.

BUG #: 63868


NAB: When you rotate about the Z axis that doesn't mean that you're just changing Z axis of the euler angle controller. You could be rotating about the world Z, the view Z, the local Z... it could be any axis. As a result, when an object is rotated (and it has an euler angle controller) all three of the euler angles are always modified. In the example in this report, the X controller is instanced (and not the Y and Z controller) and he seems to think that means that if he rotates an object about an X axis that both objects wouldn't be affected (which is wrong).

BUG #: 64358


NAB: The only requirement of the validity interval is that after the object is updates, it should contain the current time.

BUG #: 39826


NAB: The Rotation Axis does change in this case when setting a keyframe, but as noted last September, when the second key is created, the last one has to be modified because the rotation keys are relative -- otherwise the orientation at the last key would change. An exact 360-degree rotation is an extremely bizarre concept for quaternions because it really equals no rotation -- so technically the result we are getting is correct. The orientation at the keframes is absolutely correct, however the interpolation is different. This is just one of the artifacts of quaterion math. We took a look at trying to special case this into doing something that humans can understand, but the math just doesn't make that possible.

BUG #: 31309


NAB: This case in which the trajectory of an offset child object whose parent contains

a Path Controller becomes skewed when the controller's Follow option is activated is actually doing the correct thing internally. The math is doing exactly what it's supposed to be doing, but the result isn't what a human being would expect. Again, just like in #39826, the math is just not general enough to make every single case possible. Although what's going on seems simple when you are using the program, the underlying equations necessary to make all this stuff happen are not.

BUG #: 31705


NAB: Maps do have their own unique icons in Track View to differentiate them from Materials. Maps are green parallelograms and Materials are blue spheres.

~QE NoRepros

BUG #: 63558


NO REPRO: We can't reproduce this crash here. (And note that the situation described in the report is not a loop (as mentioned). There are simply two nodes in the same chain bound to the same dummy (which is completely legal).

BUG #: 33958


NO REPRO: We'd need more specifics about these methods needed to retrieve the Last Frame Time, Elapsed Time, and Time Remaining settings in the rendering in progress dialog before we could actually doing anything here.

~QE NoFixes

BUG #: 63910


NO FIX: Although the Torus and Tube objects may slice differently than other objects, there's nothing we can do about that without invalidating all old Torus/Tube files (which we're not going to do).

BUG #: 64389


NO FIX: Although the Bend tracks don't appear in the optimal order, changing the order in TV would make it incompatible with old files (which we're not going to do).

BUG #: 64056


NO FIX: Adding these new keyboard macros is out of the scope of this release (because the flyoff menus are built on the fly to accommodate new plug-in types).

BUG #: 32586


NO FIX: The Use Map checkboxes in the Environment dialog are never going to become disabled if the button says "None."

BUG #: 60146


NO FIX: Pinching can happen when the cap height equals the radius in the Oil Tank primitrive because Oil Tank requires more interoperability range checks than any other extended prim. Because of that, when we started putting in range checks, we found that no single set of tests satisfied all the constraints without arbitrarily limiting versatility. Thus, we omitted a few interoperability checks, and the primitives can "pinch", or turn inside out, when the conditions fall into what might be illegal ranges under some situations. Simply put, it isn't possible to constrain everything properly when all the parameters are animatable and when creation is interactive. If we tried, we'd have to make value judgements about which things should change, and that would give us a huge range of useful parameter sets that would no longer be possible. At some point we have to sacrifice making the utility 100% foolproof to provide a few extra notches of versatility. It won't crash, and the math won't go ballistic, but sometimes the geometry is weird. "Just the way it is."

BUG #: 63684


NO FIX: PCloud Particles can't stay with emitters when they're moving, and here's why. Max's particles exist in the scene as separate little objects in Max world space. There are three ways to create particles in World Space: At a point (Superspray), over a surface (PArray), or throughout a volume (PCloud). Thereafter, the particles drift off into space with a preset speed, spin, and geometry. If you want a particle to accelerate after its creation, in Max you do that with a spacewarp. Or you do it with a specially-designed particle system (like the Sisyphus Halo package, which keeps particles spining in a box emitter and ignores spacewarps completely to facilitate that). Making a particle stay with an arbitary volume is completely beyond the scope of generalized volume filling creation (PCloud) and would be better filled by either a specialized system that defined barycentric coords for an object or by a collision object that affixes the motion of a particle to the motion of an object. When we PCloud was first conceived, we had thought we might have time to create such a collision object. The collision object would find the nearest face of an object to a particle and constrain that particle to the same relationship to that face regardless of the object's motion or animation. Unfortunately, due to the hugeness of the Dynamics project, this object, whichi s basically a straightforward extension of UDeflector never got done. If you keep it on your personal wishlist and contact us around ship-date, maybe we can pull it together to upload it as a freebie after we ship.

BUG #: 62931


NO FIX: Particles don't instance atmospheric apparati because it would require a completely separate plug-in (atmospheric objects aren't geometric objects, and you'd need a particle system that deals with non-geometrics to do this). Note that Atomizer from Digimation does this.

BUG #: 63155


NO FIX: You can't double-click NONE from the browser to remove the assigned material. (You can only drag a NONE material from the browser over the object to remove the material.) This is not actually inconsistent with the ability to double-click on a non-NONE option in the browser because when you do click on a non-NONE option, the slot goes "cold" and has no relation to the actual object anymore. Since there's no such thing as a NONE map occupying a slot (nothingness isn't allowed), NONE can't be double-clicked. The only way that this would make any sense would be to click on the "Type" button and then double click to get "NONE" to the object and sample slot. But as mentioned above, the problem is this: You can't have NONE in one of the medit sample slots. So you're going to have to live with dragging NONE from the browser onto the node. That's not so awful. Note that you can double-click to get NONE into a sub-material of sub-map from browsing from the "Type" button. You should realize that drag/drop is going to become the way to assign materials. (I often don't bring up medit at all: I just bring up the Mtl Browser from the tools menu and start dragging materials onto objects. When you get used to working this way, dragging NONE from the browser seems natural. Regardless, this is never going to change.)

BUG #: 33781


NO FIX: Link Info/Inherit will never be available for objects w/Look At controllers. Lookat controllers already don't inherit rotation and scale. If you don't want them to inherit position, then simply don't link the object to anything.

BUG #: 59713


NO FIX: Absolute orientation animation keys for the TCB controller would require changing the underlying intrinsic nature of how rotation keys work (which would be madness). If you want this capability, use Euler Angle controllers, which maintains keys in absolute format.

BUG #: 48099


NO FIX: This ability for combustion to act as filters for lights is not going to happen. Doing this would require combustion to also work like a volumetric light. This is the realm of 3rd party plugins.

BUG #: 59886


NO FIX: Although when Joints with IK controllers are selected, the Toolbar IK Button is accessible, it would just be too dangerous for us to try to disable and enable the IK button based on what is selected. (In fact, you could have an object at the end of a hierarchy that didn't use IK controllers bound to an object that was at the end of a chain of IK controllers. What would the IK button do in this case? Would it be disabled because the end effector of an IK controller chain was selected or enabled because the end effector of a non-IK controller chain was also selected? This is just one of an infinite number of special-case problems that would be involved. The QA implications are staggering.)

BUG #: 31377


NO FIX: We're not going to be able to come up with any new ways of visualizing constraints. Wiggling the joint limit spinners is a perfectly adequate way of doing it, and setting it up so that the orange axes that are displayed for the IK controller get displayed for non-IK controller bones would be internally convoluted (since there is no way to control when the gizmos are displayed or not without rewriting a huge amount of code, which isn't going to happen).

BUG #: 32940


NO FIX: Grouping the controllers in the Prefs/Set Controllers dialog into types just isn't going to happen.

BUG #: 62932


NO FIX: The ability to use Shapes as Particles would require an entirely new plug-in that could deal with spline objects. You can already do this by converting these shapes to meshes, and that's all that these plug-ins can recognize. R3 wishlist material, for sure.

BUG #: 63481


NO FIX: Interactive IK will never work with Rotate Transform Type In. First I'd like to point out that this bug report has many unnecessary steps, involving binding to a dummy object, setting damping, copying and pasting joint parameters, etc. all of which are irrelevant. Interactive IK has always only worked with the mouse and has never worked with transform type in (and never will). BTW, the new IK controller does work with the transform type-in.

BUG #: 31035


NO FIX: Dealing with looping sound during an animation and adjusting ranges ought to be handled by SoundLab. If it doesn't, then it's an SLab issue.

Update notes (for version 0.2.8, 5/25/97):

~MIDI Motion Capture device

Added new features to the MIDI device.

Tested the Peavey PC1600 MIDI slider controller box with our motion capture system. The Peavey (which is pretty cool BTW) worked fine with the motion capture system before any enhancements were made (mainly because the Peavey controller is so flexible... you can program it to send any type of MIDI message). However since this can emulate other types of MIDI devices, it was useful and enhancements to our code were made to make it more flexible. Notes:

Enhanced the MIDI view: Four fields were added at the bottom of the MIDI view dialog, which display MIDI activity. These are partially redundent with the meters above them, however they provide a different view of MIDI activity. Basically whenever a MIDI message is received it is displayed in these four fields. Of course if a bunch of messages come in really fast they are overwritten, however this still gives some good feedback for trouble shooting. Here's what the four fields mean:

Channel: The channel number as displayed by the meters above.

Event: This is the type of MIDI message. The MIDI device recognizes the following:

Note On = 9

Note Off = 8

Pitch Bend = 14

Controller = 11

There are other MIDI events which the MIDI device doesn't support. However the event will be displayed so that folks can see what's happening.

Velocity: This has different meaning based on the event.

Note Numbers: The corrisponding note number for the message. The 'contoller' event uses this number to identify the type of controller. There seem to be some sort of standard for what these numbers mean. Rather then trying to list each controller type by name it seems to be better to just use the number. Users can wiggle the controller to see the number that corresponds to their controller. We may want to include the list of standard controller number definitions in the documentation. The documentation that came with the Peavey has a very complete list, and we can fax this list to whoever needs it in TechPubs who's documenting this feature.

Added a meter in the MIDI note section for the controller event. There is a spinner which lets folks select which controller # (note number) they want to view.

Added a new trigger type to the MIDI Trigger section of the MIDI device's parameters. The new type is called 'Controller'. Users can select the controller number that they want to use. This trigger essentially works the same as the Velocity option. The 'Sustain' and 'Variable' parameters are available and affect the trigger in the same way as they do for the 'Velocity' option. Essentially the MIDI controller sends a velocity value the same as a keyboard sends when you press a key on the keyboard.

As mentioned above, we could include the list of standard controller # definitions in the documention. However the easiest thing is probably for users to go into the MIDI viewer and tweak their controller to determine which controller # it is.


Found some info from DP at Intergraph about reasons for some of the Intergraph OGL problems. Based on his analysis, our driver has been changed to have the option of not using any of the new "extended" pixel formats. Without using these formats, backgrounds and previews were supposed to work.

Indeed, previews do work now. Unfortunately, turning on a viewport background now with the Intergraph driver crashes NT to a blue screen. We sent e-mail to DP with this info and the source code to our driver and we'll work this out together.

Still dealing with various ELSA-related issues, but since the ELSA folks haven't sent us any hardware yet, there's not much we can do except wait to receive a couple of their display cards.


The Dynamics utility now supports collision between spherical-spherical, spherical-box, box-box, spherical-mesh, box-mesh, and mesh-mesh. Hierarchial link and sliding/resting collision is still to come. As noted previously, by 0.2.10 we hope to have it feature complete, and by 0.2.11 (6/16) we'll be ready for beta feedback on it.

The 028spec.doc covers the basic functionality and UI elements. It also includes a short tutorial.

A bunch of sample files come with this version. Just load them in and hit the SOLVE button:

DYNTEST1.MAX: An example of a ball hitting a box and their respective motions.

DYNTEST2.MAX: A ball bouncing around on a noise-deformed mesh surface, and hitting three walls surrounding the mesh. The ball collisions are computed using its bounding sphere, the tripatch/emesh object collisions are computed based on its mesh surface, and the box collisions are computed based on their bounding boxes. The interesting thing to note about this example (besides the fact that it solves for collisions with an arbitrary mesh) is that the solution will slow way down at around the 80% mark. This is because the ball is coming to a rest at that point, and we still haven't implemented the code necessary to solving for resting states. (When an object is in a resting state, the solution becomes n-squared and the singularities are virtually infinite. This requires special-case code which will be implemented over the next two weeks.) This sequence eats quite a bit of memory while coming up with its solution, partly because of the singularities that it's dealing with near the end.

DYNTEST3.MAX: A simple ball-bouncing-down-stairs example. Solves extremely quickly.

DYNTEST4.MAX: A more-interesting version of the ball bouncing down the stairs.

DYNTEST5.MAX: Similar example to #1.

DYNTEST6.MAX: A box falling into 3 other boxes.

DYNTEST7.MAX: A box falling into one other box. Nice simple example of transfer-of-momentum.

DYNTEST8.MAX: A ball falling into a box, which then hits the ball in the butt on its way out. Good example of friction on the ball material, which is used to give the ball some english.

DYNTEST9.MAX: A ball falling into a box and losing its energy during the transfer of momentum exchange (since there's no gravity in the scene, the ball remains weightless because it's lost its energy).

A Note For Posterity on Dynamics: The literature constantly refers to "minimizing" failures in the solutions and it discusses "best approximation". As we've gotten farther and farther into the code, it becomes obvious why. There are problems that no one appears to have solved. For example, for simpler shapes with lots of symmetry, you might expect a generalized mesh-based collision detection algorithm to be the most robust. And you'd be wrong. It appears as though very simple solids are best represented by a more intelligent representation of their actual shape - which is also the faster solution - and NOT by a mesh representation. In fact, in cases where there's a lot of orthogonal motion and simple shapes, even the most exhaustive solutions will fail to arrive at a correct simulation. Examples: two boxes identically sized and perfectly aligned and contacting one another end-end appears to be a classic case where almost no solution works properly. Another example: two dissimilar boxes dropped end to end using MESH solution methods will find, most likely, six or seven, and not four impact points as might be expected. Specifically, where the edges of the smaller box cross the invisible diagonal edges of the lower box and where the two invisible diagonals cross will all resolve into contact points. Thus, unless the boxes are perfectly aligned and centered, even the most involved routines (along with the simpler methods that we've developed for speed and efficiency) will get skewed by a subset of the impact set being off center, and the upper box will spin as it bounces. It appears as though the only way to completely resolve these problems are to resort to solid representations, and we don't have the horsepower with current cpu technology for that yet. To put it succinctly, without a supercomputer this still has some of the characteristics of black art. Once we get the dynamics code into beta (with 0.2.10), we'll still have over three months to shake down all of the problems that we can find, but it'll never be perfect.

~Stroke Recognition System (aka "The Son of Meier Utilities")

(2346, 2896, 2626): What are Strokes?

Strokes are a user interface technique with which you can assign a command to be executed each time a shape is drawn using the mouse. Strokes can simply run commands, or they can also specify objects to operate on when executing the command.

For example, you can assign the command 'Arc Rotate' to a downward stroke. When this stroke is drawn, it will put you into Arc Rotate mode. This type of command does not operate on objects -- the stroke simply specifies the command. Other commands such as 'Hide Selection' operate on specific objects. You can tell the stroke to hide the object you are pointing at when you begin to draw the stroke, or hide all the objects in the bounding extents of the stroke shape, or hide the objects in the current selection set.

Currently, the Stroke Recognition (SR) system is integrated as a utility, which brings up a modeless floater that you can use to turn the system on and off. Over the next few weeks we'll be moving this functionality into core and hooking it into the middle mouse-button for those with 3-button mice. Until then, you'll have to imagine what it'll be like for the SR system to be immediately available at any time.

Running the Program

Load or create a .max file with several objects, some lights, and a couple of cameras. From the Utility branch, press the More... button and choose Strokes/Strokes. A small window will pop up with a single button 'Draw Strokes'. Pressing this button puts you into the strokes command mode. Inside the command mode the prompt line changes to read: "In stroke mode -- Press the LEFT button and drag to draw a stroke." As mentioned above, all this will go away once the SR system is hooked up to the middle mouse button.

Drawing Strokes

To draw a stroke you hold the left mouse button down inside a viewport, drag to draw a shape, and release the button when done. This will execute the command associated with that shape. As you draw, a series of small Xs appear to show you the shape. You must keep the shape you draw inside the viewport boundaries (points drawn outside are ignored). If you want to cancel the stroke in the middle of drawing simply click and release the right mouse button. This erases the stroke and doesn't execute the command.

If the stroke you draw is not recognized (ie, it has not been previously defined), a dialog box will pop up under your cursor to alert you. From this dialog you may press the 'Continue' button to stroke again, or press the 'Define' button to assign a command to this shape (see Defining Strokes below).

You may hold down the Alt key or the Shift key (or both at once) while you draw strokes (the keys must be held while you're finishing drawing the stroke for them to be recognized). These strokes are recognized as different than the same strokes drawn without the key(s) held, which quadruples the number of easily/quickly drawn shapes. It may also be used to organize strokes by function. For example, you could define all of your viewport navigation strokes (zoom, pan, arc rotate, etc.) to strokes drawn with the Shift key held. Time-related strokes (play animation, toggle animate on/off, next frame, previous frame, etc.) could all be assigned to strokes with the Alt key held. Strokes which operated on objects in the scene could all be drawn without key modifiers.

The size of the stroke is not important. It is the shape that matters.

To test this out, try drawing a vertical stroke, drawn from top to bottom. Using the default .str file that comes with the build, this invokes the 'Arc Rotate' command. With the 'Draw Strokes' command mode active press the left mouse button and drag out a vertical line from top to bottom. The Arc Rotate mode begins. After you're done rotating the view, to get back into the stroke mode, right click the mouse.

Understand Stroke Names

To choose easily repeatable strokes to draw it helps to understand how the stroke shape is analyzed and named. Consider the stroke described above which invokes the 'Arc Rotate' command.

After you draw a stroke and release the mouse button the program analyzes the shape you have drawn and assigns a name to it. It does this by centering a nine square grid over the stroke. As shown below, each internal line segment in the grid is given a single character name.

+-------+------- +------+

| | x | |

| A x B |

| | x | |

+-- G --+- H --+-- I--+

| | x | |

| C x D |

| | x | |

+-- J --+- K --+-- L -+

| | x | |

| E x F |

| | x | |

+-------+------- +------+

Stroke Analysis Grid

12 segments named A through L

If the stroke drawn crosses a particular line segment of the grid, the character associated with the grid line is added to the stroke name. In the case of the vertical stroke drawn top to bottom, it first crosses the H segment and then the K segment. Thus this stroke is named HK. The program stores a table of all the defined stroke names and the functions they execute. If the Alt key is held, the string Alt+ is prepended to the name. Same for the Shift key. If you hold the Alt and Shift keys together and draw stroke HK, the name would be Alt+Shift+HK.

Defining Strokes

Defining a stroke means teaching the program what command to execute when the stroke is drawn. There are two ways to define strokes. One is to hold the Ctrl key while drawing the stroke. When you finish the stroke, the 'Define Strokes' dialog appears. Here you may define the properties of the command to execute.

The other way to define a stroke is to simply draw it, and if it's not recognized, press the 'Define' button from the 'Stroke Not Found' dialog. This will bring up the 'Define Stroke' dialog as well.

Here are some examples that illustrate how strokes may be assigned to shapes:

Example 1: First, let's assign 'Zoom Mode' to a stroke draw vertically from bottom to top. To define a stroke, you hold the Ctrl key and draw the stroke. With the 'Draw Strokes' command mode active, try drawing this stroke by holding the left mouse button down and drawing a vertical line from bottom to top. After the stroke is drawn, the 'Define Strokes' dialog appears. This dialog has three sections: Stroke to Define, Command to Execute, and Command Should Operate On. Each of these is discussed below.

Stroke to Define: This shows the stroke image superimposed over the 'stroke analysis grid'. The first point of the stroke is drawn in green. The last point is drawn in red. All the other points are drawn in white. The stroke name is shown beneath the stroke image.

Command to Execute: This area lets you choose the command to assign to the stroke. If the chosen command is already assigned to another stroke the name of that stroke appears beneath the command list.

Command Should Operate On: This area lets you choose the objects that the command will act upon. Some strokes, such as Zoom Mode don't operate on objects. In these cases the only choice enabled is 'No Objects -- Just Execute the Command'. Other commands that do operate on objects will enable more choices from this dialog. The other options are:

Single Object at Start of Stroke: The command will act on the object beneath the first stroke point in the viewport.

All Objects in the Selection Set: The command will operate on the current MAX selection set.

All Objects in Rectangular Extents: The command will act upon all the objects that fall within the bounding rectangle of the stroke shape. Window and Crossing modes are available when this choice is active.

All Objects in Circular Extents: The command will act upon all the objects that fall within the largest circle that fits within the square bounding extents of the stroke shape. Window and Crossing modes are available when this choice is active as well.

To finish teaching 'Zoom Mode', choose it from the list of commands then press OK. Now, whenever you draw a stroke with this same shape you'll be put into zoom mode.

Example 2: Assigning the command 'Properties' to a stroke. In this example we'll assign the 'Properties' command to a stroke drawn down, then back up. This command brings up the Object Properties dialog box for the selected object. To define this stroke draw from top to bottom, then back to the starting point. Since this stroke is not defined by default, a message box appears to alert you that the stroke has not been recognized. Press the 'Define' button from the dialog. This brings up the Define Strokes dialog. Choose Properties from the command list. Note that the Single Object at Start of Stroke options is selected. This means that this command will bring up the Object Properties dialog on the object that was beneath the first point of the stroke when it was drawn. Select OK and give it a try. Point at an object in the scene and draw a stroke down then back up to the starting point. The Object Properties dialog appears and allows you to edit that object's properties.

Example 3: Assigning 'Hide Selection' to a stroke. In this example we'll assign a stroke that operates on a group of objects. The Hide Selection command takes a group of objects and hides them in the scene. We'll assign this to an L shaped stroke. To define this stroke hold the Ctrl key and draw an L shape, from top to bottom, left to right. This stroke is already defined so a message box appears alerting you and giving you the opportunity to replace it. Select 'Yes' to redefine it. The Define Stroke dialog appears. Select 'Hide Selection' from the command list. Several options are available for choosing the objects that this stroke operates on. Choose All Objects in Rectangular Extents. Then choose Crossing and press OK. To test this stroke, decide which objects you'd like to hide. Draw the L shape stroke such that its extents enclose the objects to hide.

Note: We're currently looking at a bug in which the axis tripod isn't undrawing after some of these commands.

Reviewing Your Strokes

After you have defined several strokes, you can use the Review Strokes dialog to review the list and recall their properties. By default, the Review Strokes command is assigned to the stroke drawn horizontally from left to right. Draw this stroke to bring up the Review Strokes dialog. This dialog has two sections: Stroke Information and Sort By:

Stroke Information: This section shows you graphically the stroke image superimposed on the stroke analysis grid, the name of the stroke, the command the stroke executes, and optionally the objects the stroke operates on. There is also a 'Delete' button that allows you to delete the stroke shown.

Sort By: This section has two radio buttons that let you choose to sort the strokes in 'Stroke Name' order or 'Command Name' order.

Currents Stroke Set: This displays the set that is currently loaded.

Stroke Slider: This area has a scroll bar with which you can scroll through your strokes.

Note: If you have an Intellimouse, it's handy to use the mouse wheel to scroll through the strokes when the slider control has the focus.

Stroke Preferences

By assigning a stroke to the 'Preferences (Strokes)' command you can access the user alterable options for the program. (The default stroke for this is an inverted L that goes up and then right.) These are:

Current Stroke Set: Here you can load/save/delete stroke sets. To save a set, type the name into the dialog and press Enter. To load one, choose it from the Combo box. When you define strokes they are saved to the current set. When you delete them from the Review Strokes dialog they are deleted from the current set (this means that we never have to put up alert dialogs about saving... it's always done automatically). The last set you had active when you exit the program is saved as the default for the next time.

Sort strokes in 'Review Strokes' dialog by: When reviewing strokes, this sets the default sorting order of the list of define strokes to 'Stroke Name' or 'Command Name'. The default is sorted by stroke name.

Show Grid Time (ms): This is the time in milliseconds that the stroke analysis grid is shown in the viewports. Set it to 0 to disable this feature. The default value is 300 (about 1/3 of a second). The valid range is 0 to 2000.

Show Extents Time (ms): This is the time in milliseconds that the extents of the stroke is shown in the viewports. Set it to 0 to disable this feature. The default value is 300 (about 1/3 of a second). For strokes that operate on the 'First Point' a small X is shown. For strokes that operate on items in the bounding box of the stroke, the bounding box is shown. For strokes that operate on the circular extents, a circle is shown which fits inside the square bounding box of the stroke. Window selections appear solid. Crossing selections appear dotted. The valid range is 0 to 2000.

Stroke Point Size: This is the size in pixels that the Xs are drawn in the viewports to allow you to visualize the stroke shape. The default is 4. The valid range is 3 to 20.

Note that there is a limit on the minimum size of a stroke. This was done because strokes that were only a few pixels in size were hard to analyze. It can resolve down to about 8 pixel min for analysis to work ok. The display of the strokes in the dialogs was a different problem. Here, unless they are about 25 pixels min, the name did not correspond to the name reflected in the display window. This was due to rounding error. It's fine with 25 pixels, and that is still quite small. If you draw smaller than that it's probably an error anyway. We just ignore it as if you didn't draw anything (rather than displaying a message box).

Known Problems

Currently, with the program functioning as a utility plug-in, it can be accessed multiple times and present multiple floaters... that's all going to go away once it's built into core. In face it optimally will have no UI at all and will be entirely stroke-driven.

Some commands, such as 'Align', 'Move Mode', etc. will set the active command mode and it won't be restored with a right click. This, too, stops the stroke program. Again, this won't be a problem when it's working from the middle mouse button.

When using 'Delete' with a window selection on a target light or camera, if either the target node or the camera/light node is inside the window, the entire camera/light is deleted (just like crossing mode would do). Folks may be suprised by this since the ENTIRE light/camera was not in the window. There is no way around this one however, and in 99% of cases ought to be the desired action anyway.

~YG new features and general issues resolved

MS and JB both brought up an issue about removing material and map assignment from slots, and we dealt with it by always making the NONE option available when you are browsing both Maps and Materials. Two "None"s now show up, one in the Mtls, and one in the Maps. They have icons to distinguish them. They appear at the beginning of the lists (the "None" mtl at the beginning of the materials, the "None" map at the beginning of the maps). The name has also been changed to upper-case "NONE" so it would stand out as a "special" map. (with the addition of the icons, it looked just like all the other maps).

Added the 35MM 1:75-to-1 format to the render formats list. (Also ordered the David Samuelson "bible" on this subject, and when that arrives we'll add more formats if deemed necessary.)

Lathe Modifier: Added a "flip normals" checkbox.

Virtual Frame Buffer:

VFB zoom cursors are now magnify glasses with +.- signs to the upper left. The center of the magnify glass is transparent. They are also bigger than before, so the center area is big enough to see what's inside.

Set it up so that all of the viewport background image related info (everything in the View/Background Image... dialog) is stored and saved on a per-view basis. When you select "Active Only" the data is stuffed only in the active frame. When you select "All Views" it is stuffed in all views. This lets different views have different image animation ranges, etc.

MF suggested that we add information to the Rendering Progress dialog when Scene Motion Blur is on in which it reports back which sample it is working on. For normal renders (without SMB), it simply says "Rendering Image" as it used to. When doing SMB, however, a "(Sample x of y)" message is appended to the end of the above message (and you see the samples as they are rendered).

Modified the VFB so that a single left-click in it does nothing. The pan/zoom/color controls are now as follows


left-click: nothing (arrow-cursor)

right-click (or drag): info display (eye-dropper cursor)

CTRL puts you into ZOOM mode: (magnifying glass cursor)

left-click: zoom in

right-click: zoom out

SHIFT puts you into PAN mode (hand-cursor)

left-drag: pan

right-click (or drag): info display (eye-dropper cursor)

If you have a 3-button mouse, the middle button will Pan.

If you have an Intellimouse, the wheel will zoom.

Note that zooming in the VFB has been modified so that it keeps the pixel under the cursor in a fixed position (if possible), instead of jumping it to the center of the window. This works a lot smoother with the mouse-wheel, and is just as good (or maybe better) all-around.

Installed a new display in the VFB right-click menu to read the monochrome channel of the image. It's called Mono.

Note that we renamed the tooltip for the monchrome button from "Display luma only" to "Monochrome" because this channel is not technically a lumanence channel (ie, it isn't the Y component of the YIQ model used in NTSC encoding, it's a straight (R+G+B)/3, which is what the renderer would use for the monochrome channel of a material (eg, bump map, self-illum map, etc).

DS had suggested that we add the rendered frame# to the VFB's title bar. It now does it in "camera01, frame 120, (1:1)" format. Also, when you execute the command "Render/Show Last Rendering", it remembers the title from before.

Installed automatic mapping coordinates on renderable splines (all bezier spline-based objects and the helix), loft objects, extrude modifier, and lathe modifier.

LC had suggested that we create a backup file for the MaxHold file (if one already exists). So now, when you do an Edit/Hold with Backups enabled (in Prefs/Files), the old file gets copied to the maxback.bak file in the autoback directory, just like ordinary files do during a file save.

RL and DS had a comment about the new "window-specific" keyboard macros and how they inhibit the use of the Main UI macros when you're in the TrackView, Medit or VideoPost. That's the idea, but if you don't like the way that works, you now have the choice to go back to the way it was for MAXr1. There's a new "Main UI in All Windows" checkbox in the Prefs/Keyboard page. When checked, you can only assign the Main UI macros, and these are used throughout Max. When unchecked, the separate keyboard macros apply. (Note that this option is intersession sticky and is stored in the 3dsmax.ini file.)

Changed a few of the Keyboard macros "Camera Display Toggle" is now "Display Cameras (toggle)", etc etc etc. This was done because there are a lot of other display macros (such as safeframes, backgrounds, trajectories vertex ticks, etc). Now, they all start with "Display" and end in "(toggle)"

In the Render Scene presets, changed the name of "Cinemascope" to " 35 MM Anamorphic (2.35:1), which seems to be the more correct (and descriptive ) name.

We're still confused as to whether the aperture width needs to be doubled for this to make the FOV/Focal calculations come out right. If someone can help us out with it, that'd be appreciated.

Converted the Smoke and Wave maps to use the traditional Max Phase parameter instead of the old SXP Speed parameter to create animation.

Changed Video Post's default resolution to 640x480x1.0 to match the Render Scene dialog's settings. We should've done this a long time ago.

Added a new -v command-line option for specifying the GFX driver independent of what is in the 3dsmax.ini file. The -v is immediately followed by 'S' for szb, 'O' (alpha letter O) for OpenGL (and 'N' for the null driver, 'D' for Direct 3D, but these options aren't useful to the end-user). The letters are not case-dependent.

So, "3dsmax -vo" will start Athena with the OpenGL driver, and "3dsmax -vs" will always load SZB. Note that there is no option to start Athena with a HEIDI driver other than SZB.

This command line option allows users to share an .ini file even if some are using OpenGL hardware acceleration and others are using SZB. (It's also very useful for debugging!)

Implemented a new keyboard shortcut that RL asked for that gets you all the way into the Preferences/Animation/Controller Defaults/Set Defaults dialog. It's called "Controller Defaults".

At FD's suggestion, we've changed the default materials to be Blinn, shininess = 25, shininess strength = 5. (These values provide a matte material with no aliasing at the highlight glancing point.)

Also toned down the "no material" material in both the viewports and the renderer. It's a bit shinier than the default materials, because you can't change it and this lets you see your hilites for light placement.

Installed code to reseed the random number generator with the milliseconds part of the current time whenever it generates a random object color. This makes it always start with a new color and be truly random in the order it produces the colors. Much less boring.

Modifed Medit so that all 24 slots have a different color, with slight modifications, as the default medit colors. Ambient is set to 1/3 of diffuse.

PH had made a suggestion that Arc-Rotation would be much more useful in subobject mode if it rotated about the SO selection set. So now, when in subobject mode, arc-rotate-selected now uses the center of the sub-selection set axis. In non-subobject-mode, arc-rotate- selected works about the selection set axis (as before).

~YG Bugs Fixed

Fixed a bug in which, if you made an object and assigned it a map that was shown in the viewport, then added a MeshSelect modifier and then a DeleteMesh, it would crash.

MM brought up a few issues vis a vis grouping. Some were NABs, others bugs. Detail:


1. Create a Box & make it Group1

2. Shift clone Group1 as a instance to (Group2).

3. Apply to Bend modifer to Group1.

Result: Both groups were affected by the modifer.

In the above example, the grouping has no effect. Basically you just have two instances of the same (single) object, so when the Bend is applied to one, it is also applied to the other.


1. Create a Box (Box1) & shift clone as a copy to (Box2).

2. Select Box1 & Box2 & make it Group1.

3. Shift clone to a instance to (Group2).

4. Apply to Bend modifer to Group1.

Result: Group2 was not affected by the modifer.

We've fixed it so that now, both groups are effected by the Bend, which is correct since they are instances.

Fixed a bug in which, if you dragged the right side of the TrackView to the left past the splitter to show only the hierarchy part of the view, closed the TV, reopened it, and then moved the splitter to expose the track portion, the TV would be zoomed way out making the frame numbers extremely large.

Note, when you open the TV it does a zoom fit. Before, it would zoom way out because with the track portion closed, the width of the track portion was essentially 0 (meaning it had to zoom way out to fit everything in). It has been changed so that it zooms to a minimum size (so you don't end up with extremely huge numbers).

Fixed a bug in the Motion Capture utility in which the objects weren't properly flagged into the foreground (with dual planes on) when a motion capture controller was assigned to the end effector of an IK skeleton and you were recording or testing. This would make things sluggish (compared to the interactive speed when moving the end effector around with the mouse).

Fixed some Pyramid and Prism edge display bugs when going to negative height.

Fixed a bug that RL found in which the Proxy controls within the Scatter object weren't remaining sticky after going from the Create to the Modify panel.

Fixed a bug that LM found in which the renderer would crash if you right-clicked on the 3DSMAX taskbar icon while rendering. We've set it up so that the 3DSMAX taskbar button is now disabled when the renderer is active (so now you can't close the program while it's rendering... you have to cancel the render first).

Fixed a .3ds file that PN found that didn't import into R2 properly (due to not reading the stucco.sxp data correctly).

Fixed a bug that GN found in the Flat Mirror material in with the radio button groups for "First Frame & Every Nth" and "None, Use Bump or Noise" interacted.

Fixed a bug that JC found in which Environment backgrounds were being rendered with one field stretched when rendering with Fields ON.

Fixed a bug that GN found in which you'd get an assert if you tried to export a file with "all formats" selected as the file type. Now, if you do that you'll get a "Cannot determine export file type -- Export cancelled" message.

Fixed a bug that LM found in which the track labels for Text object parameters Kerning and Leading were blank in Track View.

Fixed a bug that LM found in which the Circle, Arc, Ngon, Text, Rectangle and Star shape objects lost their Renderable parameter state upon re-load.

Fixed a long-standing problem that DT found last July in which gamma settings for the viewport background weren't getting saved with the image. Now, each viewport carries its own gamma state: the gamma values are loaded and saved to files, and are sticky between bitmap file dialog sessions. When you change the gamma, the viewport updates immediately.

Additionally, DT noted that the background image filename was getting zero'd out when you went back into that file dialog. That's fixed as well.

Fixed a bug with exporting large .3ds files.

Fixed a bug that PC found in which a ThinWall Refmap would dissapear when the camera gets too close to an object (only when rendering in field mode).

Fixed a problem in both Mirror and Thin-wall maps when rendering to fields and doing Render-Region.

Fixed a bug that JCdW found in which, if you copied a material with a bitmap and then altered the gamma value of the bitmap in one of the two copies, the new gamma value in the copy wouldn't "stick" because the system couldn't deal with two different gamma values for the same bitmap used in two places simultaneously. The only feasible way to fix this was actually pretty simple: If a bitmap request refers to the same file, but has different gamma value, as a previously loaded instance, don't try to share storage: load a whole other copy of the bitmap. It wastes space, but it fixes this bug, and it was the only solution short of rewriting the entire bitmap manager. People should just be aware that having the same bitmap used in different places with different gamma values uses as much storage as totally different bitmaps.

Fixed some problems with the new Smoke map in which it wasn't animating. Note that it uses a "Speed" parameter instead of a "Phase" parameter so that old .3ds files with smoke.sxp in them will come across fine. This is a bit inconsistent, but as long as nobody objects we'll leave it this way.

Fixed a bug that RF found in MeshBomb in which spinners did not get the red outline at animated keyframes.

Fixed a bug that RF found in MeshBomb in which animated Chaos would not update in the UI until you left the Modify panel and returned.

Fixed a bug that LM found in TrackView in which, when you assigned a new controller to a track, the track label was still highlighted, but wasn't selected (i.e., Copy/Paste/Notes/etc commands greyed out).

Fixed a bug that LM found in which, although Particle Systems aren't instance-able, Max would've allowed allow you to "cheat" and create an instance of a particle system using the Track View copy/paste function.

Fixed a minor problem in which, when you bound a space warp to an object, the space warp was deselected and the object became selected. (As compared to when you bind an object to a space warp and the object remains selected, as it should.)

Fixed a bug that JJH found in the new Multi-material in which materials above 100 were clipped. You can now have up to 999 sub-materials in a multi. (That ought to be enough.)

Fixed a crash bug that occurred on File/New or File/Load when there were shapes in use.

Fixed a bug that MR found in which the spline creation settings weren't sticky.

Fixed a problem that DE found in which the Bezier Corner right-click option wasn't available at the Vertex level of the ESpline object. This was due to another compiler bug, and the fix is just a workaround. It's ignoring the 5th-7th entries added to the menu, taking previous and subsequent ones. It was "fixed" by tossing in three dummy entries, which don't appear. That said, I detected a no-repro case for some instability when dragging Bezier Corner vertices around after doing a bunch of other modeling operations. Something's lurking in there.

Fixed a bug that BS found in which, if you were creating a spline line using the Corner drag type, and right-clicked out of it while you were left-clicking to set the first point, and then left clicked up while right-clicking, the program would crash.

Fixed a bug that MM found in the ESpline Outline code that was completely wacking the creation of outlined open splines.

Fixed a problem that MGB found in the new particle systems in which, if you brought the Percentage of Particles value down to 0, the particles wouldn't appear when dragging the value back up.

Fixed a bug that MR found in the PArracy creation code that would confuse the creation process if you right-clicked while making one of them.

Fixed a bug in the RLA BMI in which it didn't report the correct image "Type".

Found and fixed two problems in the new "Open Renderer" code in Video Post. (This is the code that keeps the renderer open throughout a sequence in VP instead of closing it on each frame as it did before.) First was that there were two places where the function would exit without closing the renderer. Now there's one common cleanup routine. The second problem had to do with the lack of progress reports from the renderer. The problem was that the renderer was being opened too early in the game. It should work fine now, but VP rendering with lots of different scene events needs to be regressed thoroughly.

Changed the Glow filter so the spinner for materials reads from 0 to 15 instead of 1 through 16.

Fixed a bug in which the "Every Nth Frame" step field wasn't being disabled in the VP Execute dialog when "Single" mode was selected.

Fixed a bug that LM found in which the program would crash if you undid a Remove Modifier after the application of a MeshSelect and then an EditPatch.

Fixed a bug that PW found in which the Motion Capture controller didn't work with Gobal Tracks. The MC controller was assigning the existing controller to the 'data' track -- however in this case the existing controller was a dummy controller (the 'available' track). Now it checks to make sure that the existing controller is keyframeable. If it is not (for example, if it was a noise controller) then it uses a new default controller instead.

Fixed a bug that PW found in the MC utility in which, when a Motion Capture controller was deleted, the the Motion Catpure utility didn't update.

Fixed a bug that RF found in which, if you assigned an MC controller to a track, then Undid the assignment, the list box in the MoCap utility wouldn't be cleared.

Fixed a bug that PW found in which you could bring up multiple controller dialogs for the same controller in the TrackView. This was fixed for the noise controller, motion capture controller and list controller. (It still needs to be resolved for the waveform controller, and that's on our list.)

KM brought up an issue in which, when creating lights, the multiplier value wasn't getting reset when creating a new light (ie, its value is "sticky"). This is a NAB, since everything is intentionally sticky except the light color itself, which has code specifically to keep it from being sticky. There was a bug, however, in that the Contrast param wasn't sticky, and it now is.

Fixed a bug that MM found in the material Drag-N-Drop code in which, if you dragged a material from Medit onto an object and right-clicked out of the drop, the object tooltip wouldn't be cleared.

Fixed a non-thread-safe problem in Stucco that was causing rendering garbage.

Put all the strings in the 3DTextures from the new maps that were ported over from the old SXP's.

Fixed a problem in which Video Post wasn't forcing a ViewPort redraw at the end of a render.

Fixed a problem that RF found in which, if you reset a scene that contained motion capture named tracks, the named tracks wouldn't be cleared during the Reset.

Fixed a problem that JM reported last August in which, if you had an object tracking a path controller and the path that the controller referenced was animated, the object wouldn't be animated along with the path.

Fixed a bug in which, if you added a key to a material channel track, the RGB spinners in the KeyInfo dialog would've been labeled XYZ instead of RGB.

Fixed a bug similar to the above in which, if you used Add Key mode to add a key to a track that would normally get an on/off controller (like a sphere's smooth track) it would get a bezier float controller instead.

Fixed a bug that LM found in the EditPatch modifier in which, when converting objects that didn't natively have a Convert-To-Patch method (like Geospheres and Hedra's for instance), you'd get an empty patch after saving and then reloading the file.

Fixed a problem that PW found in the EditPatch modifier in which, when the lattice display was turned off, it was still hit-testable when at the object level.

Fixd a bug that MR found in the EditSpline modifier and ESpline object in which, if you cloned the segments of a line with 3 or more segments (except the first segment), the last vertex of the new segments moved to the location of the original unselected first vertex.

Fixed a bug that DS found in the EditSpline modifier and ESpline object in which, if you created splines in different viewports, the spline handles were using an incorrect transform axis.

Modified the automatic texture coordinate assignment to work with modifiers. Extrude and Lathe now do automatic TV assignment.

Fixed a bug in which, in the active VP the background image would flip 180 degrees from its original location when you select the Place checkbox in the bitmap plugin. (Note that this would only happen in non-filtered sampling of the bitmap (which is used when rendering the view background).)

Got rid of one potential problem source in the renderer. We'd been storing "RenderData" via the RenderData pointer in the mesh. The problem with that is that the mesh could possibly be deleted before we got a chance to delete the RenderData, causing a crash when the deletion was attempted. It was changed to just store a pointer to the RenderData in every "MasterObject" (which also has a pointer to the mesh). The one-to-one correspondence between RenderData and Mesh is thus maintained, but we don't have to worry about losing the pointer to the RenderData.

Fixed a major problem with OpenGL lighting. (It's surprising that no one reported this one.) Basically, if you changed the camera position from when the lights were first created, the lighting was wrong. (Animated lights were fine since any change to the lights at all -- position, intensity, etc -- would fix the problem.) But this meant that orbiting, etc, was causing bogus lighting.

A while back, while working on a set of rendering API enhancements (for plug-in raytracers), the code that stored mesh normals in compressed format was turned off because it was causing glitches in the ray intersection calculations. This unfortunately meant an increase in memory usage. After more evaluation, it's apparent that we can get back a good part of this memory: it's OK to compress the vertex normals: it's just the face normals that are used in the ray-intersection code. So the code now compresses vertex normals, and not face normals, which is a big saving.

Fixed a bug in which the EditableMesh Face/Hide function wasn't working in shaded views.

Fixed two problems that LM reported in the Object Properties dialog:

Now, switching to User Defined and then back to General pages does not change the options in the General page. They are not "committed" until you press OK. (So canceling out still works as expected.)

The Vertex Colos button wasn't unchecking correctly (it was going into an indeterminate state).

Fixed a bug that KM found with Vertex Colors in which, when a colored vertex was outside the extents of a viewport, the faces that used that vertex were not shaded.

Fixed a bug that JW found in which animated backgrounds weren't synching up properly when used as Environment maps. (The code that notified the background that the time had changed did not do so until after the viewports were redrawn. Thus, at the time the background was redrawn, it looked like the background didn't need to be updated.)

Fixed a bug that PN found in which Freeze/Unfreeze (and Hide/Unhide) by hit was not respecting group membership: fixed.

Fixed a problem that LM found in Preferences/Color, in which, if you clicked on the color swatch in the Objects section, the color selector title showed as: Color Selector: >>> @!&*# <<<.

Fixed a problem that LM found in which scene archiving was completely hosed. We had added quotes to the file string about a month ago to make net archiving work with path names including blanks (which seems to work fine with the old PKZIP, but that's about it). To fix the problem, the '@' was moved outside of the quotes (hopefully that was the only problem... we don't have WinZip 6.1, WinZip 6.3, or SZip, so we can't test it here... please regress thoroughly.)

Fixed a problem that MS found in which the Bitmap map's Premultiplied Alpha parameter was not getting copied when you dragged it from one slot to another.

Fixed a bug that AI found in the renderer in which, when a background bitmap was set up to be an Environment and displayed in a viewport (via the Background Image/ Use Environment switch), pyramidal or SAT filtering was not respected by the production renderer until the Filter Environment Backgrounds preference (in Prefs/Viewports) was checked.

Fixed a problem that LM found in the Material/Map Browser in which, if you loaded a MatLib from another directory and then clicked on Save As, the Filename field contained the full file name (including the path).

Fixed a bug that JC and DD found that would cause the program to crash after making multiple targetted direct lights in a row.

Fixed a bug that DS found in which, if you dragged a None map to a map slot to replace what you'd had there previously, the program would crash.

Fixed a bug that GM found in which the "Show Map in Viewport" switch would be turned off automatically when you dragged it over an object that had previously not had that map in it and the Generate Mapping Coords switch was on for that object.

Note that from the sound of this bug, some folks might still not be aware that they ever even have to turn this switch on by hand. Automatic mapping assignment is pretty complete at this point.

Fixed a minor/trivial/inconsequential <g> problem that JR reported in Medit in which the "colour" of the gray (>6) spheres is v128 but after reset would go to the default v178. It now resets to 128.

Fixed a bug that JR found in the DXF import code in which certain polylines weren't importing correctly.

Fixed a bug in the DXF code in which the program would crash while importing extruded polyines with less than 2 verts. When it now encounters them, it just skips them. (An error message isn't even displayed because that seems like an annoyance when you are loading a large file.)

Fixed a problem with importing large DXF files in which, when imported "by Entity" they would take FOREVER to load. The problem was in the n-squared code for making names unique. This was replaced with smarter code and now these files load fast. For example, F-3.DXF (which has about 3000 entities) took so long that I got tired of it (more than 15 minutes) and restarted the program. It now takes about 24 seconds.

Fixed a problem that LM found in the camera object in which the target distance wouldn't update when the camera view was active and the animation was playing in the viewports.

Implemented tooltips for map and material buttons that show you the name of the map/mtl in the case in which the text is longer than the button (otherwise the tooltip won't appear).

Fixed a bug that JB found in which, if you were rendering images using the 'Frames 1,3,5-12' function, it would ask you if you wanted to overwrite frame *0000.

Fixed a capping problem that MM found (1keybd.max) that was causing capping to fail in certain cases.

Fixed a bug that LM found in which changes to the Negative Filter were not undoable.

Aftering doing a bunch of testing with Scene Motion Blur and Object/Image Motion Blur, we discovered that Video Post is always telling the render that the "frame duration" is 1.0, when it should actually be the amount of time between the SMB sub-frames. This means that even when you've been doing SMB, the IMB has been blurring for a whole frame.

For example, if the SMB duration is .5, and the subdivisions is 4, then the "frame duration" the renderer should really be using is .5/4 = .125. In this case, O/IMB is scaled down by a factor of 1/8, which is a BIG difference.

Additionally, Video Post was not scaling the frameDuration to take into account scaled playback ranges.

The downside of this fix is that people who have been using SMB and either OMB or IMB simultaneously are going to find their old settings not working at all. Notes:

Two major changes here. First, the frame duration is now used to compute the time increment in Video Post. Second, time is kept as a float throughout the process and only converted to an integer when sent to the renderer as an argument. Fundamental changes were made in the way that frame duration is computed. (Fundamental because they weren't computed at all before.)

As noted above, OMB and SMB didn't work together correctly in MAX r1.x. When SMB was being used with OMB, the OMB value was always being computed with a Duration in frames of 1.0.

Under a normal conditions (if you have "Lock to Video Post Range" selected), the Video Post Scene event is locked to the renderer (or Max time). In these cases, the interal Frame Duration value for the renderer is maintained at 1.0. One VP frame equals one Max frame. (The FD value is what the renderer uses for Object Motion Blur.)

First scenario:

You activate Scene Motion Blur. VP time is still locked to Max time so the frame duration starts at 1.0. You have the Duration Subdivisions set to 10, in other words, you will be generating 10 rendered scenes for this frame. You also set Duration (Frames) to 0.5. That means you want the 10 frames to span over 80 ticks or half a frame.

Each one of the ten frames to be rendered will have a duration of:

0.5 / 10 or 0.05 (or 8 ticks)

Second scenario:

You set Video Post scene range to something other than Max range. Here, the frame duration is computed from the difference in the ranges.

You set the VP range to stretch out:

Max range: 0 - 30

VP range: 0 - 60

The internal Frame Duration value is now (vp.end - vp.start) / (max.end - max.start) or (60 / 30) or 2.0.

Going back to the first scenario, your frame duration becomes:

0.05 x 2.0 or 0.1 (or 16 ticks)

If you set the VP range to shrink:

Max range: 0 - 60

VP range: 0 - 15

The duration is (vp.end - vp.start) / (max.end - max.start) or (15 / 60) or 0.25.

Going back to the first scenario, your frame duration becomes:

0.05 x 0.25 or 0.0125 (or 2 ticks)

These changes are obviously going to demand some pretty rigorous regression testing.

Fixed a very elusive bug that LM found on the first day of beta in which you'd change one of the viewports to a Track View and then hit anything in the top MAX menu bar (or just hit the Alt key) and Max would crash (the steps weren't always so simply reproducible, but it was reproducible). The problem was a bogus menu string for the Save/Restore viewport menu text. Now, those menu items are grayed out and the bogus string pointer is not used.

Fixed a problem in which the current AVI Codec description wasn't appearing in the button in the Make Preview dialog.

Dealt with an issue that MF brought up re the Ctrl-N expression window always appearing in the center of the screen, which is a pain when you're using a dual-monitor rig. Now, the position is centered the first time you use Ctrl-N during a session but you can move it and after that, it comes up where you left it. (That's as good as we can do.)

Fixed a bug that MM found in which object tooltips incorrectly put up a node name even when the node was in a group. It now presents the group name for every node in the group.

Fixed a bug that LM found in Conform in which, if you had animated the operand's positions, it would leak memory while playing the animation in the viewports.

RW and MM brought up a number of problems with groups and merging, which were addressed as follows:

If you merged files that contained open groups, you'd get empty groups or problems during the merge. This was fixed by treating all groups (open or closed) in files being merged as closed (which is the safest thing to do).

If you're merging groups with the same name as an existing group and you choose the Delete Old, it now deletes all the members of the old group.

Note that the above only works when you're merging into closed groups. There's still a bug in which merging into an open group and choosing Delete Old won't delete the old group, and that'll be fixed for 0.2.9.

Regarding the Replace function with groups... It's not feasible to be able to use Groups with the Replace function. Now, when you're Replacing with files that have groups in them, you see all of the object nodes in the Replace object list as if all of the groups in the incoming file are opened. You do not see the group "heads". If you want to replace the objects within a group, open the group first (in the scene), and then replace the objects individually from the incoming file.

Fixed a problem in TrackView in which, if you deleted an object and then did an Undo, it would not show up in the same place in the TrackView that it was before you deleted it... it would be appended to the end of the list. Undo now sticks it back in the same place it originally was.

Fixed a longstanding issue in with DLL's were loading at the same address. Now, DLL's load at different addresses. (Note that this has been fixed for the bulk of the main DLLs and most of the plug-ins. Some of the project files were skipped this week since they were checked-out by folks, but we'll check for conflicts periodically and resolve them as we go.

Fixed a bug that LM and MF found in which, if you said "continue" when the renderer presented the missing maps dialog, it would fail to load any maps that weren't missing, so you wouldn't see any texture when you rendered (unless you had previously forced them to load by going into Medit and viewing them.)

Fixed a bug that MF found in which Max would crash on Reset after loading a specific file (map-bug.max). This was due to a fix that we had previously done for a bug in which, if you deleted an object that was referenced by an expression controller applied to another object, the program would crash. Interestingly, we backed that prevous fix out and then couldn't get that earlier bug to happen again.

Note that MF had noted that there was a message about missing DLL's that comes up when you load this file, and that's not a problem. It's due to the fact that Max1.x wouldn't clean out the scene material library before it saved the file, and would thus save materials that weren't being used. Max2.x will clean this up.

Fixed a bug that MF found in which, if you had a a UVW Map modifier in the stack that was disabled and you saved the file and loaded it back in, it would come in and not be disabled anymore. (The Save() routine for the UVW Map modifier wasn't calling the base class Modifier::Save(), so the "active" flag wasn't saved.)

Fixed a bug that MR found in which, if you had assigned a material to a PArray emitter and the PArray itself, and went into the Medit Get/Selected browser with the PArray selected, you'd see both materials listed (when you should only see the material that was assigned to the PArray icon). Browse selected was starting at each selected node and following the reference hierarchy down to any materials it found, and since the PArray referenced the Emitter, it found both materials. It's been changed to start at the node's material, so it won't see spurious materials.

Fixed a bug that CJ found in which the VFB would crash when 2:1 zoomed on an 8 bit display. There are still some subtle problems in 8 bit with the dither not being right when you drag the info window vertically, but we're not going to address them.

Fixed a problem that MR found in which, if you merged an environment effect into a scene, and the incoming environment apparatus was hidden, the Unhide button wouldn't ungrey until you'd changed modes.

Fixed a problem that JB found in the Selection Floater in which, if the list of nodes was longer than the floater and you were selecting a node that was below the bottom of the list, it wouldn't scroll to be completely visible in the list after you hit the Select button.


FD had noted a problem he was having if you scaled down your character after you had bones in it. When you scale bones, the end effectors don't move or scale with it. This is a NAB because End Effectors are just shortcuts for using dummy objects (as end effectors). When using a dummy as an end effector you can scale the dummy, however the position animation of the dummy won't be scaled. So you don't want to scale the bones hierarchy after you've animated it.

LM had noted that, although the release notes state that "Two different keys can't actually be on top of each other horizontally. (If you move a key onto another key the other key will be deleted.)", that you could if you used Key Info to adjust the time of a key to be the same time as another key (to make both keys exist at the same frame). Not only is this harmless, but it might actually be a good thing. If you are just trying to nudge keys a few frames by clicking on the time spinner's up or down arrows then this way you can move a key past another key without losing that key.

MGB noticed that playing an explosion created with a particle system with the Real Time switch on only played back the entire animation the first time through. This is a NAB because on frame zero (before you hit play), Max is sitting there calculating away with PArray making chunks. When you hit play, they're ready to go. Subsequent times through there's no time to make the calculations, so the first half of the loop gets skipped. If you turn Real Time off, all's fine.

PW had reported the following problems in TrackView, Edit Keys mode:

A) Inconsistancy when you can right click to get a properties dialog

1. Create a sphere

2. Go into the track view and expand the Sphere Tracks

3. Notice that when you right click on the Sphere's tracks such as the Position or Rotation the property's menu is disabled.

4. Now create a key for the Property track and notice now that when you right click on any the Sphere's tracks the property's menu is available.

A) This is a NAB because you can't bring up properties if there are no keys.

B) This is related/similiar to BugA, above -- when you have a key selected you cannot bring up the Properties Dialog for expression and sometime list controller; or sometimes it brings up the key dialog instead if the tracks property dialog.

1. Create a Sphere.

2. Go into the Track View and open up the spheres track and create a key for the Radius track.

3. Unselect the key Radius Key

4. Assign an expression controller to the the Segment track

5. Select the key you created for the Radius track

6. Select the Segment track and right click on the Segment track and notice the the Properties menu is inactive. This is the first bug.

7. Now select the Radius Track and then right click on the Segment track and select the the Properties menu and notice that the dialog is for the Radius's bezier controller and not the Expression Controller. This is the second bug.

Basically a selected key disables the selected track properties menu or replaces it.

B) This is also a NAB because (first of all), the 'Properties' menu item does the same thing as the Properties icon in the toolbar. So when one is disabled the other is also disabled. (They are disabled whenever it is ambiguous as to which item it should bring up properties for.) In this case a key is selected in one track and the expression controller is also selected (so it doesn't know which one to bring up properties for).

MR brough up an issue in which, in the TrackView, when a parent is hidden, its unhidden children do not show up when "Hierarchy" is selected (the default). "When the parent is unhidden, then both the parent and child appear in TrackView. In rel. 1.x, even when the parent is hidden, both the parent and child will appear in Track View." This is a NAB because, if a parent is filtered out of the track view, the all of its children will be filtered out of the TV (when Hierarchy mode is on). That's just the way it works. You can't have a hierarchy with arbitrary pieces missing (it's not possible). You can either turn Hierarchy display off or uncheck the Show Only Visible Objects filter. Note that it's actually not different in r2, however we added the 'Show Only Visible Objects' filter to r2 and defaulted it to on. Turning this filter off which didn't exist in r1 will give you the same behavior as r1.

AI noted that when you Pan or Zoom with the middle mouse button, you cannot "right-click out" to the view position you started from like you can when using the navigation keystrokes. We looked at supporting this but it's just way too complex given how things are set up internally.

RL had asked that, for the TrackView Filters (X, Y, & Z), if these also affect Point3 controllers. They already do affect point3 controllers.

JB had noted that a 2D object (like a patch grid) that was viewed edge-on (completely perpendicular) in shaded view would not be visible in Athena and it would be visible in r1.x. This is just an artifact of changes to SZB, and since viewing in wireframe mode or in edged poly mode displays the edge correctly and since OpenGL also works this way, we're not going to touch it. (Note that the reason why you can see perpendicular objects only in wireframe view is because we send down the wireframe mesh as visible-edge segments. Thus there is no way to tell that a segment belongs to a face that is perpendicular to the line of sight (since no faces are sent to GFX).)

GP had reported a case in which, if you crashed a machine with QueueMan running, it wouldn't release the "read-only" flag and you couldn't get into the queue after that. We couldn't reproduce this case. If a machine crashes while running QueueManager, the manager can decipher this and will reset the readonly flags. If anyone can come up with a reproducible case for this, we'd love to see it.

~Non YG Bugs and Issues Resolved

Polygon Counter utility: Along with the VRML exporter that was integrated into 0.2.7, there's a handy utility for anyone doing low polygon count modeling. It is available from the Utility panel as "Polygon Counter." This utility puts up a modeless dialog with two bar graphs. The first represents the number of polygons in the scene, and the other is the polygons in the current selection set. You can set budgets for each if these, and the bar graph goes from green to yellow to red as you approach and exceed the budgets. (Note that this dialog is currently a bit too big. It will be downsized to make it less obtrusive.)

Additionally, there are a number of new Helper categories that are all associated with the VRML utility.

A doc file (028vrml.doc) is included with this release.

Tessellate: fixed bug that crashed tessellate when applied after MeshSmooth.


Fixed bug that made new faces have all invisible edges.

Eliminated memory leak related to deleting the result of ConvertToType (triObjectClassID) in Connect and ShapeMerge.

Fixed mapping coords in some cases: if you connect two cylinders, for instance, or two objects with the same sort of cylindrical UVW mapping, there used to be a visible seam on the connection of messed-up mapping coordinates. This is now fixed. However, this won't help all connections: If one hole has a loop in U and the other one has a loop in V, for example, the result can't be improved much. (The solution in these cases is to apply a new UVW map to the bridge.)

Topological info is now cached, such as edge lists and holes. This makes animations much faster.

It now handles SetGenUVW (automatic mapping generation) by giving same command to its sub-objects. (This allows you to turn on mapping coordinates for all Connect operands, if possible, by assigning a material with mapping coords to the connect.) However, this doesn't work when there are Edit Mesh modifiers on the operands, so at the moment it's not much use.

Sets material ID's on the bridge. If the "Smoothing/Ends" checkbox is not selected, a new material ID is assigned which is one higher than the highest material ID in either object. If it is checked, the material ID is taken from one of the faces bordering the bridge.

If both smoothing flags are checked, but there are no smoothing groups set on one of the ends, the smoothing group assigned to the bridge is also assigned to the faces bordering the bridge. Thus the ends are smoothed, even if the original operands are totally faceted.

Fixed collapse bug. Collapse on Connect was crashing; now it's working.

ShapeMerge: Now produces selected edges & verts. Still working on faces, which are trickier.

CapHoles: Improved triangulation of face used to fill in the hole.

Bevel/PathBevel: Made automatic mapping coord generation work (code copied from Extrude).

PathDeform / PatchDeform: fixed bug in getting validity intervals of some channels. (Don't know if it was a problem or not.)

Sound Lab: SoundLab has been integrated into Athena, and docs are included in 028slab.doc (in Additional notes:

If you want to install the 3D Sound features, you'll need to install the rsx3drun.exe program. It's pretty self-explanatory.

As noted in the docs, the sound plug-in is .max file specific and replaces the default sound plug-in on a per-file basis. So, if you want it to be the default plug-in, you'll need to establish it in your maxstart.max file.

None of the sample files mentioned in the docs are included, and hopefully Kinetix QE will post those sometime soon.

Bitmap Browser utility: The Bitmap Browser is a single re-sizable modeless dialog box which is invoked from the Utility Command Panel. The code starts up an additional thread for caching into and reading from the cache directory. Features include:

Thumbnail Display: Thumbnails are currently square in shape. Default dimension is 60x60 pixels. The user has the option to change the size to 50%, 150% and 200%. Names of the image files are displayed underneath the thumbnail. All bitmaps supported by MAX are displayed in the browser. The user can view the full image by double clicking on the thumbnail which will be equivalent to invoking a Viewfile on it. Users can also do a right-click on a thumbnail to choose the properties menu item from the pop-up menu to display the image information.

Drag and Drop: DAD is functional between the browser and the Meditor.

Sorting: A Radio button for selecting the sorting style. Available choices are sort by name, date, size and extension.

Features Pending:

Add Browser.cfg. This will save the browser position, size and other internal settings such as thumb size, sort method etc.

Main Menu: Main Menu item File has copy, Save as, move and delete as it's sub items. They are not yet functional.

Drag and Drop: DAD between the thumbnails and the directory tree control for file-move, file-copy operations are not yet functional.

Tool Bar:

3 Radio buttons (to choose the source of images: Source could be Disk, Current scene or Material editor).

Slide show button ( to perform a slide show of images form the current directory).

Properties Dlg Box: Right now the property dlg box shown is the same as the image information dlg nox shown from the ViewFile dlg.

Thumbnail Source: Radio button for selecting sources of images. Available choices are Images from current scene, Images from Disk, Images from material editor. User can also set this choice from tool bar. Changes in this radio box will be immediately reflected in the toolbar buttons and vice versa.

Add Sorting & Display options to Browser Toolbar buttons. Move filter options from Preference Dlg box to toolbar. Add option to switch between images, scenes and bitmaps in the current scene.

Filter: An Edit box where user can enter wild cards of his interest. (Like *.gif etc.)

Cache Settings: A Spinner to specify the maximum size for the cache file. It's nice to be controlled by the user. His collection of image may vary from say under 10 to several hundreds. Default browser cache directory is 3DStudoMax\Browser\cache. The user should be given a choice to choose his own location for cache. To be done.

~QE Bugs Fixed

BUG #: 58536


CODE FIX: In EditableMesh and MeshSelect, the "Ignore Backface" parameter is now off by default.

BUG #: 58756


CODE FIX: The controller copy/instance option in the Clone options dialog is active if you do a Shift clone and an Edit/clone in this case now.

BUG #: 63157


CODE FIX: Opening these old Max 1.2 .mat libraries in this sequence doesn't crash the program anymore.

BUG #: 62624


CODE FIX: Modifier based space warps aren't supposed to have any sub-object modes (and now they don't). It didn't actually cause any harm that these were there though, which makes this bug a cat3 instead of a cat2 (as listed).

BUG #: 60133


CODE FIX: PathFollow now operates correctly with the original Spray particle system. A sample file is included: PFLWTEST.MAX. (Notice the effect of the tetrahedrons changing length as the effective velocity following the path changes.)

BUG #: 62520


CODE FIX: The Merge dialog's Select Subtree function is updating on every selection now.

BUG #: 62778


CODE FIX: Cloning an object with a Volume Select modifier works correctly now.

BUG #: 62817


CODE FIX: Face selection within the EditMesh modifier ignores backfacing now.

BUG #: 60011


CODE FIX: These TV functions are available now immediately after an Assign Controller operation.

BUG #: 35891


CODE FIX: Max will play a 22kHz.wav file now if the animation has >2921 frames.

BUG #: 44845


CODE FIX: Track View doesn't incorrectly indicate that lengthy sound files repeat anymore.

BUG #: 60013


CODE FIX: Track selection is not lost anymore during object selection or changing levels in the stack.

BUG #: 59593


CODE FIX: Spline parameter changes are undoable now. In the course of doing this, proper undo for the Line object (and all Editable Spline-based objects) general parameters was hooked up, including for: Steps, Optimize, Adaptive, Renderable, Thickness, and Generate Mapping.

BUG #: 50930


CODE FIX: Max now honors the case of image map files and doesn't change them. Note that this code was explicity installed to convert the file names extensions to lower case because otherwise the files couldn't be saved on Unix servers ( which only supports lowercase extensions). However, we agreed this week that the right thing to do is for Max to pass names through unchanged. Not that all the .BMI's now generate lower case extensions, which makes all output bitmap files have lc extensions, and solves this problems with unix. Deep background re this issue:

The source of problems is outside Max. Basically what we're doing is NOT doing anything. All BMI's will suggest their extension (the "file type" you see in the file pickers). These "suggestions" are also used to complete a filename where the user simply typed the prefix (auto extension completion). Some drivers are returning lower case (the correct way) while some others are returning upper case (trouble). By fixing the latter bunch to return lower case, we're set there.

The code that we fixed was something that was implemented earlier to deal with two problems. First, the issue about Max generating some filenames with upper case extensions (invalid in Unix). Second, programs such as Photoshop will always write files with upper case (real bad).

By NOT doing anything (no conversions), AND making sure all extensions "suggested" by Max are in proper lower case, we will not create these problems. ("Suggested" is in quotes because you can always type something like "MyImage.TgA" and Max will take it. We are not "fixing" anything anymore.)

However, if you load an image file created by Photoshop, or specify a filename within Max using Caps Lock, you'll end up with a file that Unix systems won't recognize.

Notes about this last paragraph: "Unix" systems are the only ones that will have problems. Max will always be able to read those files regardless where they are. Wavefront Composer will have problems. VRLM servers will have problems. Not us. People using these systems are well aware of these things and they (or at least they should) take special care about it.

The origin for this whole mess was that people would export a VRLM file that included foreign (not made in Max) image maps. They would include something like MyImage.TGA and Max would convert it to MyImage.tga. When the web server read in the VRLM file to look for a map called MyImage.tga it would not find it because the file in the file system was saved as MyImage.TGA.

And to top it all off, in the case above, if someone creates a map file in Photoshop and it gets saved as MyImage.TGA, we will handle it right. Unobtrusively. The web server will know what to look for just fine. The VRLM engine, however, will barf as it does not know what to do with a file of type ".TGA" (all upper case). And that's just the way it is...

BUG #: 62737


CODE FIX: In the Render Scene dialog, the Range parameter is getting reset correctly now.

BUG #: 62892


CODE FIX: The ESC key exits the preference dialog in this case now.

BUG #: 33186


CODE FIX: Multiple Noise properties dialogs can't be opened for any given track anymore.

BUG #: 31384


CODE FIX: (partial fix) To prevent color swatches from coming up when the controller is an expression controller (or noise controller or any controller that can't respond to setValue) is an extremely major deal. It is an example of a much more general problem: trying to move an object with a noise controller on it, or adjust a spinner on a variable with an expression controller on it. To fix this throughout the program would be a monumental task, involviing every color swatch & spinner. However, it was reasonably fixable for Parameter Maps, which gets a lot of things. Code has been installed in the Parameter Maps that will disable spinners and color swatches that have non-keyframeable controllers. This only takes care of the problem on a subset of the various plugins. Things that are fixed by this include: Atmospheres, Mark's 3d textures, Cellular etc. One other place that we could potentially fix without too much hassle would be in the standard material, but only if users are screaming about it.

BUG #: 32571


CODE FIX: The Render Output File dialog doesn't accept invalid filenames anymore. The file picker is now checking for a valid file type and an error dialog appears telling you about it if you chosen an invalid one.

BUG #: 63183


CODE FIX: This is the same bug as #32571, above.

BUG #: 63223


CODE FIX: Deleting the LOD object clears the LOD utility now (so the crash doesn't happen).

BUG #: 63302


CODE FIX: Mirroring an object with a displace modifier functions correctly now.

BUG #: 63019


CODE FIX: Deleting a modifier doesn't remove the derived object line in the stack in this case anymore.

BUG #: 63155


CODE FIX: Once a material is assigned to an object, you can drag a NONE material from the browser over it now to remove the assigned material.

BUG #: 59259


CODE FIX: Particle viewport display now functions correctly when changing percentage.

BUG #: 63324


CODE FIX: Right-clicking out of a Move Keys operation in Track View's function curve editor doesn't deselect all selected tracks anymore if the keyed track has a subordinate Ease or Multiplier curve. Note that both parts of this record are fixed: 1) the bug where the radius track becomes unselected when the ease curve is applied, and 2) the bug where the radius track becomes unselected when right clicking after moving a key.

BUG #: 33823


CODE FIX: Max now allows reassignment of Loft deformation animation controllers. Note that this can circumvent the symmetry lock mechanism if "Make Symmetrical" is ON. We're not sure of the ramifications of this yet, but there's nothing we can do about folks who do it and then complain about the symmetry locking not working the way it's supposed to.

BUG #: 43827


CODE FIX: Finally tracked down and fixed the problem in which animated texture-playback leaked huge amounts of memory while playing back (although it did end up giving it back after playback stopped). This is the bug we NoFix'd for 0.2.7, and were pretty depressed about. It was a bear, but it's nailed hopefully without too many consequences.

BUG #: 63318


CODE FIX: The Quick Renderer has been removed from Medit because (a) It will be an endless source of bugs because it can't do a lot of things that the real renderer can, and (b) with multi-threading and the sub-pixel fragment merging, the scanline renderer is now almost as fast as the quick renderer (and of course it represents all parameters correctly). One less source of confusion in the world.

BUG #: 63158


CODE FIX: The title bar of this Medit message box doesn't repeat the message text anymore.

BUG #: 33086


CODE FIX: Re the request: "Need ARC segmentation/tesselation setting in DXF Export dialog". We already have the "Arc Degrees" parameter, which determines the granularity of tesselation of extruded arcs when converting them into meshes. So what this must mean is for a way to control the size of the bezier spline segments into which a non-extruded arc is subdivided. At present the algorithm subdivides an arc so that no segment is greater than 90 degrees. So a new parameter has been added , and we've changed the Arc Degrees section to be:

Arc Subdivision

Polygon: 10 degrees (the old "Arc Degrees" parameter)

Spline: 90 degrees (the new parameter)

BUG #: 63038


CODE FIX: Array works correctly in this case now. (Actually, Array was selecting the object just fine, but the command panel was not being sent notification that the selection set had changed.)

BUG #: 63853


CODE FIX: Creating a direct light while combustion is highlighted doesn't cause a crash anymore.

BUG #: 63683


CODE FIX: Applying a DeleteMesh modifier in this way won't crash the program anymore.

BUG #: 59214


CODE FIX: Doing a Make Unique to instanced Conform spacewarps doesn't crash the program anymore.

BUG #: 63304


CODE FIX: In PArray displaying geometry that's been instanced in this way doesn't crash the program anymore.

BUG #: 63563


CODE FIX: Max doesn't disappear anymore when crop spinner values are set to 0 with Show Map in Viewport checked.

BUG #: 63734


CODE FIX: Copying an RGB Multiply Map from the Bump Map slot to the Diffuse slot in this case doesn't cause Max to crash anymore.

BUG #: 63733


CODE FIX: The Map #1 color swatch whiteness slider in the RGB Multiply Parameters dialog works correctly now.

BUG #: 63508


CODE FIX: Light intensity values don't change anymore when Hotspot/Falloff values are changed and then restored.

BUG #: 63730


CODE FIX: The Apply to Faces with ID field doesn't reset in this case anymore. The range in this field now is from 1 to 65536.

BUG #: 63559


CODE FIX: Changing the coordinates type for 3D maps in Medit don't change them for all occurances of the same map type anymore.

BUG #: 63490


CODE FIX: The File section of the Browser doesn't overlap above checkboxes when the display is set to large fonts anymore. Additioanlly, another problem in Medit was fixed... With large fonts, the aspect ratio of the Medit sample windows is changed so that it's wider than it is high (which was resulting in the spheres being chopped off a little at the top and the bottom). They now scale to 90% of the minimium dimension while in this mode. Large fonts ought to generally work fine now.

BUG #: 34959


CODE FIX: Video Post now checks for missing maps in a Scene Event both immediately upon clicking the "Execute" button and when the VP render process actually gets to the frame in which the Scene Event (that's missing maps) starts. It used to only by checked by the renderer at the Scene Event start time.

BUG #: 63191


CODE FIX: Now, if you use the Include Maps option and pkunzip (or whatever archive program you're using) isn't available on the server machine, the manager reports an error back to the QueueManager. To test this, just rename pkunzip in server.ini to something that doesn't exist (which is simpler than messing with the executable itself). At the time the job is submitted, the server will tell the manager it had problems with the archive (that's the best we can do here). The manager will, in turn, flag the server as in error and log the problem. The error log for the job (not the server) reads: "Error submitting job xyz to server abc." (Note that while fixing this, a crash bug was also fixed in Server.exe. Under certain circumnstances, it would crash when cleaning up the zip file.)

BUG #: 63192


CODE FIX: Accessing YUV setup params is not possible anymore in the render output dialog by typing in a file with a .yuv extension.

BUG #: 63492


CODE FIX: You can't have both Disable Opaque Alpha and Affect Alpha checked and ungreyed at the same time anymore.

BUG #: 63731


CODE FIX: The Levels edit field of the Noise section in the Flat Mirror map is now disabled when Regular is the Noise type.

BUG #: 63570


CODE FIX: Viewport display of the cropped bitmap image is correct in this case now.

BUG #: 62752


CODE FIX: Lit wireframe doesn't crash SZB anymore.

BUG #: 33024


CODE FIX: If a file is saved with a maximized perspective view, then when swapout is selected and the file is reloaded, the viewports come in correctly.

BUG #: 49889


CODE FIX: Viewport swapping doesn't trash the screen when Layout B's trackviewport is maximized anymore. Note that switching back to layout B also works, but the trackviewport does not come back maximized. This is just a fact of life that is unavoidable since trackviews are not really ever "active" and we need to restore the active view on a swap.

BUG #: 63770


CODE FIX: In PArray, Emitter Hidden is now labled 'Icon Hidden'.

BUG #: 63729


CODE FIX: In the particle systems, the Replace function in the object mutation queue is functioning correctly now when the listing highlight has changed.

BUG #: 63769


CODE FIX: In the particle systems, the Tumble rate now affects Instanced Geometry particles.

BUG #: 63740


CODE FIX: Use Material from instanced geometry is correctly disabling options now. (Note that there are still some issues that relate to grayed-out spinner fields become ungreyed when you scroll the command panel, but those are unrelated to this issue -- and we're working on them.)

BUG #: 63620


CODE FIX: In the particle systems, if 'Spawn on Death' is saved as a preset, when it's re-loaded the parameters are not grayed-out anymore.

BUG #: 63613


CODE FIX: In the particle systems, if the preset has instanced geometery type then the parameters are not grayed-out anymore when re-loaded.

BUG #: 63460


CODE FIX: The Chamfer Box's Fillet parameter is shown as Fillet now in the Track View.

BUG #: 63469


CODE FIX: In the particle systems, the Object Motion Inheritance multiplier value now functions correctly when the value is negative.

BUG #: 63573


CODE FIX: In the particle systems, if Pick Group is selected and then deselected, instanced particles aren't lost anymore.


BUG #: 63159


NAB: Drag/Copy and Drag/Rotate in the Medit Right-Click Sample Slot Menu are checks because that's the way it works. There is no such thing as a radio button in a right-click menu.

BUG #: 62897


NAB: Hide by category hotkeys are already there. Shift-O for geometry(objects), shift-L for lights, shift-C for cameras, etc. To complete this, we put in shift-P for the new particle systems category. NOTE: If you have a saved maxkeys file, then Shift-P will affect the shapes category, and shift-S will affect particle systems. This is because S was originally tied to the never-implemented "system" category, leaving only P for toggling shapes. Now that we have particle systems as a category, it makes most sense to just reverse this assignment, which is what we did.

BUG #: 62739


NAB: In this case, all faces are being passed up the stack -- however the selection level is at Face selection and there are no selected faces (since they've been deleted). Applying a second MeshSelect and setting it to object level is the way this is supposed to be handled. This is how the modifier stack works.

BUG #: 58176


NAB: General rollout values common for all shapes are being changed universally because these are "class variables", which are saved just like the segments values in box objects, cylinders, etc.

BUG #: 62876


NAB: The VolumeSelect gizmo shouldn't scale about the object center in this case because the sphere is not being scaled, its radius parameter is being changed. There is no way that the VS modifier could know what it means for the radius to change and adjust it's position accordingly. All modifiers work like this.

BUG #: 63412


NAB: When an atmospheric apparatus is hidden, the environment effect is still rendered because folks might want to hide the apparatus just to get it out of the way (which doesn't mean that they don't want the atmospheric effect to render). If you want to disable an environment effect locally, you can do that in the Environment dialog, and if you want to do it globally at render-time, there's a Render Scene switch for that.

BUG #: 63513


NAB: If you scale a shape and then loft it, the shape lofted will be the initial size (when it was created) because the loft only has one transform, and the scaled shape isn't it. If you want to maintain the shape's scale, use an Xform modifier.

BUG #: 63680


NAB: Although it's slightly weird that MeshSelect has an empty roll-out at the object level, it's because there are no object controls, and we require at least one rollout. "That's just the way it is."

BUG #: 63810


NAB: If you choose to use a particle system as a boolean operand, it will create an invalid boolean, which will not display (ie, it will disappear). Particle systems are not valid boolean operands.

BUG #: 63572


NAB: W & H spinners set to < 1 result in a magnified view of the image when cropping because that's what cropping does. It clips out the specified rectangle and uses it as the bitmap. (It's as if that portion in the rectangle was the entire bitmap.)

BUG #: 63561


NAB: Using Drag & Drop on the small map buttons in the StdMtrl Basic Parameters dialog doesn't bring up the Swap/Copy/Cancel alert because the S/C/C alert only is designed to work in StdMtl for the map buttons in the Maps rollup, below. This was intentional. To remove a map from a slot, the simplest way is to drag from the adjacent or nearby empty slot. In this case the Copy/Swap/Cancel dialog was very annoying and unnecessary, so we special-cased it out a long time before r1 shipped.

BUG #: 63560


NAB: The Show Map on Back option shouldn't be disabled in the Explicit UVW modes because this function also applies in Explicit UVW 1 & 2. You have to apply a planar map (using a UVW modifier) to see it.

BUG #: 57345


NAB: The UDeflector is currently operating on the outside face of objects unless you add a Normal modifier to the object and flip the normals. The is exactly the reason why we have Normal modifiers and Smooth and Optimize modifiers. Also note that in production, you'd never use the actual mesh as a deflector... you'd always make a copy of the actual mesh, optimize it, and then hide the deflector mesh (and make it non-renderable) -- this is a much more efficient way of using deflectors in production (with significant geometry). This is one of the most computationally complex things in Max, and if we double the number of faces available to the test, we double the amount of time required in the calculations. If you had the same set of particles testing both sides of an object you'd be wasting huge amounts of cycles. (If particles are on one side, they tend to stay on that side.) If you have two specific effects, it's much more efficient to set up two hidden reduced rez meshes with normals directed the right ways, and TWO separate particle systems.

~QE NoRepros

BUG #: 62592


NO REPRO: When we go through these steps in 0.2.7 the effect of the middle face extrude modifier are still there, plain as day.

~QE NoFixes

BUG #: 31756


NO FIX: Track View labels are deselected when a new object is created because any topological changes to the reference hierarchy result in the Track View list being re-built. There is no practical way to save and restore the selection set, so this is just how it must be.

BUG #: 63180


NO FIX: In the NJA dialog, the overwrite existing file dialog will appear even if the file has been previously deleted because what that code is checking for is the presence of another network queue entry that's outputting the same-name file. (That's all it can do.) This code prevents you from sending two or more jobs with the same filename output (avoiding the case in which you'd find out later... after you executed the jobs). When you submit a job, the program checks all other jobs in the queue and looks at their file outputs. If it sees a conflict, it comes back with a warning dialog. (The image file itself doesn't have to exist.)

BUG #: 63219


NO FIX: Although it would be great if, when accessing a servers log file in Queue Manager, the errors appeared in red, we actually tried this last winter and couldn't get it to work. The list types that we're using only allow one global color for the list (so you can't have one line in one color and a different line in another color).

BUG #: 63565


NO FIX: Adding the ability to load bitmap files without entering the .3 extension would require a complete rewrite of the bitmap manager.

BUG #: 63325


NO FIX: This isn't going to happen because these controllers won't work properly with gizmos anyway (since they essentially position an object in world space, which is inappropriate for gizmos).

BUG #: 37127


NO FIX: There's just no way that we can fix this minor issue about nested multi-so materials not working right without ripping apart huge amounts of code (which we're not going to do). We could consider not allowing nested multi's, but that's another can of worms that we're not going to get into.

BUG #: 62572


NO FIX: UVW Map and Displace modifier gizmos by default fit a single object in a multiple selection because these modifiers are different from other modifiers and have become special-cased and overly-complex because they have both parameterized size and size based on the incoming object. This is just the way it is and is going to be.

BUG #: 32592


NO FIX: If your default extension is "*.*", after having selected a file for output, if you go back into the file picker, the filename field is replaced with a "*.*". We've tried everything and Windows keeps putting the *.* back in... no matter what. Even hardcoding the filename in there won't do it. For some reason, if Windows sees the default extension as *.*, it will ignore the default filename and stick a "*.*" in there. We tried.

BUG #: 63408


NO FIX: When an environment apparatus is selected and the Render Selected command is chosen, nothing is rendered because the apparatus is just the "reference object" for the effect, it's not the effect itself. There's no intrinsic relationship between them, and it would be virtually impossible to create that relationship without rewriting the entire environment system.

BUG #: 32424


NO FIX: We've looked at making Zoom extents become sensitive to SO gizmos, and there's no reasonable way to make it happen without rewriting huge amounts of code (which isn't going to happen).

BUG #: 63567


NO FIX: Tabbing in the Specify Cropping/Placement dialog of the Bitmap map doesn't work because the edit fields are not created with a resource (the normal way) -- they are part of the toolbar, added dynamically. Tabbing doesn't work in toolbars, and we can't figure out any way to kludge around it.

BUG #: 59850


NO FIX: Adding a bunch of special apis and UI to allow the bitmap crop to automatically derive the render size is out of the scope of this release. Plus, you can already do it by getting the current image aspect ratio, and setting W and H so that W/H is this ratio. ( for instance if Image Aspect is 1.333, Set w = 1.0, h = .75. Then use the CTRL key.

Update notes (for version 0.2.7, 5/11/97):


(3491): We've enhanced the Units setup method for keyboard entry in fields so it respects defaults in the same way AutoCAD does in relationship to dimensions (for example, when you do not specify a unit or only part of one and press return). When displaying feet/inches, entering a value and hitting return previously only gave you that value in feet. You can now decide to specify that default value in either feet or inches. Also, there is a way to use an arbitrary fraction (say 37/45) at any point and that value will be converted into the current units. Previously, the / key was disabled when not using fractions and then it was limited to the even fractions we supplied. When dividing something, say a 17 foot wall into equal 5 sections, you can now enter 17/5 (when in default FEET mode) and get the proper result. Notes:

Installed a set of radio buttons in the Units Setup dialog, under the US Standard unit type list boxes. These allow folks to set the default input unit type for US units with feet and inches displayed to either feet or inches. The default unit (as it was in Max 1.x) is feet. That is, typing a value like "12" into a universe unit field when the US Standard display method is active will result in 12' being displayed. This radio button lets you set the system to make the default unit inches instead (entering 12 results in 1').

The selection the user makes is stored in the 3dsmax.ini file under [Performance]/USDefaultUnit:

USDefaultUnit = 0 --> feet

USDefaultUnit = 1 --> inches

Regarding the part of this wish that asks for arbitrary division capability, here's an example of how this works (using the above example):

Set units to Feet with Decimal Inches, default units = feet.

Go to the box creation panel, enter 37/45 and press Enter. The display reads 0'9.867", which is 37/45'

Enter 17/5 and press Enter. The display reads 3'4.8", which is 17'/5. Entering 17/5" results in 0'3.4", which is 17"/5.

Set default units = inches.

Enter 17/5 displays 0'3.4", showing that the default units are now inches. Entering 17/5' gives the expected 3'4.8".

The thing to remember is to always enter the units specifier AFTER the divisor: 17/5'. Entering 17'/5 will confuse the simple parser, which uses either a space or units character as a delimiter, adding the pieces together. Do you want to find out what 6 7/8" + 1' 2 1/4" is? Enter 6 7/8 1'2 1/4 and press Enter. The system will display 1'9.125", or 1'9 1/8", which is the total of these figures. While the wish didn't specifically ask for this, this feature exceeds it and is very handy.

The next part of this is even more interesting, since the wish report mentioned that the "/" character was disabled when not using the US display with fractional inches. In dealing with this, we've removed the unit-sensitive restrictions on keyboard entry in spinners. This means that you can type anything into universe spinners you like (even invalid characters, because if invalid characters are found, it'll beep and go back to what it was before).

HOWEVER, what this also means is that you can type ANY unit value while in any unit type and get an instant conversion. For example, set the units type to Meters and type 2' into a field. It'll display 0.61M. Type 1/2 and you'll get 0.5M. Type 1/2' and you'll get 0.152M. Type 6" and you'll get 0.152M. Type 1FL (1 furlong) and you get 201.168M.


Fixed a bug in which the Object Type rollout was still closing when you did a Close All.

Changed the name from "Close Rollup" to "Close Rollout".

Added the list of rollout names to the right button menu so you can go a direct "Go To", and it works great for those humongous rollout strips (like Particle Array).

Added check marks to the Rollout panel right button menu to indicate panels that are open (which is helpful)

Sped up the Rollout-pan CTRL accelerator from 3X to 4X (it wasn't fast enough to really zoom around).

The Rollout Windows used a different algorithm for positioning a panel when you opened the panel by clicking on its title bar than we were using when you open it via the right button menu. The title bar open positioned the bottom of the rollout at the bottom of the command panel. The right button open positions the top of the panel at the top of the command panel, unless this would scroll the bottom of the bottom most panel up to far, leaving blank space at the bottom, in which case it positions the bottom of the bottommost panel at the bottom of the command panel. We liked the right button open method better, and that fixed up a few issues regarding panels not rolling-out to their top position.

Additional tweaking to Rollout behavior: Now, if the rollout is taller than the command panel, it will position it so the title bar is visible at the top of the command panel, instead of aligning the bottom (which is what it used to do).

Made a change in the rollup window message handling so that the right button menu now works in ALL rollups, without making tons of local changes. In fact, all plug-ins can now remove the code from their window procs that passes the mouse button and move messages into RollupMouseMessage().

~Dynamics Utility

The Dynamics utility now supports collision between spherical objects (ie, it uses a bounding sphere for the collision object). Neither bounding boxes nor actual-mesh checks are implemented yet, but those are next, along with hierarchial link collision.

Sample file: DYNAORB.MAX. Load it, go to the Utility panel, open the Dynamics utility, and hit the Solve button. If you want to tear it apart, you can bring up the Edit Object dialog to look at the various settings, but it's not recommended for anything but idle playing until 0.2.9. (Note that a tutorial will come with 0.2.9 that will get you started.) By 0.2.10 we hope to have it feature complete, and by 0.2.11 (6/16) we'll be ready for beta feedback on it.

The 027spec.doc covers the basic functionality and UI elements fyi.

~YG new features and general issues resolved

The camera fov-to-lens calculation now reflects the aperture width associated with the current render format. So, when you change the Output settings in the Render Scene dialog, the camera FOV changes accordingly to reflect what the actual focal length of the lens would be at that Output format.

A new "Aperture Width" field has been added to the Render Output Size section. It is only settable for the Custom format. Notes:

It's currently in millimeters, but we could change it to inches if folks prefer it that way.

One uncertainty at this point is what to use for aperture settings for the Video formats. We'll be tweaking this up over time.

Set it up so that the Custom format "remembers" its settings (so you can switch to another format and back and they'll still be there).

Note that tthese changes will have to be made to the Video Post dialog also, but we're not going to do that until we're sure that this thing has settled down.

Implemented a flyoff next to the Camera FOV setting that lets you look at horizontal, vertical, or diagonal FOV. The internal value stored is still always H-FOV, and this is the value you will see in the track view. Changing this flyoff setting has no effect on the rendered image: it just lets you look at different types of FOV.

JC brought up an issue regarding how it was possible to set the fog falloff for the reflection's map's camera (previously impossible.) To make it possible, we've installed a new section in the Reflect/Refract map's parameters called "Atmosphere Ranges", with (animatable) Near and Far range spinners, plus a button to grab the ranges out of a camera.

Note that this does NOT set up a dynamic link to the camera: it just grabs the values at that moment.

While in there, the rollup panel was rearranged a bit (hopefully to make things a bit clearer and neater).

JC noted that the Reflect/Refract map wasn't very responsive to ESC interrupting while rendering large maps. A progress callback has been added so that the rendering of the .CUB map is now well-interruptable ( with <ESC> ).

Added red-when-animated Key-Brackets for the parameters within materials and maps.

At JC's suggestion, added the capability to due multi selects from the Hit by Name dialog when doing a Pick Target for either the barycentric morph controller or the regular morph controller. Only the last target in the list will be chosen to be used to create the actual key, but at least this gives you a way of absorbing n targets into the controller at once.

Set up the Shape/Line object and Loft objects so that they properly handle scene rescaling via the new Rescale World Units utility and file i/o method (referenced below in version 0.2.6). This includes the fit and bevel deformations, which are based on real-world units.

Installed a "z-coverage" channel in the GBuffer to provide an 8-bit value (0..255) that gives the coverage of the surface fragment from which the other g-buffer values (Z, normal, id,etc) are obtained. The channel is being written and read with RLA files, and shows up in the VFB. This ought to make the antialiasing in 2.5D plug-ins such as DOF filters much better.

Installed different cursors for the VFB zoom/in and zoom/out, as per MF's suggestion. They're modified cross hairs so you can see the center pixel clearly. OK?

Implemented the ability to Pan in the VFB by holding down the SHIFT key and dragging.

Installed a method to deal with the problem of converting old r1 visibility tracks (and other continuous tracks) over to the new boolean (on/off) controller. This method looks at the point at which the old values crossed the 0-value line, and puts a key there. For pre-r2 files, on load it uses this to replace visibility controllers with On/Off boolean controllers. This conversion also works when you assign a boolean controller to a track in the track dialog.

At JR's suggestion, we added the old "hidden" 3dsmax.ini parameter "Don't Antialias Against Background" to the Preferences/Rendering dialog (in the old "This Space for Rent" space).

At JJH's suggestion, we made the Load/Save Presets section in the new particle systems longer (to hold 9 lines without scrolling).

At RL's suggestion, the Inherit Deflector Motion checkbox has been changed to now be a percentage spinner in both UDeflector and SDeflector. Note that this is a psuedo-percentage in that the value can range far above 100%.

At JC's recommendation, we incorporated the QueueMan's Job Summary and Job Statistics pages into one Summary page, so you can see all the relevant Job info at a glace.

Additionally, there's a new "Remaining Frames" field that displays the number of frames left in the job until it's finished.

Added a new "Maximum Frame" entry in the Accom setup dialog. There you define the maximum number of frames your Accom can handle (there is no way to get this info straight from the machine). It defaults to 1860. Some units have different sizes and users will have to adjust this accordingly. When rendering, if an attempt is made to write over the end, the driver will issue an error and abort.

Added code to the 3DS import dll to correctly handle the new intepretation of the map "amount" sliders. (ie, set opacity to zero when using an opacity map, etc).

Added spinner field animated Key Bracket display to:

Lights and Cameras

Color Swatches

Anything that uses parameter maps

All of the basic materials and maps

Added an API to support custom motion capture devices. (Note that the motion capture controllers (which use the devices) are already plug-ins (of course) since they are controllers.) So a third party can now create a new device to plug-in to our motion capture controller but also, if someone was so inspired, they could create a new motion capture controller that used our devices.

Note that he also suggested that we implement a keyboard motion capture device. While it's possible now, we don't have time for it in the schedule and it'll be a perfect thing for a developer to experiment with.

GM had suggested that we add the ability to play the animation sequence while performing motion capture. To this end, we've added a new checkbox called "Play During Test".

GM had suggested that it would be helpful to be able to record motion capture sequences in less-than-realtime. This is important because it's hard to perform complex motion in realtime when there's alot going on. Plus, in general it may be helpful to be able to visualize the animation in locked non-realtime modes. So, we've added some new radio buttons to the Time Configure dialog.

In the "Playback" section there are now 5 radio buttons labeled: 1/4x 1/2x 1x 2x 4x. The default is 1x (which means that the animation is played at normal speed). 1/4x means quarter time -- in other words objects will move at 1/4 the speed they normally would and the animation will take 4 times longer to play. 1/2x means animation will play at half speed... 2x means double speed... etc etc.

So, now you can view an animation slower or faster without altering the animation by rescaling time. This doesn't actually alter the animation -- it just plays it slower or faster. APIs have also been added so that plug-ins can access this setting. This way the motion capture utility can respect these settings when recording motion, and for the new 'Play During Test' mode. One last thing -- these speeds are only available if real-time is turned on (kinda ironic since it no longer is 'real time').

For a quick example load in DINO.MAX, set it 1/4x and watch him run in slow mo!

Set it up so that the play animation tool indicates (by turning yellow) if your playback speed is set to something other than 1x. Note that you also could have chosen Play Selected (so there are two variations of the yellow icons). Additionally, the tool tip reflects the current playback speed.

GM had suggested that, in the motion capture dialog it would be handy to have a system of labeling so you could describe in a line how each controller was set up. ie: joystick=eye rotation, hat switch=blink etc. So, we've added a 'track name' field to all of the motion capture controllers. By default each controller does not have a name -- in the case where there is no name the motion capture utility continues to display the same text in the track list as before (i.e. "Sphere01\Position"). If you do give the track a name then that name appears in the list instead. Notes:

The name that you provided for the controller is appended to the sub-track of the controller that actually stores the data.

In his request it wasn't clear as to whether or not he wanted the individual device bindings to be named or just each controller. It made sense to do the naming at the controller level (since that corresponds to a single track in the motion capture utility).

Implemented a JC suggestion that we add an "Image Blur Multiplier" field to the Object Parameters dialog. This lets you do special effcts with different image blur amounts on different objects. The IBMultiplier track is also animatable (even though it's in a modal dialog) so you can animate the blur effect (by using the trackview or by setting the value in the Properties dialog, ok-ing out of the dialog, moving the time slider, going back in, etc).

Fixed all sorts of problems in the new Water map: Plus, installed a Random Number Seed field, so you can try out different wave sets generated from different random numbers.

Finished installing the new Render Presents from the Render Scene dialog into the Video Post Render dialog. All presets and controls ought to match now.

MR suggested that it would be extremely beneficial if we came up with a method to hide particle systems without hiding geometry. (This is so you could work with a big scene that had a lot of particle action going on and not have to deal with the overhead of particle computation.) So, there's now an additional Hide By Category display option called Particle Systems. When checked, only particle systems are hidden.

Note that particle systems are special since they are both an object and a particle system so the geometry display option affects them as well. So, if you have both the geometry and particles categories hidden and then make a particle system, you'll see all of the geometry come back when you mouse down.

Note that there's a bug here that we haven't fixed yet in which, if the PS category is hidden and you then make one of the new particle systems, any of the previous particle systems that were hidden won't be unhidden. That'll be fixed for 0.2.8.

LM suggested that it would be helpful if we added a preference to turn off the NU Scale warning. This preference is now in the Prefs/General page (and is stored in 3dsmax.ini, of course).

MGB suggested that it would be valuable to add a preference to have Backface Cull on or off by default at creation time. This preference is now in the Prefs/Viewports page.

Implemented a suggestion that JC had that we add a "Show Frame Numbers" checkbox to the "Ghosting" area of the Preferences/Viewports dialog. When on, this displays the frame number of the ghost over the ghost.

Implemented a suggestion that MF had that we print the last rendered frame-time for Video Post on the status line after a render.

Additionally, we've added a new "Last Video Post time" field to the Summary Info dialog which will display the last rendered animation-time.

MF had also suggested that we keep the Video Post Progress dialog around (like in R1) instead of closing it after a VP render. Many folks wanted it the new way, but we can see how it would be valuable to have the old capability as well (to see various parameters that you had set). To that end, a checkbox has been added to the Video Post Execute dialog so that you can set if you want the Progress dialog to remain displayed after a Video Post render. If the checkbox (Keep Progress Dialogue) is checked, the dialog will remain at the end of a job (if it's not a network render). The "Cancel" button is renamed to "Close" at that time.

GP had noted that we weren't optimizing the creation of shadow maps in the case in which nothing in the scene is animated (like we were doing in 3DS/DOS). Although this is much tougher to do in Max due to its open architecture, we figured out a way to implement it using validity intervals. So, if a shadow buffer is valid over some interval, it won't be recomputed over that interval (unlike 3DS/DOS, it doesn't have to be either computed just once or computed on every frame). This is a huge optimization over the old method, and is quite intelligent! NOTE: Video post will still compute the buffers on every frame because of the way VP calls the renderer. We may possibly eventually find a way around this VP limitation, but don't count on it.

Related to the above... MR had brought up an issue that we had wanted to deal with eventually, and finally did. Video Post has always functioned by opening the renderer on every frame. It's been redesigned for the special case in which only ONE Render Scene event is in the VP queue. If it finds only one, it will properly open the renderer only once and close it on the way out. If it finds two or more entries, or no entries, it does not open the renderer. This was rather extremely tricky as it touches several aspects of Video Post and network rendering with Video Post.

So, Video Post with multiple scene entries, rendered in standalone mode and in network mode, needs to be regressed thoroughly.

Implemented code to resolve the following user request this past winter on the Kinetix forum:

"I'm making a object that I place in my scene, say a column, then I'm creating a wonderful texture mapped dense mesh column. Now I would like to replace that with every column in the scene. I tried to give them the same names and "MERGE" them in, but that seems to only replace the mesh (with the UV's), but not the texture maps/ materials".

He wants to replace every column in the scene with the new one. Assuming these columns are INSTANCES, it would be reasonable to expect that he could do this (but until now it was impossible). Theoretically, it should've been possible under the Replace command (instead of Merge), and now it is (because the Replace command will now replace all instances if it is replacing an object and finds that it has multiple instances).

The other issue here is whether materials should come along with replaced objects. This gets a little tricky. Say you have an object multiply-instanced in your scene, but with different materials. You merge in an object with the same name as one of the instances: should you also replace the materials of all the other instances? Or just those that have the same material as the one with the same name as the merging object?. Now it brings up an alert (so you have a choice):

"Do You Want to Replace Materials along with Objects"

To summarize:

Replace will now replace all objects in the scene that have the same name as the incoming object with the incoming object, and optionally replace the former material with the material of the incoming object. If an object in the scene that is being replaced has multiple instances, ALL instances will be replaced (regardless of their names).

So, if you have three instances Ball, Ball01, Ball02, and you replace from a file having a single object Ball, it will replace the geometry (and optionally material) of all three instances Ball, Ball01, and Ball02. Additionally, if you have an model of an airplane called Ball, it will also replace that.

To reitterate, since you can name several objects the same thing if you want to, you could have three objects, Ball, Ball, and Ball, which are NOT instances, and they would all be replaced when replaceing from a file with an object called Ball.

At GP's suggestion, the Medit sample slots will always scroll to keep the active slot visible as you change zoom levels.

Set it up so that the Medit Options dialog remembers its position.

Implemented a new MatLib path in the Files/Configure Paths dialog and that's where Medit will now look for the .mat files.

In the Object Properties dialog, now if the object is in a Group, the "Parent" field is labled "Group" (instead of Parent).

GM had brought up an issue in which the TrackView's Zoom To Selected Object function wouldn't open up the hierarchy if the object you were zooming to was in a collapsed branch (it would require you to open each track and hunt down the object manually in the list). It now expands the hierarchy to display objects that are in a collapsed branch. The way it works is that if an object is selected and is currently visible in the TrackView it will zoom to that object. If no selected objects are visible in the TrackView then it will start searching through the children of each object looking for a selected object. If a selected object is found, then it will only open up the nodes that are necessary to get to that selected node (ie, all of its ancestors). So in other words, the open/close state of nodes in the TrackView will only change if it is necessary to zoom to the selected node. Also, if it is necessary to open up some nodes, a minimum number of nodes will be opened.

Identified a conceptual problem in the Medit Browser in which folks weren't always remembering to set the Instance or Copy buttons to what they wanted before doing the "get" operation. So, we removed the Instance/Copy options completely from the browser, and instead put up a dialog at the end of the operation asking if you want to instance or copy. (The dialog always defaults to "Instance".) A quick way to try this out is to browse Medit from the Environment dialog.

At GM's suggestion, we changed the PAL rendering resolution default to the PAL(PVR) standard (720 X 576).

DT had noted that our implementation of color-per-vertex control wasn't quite complete, in that there was no way to select vertices by color. So, there's a new section below the Vertex Color section in the EditableMesh object (vertex level) called 'Select By Vertex Color'. A color swatch in this section lets you choose the color which will be matched to vertex colors to determine which vertices to select. Additionally, there are R, G, and B range spinners which define how close a vertex color has to match the user specified color to select that vertex. For example if R, G, and B are all set to 10 (which is the default), then a vertex color's R, G, and B values must be within 10 of the user specified color's R, G, and B values.

Pressing the 'Select' button in this section actually performs the selection. If you hold down the CTRL key while pressing the select button, newly selected verts will be added to the existing selection. If you hold down the ALT key, matching verts will be subtracted from the selection.

An easy way to select all verts of a given color is to select one vert of that color, drag the color from the vertex color swatch to the select-by-vertex color swatch and then press the select button.

The Select Open Edges function in the MeshSelect modifier has been added to the EditableMesh object as well.

Implemented a method of naming sub-controllers in the List controller. This makes it much easier to keep track of lists of complex expressions, etc. Plus since the Global tracks use List controllers, this lets you name all of the global tracks. A new field has been added to the List controller's parameters that lets you set the name of the item selected in the list, and that name appears in the TrackView. If no name is specified, then the controller type is used as the name (which was what was used before).

~YG Bugs Fixed

Fixed a bug in which the program would crash when you went to pick an object for the Reflect Refract map, then changed your mind and put a Falloff map in the diffuse slot of another material while still in that previous pick mode.

Fixed a bug that RL found in which, if you had a keyboard shortcut for Quick render and executed that keyboard shortcut to start a quick render twice very quickly, you'd get a double bright render and when the RiP dialog went away there would've been a second menu left behind with all 9's on it (which couldn't be closed).

Fixed a bug that RL and DIS found in TrackView's filtering system in which, if you have Show Hierarchy off and Selected Objects Only on, you will only see selected objects.

Fixed a problem that JC found in the bitmap map in which the Blur parameter didn't work correctly when negative tiling was on.

Fixed a bug that LM found in which the Ring Array would crash if you set the Number param to anything <4 and then undid the operation.

Fixed a problem that JC found in which RLA files looked different (ie, had different brightness) when used with Pyramid vs SAT filtering in the bitmap map.

Fixed a problem that JC noticed in r1.x in which 16-bit RLA files would've only output at gamma = 1.0. If you rendered an RLA image when RLA output is set to 16bpp, and used the Gamma Override to set it to a non-1.0 setting, when you later did a File Info on that file, the gamma would've read as if it was set to 1.0. (This worked fine when RLA was set to 8bpp.)

Note: This was originally done intentionally. The reason was that if you output an RLA file with gamma, it gets gamma converted to the file, then on input it must be de-gamma converted. Both input and output operations involve table lookups that degrade the quality of the image, but in particular, the input gamma correction was done with an 8bit lookup table, which defeated the whole purpose of storing at 16 bits.

However, since r1 the input gamma correction method for the 16 bit maps was changed to now use the 8 bit lookup tables with interpolation, so it shouldn't be terribly bad. Ergo, writing 16 bit RLA files with gamma other than 1 is now enabled and we'll see how it goes.

Fixed a very esoteric float roundoff problem that we've always had with rotations. Since we use floats, there are many places in Max where we compute transform matrices that should be 90 degree rotations but in fact (due to round off) does not result in a matrix that is exactly that. The result was that numbers that should've been exact weren't quite. For example, if you created a cube that you thought was exactly 10 units with the corner at the origin, unless you created it in one specific viewport you would've ended up with coordinates that weren't exact once it was transformed into world coordinates.

The good news was that all of these transforms (Matrix3::RotateX, etc) reside in the single file geom\matrix3.cpp and the fix was very generaly. Now, instead of directly computing the cosine and sine of the passed in-angle the function ComputeCosAndSine is called, which checks to see if the angle is within a tolerance (0.000005) of pi, pi over two, negative pi over two, or pi and if so just sets the values of cosine and sine (otherwise computes them).

This theoretically shouldn't destabilize the code, but it's certainly possible. So, watch carefully for any weird rotation anomalies.

Fixed a bug that LM found in which the IK "Bind Position" flag could automatically be set when the "Clear Keys" flag was on and you changed command panel modes. (There were actually a couple of resource ID collisions which would cause various settings to get changed when you clicked on any of the buttons in the first IK panel.)

Fixed a problem with compound objects that JJH found in which the viewport would not redraw correctly after undoing a "pick operand" operation.

Fixed a bug that IB found in which a Linear Out of Range type would not work correctly aftering doing a non-uniform scale.

Fixed a bug in TrackView that GM found in which, when the Selected Objects Only filter was turned off and you had the Hierarchy filter turned off, it was also showing the parents of the selected node.

Fixed a bug in which you'd get an assertion when removing the last item from a Level Of Detail set.

Fixed a bug that LM found in which the program would crash if you created a box, applied an Optimize modifier, clicked on Edit Modifier Stack, selected the optimize modifier, click on Copy, selected the box (in the stack), clicked on Paste and then closed dialog.

Fixed a bug that LM found in which the program would crash if you created a box,, applied a CameraMap or PathDeform WSM, clicked on Edit Modifier Stack, selected the WSM, clicked on Copy, selected the box and then clicked on Paste.

Fixed a bug that RS found in which the program would crash if you applied a UVW Xform to an object with a bitmap materials applied, and then selected UVW channel 2 in the modifier.

Fixed a bug that PW found in which you'd get an assert if you created a Box FFD WSM in the top view by dragging from upper left to lower right, and then created the depth by dragging down.

Fixed a bug that JB found in which you'd get an assert in the TrackView if you selected the yellow box (selected node icon) for a node that was already selected if the Filters/Selected Objects Only filter was on.

Fixed a problem that PW found in which FFD modifiers weren't working correctly with planar surfaces.

Fixed a bug that LM found in which the program would crash if you deleted an object with a Visbility track that was referenced by an expression controller.

Fixed a bug that LM found in which the program would crash if you had the "Can't Assign Control... Circular Dependency" error message up when a timed auto-backup occured.

Fixed a bug that KM found in which, when you instanced an expression controller and then made it unique, the assigned vector/constant controllers wouldn't stick.

Fixed a bug that RL and JC found in which, if you New'd a scene that had expression controllers, the time range bars would be wiped out.

Fixed a problem that JB found with 'Ghost in Wireframe' checked. The before/after colors were not correct (they were a dark grey) when the selected object was in Smooth/Highlights mode.

Fixed a problem that AI found in which, at 0% opacity, objects would completely disappear from the shaded viewports.

Fixed a bug that MGB found in which the program would crash if you created a Conform object, when down into the stack of the Wrap To object, went into its Edit Stack dialog, and did a Collapse All.

Fixed a bug that MR found in which the program would crash if you shift-copied a PArray object that referenced another node as its emitter.

Fixed a problem with the Pyramid primitive's normals becoming reversed when the height went negative.

Fixed a problem that JB found in which the chamfers on the Chamfer Cylinder, Spindle and other extended prims weren't user-creatable on nonzero frames with the Animate button on. All extended prims have been revised to set frame 0 keys when in mouse create mode, regardless of time or animate state.

Implemented auto-self-mapping in the Scatter and Conform objects, so the Generate Mapping Coords option automatically turns on when necessary.

Fixed a bug that JJH found with the new particle system's Load/Save system. If you saved a couple of settings, then left the creation panel and came back, the names of the saved settings would've been corrupted. Note that the name length for settings is finite, set at 14 characters.

JB had noted that within the Smooth modifier, the Autosmooth option stopped at 90 degrees now. It's been extended to go to 180. This was also changed for the EditableMesh object. (Why anyone would want to smooth across an angle greater then 90 degrees is beyond me, though.)

While modifying the above, fixed a few bugs in the EditableMesh object in which making changes to the smooth settings didn't invalidate the strips.

Fixed a bug that SA found with compound objects in which collapsing a compound object wouldn't always evaluation the stack correctly.

Fixed a bug that MR found in the new particle systems (and some of the new spacewarps) in which the values of the percent fields were reading as units fields.

Fixed a bug in which the new conversion to Editable Spline was causing a crash right after the conversion in some cases. (It had to do with a caching mechanism for capping info that worked fine in 1.x but now that conversions can happen without the object pipeline remaining behind them, the code needed to be modified.)

Fixed a bug that TB found with Normal Align in which, when the sphere's "base to pivot" option was on, a Normal Align to that object would respect the original face positions.

Fixed a bug that a number of folks have found in which large .wav files didn't work correctly. As it turns out, there were a number of truncation problems resulting from multiply overflows when working with these types of large files.

Fixed a bug that LM found in which, if you started the program, opened TrackView, did a File/New, New All, then all tracks under World were shown twice in the TV hierarchy display.

Fixed a bug in the QueueMan in which the Estimated Time to Completion field wasn't reporting the correct value. It should now work fine (note that it will always report a number different from the value in the RiP dialog because RiP doesn't count the additional network overhead that QueueMan is accomodating for).

Fixed a bug in the IFL Manager utility in which it was possible to type in a filename without an extension and the .ifl wasn't getting tacked on at the end.

fixed a bug in the IFL Manager utility in which it was possible to type in invalid frames. (Now it limits you to 1 through the count of files.)

Fixed a bug in Video Post in which it was possible to add an External Process event in when you had more than 1 event selected. (That is now be inhibited when you have >1 events selected.)

Fixed a bug that RF found that, if you clicked in the leftmost part of the frame slider (grey area) to get the frame slider back to frame 0, it only went back to frame 2 (or higher, depending upon your total number of frames).

Fixed a bug that MR found in which, if you cloned a targetted entity (camera, light, etc), the original entities target was renamed to the name of the new entities target. Also made sure that the code that updates a target name once you rename a "head" object is working correctly.

MGB brought up an issue about bitmap path selection (in the File/Config Paths dialog) and a bug:

Issue (NAB): Once you choose a path, that path is not "remembered" (ie, sticky). We always start out at the Max exe directory by design.

Bug: Fixed a problem in which the scroll box disappeared after adding more than 15 entries.

Note: There is a hard-coded maximum limit of 50 bitmap paths. That's just the way is. (If you have more than 50 paths, your system performance is going to be so hindered that it'll come down to its knees.)

Fixed a problem that MR found in EditableMesh in which the Attach Multiple operation (and probably some other SbN operations as well) was including hidden and frozen objects in its list. Those are now hidden from the list at the appropriate times.

Fixed a problem with using SplineSelect/MeshSelect and animated Xform modifiers on Spline and Mesh objects. Previously, if you used a succession of multiple spline/mesh selects, and xform modifiers to animate each one, the stack wouldn't have been evaluated correctly (you'd have ended up with all the animation going to the last xformed vertex, and none happening on the previously-animated verts).

Warning. This was a modifier pipeline bug. Fixing those always raises the possibility of a heinous regression bug.

Fixed a bug that GM and MF found in the Image Motion Blur system in which there'd be blur discontinuities on very slow-moving objects (especially when starting up and shutting down to zero velocity).

Did some further tuning on the Image Blur algorithm: In addition to the above fix, it looks a little smoother now.

Fixed a problem that LM found in which you'd lose your keyboard accelerators if you had a trackview-controller select dialog (from the expression controller) up while you did a File/Reset. The choose controller dialog is actually a copy of trackview, and so the trackview accelerators were getting installed. But canceling out was not putting back the main UI accelerators.

Fixed a bug that JR found in which loading old files with EditSpline modifiers would cause incorrect evaluation of the splines.

Fixed a bug that PM found in which rendering CUB maps in the Reflect/Refract map used to respect the render mode (e.g. Render Selected). It doesn't do that anymore.

Fixed a bug that MR found in which the Water map wasn't initializing itself correctly.

Fixed a bug that LM found with Volume Select in which, if it wasn't receiving any geometry in the pipeline, it wouldn't be drawn correctly. Now, if there's no incoming geometry the VS gizmo will always appear at a minimum size so you can see it.

Fixed a bug in the Volume Select modifier in which, if you applied a VS to an object to select some verts, applied a Delete Mesh modifier, applied another VS modifier and set it to Face selection and clicked on the invert button you'd get an assert.

Fixed a bug that KM found in which the Displace modifier would crash in certain cases.

Fixed a bug that AI found in which the animatable vertices in EditableSpline objects would appear to be "locked" on frame 0 after animating some of them.

Fixed a bug that JB and MM found in which the program would crash after putting an EditSpline modifier on a loft object path.

Fixed a bug that MM found in which the program would crash if you added an Extrude modifier to an ESpline, then an Optimize modifier, and then went back to the Extrude and disabled it.

Fixed a bug that MGB found in which SuperSpray would crash when set to render Instanced Objects and the vertex count got too high.

Fixed a bug in which the PCloud emitter size spinner fields weren't updating correctly on creation.

Fixed a problem that MS found in which you could (apparently) use non-mesh objects as candidates for Scatter and Conform. Now, if you've selected a non-mesh object, those two options aren't available. This used to crash Scatter and Conform. Note that we haven't done the same thing for Boolean, Morph and Connect yet, but that might happen down the road if we need to.

Fixed a bug that PW found in which PArray would crash when you fed it a topologically-animated emitter object. Now, if more geometry is created, the last valid emitter motion is used.

Fixed a bug that RL found in which multiple Scatter objects shared a single parameter block.

Fixed a bug in PArray and PCloud in which the Instanced Particle Object name either appeared as the incorrect node or didn't appear in the dialog at all after a reload.

Fixed a bug that JB found in which the Bitmap map's mapping coordinates would change from Spherical to Cylindrical if you switched from Environ to Texture and then back to Environ again.

Fixed a bug that JJH found in which it was possible to select Materials when browsing for Maps from the Environment dialog.

Fixed a bug that GM found in which it was possible to select Materials when browsing for Maps from the Displace modifier or spacewarp.

DS had noted that when you create an archive now, the file that used to be called "maxfiles" which is included in the archive didn't have a .txt extension. It's now called "maxfiles.txt". This file ought to make it very clear to folks as to exactly what bitmaps go with the archive (a little extra info never hurt).

Fixed a bug that JJH found in which the VFB zooming would get stuck in zoom-in mode when you had turned any of the RGBA channels off/on.

Fixed a bug that MR found in which visibility keys weren't picking up their boolean state correctly on the frame of the key.

Fixed a problem with visibility track conversion from MAX 1.x files in which it wasn't including 0 values as invisible, but only <0. (In 1.x, 0 is considered invisible.)

Fixed a problem in which, if you passed the mouse over an object and got an object-tooltip just as you were moving the mouse into Medit, the tooltip would stay up.

Fixed a problem in which object-tooltips were not erasing with the Intergraph OGL driver.

While in the object-tooltip code, implement a feature that makes tooltips go away by themselves after 5 seconds (just like ordinary Windows tooltips do).

JB and DS had requested that the Display and Selection floaters become resizeable. We tried putting scroll bars in there, but it just didn't work. So, there are now tabs in the Display floater and it takes up half the real estate than it did before (there's nothing reasonable that we can do to the Selection floater).

Fixed a bug with the way viewport Attenuation was being displayed in the HEIDI driver.

Implemented attenuation in the OGL driver. Since GL does not have the same kind of attenuation we use in the HEIDI driver, it was just approximated with GL. Sometimes the approximation is good, and sometimes it ain't. But this is just a fact of GL life.

Fixed a weird display problem that AI reported with one of the teapots in his file. The display of Teapot02 was totally hosed in OGL but looked fine in SZB. It turns out that the teapot was uniformly scaled, and that caused OGL to scale the surface normals too.

Fixed a bug that JC found in VideoPost in which, if you had two output events (ie, one writing a .TGA and the other an .AVI), even when the .AVI event was is inactive, VP would not have allowed you to network render.

Fixed a bug that JB found in which the ESCape key wasn't working when canceling out of the Video Post Render In Progress dialog when that dialog didn't have focus.

Fixed a bug that MGB and MM found (and LM isolated) in which the program would crash when undoing various actions in the modifier stack.

Fixed a problem that LM found in which it wasn't possible to copy the following curves in Trackview:

Ease and Multiplier curves.

Path Percent

U and V under Position Surface

U and V under Position Motion

Fixed a bug that LM found in the list controller in which the 'available' slot was copy-able. You can still paste to the available slot but you can't copy the available slot.

Fixed a bug that JJH found in which the program would crash if, while using a 3-button mouse, you clicked and held the left button in the viewport, then while holding the left button down, clicked the middle button and scrolled left or right to initiate a pan. Note that in this case the middle button will act like the right button and abort the process that was originally begun with the left button. (Basically we can't have two things going on simultaneously.)

Fixed a bug that PW found in which using the Bones Pick Root function on another Bones System would crash the program. (Note that we've basically inhibited the function so you can't auto-bone a bone hierarchy.)

Fixed a bug that MR found in which the program would crash if you did an Aquire Relative mapping from one UVW Map modifier to another.

Fixed a bug in which the program would crash if you assigned a List controller, replaced the Bezier controller in it with a Noise controller, and then (with the Noise controller selected) assigned either an ease or multiplier curve.

Important Note: Unfortunately, this bug was a result of the new capability that was added a few months ago animate the noise strength. So, any existing Athena files that use the new noise controller will now crash (and there's nothing we can do about it). Sorry! Note that this wouldn't affect any files created in MAX1.x, only files made in Athena (and hopefully there aren't too many).

Fixed a bug in which, if you subdivided edge, you would've lost mapping coordinates.

Fixed a bug that JR found in which the program would crash when pasting controllers into Global Tracks in the TrackView.

Note re the question: "Are we not supposed to be able to paste various position controllers into the List controller of a Global Track, thereby replacing the List controller itself?"

Answer: You can replace the List controller that is assigned to the global variable by default, however you will then only have one global variable of that type. Later if you need more variables of that type you can re-assign the List controller.

Fixed a problem that JJH found in which, while dragging around with the right button down in the VFB, you could select non-existant rows and columns.

Fixed a problem that MS found in which you'd get artifacts in the custom background image within the Medit sample slots (a 1 line cache that was being used to avoid reading the bitmap on every pixel was not thread-safe).

Fixed a problem that PW found in which a number of the 3D maps had blank unlabled tracks in the TrackView. Now, none of the maps should have any blank unlabled tracks.

Fixed a bug that JB found in which Lights/Cameras didn't get unhidden during creation if those categories were hidden.

Fixed a problem in which the scene dirty flag was getting cleared upon an Edit/Fetch operation.

Fixed a bug that LM found in which, when Dual Planes was on, if you selected and hid a target camera or a target light, the target was still displayed until you did a screen refresh.

Fixed a bug that LM found in which, if you renamed a camera while its viewport was displayed, the name wouldn't update in the viewport until you did a screen refresh.

Fixed a bug that MR found in which the custom names for the named Atmospheric effects wouldn't be visible in TrackView.

Fixed a bug that PC found in which combustion effects assigned to an apparatus wouldn't render

Fixed a problem that LM found in which, if you had an EditableMesh selected and you clicked on the EditStack button, it wouldn't take you right into the EditStack dialog (it would give you the option of converting it or going into the dialog, which was redundant at that point).

Fixed a bug that LM found in which the program would crash if you created an open spline, applied an Unwrap UVW modifier to it, then saved the file.

Fixed a bug that PW found in which Volume Select wasn't displaying its gizmo when applied to 2D planar objects.

Fixed a bug that MR found in which a UVW Mapping gizmo that had been NU scaled wouldn't align/center correctly.

Regarding this problem with the new IK controllers that RL reported:

Load Bipspring.max

Create 2 new Bone nodes on either side of the top (neck) bone (Assign to Children and Assign to Root both On, Create End Eff. Off)

Link the two new nodes to the neck bone

Link the shoulder bones to the new "Collar" bones

Result: The arms point up away from their end effectors and act wrong. Move them around.

Two comments:

Fixed a bug in which IK wouldn't solve correctly when you linked two IK systems together (which is what he did in step #3, above).

NAB component: The method that he chose to add the joints to the skeleton is not the right way to do it. When he created the two new bone nodes, they were created as part of a new system with their own master controller. This is why the chain freaked out when he linked them to the existing system (due to the bug referenced above that caused things to freak when you linked two IK systems together).

Although that bug is fixed, the problem is that the new bones are still part of their own system. So now when you move a hand, only the arm is affected because the systems has effectively been broken into pieces.

What he should have done is created the new bones by clicking on the neck bone to start the new bone. This makes the new bone start out as a child of the neck bone. More importantly, we check for an existing IK system in this case and merge the new bone into the existing system instead of creating a new one. After the new bones are added as children to the neck he can then re-link the upper arm to the new bone.

So to summarize: to insert a new link into an existing system, you must start the new chain of bones by clicking on a bone that is part of the existing system.

Fixed a bug that JB found in the Dents and Wood 3D maps in which the UV coordinates weren't animating.

Fixed a problem that JC found in which the 6 shadows of ray-traced omnis weren't perfectly lined up, and produced a little bit of artifacting (omnilamp.max).

Fixed a problem in which the Texture Correction viewport right-click option wasn't working in SZB.

Fixed a problem in which, if you pressed the left and middle mouse buttons simultaneously, you'd crash the program.

Updated the Glow (frame only) filter so that it now knows about 16 channels. (It's not quite right yet... it ought to be using the range 0-15 (and instead it's using 1-16).

Fixed a bug that LM found in which the Medit modal browser had minimize/maximize buttons (when it shouldn't).

Fixed a bug in which the program would crash if you opened the modeless Medit browser, browsed from the Mat Library, closed it and then loaded a file.

Fixed a bug that LM found with Relative Repeat and Ping Pong ORTs (

Fixed a bug that MS and MM found in which the program would crash if you'd close a spline, and and then undo the close (or if you deleted segments and then went to vertex mode).

Fixed a bug that LM found in TrackView in which, if you had keyboard focus set to the key value field and then right clicked on another key, the key you clicked on would get its value set to the value in the field.

Fixed a bug with ORT's that LM found as well as a bug in the Create ORT Keys TV utility. The general ORT bug would cause the ORT values before the first key to be wrong at even multiples of the interval. So for example, in this case the interval was 0-10, so at times -10, -20, -30, ... the value would jump to the value at 0 instead of 10. This was visible in the function curve editor when you zoomed in.

Fixed a problem with the cylindrical FFD in which loading the ffdtable.max example, selecting the ffd lattice, and then rotating or scaling it would crash the program.

Fixed a problem with shared textures in the OpenGL driver. We used to create one copy of each texture for each viewport in shaded mode, but we now only send down one copy of each displayed texture for all the viewports. This ought to be regressed thoroughly.

Fixed a bug that JR found in which, after creating a targeted light and camera and then trying to create a TrackViewport, you'd get an infinitely-cascading viewport menu.

Fixed a bug in which the "max pixel size" rendering preferences wasn't being saved in the .ini file.

Fixed a problem in the Medit browser in which the pan hand wasn't working in the list modes.

Fixed a problem that SS found in the Medit Browser in which the background color for the green parallelogram icons was white and not transparent (so if you had a windows background color different from the default then these green icons would look pretty wacky). These icons now draw with masking, so they look corrrect on different-colored backgrounds.

Fixed a bunch of minor memory leaks in GFX.

Fixed a problem that MF found in the OGL driver in which colors-per-vertex information wasn't being displayed.

Fixed a problem that the Negative filter had with 100% blend values.

Implemented the auto-mapping-coordinate generation switch for the Morph object, to make it consistent with the primitives.

Fixed a problem that JCdW and KM found in the EditableMesh Edge display code in which edges wouldn't be drawn correctly after turning them.

Fixed a problem that DE found in which the program could crash in cases in which a Loop ORT was applied to a Morph object's morph track.

Fixed a bug that TM found in which, if you cloned an object with either a multiplier or an ease curve applie to it, the clone would lose the curve. Note that APIs had to be added so that plug-ins could have the system clone any ease/mult curves when the plug-in controller was being cloned.

Fixed an IK Bind orientation bug that RL found (ikbindrl.max).

Fixed a problem with the the two value fields in the function-curve window of the TV in which, if you TAB'd through the fields it would appear as if the field you tabbed through had just been erased. (It wasn't actually deleting the value, but it looked like it.)

Fixed a couple of problems that JR found with the new File I/O Units Conversion System.

R2 was trating all values in incoming old R1 files as if the unit was 1 inch. It's been changed to do NO conversion when loading/merging old files. (He suggested putting up a dialog in which the user could select what unit the old file has, but that would mean whenever you loaded any old file you'd see this dialog, and usually you would want no conversion. So that's not going to happen.)

R2 files being loaded into R2 worked fine except that when option 1 was selected (rescale to system units) it changed the Units Set-up (Views) to that of the incoming file so that if you had set the system units and views units to mm and loaded a file with a 10" cube it was scaled correctly but its parameters showed as 10" rather than 254.0mm. Now, we don't change the Views/Units setup when you are converting the file to the current system units.

Fixed a bug that MR found in PCloud in which the emitter size tracks were labeled incorrectly.

Fixed a bug that MR found in with PArray would crash in a specific case (pacrash1.max).

Fixed a bug in PArray in which, in certain cases the Particle Type would be locked to triangles (no matter what you'd set).

Fixed a bug that LM found in PCloud that would crash the renderer (pc_crash.max). Note that this brings up some subtleties about evaluating world states that probably need to be documented. What was happening was that emitter motion was being checked by getting the emitter's transform, and this was done for the current frame and the previous frame. At the same time, the current world state geometry was acquired for the emitter. However, getting the last frame's transform causes the world state geometry to be re-evaluated, too, and that was replacing what had just been set up. Thus, when the object's topology was changing (as it was here with an animated boolean), the number of faces and vertices didn't match up and it fell apart. (Note that the cloud will not conform to the animated boolean, but it won't crash when trying.)

~YG NABs and No Fixes

MF brought up an issue in which the Intergraph OpenGL driver took a performance hit when configured in dual-monitor mode. This is purely an Intergraph issue (Max doesn't have a clue as to how many monitors are available, and this is entirely handled in the driver). This will be brought up from our side to Dave Patrick, but it would be helpful if some of the folks out there using it would bring it up with him as well.

RF brough up an issue about Make Preview, in which creating a preview with Every Nth frame set to 2 actually will play back with double frames. In this case, the frames are repeated so that the playback time will be correct (i.e. an N second animation will take N seconds to playback). Otherwise, there would be total confusion with Max skipping frames on creation and the AVI player skipping frames on playback.

Somebody (I forget who) reported that the Sphere now defaults to MaterialID #2: We did this deliberately, so that the flat part of a hemisphere (when the sphere is in hemi mode) gets ID #1 (and the curved part gets #2). This works really well with the new Flat Mirror material that doesn't need to be a part of a Multi. Can anyone see a problem with doing this?

MR had noted that the Flat Mirror map is rendered on every frame from Video Post even if the First Frame Only parameter is chosen. The reason for this is that VP opens and closes the renderer for each frame (which is required due to the fact that you can have multiple instances of the scene in VP, all rendering different frames). Because of that ability to render any number of Render Scenes, the only way to deal with this is to actualy open and close it for each event/frame.

JB had reported a problem with the OilTank in which he couldn't get the cap height all the way down to 0. The bottom line is that it's not possible using the current algorithms for the procedural geometry to accomodate infinite radius (zero height) in the caps. Thus, it doesn't allow a negative height, either, because that would require a separate disjoint range (something that doesn't work well with an animatable parameter). If you want a completely flat top, use ChamferCylinder instead.

RL had requested negative cap heights for all the XPrims. This is the same issue as noted above, in which we can't have zero cap heights in OilTank and Capsule (which means we can't have negative values, either, because that would give us two valid disjoint ranges).

RL reported a problem in which he couldn't group two objects at different levels in the hierarchy (ie, they weren't siblings). It's only possible to group siblings.

LM had reported a problem he had with the Position Expression controller in which he did an Affect Pivot Only, Center to Object" on the node and nothing happened. This can't work because the expression controller doesn't respond to "Move" commands, and to do this you have to move the pivot (via the transform controller) and then counter-move the object by changing the pivot offset matrix, so as to keep the object stationary.

Note that if you try "Affect Object Only", "Center to Pivot" it works fine, because that does not require the transform controller to do anything: it just changes "pivot offset matrix". This may be confusing, but here's the essential principle: The position of the pivot relative to the world (or parent) is controlled by the transform controller. The object's position relative to the pivot is controlled by the "pivot offset matrix" stored with each node.

JC requested that we add selection sets to the merge file dialog, but it's not within the scope of this release.

A number of folks have aske for us to use the ALT key for zooming in the VFB instead of CTRL. Unfortunately, Windows has made it very hard for us to use the ALT key in this case, and although there's got to be a way, we don't have time to find it.

MM had brought up an issue in which, if you do a Boolean with two primitives in Max 1.2 you could then go to the SubObject of the Boolean and add an EditMesh to the primitive and then collapse the stack back to the Boolean. In Athena, if you create two primitives and Boolean them together, then select one of the Operands go to the Sub-Object and select the primitive and Convert to Editable, the whole stack is collapsed. This is a NAB because Convert to Editable will always collapse the entire stack. To collapse a sub branch of a boolean you must use the Edit Stack dialog along with 'Collapse To' option.

MGB brought up a problem he had in which, when the TrackView and a KeyInfo dialog were both up, and he hit the Delete key, the object in the scene would be deleted instead of the selected keys. Unfortunately, unless the TrackView window itself is highlighted (instead of the KeyInfo window), the keyboard accelerators will go to the main window. There isn't anything that can be done about this.

DM asked for relative assignment of expression controller variables. Specifically, the wish is that when a modify parameter (e.g. bend angle or direction) references the position of the object through an expression controller, and then the complete derived object is array'ed, the new controller variables would each reference the position of their associated objects' position. This can't happen for two reasons:

Copying controllers, by definition, keeps the references to the original controlling values. Preferring it to happen this way is at least as common as the case desired above (as confirmed by bug reports when it doesn't work right!). Allowing some sort of relative references would thus require a completely new syntax to distinguish absolute from relative references, and relative references would be amazingly hard to manage. (E.g. what would happen to a relative reference if a twist was inserted between the object creation and the twist modifier?)

Relative references aren't really well-defined. This is because the base object's position may be an instance of another object's controller. Thus the reference to "MyPosition" would really be a reference to some other object's position. Then, if the base object's controller were reassigned, the reference to MyPosition would not be related to the base object's position at all! (Or else it would have to be "randomly" re-assigned to the new controller, which is yet another "assignment paradigm": dynamic vs relative references!)

LM had brought up an issue in which he created an object, applied an expression controller (default expression) or a noise controller to its position track, and then grouped the object. At that time, the group (and the object) move to 2x the original position from world 0,0,0.

It's not a group bug, and actually, it's not a bug at all (believe it or not). If you just link an object with an expression or noise controller to something, you get similar behavior: since the expression control can't respond to a SetValue command, it can't compensate for the fact that its object is now attached to a parent (and thus keep the object in the same position). When you group an object, it creates a dummy object centered at the object's center, and then the original object jumps to have the same transform relative to the dummy that it previously had relative to the world. That's why it's moving.

MGB brought up an issue in which the animation of EditableSpline points is lost after changing the knot type. Changing the knot type drops animation because the bezier vectors have different constraints and usage for different knot types. When you change from corner to bezier, for example, you'd have to generate key data for the handles to match the control point's movement, which is way too convoluted to handle within this timeframe.

PW brought up a problem that he was having with resetting the background image to fit the current view. "Sometimes it gets lost after doing a lot of scaling and panning and is hard to find." This is exactly what the Views/Reset Background Transform does. If there's a case in which that's not working, I'd like to hear about it.

RL had brought up an issue in which he'd create an Omni light "array" and Group them together, then create any object, Hide Lights by Category, and then do a Zoom Extents. After that, the area of the group of omnis would be included in the Zoom Extents. This is a NAB because the group itself wasn't hidden, and we don't look inside the group to see if everything in it happens to be hidden (at the node or category level).

RL had come up with a case in which he created a dummy, a cone, and a box (specific objects don't really matter), assigned a Look At controller to the cone (target, the box), then linked the cone to the dummy and scaled the dummy 200% (at which time the cone moves). This is a NAB because Lookat controllers don't inherit scale (and they shouldn't). Lookat controllers do inherit position, which is why when you scale the parent the cone moves (the position of the cone is effectively scaled).

As a part of this report, he'd also asked for a Look At controller implemented as a Rotation controller "so we could have 2 objects looking at each other". This isn't going to happen, but you can already have two objects looking at each other if you have one object look at a dummy which is set as a parent of the other.

LM had noted that various modifiers (applied Region, Bend, etc) can be applied to a target camera or light, and affect its position, but the camera/light will no longer point at the target. This is a NAB because when you deform something like a camera it deforms its transformation -- which means it may not look at its target.

RF had noted that if you assigned a MoCap controller to a track, and then with it selected assigned another one, the first one would become a child of the second one. This is a NAB and there's nothing to prevent anyone from assigning a motion capture controller as a sub controller of a motion capture controller (even though there is probably no reason to do it).

Fixed a bug that JB found in which using the FFD(cyl) modifier would crash the system.

Fixed a bug that DS found in which applying the FFD(cyl) modifier would crash the system.

~Non YG Bugs and Issues Resolved

Added the VRML export dll to the release build.


Made a further improvement to material inheritance. The "solves" the problem as best it can be solved.

In the first version of MeshSmooth, materials were fractally distributed onto new faces, which was bad. In the version that went out with 0.2.6, material boundaries were reasonably well-defined in most cases, but in some cases (such as, ironically, separate-by-material), materials would swirl into each other. This version fixes all mixing and swirling of adjacent materials. The final material-shaded result should look very similar to the original, in what you might call material topology.

Mapping coordinates still need to be added, which are proving exceptionally challenging.

Based on PW's inspired addition to the original MeshSmooth, added an "Apply To Whole Mesh" option, which allows users to ignore current sub-object mesh selection. Cute result -- it continues to propegate selections as you might expect, but it MeshSmoothes the whole thing. This is especially useful if you apply an edit mesh, make a reference to the mesh with the same transform, and put MeshSmooth (with this option) on the reference. You can then edit the original and see the interactively meshsmoothed result.

Fixed bug that was causing it to crash on open splines (or any other object with isolated verts).


Added new ShapeMerge compound object. It will either embed a spline or cookie-cut a spline (or splines) into any other object (and since it's a compound object, these operands can be animated).

Note that the CookieCutter option won't be working until version 0.2.8. For now, Merge is the only option.

General interaction:

Create a Mesh and one or more shapes you want to project onto the mesh's surface.

Select the Mesh

Click Compound Objects / ShapeMerge

Click "Pick Shape"

Click on the first shape.

(Repeat last two steps for other shapes.) The mesh develops additional vertices and faces, embedding the shape into the mesh's topology.

For fun:

Go into modify object

Go into sub-object, and pick one of the shapes (from the list, I haven't got sub-object mouse picking working yet).

Apply various transforms, and observe the interactive result.

Dialog elements:

Pick Shape button, with Ref/Copy/Move/Instance radio: similar to Pick Operand B buttons & radios in Connect and Boolean

Operand list: contains one mesh and however many shapes.

Delete Shape: Deletes all currently selected shapes from compound object.

Display Shape Operands: (defaults on) shows shape operands in addition to result.

Projection: Choose a direction to project the shape onto the mesh. (Defaults to top.) "Top", for instance, takes the shape, puts it above the mesh, and drops it down onto the mesh's surface. "Operand Centers" (bad name?) projects the shape from the shape's sub-object transform pivot towards the ShapeMerge object's pivot. (This is good for sphere-meshes?)

Operation: "Merge", the default, just embeds the shape in the mesh. "Cookie Cutter" will one day cut the shape out of the mesh's surface. (This radio doesn't do anything yet.)


No Known Crashes

Name updates in the Operand list aren't right after deleting shapes.

In general, don't worry about small bugs (faces not coming out right, for example) yet.

Future work:

Selection: Eventually, the result will have the edges and verts forming the shapes selected, as well as all faces "inside" the shape. (Ready for extrusion, for example.)

Many other design ideas suggest themselves -- send in suggestions to Kinetix QE and we might have time for some of them.


Made changes in Connect: the basic algorithm now takes anywhere from 1-n objects and connects them. The UI has had the Operand box expanded to handle more entries, and there's now a "Delete" button to remove unwanted operands.

Example of connecting one object to itself: create a cylinder with 6 height segments. Delete the middle row of verts, so you have two disconnected cylinders. Then go to compound object/Connect, and it reunites into a single cylinder.

Bevel and PathBevel:

Changed "Bottom" and "Top" capping options to "Start" and "End", to bring them in line with Extrude and other effects.

Removed silly "additional materials when sections of result are disjoint", ie when they have different smoothing groups. Now it's just smg=1 on top, 2 on the bottom, and 3 on the sides.

Bevel: made material assignment more in line with Extrude. Additional materials when sections of result are disjoint.

CapHoles: Fixed crash bug that was choking on any hole with more than 3 edges (verts). This was a poorly-constructed assert.

Relax: Fixed a bug that KM found in which mapping would be eliminated after applying a Relax modifier in certain cases.

Tessellate: Poly-face-style edge tessellation now makes use of Tension.

~QE Bugs Fixed

BUG #: 36861


CODE FIX: The camera lens is now driven by the rendering aperture. (There's more info about this in the YG features section above.)

BUG #: 35974


CODE FIX: The correct frame is rendered in Video Post in this case now. Plus, the Time Output section of the VP Execute dialog now works consistently with the Render Scene dialog in that both the "Single" spinner and range spinners (Start, End, and Step) are always alive. If you alter either one of the fields, the radio button gets flipped to that field accordingly.

BUG #: 40875


CODE FIX: Fixed the problem with the Medit dialog and Glow name being hard-coded strings.

BUG #: 59823


CODE FIX: Multiple Athena sessions don't fail in glint/permedia mode anymore. This is fixed in a slightly backwards sort of way. The HEIDI glint driver has been removed from the build since there is no reason to use it. The OGL driver with glint is faster than the HEIDI driver, and it supports more features (like mipmapped textures). Furthermore, the glint HEIDI driver is pretty much unsupported at this point. (We also sent mail to MarkC at 3D Labs about this, just in case he sees a reason to keep it in the distribution. He agreed that it should not be in the distribution unless someone high-up at 3DLabs insists that it stays. We'll let you know if this changes.)

BUG #: 39583


CODE FIX: When resetting Max, these viewport config settings are being reset now.

BUG #: 60204


CODE FIX: Selecting portions of large meshes with MeshSelect doesn't crash Max anymore.

BUG #: 60237


CODE FIX: Clicking the middle mouse button during object creation doesn't cause a crash anymore.

BUG #: 60193


CODE FIX: This GDI leak in the viewport's right click menu is gone now.

BUG #: 59772


CODE FIX: Scrubbing the time slider with wraptst2.max doesn't crash on playback anymore.

BUG #: 59855


CODE FIX: The cursor is now a cross-hair in the VFB (nominall to show you that left-clicking will zoom in, but it also lets you see exactly what pixel you're going to get for a right-click info operation.

BUG #: 59202


CODE FIX: Accessing the MeshSelect modifier in this stack condition doesn't crash the program anymore. This was a major pipeline bug that also involved making some fairly-significant changes to the way the MeshSelect modifier works internally. The good news is that these changes should enhance performance when many MeshSelect modifiers are applied to the stack.

This bug also turned up another bug which could be considered a NAB depending on how you look at it. This bug has existed since 1.0 and affects lots of different modifiers. The situation is this: you have a modifier that depends on topology (like MeshSelect) and then upstream you have a modifier that changes topology. If you go back up the stack towards the root (remember, the stack list is inverted, up is down, and vica versa) and make changes that affect topology, things will be screwed downstream -- this we know. However there are a number of ways in which you can go up the stack and then accidentally cause the topology to be changed. One way is if you have a Boolean object or Optimize modifier with the Manual Update checkbox on. There is absolutely nothing that can be done about this case. If you are going to follow a Boolean or an Optimize with modifiers that depend on topology then you shouldn't leave Manual Update on! The other case is with modifiers like MeshSelect, which automatically turn Show End Result off. In this case the MeshSelect was followed by a DeleteMesh modifier (so turning Show End Result off causes the Delete modifier to not be applied, which causes the topology to change). Typically this wouldn't actually be a problem for the 2nd MeshSelect which follows the Delete modifier because even though the topology has been changed, the 2nd MeshSelect isn't applied (because Show End Result is off). However, if the second MeshSelect exists in a reference copy and the non-reference copy is selected then Show End Result won't turn off the second MeshSelect and the 2nd MeshSelect will adapt itself to the new topology. When you leave the first MeshSelect and Show End Result gets turned back on you'll find that the 2nd MeshSelect has been hosed by the topology change.


So the MeshSelect modifier has been changed so that it's a little more resistant to topology changes. When the input object's topology has been changed, the MeshSelect modifier only temporarily adapts itself to the new topology (so, if at some future time the topology were to change back to its original state the MeshSelect modifier would have been unmodified).

To see a simple example of this apply a MeshSelect modifier to a sphere and then select some faces. Go back to the sphere and change the segments -- notice that the selection gets screwed up by the topology change. However, now if you set the segments back to the original value the selection will be restored to its original state. If you changed the segments and then went back to the MeshSelect modifier and further modified the selection then the MeshSelect would permanently adapt itself to the new selection.

And finally, this bug also turned up yet another pipeline/strip related bug. For some mysterious reason, if the mirror/reference clone operation in step5 was replaced with a shift-move reference clone then the program would crash because some stripping data was improperly freed from memory. That's fixed too.

Since this was such a long-winded fix/description, the original report (submitted by LM, btw) is included here for reference:

1. In top view create a sphere.

2. Apply Mesh Select

3. SO:face, select part of the sphere

4. Apply Delete mesh

5. Mirror (transform) along X axis, Clone: Reference

6. Leave reference copy selected and apply another Mesh Select.

7. Exit SO mode.

8. Go down in the stack and pick Mesh Select immediately above sphere.

9. Max disappears.

BUG #: 59291


CODE FIX: Max doesn't crash upon cancel of bone-with-end-effector clone operation anymore.

BUG #: 37781


CODE FIX: The "Click on Group to attach selection" string from select.cpp is localized now.

BUG #: 42464


CODE FIX: The strings "Error Creating File Output" and "Error Creating Device Output" from renddlg.cpp are localized now.

BUG #: 59595


CODE FIX: Align Sub-object selection yields consistant results in this case now. Regarding the question/comment at the end of the report about aligning vertices individually... The sub-object align system can only affect the points as a group due to technical reasons which involve keeping the align system general enough so that it can work with any sub-object type (remember, this is a plug-in operating system and it has to be generalized everywhere). Adding the capability to align vertices individually with the align system is infinitely more complex (if even possible in a generalized way) and way beyond the scope of this version.

BUG #: 45841


CODE FIX: Reset correctly affects the FOV button for the perspective view now.

BUG #: 35907


CODE FIX: The mouse pointer doesn't get stuck in the activate view cursor mode when animation is playing anymore. This was a sorta-NAB, in that we don't hit-test the scene in inactive views while an animation is playing (which is why the cursor got "stuck" -- we change the cursor based on hit-test info). But it was fixed by never setting the activate view cursor when an animation is playing. That way, it can't get stuck there.

BUG #: 37921


CODE FIX: In the Viewport Config/Rendering Method dialog, the Apply To buttons are sticky now.

BUG #: 58037


CODE FIX: The Pick Distribution Object button (under Scatter Compound Objects) is accessible now when Use Xforms Only is selected and then Use Distribution Object is reselected.

BUG #: 31646


CODE FIX: You now have to have at least one event in the VP queue before you can add an "Image Output" event.

BUG #: 58319


CODE FIX: Keyboard shortcuts within Video Post work correctly now.

BUG #: 32484


CODE FIX: In 3DS Import, groups of objects saved using Save Selected in 3DS/DOS import correctly now.

BUG #: 54343


CODE FIX: In DXF Import, the Fill Polyline option is now called Cap Closed Entities.

BUG #: 33345


CODE FIX: The DXF and SHP Import dalogs now support the Merge and Replace Entire Scene options upon import.

BUG #: 37236


CODE FIX: Importing a .3ds file in which you've created an instance object will not result in the default material getting assigned to the original object while the instance object gets imported with the correctly assigned material anymore.

BUG #: 33056


CODE FIX: In File/Export, clicking No on the "filename already exists" dialog now brings up the Select File to Export dialog again.

BUG #: 40282


CODE FIX: Medit color swatches (Ambient, Diffuse, Specular, and Filter) now update properly when they share an instanced controller.

BUG #: 59128


CODE FIX: Switching the viewport to a trackview and back doesn't cause the Delete key to stop functioning anymore. The Delete key has very special code (for use in subobject curve editting) and the "Delete key router" was not getting removed when the trackview viewport was removed. (BTW, this bug had nothing specifically to do with subobject mode.)

BUG #: 59575


CODE FIX: In the new particle systems, Pick Group functions correctly on nested groups now. Note that if you use Pick Group and you select an object, the selection tool traverses up until it finds a valid Group dummy object. When it finds a valid Group dummy, it traverse all the branches through all subgroups and subgroup members. If Use Subtree Also is on, then the selection tool will also select all hierarchical children of all traversed groups. If you use Pick Object, the selection tool picks the object. If you turn on Use Subtree Also, then that object and all its hierarchical children are selected.

BUG #: 59260


CODE FIX: WSMs correctly affecting the rendering of Metaparticles now.

BUG #: 59287


CODE FIX: In PArray, the Object Fragmentation smoothing angle works correctly in this case now (and maintains the sphere as one giant fragment when >22 degrees).

BUG #: 59431


CODE FIX: Now, when picking groups for instanced particle systems, all members of the group flash (in the wireframe view only) when picked.

BUG #: 60124


CODE FIX: Deleting instanced geometry in the particle systems doesn't crash the program anymore.

BUG #: 58035


CODE FIX: Pushing all four buttons under Compound Objects and then selecting the Move/Translate tool from the toolbar doesn't crash the program anymore.

BUG #: 59614


CODE FIX: Add a MeshSelect to an EditableSpline object doesn't crash Max anymore.

BUG #: 59515


CODE FIX: Adding an EditSpline modifier to a loft path spline doesn't crashes Max anymore.

BUG #: 59895


CODE FIX: Editing the loft path in this case doesn't crashes Max anymore. (Note that this was the same bug as 59515.)

BUG #: 59865


CODE FIX: In PCloud, the Display Icon values update interactively now.

BUG #: 60003


CODE FIX: Track View shows the Scatter object operand names now instead of just the generic "OperandA/OperandB" labels.

BUG #: 59661


CODE FIX: The Undo string for Blizzard creation is not a placeholder anymore..

BUG #: 59902


CODE FIX: In SuperSpray, rendering a large amount of instanced geometry particles doesn't cause a crash anymore. (There was a problem with the texture vertex numbering scheme.)

BUG #: 58319


CODE FIX: In Video Post, the keyboard shortcuts for viewing the range don't fail when assigned anymore.

BUG #: 31668


CODE FIX: In Video Post, the command file path isn't overwritten by second external event's path anymore. The problem was that if you had more than one external event (anywhere in the queue), when editing any one of them, it would pick up the name of the last external event edited/added. The event wasn't being initialized so when you clicked Ok, it would pick up whatever was there (the last event edited/added).

In the process, code has been added to deal with initial directories. When you first go there, you will be wherever NT puts you. Once you pick an event, that path will be remembered the next time you add an event. If you "Edit" an event, you will end up in the same path where the external event you have is found.

BUG #: 59651


CODE FIX: Creating bones with the mirror tool doesn't crashes Max on cancel anymore.

BUG #: 59981


CODE FIX: Chains with IK controllers don't deform when linked anymore.

BUG #: 59650


CODE FIX: Modifying a path followed by an end effector doesn't crashes the program anymore.

BUG #: 60010


CODE FIX: The program doesn't crash after pasting into the Global Track List controller anymore.

BUG #: 59806


CODE FIX: After exporting to a DXF file, neither the Bitmap slot in MEdit nor the VP title bar contains a zero anymore.

BUG #: 59851


CODE FIX: Right-click in the bitmap cropping window works correctly now. Note that it only works in "Crop" mode (and is disabled entirely in "Placement" mode).

BUG #: 59760


CODE FIX: The third Multi-material color swatch is positioned correctly now.

BUG #: 59759


CODE FIX: These Multi material numbers are not clipped anymore.

BUG #: 59757


CODE FIX: The Bottom-most multi-material numbers are now cleared when reducing the quantity.

BUG #: 36473


CODE FIX: There is now an option to configure the default path for a material library (it previously used the map path).

Note: This change requires that your .mat files be moved from your primary map path to your new MatLibs path.

BUG #: 57518


CODE FIX: The fog behaves consistently in this case now. Note that now, the camera fog-ranges have absolutely no effect on the non-camera viewports, no matter whether you render or not. This is due to a change made to the renderer API that let us pass in fog ranges when rendering a non-camera view (to fix a .CUB map fog bug). The ranges used for the non-camera views are now always set to [0-500]. We might theoretically add these "Non Camera View Atmosphere Ranges" to the preferences somewhere if someone thinks it's incredibly important, but I really don't think it is.

BUG #: 59770


CODE FIX: The 3D map sample scale field now has an upper-limit of 100000 (if you actually type a number that large, you can't use decimal values, but that's the way it is).

BUG #: 59801


CODE FIX: Selecting "none" from the Selection floater doesn't appear to leave objects selected anymore.

BUG #: 59814


CODE FIX: Edged faces are correctly clipped by foreground objects in the shaded view now.

BUG #: 59763


CODE FIX: The Reference Coord System is getting reset correctly now. (The write-up only mentions the problem with the rotate tool, but the reference coords weren't getting properly reset for any tool. Nor were the sub-object reference systems getting reset. Now they are.)

BUG #: 60014


CODE FIX: You can assign a different Position controller to a modifier's Center track now.

BUG #: 60002


CODE FIX: Track View's Copy/Paste works now with Path/Percent, Ease, and Multiplier tracks.

BUG #: 59982


CODE FIX: Edit/Clone allows renaming of the copied object now.

BUG #: 59893


CODE FIX: Hitting the keyboard shortcut for Freeze Selection while editting a spline in subobject mode doesn't cause an assertion failure anymore. Now, freezing and/or hiding is ignored when in sub-object mode. (It doesn't make sense to be editting something that is no longer selected!)

BUG #: 53085


CODE FIX: Adjustments to the loft object with the Relax modifier doesn't crash the program anymore. When loft components are being dynamically changed, their mesh generation is turned off. The problem is that this confuses downstream modifiers. Now, while modifying the loft components, the Show End Result button is temporarily turned off. This insulates downstream modifiers from the empty-mesh condition.

BUG #: 58220


CODE FIX: MAXSDK\LIB\FLILIBx.LIB is a proper FLIC library now.

BUG #: 31663


CODE FIX: VP doesn't let you open another file without warning to save the first one in this case anymore.

BUG #: 60012


CODE FIX: Global Tracks are initialized on File/Reset now.

BUG #: 60015


CODE FIX: The program doesn't crash anymore when switching the key interpolation method to Smooth.

Note that this was caused by a VC5.1 (beta) compiler bug. We've contacted our rep at MS and have sent him a reproducible case (which he's verified). Our fix is a workaround, but it ought to hold steady.

BUG #: 62526


CODE FIX: The file/ summary info/ plug-in info button doesn't crash max when clicked anymore. (Note that this was not a YG bug, it was due to changes SA made.)

BUG #: 62561


CODE FIX: Doing a mesh select (face) on an editable mesh doesn't crash the program anymore.

BUG #: 62563


CODE FIX: Creating an FFD(box) space warp doesn't fail anymore.

BUG #: 62678


CODE FIX: In the Environment dialog, selecting an existing material as an environment doesn't cause an assert anymore.

BUG #: 62787


CODE FIX: Selecting a Mesh Select within the stack in this case doesn't crash the program anymore.

BUG #: 62852


CODE FIX: Volume Select in sub-object mode in this case doesn't crash the program anymore.

BUG #: 62928


CODE FIX: If an instanced particle object has not been picked, the render won't crash anymore.

BUG #: 62979


CODE FIX: Adding a modifier to the derived object doesn't crashes Max anymore.

BUG #: 59257


CODE FIX: In the Environment Dialog, the Fog's Use map checkbox is not partially truncated anymore.

BUG #: 58350


CODE FIX: In the Box object, the LWH values are locked in the keyboard entry rollout when cube is selected.

BUG #: 59829


CODE FIX: The PCloud Particle Formation setting is now affected by a File/Reset.

BUG #: 59940


CODE FIX: This text at the bottom of the SuperSpray Particle Type rollout is completely greyed out now. Also note that at the top of the same rollout it says "Use Instanced Geometry", but here it said "Use Material from Instanced Particles". That was inconsistent and we've altered it to now read "Use Material from Instanced Geometry".

BUG #: 62856


CODE FIX: The PCloud emitter tracks are correctly labled in TrackView now.

BUG #: 60016


CODE FIX: The TrackViewport viewport min/max toggle works now and it has the correct tooltip. (In response to the question about why this viewport has a special toggle to do this, it's because once you've created a TViewport and have then given focus to one of the non-TViewport windows, focus will never return to the TViewport (because the TViewport is not actually a viewport internally in the code. The special min/max toggle is there to deal with this special case.)

BUG #: 39590


CODE FIX: The values in the Viewport Degradation Params dialog are not reset when doing a File/New. (Note that this had nothing explictly to do with File/|New... Simply changing the dialog values, exiting the dialog, and re-entering the dialog resulted in values being changed. (ie, they were dialog bugs, not File/|New bugs))

Re the snapshot dialog values. It's a feature that we explictly set the range to the entire range each time you enter the dialog. (Note that all other params in this dialog are maintained.) This is by design.

BUG #: 48895


CODE FIX: The object properties dialog displays the object dimension according to the Views/Unit Setup values now.

BUG #: 62943


CODE FIX: The tabbing order for the General and Viewports tabs of Preferences is fixed now.

BUG #: 62938


CODE FIX: The place-holders in the status line for the new Tools menu items have been replaced by the correct text.

BUG #: 62891


CODE FIX: This problem with using Backspace as a hotkey is fixed. The fix is simple... Since both the Backspace and Delete keys are treated in a highly special way by Max, we no longer allow either to become a hotkey.

BUG #: 62892


CODE FIX: The ESC key works to exit modal dialog boxes now when they are brought up with a hotkey before you actually enter a field.

BUG #: 62850


CODE FIX: In the new particle systems, the 'Object Motion Multiplier Variation' track is correctly labeled now.

BUG #: 59289


CODE FIX: In PArray, if either the emmiter or instanced-object's name exceeds 16 characters, the name is now truncated to fit (instead of not being displayed at all).


BUG #: 60048


NAB: The rotation end effectors are solving as best they can in this case. Since there is no position constraint, the chain is free to move anywhere it finds necessary to satisfy the solution. After rotating past a certain amount, the solution pick a different direction to solve (and so it flips). Try linking an object (like a cone) to the end effector so you can easily tell the orientation of the end effector. You'll notice that although the chain jumps to a different position, the cone's orientation is locked to the orientation of the end effector.

BUG #: 62845


NAB: In the new particle systems, the Use Rate button is actually just a switch that turns on the Birth Rate track (which is the label that you see in Trackview). The track is labelled "Birth Rate", but the field isn't actually labelled in the command panel at all. The "Use Rate" label applies to the radio button, so the field might be "rate", but that's sort of misleading and imprecise. In keeping with Spray and Blizzard, the actual parameter is called "Birth Rate".

BUG #: 62518


NAB: The spec is incorrect in this case, and has been updated for 0.2.7.

BUG #: 42144


NAB: Uniform scaling of just the spotlight doesn't scale the cone because the size of the cone for Targeted lights is determined by the target. If you select the target too, and uniform scale, it will scale the cone. The way this works is inherent in the way targeted lights and cameras are implemented (there's absolutely no way to even change it if we wanted to).

BUG #: 56936


NAB: The Ctrl-N expression evaluator accepts non-numerical data because you're allowed to type "non-numerical" expressions like "sqrt(2)", etc. The expression evaluator actually checks the expression for validity as each character is typed, and only when a valid expression is present does it allow you to paste in the answer (which it also displays, so you even get to "preview" the value). If you enter garbage like "asdfjkl" and press enter, the evaluator does not change the previous spinner field value, so even the bogus case is handled gracefully.

BUG #: 59960


NAB: Sub-materials are accessible from the material browser as long as the "Show/Root Only" checkbox is off.

BUG #: 59818


NAB: When you uncheck the "Use Map" checkbox in the Environment dialog, all you're doing is telling the renderer not to Use the Environment Map when doing scanline renderering. If you want to turn off the environment background in the viewports, you must either do it in the viewport right-click menus or in the Views/Background dialog.

BUG #: 60009


NAB: The TrackView filter settings are being saved with the .max file. In this case, after step 4 you should've named the TrackView in order to save it as a "named track view". Once it's named, it's saved, and when you reload it, the filter settings come back.

BUG #: 59315


NAB: This is a bug in the SDK documentation, not the code. The Athena SDK that you'll receive next won't have this error (hold off on evaluating this problem until you do receive that new SDK).

BUG #: 31332


NAB: Changing controller types can cause expressions referencing that controller to lose the reference. Actually, the part of the write-up that described some of this as working (changing to PRS->look at or vice versa) was really a bug, in that it shouldn't have been working at all, and it's been fixed so that now it doesn't! Now, whenever you delete the original controller that an expression references (e.g. through re-assigning it), the expression controller changes the variable to reference a constant expression (rather than the old controller).

This is the correct behavior. When reassigning, say, a PRS controller to a PRS controller, first, the old controller is deleted. At this point the expression controller can no longer usefully reference it and it breaks all connections with the old controller. Next, the new PRS controller gets assigned, but there is no longer any connection in place with expression variables, so no new assignment is possible.

We do not "symbolically link" the expression reference with a particular object. Rather, we tightly assign it to a particular controller, and that controller may even exist without being associated at all with any objects (or it may be instanced by many objects at once). When that controller is deleted, we simply break the reference. Due to the fact that controllers are not in a 1-to-1 correspondence with objects, no other behavior even makes sense in general. (A simple way to see this is to suppose that an expression variable references a PRS controller that is instanced by two objects. What should happen if you reassign the PRS controller for just one of the two objects?)

BUG #: 59587


NAB: If you want to show the selection state within any compound object, you have to turn on the Display Operands mode. That's the only way to see what's in the sub-object pipeline.

BUG #: 31653


NAB: You are allowed to put any type of filters at the root of Video Post. That's just the way it works. In some cases a filter may make sense at the root (ie, if it's a procedural image generator) and in some cases it won't. Such is life (there's no bug here.)

BUG #: 59921


NAB: There is no problem with calling the default renderer from another renderer. In this case, you can call

Renderer* r0 = Interface::GetCurrentRenderer()

to get a pointer to the current renderer, or you can call

Renderer* r0 = Interface::CreateInstance(RENDERER_CLASS_ID,


to get an instance of the scanline renderer.

Then in is Render() method, you would call r0->Render(), then do your own rendering bitmap and combine your output bitmap with the one produced by r0->Render(). <>QE#

BTW, this "bug" would've been much more appropriately dealt with as an issue brought up via internal email.

BUG #: 59906


NAB: The PCloud Spin Time defaults to 100000 because, although these particle systems can read a value of zero to mean "no spin" (rather than 'infinitely fast spin') we didn't want to be misleading with the default value. Very high numbers mean, essentially, no spin. Thus, we set the default value to be extremely high so that animators can see the effects of other parameters when setting up the particle system for the first time. With any actual spin in there at the start, it gets even more confusing.

Spin Time is measured in TIME, and not in RATE, so a very large number means the motion takes a long time to complete. Thus, if the spin time value is very large, any single spin takes a very long time to happen. Thus, there is no spin, effectively. These two values (bubble time and spin time) are thus set to very large default values so that the default motion of this type is NONE. This ought to be explained in the documentation.

BUG #: 59904


NAB: Bubble Motion has very high default period for the same reason that PCloud spin is (note that this applies to all of the new particle systems. Note also that Bubble Amplitude in the defaults is Zero. The combination of the two (zero amplitude and "infinite" period) has the effect of completely removing bubble motion and allowing animators to experiment with them one value at a time. Again, we can read "0" to mean "no bubble motion", but a long period is technically correct. This ought to be explained in the documentation.

Bubble Motion is measured in TIME, and not in RATE, so a very large number means the motion takes a long time to complete. Thus, if the bubble motion value is very large, any single bubble oscillation takes a very long time to happen. Thus, there is no motion, effectively. These two values (bubble time and spin time) are thus set to very large default values so that the default motion of this type is NONE. This ought to be explained in the documentation.

~QE NoRepros

BUG #: 60243


NO REPRO: I can't reproduce this problem. Please provide simpler steps that are more clear (it didn't help that the referenced file wasn't attached, either).

~QE NoFixes

BUG #: 37150


NO FIX: There is nothing we can do about the 14264-frame limit on the scroll bar. This is the result of a Windows limitation. However you can set the number of frames to be larger (than 7.7 minutes, if you're crazy enough to want to do a shot that long in one piece), but you just can't use the scroll bar to get to any frames past 14k (but you can use the goto frame type-in field). Of course, as mentioned above, you'd have to be nuts to work on an animation this huge in one scene. There's an additional thing you can do here... you can set the current segment to something less then 14k even if your animation is >14k. For example, if the current segment is 15k to 20k the scroll bar works fine.

BUG #: 62846


NO FIX: The "Blur Stretch" track shows up in the bottom of the set of tracks in Track View because SuperSpray and Blizzard are built from the same code and share parameter block definitions. This is theoretically reparable, but only by divorcing the two plug-ins into separate source code files, which will make maintenance much much more difficult.

BUG #: 40382


NO FIX: This wishlist item regarding selective merge of objects from .3DS files is out of the scope of this release.

BUG #: 48103


NO FIX: OSnaps are being installed by the VIZ team and don't belong on our list.

BUG #: 59804


NO FIX: This wish for adding object type and color to the select by name dialog isn't going to happen. Type doesn't really make sense when things are modified and/or collapsed, and there's no non-painful way to put color swatches into the scroll list.

BUG #: 59625


NO FIX: This solution will fail after multiple Booleans because the boolean code doesn't hold up well after attempting multiple solutions. This is just the way it is. Once someone writes a CSG boolean modeler for Max, this will all be moot.

BUG #: 59844


NO FIX: The Keyboard entry fields can't deterministically be locked for cube. Note that if the values in the length, width, and height fields are not the same and you turn on the cube option it wouldn't set them to be equal until you actually changed a value. If it did then set them to be equal it would have to arbitrarily have to pick one of the values. Bottom line, it's not worth it and you can always ctrl-c/ctrl-v to cut/paste the values.

BUG #: 32815


NO FIX: When using Large Fonts, the area next to the Edit Stack icon in the Modify Panel is a "dead area". because the toolbar is enlarged when large fonts are on (because Windows automatically resizes the dialog) however the size of the tool bar buttons stay the same. We're not going to touch this (and it's not a functional bug anyway).

BUG #: 43827


NO FIX: It's unfortunate that playing back an animation in the viewport display in which an object has .ifl map assigned to it, will continously allocate memory during the whole time you playback animation until a certain limit is reached. However, if you stop playback or if the maximum limit of bytes is reached, Max will release/reset allocated memory and start all over again if playback is continued. This has been around forever and appears to be a feature of NT memory management. We free the maps, and even call "_heapmin" every frame which is supposed to clean up memory, but NT doesn't actually get around to freeing the memory until the playback stops. None of us have a clue as to how we could work around what NT's doing in order to make it work any differently.

BUG #: 57496


NO FIX: In the Queue Manager, the Delete Entire Queue option can't have a hot key unless we add a keyboard handler to QueueMan (and we're not going to do that just for this single feature). A button would be technically doable but our opinion is that this is too radical of a feature to have a such easy access for it. Heck, there's no undo. We buried it in the dropdown menus for a reason.

BUG #: 31651


NO FIX: Although the VP Image Input event's Cache toggle may be inappropriate for animation file types, it's disabled by default, and if someone wants to use it, they can. We're not going to special-case this for animated sequences (too dangerous).

BUG #: 31640


NO FIX: This field isn't highlighted because we're using the old-style Windows dialog for image file picking. The only fix would be to change this dialog to be the new Win95 file picker (the one that takes 30 seconds to show up as it has to list every drive in the world plus all my printers, desktops, and the coffee maker). We're going to resist changing this dialog to the new style forever (mostly due to the tremendous hardship involved in subclassing it to support the various custom buttons for gamma, file viewing, info, etc).

BUG #: 31661


NO FIX: This is just the way the Accom driver works. There's no functional problem here, and given how none of our 4 Accom users have ever complained about it, we're not going to touch this code unless there's an actual bug.

BUG #: 59428


NO FIX: Lattice struts can have unexpected rotations, but the angles only appear arbitrary. In reality, it's the result of the most robust scheme we could devise. Basically, there's no way to guarantee any particular orientation of an object's geometry within its local space, so Lattice goes looking for a direction not shared with anything else. This is necessary to avoid singular cross products and other nasty numerical effects attributable to trying to align or become orthogonal to any other particular direction. This just the way it is (Lattice is more of an effects-modeling tool than a precision modeling tool).

BUG #: 59769


NO FIX: Right-clicking on lights can't be coded to support an on/off option within our release timeframe.

BUG #: 59721


NO FIX: Re the function Bitmap :: PutLinearPixels(): This is technically correct. It isn't necessary, since the only bitmaps you need to write to are "output" bitmaps, and these are always stored linearly. To do it any other way is completely beyond the scope of this release.

BUG #: 59812


NO FIX: This is just how spinner drag works. (And yes, it was too minor to mention.)

BUG #: 59837


NO FIX: Slice surfaces can't be modified like this without invalidating old files, which is out of the scope of this release.

BUG #: 59427


NO FIX: Regardless of whether or not net rendering via a UNC name to a Novell drive generates frame error, there's nothing we can do about it since we don't have a Novell server. If someone wants to send us a Novell server for testing, we may consider reopening this record.

BUG #: 59845


NO FIX: In this example, particles in PCloud are forming correctly at frame 0 and then the cylinder animates (bends). And when it animates, the particles aren't moving with the animated toplogy. Unfortuately, if we wanted to keep the particles with the object's inside an animated emitter, we'd need to redesign PCloud completely from scratch. The only way to keep the particles INSIDE the object after they form is to do it with Universal Deflector applied to the bounding emitter as well. (Note that if even if we did redesign PCloud to work with animated topology, it wouldn't work with spacewarps or collision objets in that case.) This stuff is too complex for words.

BUG #: 59838


NO FIX: The Spindle cap height can be set to no less than 0.1 because we need a minimum value to properly calculate blend parameters. If you need a completely flat end with one of these objects, it must be done with a modifier or via mesh editing.

BUG #: 60149


NO FIX: The Spindle Blend parameter's Cap radius is maintained when the Blend value is changed because of the need for interoperability checks, and this is the only reasonable way that underlying issues re these objects being parametric could be worked out.

BUG #: 59839


NO FIX: The Oil Tank Cap height cannot be set to less than 1/40 the Radius due to the minimum cap height/radius issues mentioned above. (We cannot have a zero cap height, ever.)

BUG #: 40130


NO FIX: This issue about the question mark icon in the Environment dialog not hooked up is an NT4.0 bug as far as we can tell. If you have the minimize/maximize icons in the title bar, the question mark ceases to function. We're stumped. Perhaps David Phipps can get involved here and contact the MS folks to see if there's a workaround.

BUG #: 39955


NO FIX: This issue about the question mark icon in the Medit dialog not hooked up is an NT4.0 bug as far as we can tell. If you have the minimize/maximize icons in the title bar, the question mark ceases to function. We're stumped. Perhaps David Phipps can get involved here and contact the MS folks to see if there's a workaround.

Update notes (for version 0.2.6, 4/27/97):

~Sample Files

This release contains a that includes new versions of all of the pre-existing .max files with notes explaining the example in the Summary Info description field.

~Level of Detail Controller/Utility

(2063): Implemented a Level Of Detail controller/utility, which manages the creation and management of n levels of detail of any model, swapping various levels in and out of the rendering process based on size-in-rendered-pixels. There are two components: a controller and a utility. Users never edit the controller's parameters directly but instead edit the utility.

The utility lets you assign LOD visibility controllers to groups of objects that each represent a different level of detail. The utility will then set up the controllers so that only one of the object groups is 100% visible based on its size. When transitioning between levels of detail, one object group will fade in and then the other will fade out.

All the various level of detail objects must be grouped into a single group so that the bounding box of the group node can be used as a single measurement for all LOD objects. Each individual LOD object can itself be a group or hierarchy (however all the LOD objects must be grouped at the top level into a common group).

Parameters include:

Level of Detail Set:

Create New Set: When an LOD group is selected this is active and you can click on it to "absorb" the group into an LOD object.

When you create a new set, the utility will assign an LOD visibility controller to each selected node and mark each node as being part of a set. The nodes are listed in the list sorted by the number of faces. The face count for each node includes the number of faces for all child nodes since visibility is inherited and so the LOD controller may be affecting an entire hierarchy.

Add To Set: Any object added to an LOD set must be part of the set's group. So, you must first use the Group/Attach function to attach the new entity to the group, and then you can use Add To Set's pick mode to pick the new item, which will be absorbed by the LOD object.

Remove From Set: Removes an object from the LOD set.

Image Output Size: These parameters let you specify the target image width and height. Because the entire LOD system keys off of the rendered size (in pixels), these fields are set to the current render resolution every time you enter the utility. The target image size is also used to compute the default thresholds.

Set lister: This area displays the name of each of the items in the LOD set. Next to each name in the list is a value, which represents the threshold point when a different object will be used to represent the object in the renderer. The units of this threshold value is either the size of the object in screen pixels, or the size of the object as a percentage of the overall output size. Each object in the set has a min and max threshold, although the min threshold of one object will always equal the max threshold of the previous object. An object in the set is rendered if its size in pixels/percentage is between the min and max size. The object is still rendered when it is within 10% of the min or max size, however it becomes increasingly transparent to allow smooth transitioning to the next level of detail.

When a set is first created, the thresholds are automatically set so that the highest res object gets a max value of 320 and the rest of the objects are equally spaced down to 0 pixels.

Only one of the objects in the set is visible in the viewports at any one time. By default the lowest-res object is the one displayed but you can set any object as the one to be displayed by selecting that object in the list and clicking on the 'Display In Viewports' check box. Also, double clicking on an item in the list will set it to be the viewport object.

Threshold Units: These two radio buttons allow the threshold values to be displayed in pixels (the way they are stored) or as a percentage of the target image size. Percentage of the image is probably more intuitive for most folks, and that's the default.

Thresholds are initialized so that the highest detailed object is 100% of target screen size (BTW all sizes are measured diagonally). Other thresholds are set by ratio of number of faces. The algorithm works as follows:

Assumes all faces are the same size

Then picks thresholds so that faces remain a constant size.

In other words, if the faces of the maximum resolution object are a particular size in screen space when zoomed in, then when zooming out lower res LODs will be used when switching to the lower res LOD wouldn't result in faces larger than that particular size.

Thresholds: A min and max spinner allow the selected item in the list's min and max value to be changed. Changing these values may also affect the min and max values of other items in the lists since the max value of one object is always equal to the min value of the following object.

The 'Reset' button will reset the min and max values for all items in the set to their defaults.

Note about how this works:

The LOD system uses the visibility track of the group node to do it's magic. It blends between visibility tracks of the two threshold-adjacent group nodes in the threshold zones. The Athena feature that allows visibility to be inherited through the hierarchy is what makes this happen for the entire group. Since visibility inheritance is required for LOD objects, we turn it on for all objects in the LOD set when the set is first created. That means if you later remove the group from the LOD object, the visbility inheritance flag will be set on. (That shouldn't be a problem.)

Note that if you clone an LOD group, the copy does not get LOD controllers and you must create a new LOD set for the copy.

Here are the basic steps that it takes to set up an LOD set (in this case for four spheres of varying levels of complexity):

Presumably you'll want each LOD object to be located at the same space since they are supposed to represent the same object. Also, when you move one object, you'll probably want to move them all. So select three of the spheres and use the Align command in the toolbar to align their centers to the fourth sphere. Next, select all of four of the spheres and group them together into the meta-LOD object.

Now select the group and go to the LOD utility in the utility branch. The list is empty so click on the Create New Set button to assign the group as a new LOD set. The 4 spheres will appear in the list. 3 of the spheres will disappear from the viewports, leaving only the lowest-res sphere.

Select an item in the list. You can then use the min/max spinners to change the default threshold values or click on the Display In Viewport checkbox to switch which object is the one displayed in the viewports.

That's the basic procedure. From there on out it's a matter of tweaking the minimum and maximum thresholds to keep the transition points far enough away from the camera so that the dissolve isn't too apparent. (A judiscious use of atmospheric effects goes a long way here.)

Sample files: SPHERELOD.MAX and TEAPOTLOD.MAX. These are a couple of ready-to-render simple examples. Try opening Medit and applying the white wireframe material so you can see the transitions -- also I'd suggest rendering to the PVR, not an AVI.

The thresholds are set to the defaults given by the LOD utility. You would definitely want to tweak them a bit, especially for the teapot where the lowest level looks too low.

~System Unit Rescaling (on load and via a utility)

Implemented a new method of scaling the scene (both automatically on load and under manual control) that mimics the 3DS/DOS ability we used to have that would look at the "System Unit Scale" and use that as a scale factor upon load or merge. In that way, you can merge differently-scaled scenes together and they'll match up. Notes:

Added the "Automatic Unit Conversion" preference in the Preferences/General page just below the System Unit Scale field. (It defaults to off.) Also put in a dialog that comes up on load (when Auto Unit Conversion is ON) if the units of the file are different, and asks if you want to rescale or use the file's unit scale.

Regarding rescale-on-load: The System Unit Scale is saved in the .max file, and the world units are rescaled to match the current System Unit Scale.

When a file is rescaled on LOAD, the viewports are no longer the same views. We tried rescaling the viewports, but haven't figured out the right incantations yet, so for now they are what they are. You can always do a zoom-extents-all.

When you load a file with different units and select "Adopt units from file" it did changes the .INI settings for the System Unit Scale.

World-unit rescaling works on Merge as well (of course).

In general, the complexities of doing this within a plug-in open-architecture program are extremely subtle and wide-reaching. To make it simple to tell if something is being scaled correctly, we've implemented a "Rescale World Units" utility, which you'll see in the utility branch. Here's how to test scalability:

make a scene with a bunch of objects that you want to test in it.

make a camera to view the scene and assign it to a viewport

render the camera view

go to the Rescale World Units utility and rescale the scene by a factor of 10

render again

If there are any differences in any of the objects in the scene, those objects don't support scaling.

We expect to see bugs about entities that don't scale correctly come in for months. The only entities that we implemented this "scalability" factor in so far are:

default primitives

default modifiers



materials that shipped with r1

and environment effects

Entities that haven't been supported yet include:

editablemesh after you've edited it (possibly, not sure about this yet)


particle system (particularly the speed values)


compound objects

etc, etc etc...

Also note that plug-in developers will need to support this feature as well if they want to add scalability to their objects. All info is in the new SDK.

~EditableSpline object

Implemented animation for vertices within the EditableSpline object. By moving vertices, handles, segments or entire splines with the Animate button on, you can animate the splines at will. The biggest gotcha is that if you go into the Trackview and start futzing with handle keys (sliding them around, deleting them, etc.) you'll wind up with things like bezier knots with handles that are no longer collinear. Caveat user.

Note that these changes were very extensive, so expect some assertion failures if you do a lot of vertex animation. (Please get me those cases asap.) The first test done here was with the ruptured can file, selecting one of the open splines in the middle of the loft, selecting the shape and the Edit Spline, collapsing them to an Editable Spline, then animating the spline so that the rupture opened wider in the middle of the animation. Then, saving the file and reloading it.

Several functions delete the animation on the splines because it's nondeterminstic as to what to do. These are:

Vertex/Weld: If you're welding, a lot of things can get welded all over the place. The animation is tossed on everything.

Vertex/Break: If you break at vertices, which may be animated, and the break operation clones the vertex one of them has to be dropped, so we punted them all. We might be able to get back in there and clone the controller to the duplicated vertex, but that's a very low priority unless people scream about it.

.../Insert: All insert modes drop animated vertices on the line where insertion is occurring.

~Lathe & Extrude Modifiers

Set up Extrude and Lathe modifiers to assign sub-object material ids.


Implemented wind, air resistance and gravity. These forces are established by the wind and gravity space warps (which may or may not be the optimal method, but this method does let you use the same warps on both particles and objects, which is incredibly useful).

Sample file: GRAVWIND.MAX solves for initial state using both gravity and wind. What's nice is that the wind spacewarp's turbulence functions are fully picked up, so the box slides, leaning ... and then gets blown back, tumbling as it falls.

The collision detection and hierarchical linkage handlers are partially coded, but not checked in at this time. With any luck we'll have collision happening in 0.2.7, along with documentation for the Dynamics sytem in the spec doc.

Note re Dynamics and units: Ultimately, we will configure the Dynamics System to handle any Max system unit. Right now, however, it assumes that the system unit is inches (which is the default) and does all calculations in the Peterson System, which is the combination of centimeters, kilograms, and ticks <g>. The hooks have been installed to convert from Max units to Peterson Units everywhere. This needed to be done - else changing system units will radically alter simulations. Anyway, the spacewarps have been integrated via making certain assumptions. Gravity was easy: a strength of 1 corresponds to a gravity of 9.81 meters per second per second (or Earth-normal). This will always be true. Air Resistance was easy: a value of 100% corresponds to Standard Temperature and Pressure, which is a comfortable day at sea level. Wind was more complex. Right now a value of 1 strength corresponds to 1 centimeter per tick, which works out to something like 105.4 statute miles per hour - a hurricane! This means that a value of 1 will almost always do something for the animator and that it has a good mnemonic value ("about a hundred miles per hour"). A more useful value to those individuals really interested in accuracy would be 1 cm per sec or 1 km per hour, both of which do almost nothing because they represent such slow wind speeds. Ultimately it seemed reasonable to add a "Units" area to the Wind roll-up to put appropriate factors into the strength calculation. We'll be asking for opinions about this once the system is fully implemented.

~Modifier Stack

Added a popup menu option to the Collapse Stack button in the Modify panel. This menu comes up when you click on the Edit Stack button and there are no modifiers applied to the selected object(s). The menu has one or more convert-to options (such as Convert to EditableMesh) plus an Edit Stack option following a separator. Also, the tooltip now reads 'edit stack' all the time since you can always edit the stack by clicking on this button.

Added a new API to allow objects to specify what types they can convert to for this new feature. Implemented a default version of this new API which checks to see if the object can convert to an EditableMesh or EditableSpline, so for now some combination of these will appear in the menu.

The Nurbs team implemented this function for Nurbs, so any primitives that can convert themselves to Nurbs also participate.

~Material/Medit issues

Set it up so that the Reflect/Refract map renders in the Medit sample slots. Hopefully this won't slow things down too much for folks who use those maps. (It's most effective when you're showing the background in the slot.)

Implemented a suggestion from MS in which you can double-click on a Medit sample slot to automatically create a Magnify window for that slot.

Expanded the Multi material to show 10 materials instead of 6.

Modifed the Medit Browser sample rendering to it will show backgrounds and other properties (object type, backlighting, uv tiling, etc) that the material was configured for in medit. This makes things like refractive materials look like something more useful than an almost invisible sphere. ( This now only works for the materials/maps at the root level in the editor, for internal/technical reasons. Hopefully this will be enough for folks, because doing more would be extremely difficult.)

Implemented drag-and-drop for the Medit Type button. You can drag into it when at the top level from the browser/library, and it won't let you drag from the Type button into the sample slots (and indicates so with the cursor).

Added an Apply button to the Medit Options dialog. It works fine for all parameters except for the sample slot n x m controls, which need to actually be OK'd from.

Added buttons for toggling the individual R,G,B channels and displaying alpha and luma when in the Bitmap map's Crop/Place VFB mode.


Installed a shade context result-caching mechanism which allows maps which are multiply instanced in a shade tree to just evaluate once. An example of a sphere with a noise instanced among 4 channels (diffuse, shininess, opacity, self-illum) produced a 1.8x speedup. The more time-costly the map, the bigger the speedup, of course. Notes:

Each map has to be modified to use the cache. It's been installed in Noise, Gradient, Bitmap, and Mix, and Composite for now. It's not a big job, but it just needs to be tested a bit first before installing it everywhere. Caching is probably not necessary for all maps (especially the extremely lightweight ones). It should NOT be used with environment maps, because the result depends on the view vector which is changed when the ray refracts.

If you have the same map in the diffuse and bump channels (for example), cacheing doesn't gain anything, because the evaluation for bump mapping can't use the value cached by the evaluation for diffuse and vice versa. This really only helps among the color and mono channels. In fact, cacheing support is not provided for bump map results (since it is extremely rare that a tree would evaluate the same bump map twice).

The Standard Mtl evaluates the color channels before the mono channels, and a mono channel will use a color cache if available.

~Virtual Frame Buffer

Due to popular demand (and since it's still April), we rearchitected the VFB last week to support pan/zoom. Now, a CTRL-left click is the keystroke for zooming OUT, and a left click zoom's IN. It was a pretty horrendous job, so some bugs are expected. Notes:

There's a limit of 6 levels of zoom in and 6 levels of zoom out.

The map is centered in the window when it is smaller than the window, and has a black rectangle around it. (just like Photoshop!)

After spending about a day getting magnify to work in 8 bit mode, we had to write our own StretchBlt function to support doing things in the correct order. So, this should work in all bit-depths.

~Network logging system

Previously, after reaching the maximum time or size, the log file was reset back to 0 bytes. That wasn't optimal, and the system has been enhanced so these files "eat themselves from the head first". Notes:

Log files have three options for expiration that are settable in Preferences/General:

If set to "Never", it just keeps growing indefinitely. We've decided that this option has to be eliminated because the file could get so large. That'll happen soon.

If set to "Number of Days", a check is done every time a new entry is added. If entries which exceed the given number of days are found, they are extracted from the file leaving the newer entries. A backup file is created (Max.bak) which contains the log file as it was before the pruning occured.

If set to "Max Size", a similar process occurs. The oldest entries are deleted one by one until the size of the file reaches the max size allowed. A backup file is created just as above.

Note that we did only cursory testing on this function, and it needs to be tested thoroughly in a variety of cases (different # of days, different sizes, etc).

~YG General Issues Resolved

We're looking at ways of helping to manage the many rollups that can sometimes present themselves in the command pancel. The CTRL-panhand accelerator was installed a few months ago, but we're looking at adding a couple of other optimizations. A new one in this version is the Right-mouse-button pop-up menu for rollups, which allows you to close one or all of the rollups whenever the pan-hand appears.

In order to support this, all pluggins have to add a couple of lines to pass on the WM_RBUTTONDOWN and WM_RBUTTONUP messages to the Interface::RollupMouseMessage() proc. (They're already passing on the left_wbutton and mouse_move messages)

We've only installed this so far in the Light, Camera, and Standard Material to see how it works, so don't expect it to work with anything else yet.

Additional ideas for this might be a right-click accelerated scroll mode (so the CTRL key isn't required) and adding to the menu a list of all the rollup panels, so you could jump to any one without scrolling to it. Ideas?

Renamed "Show as Boxes" to "Display as Box" in both the display panel and the display floater.

Fixed a bug in the Multi-material in which dragging to or from one of the slots when it was scrolled would access the wrong sub-material

Implemented the ESC key to get you out of the Time Slider Capture mode keyboard accelerator (in addition to a right click).

VP had previously always reported that it was "Scaling" images even when it was just positioning them. So, now the rendering progress dialog says that it's "Processing" images (a good generic term).

Eliminated the title bar completely from expert mode. Now, if you have a dynamically "hiding" task bar, you can actually get the entire screen for Max.

Added smoothing option to the Chamfer Box.

Added smoothing option to the Gengon.

Changed the Cap Segs default setting for Spindle to be 5 to mitigate smoothing artifacts.

Set it up so that, when you load old .max files, the materials are loaded into the visible 6 slots.

Added new functionality to the PCloud particle system's Particle Generation rollup. Previously, you could only set the direction of particles one of two ways: randomly or with XYZ spinner fields (certainly not intuitive). Now there's a third option: Use Reference Object.. When selected, you can pick an object and the direction will use that object's transformation matrix as the orientation for the PCloud particles. (Currently that orientation is not animatable.) Note that the Direction Variation parameter applies only to Enter Vector and Reference Object modes.

RF suggested that we save the state of the Crossing/Window Selection button like we're currently doing for the arc-rotate and zoom buttons. This seemed like a good idea so the value is now saved in the 3dsmax.ini file (and is no longer affected by File/Reset).

JC had noticed that the IFL utility wasn't working for creating inverted IFL files, so that capability has been added. If you invert the start and end frames in the dialog, the resulting IFL file is now built backwards.

Set it up so that now, if you're traversing the hierarchy with the PgUp/PgDn keys and the Lock Selection icon is on, the lock stays on while you move through the hierarchy. The lets you quickly use the keyboard for selection without worrying about your lock coming free.

Implemented GP's suggestion to keep the mouse locked to the playback bar's frame forward/reverse icons as you press the icons.

Added the File/Insert Tracks function to the keyboard accelerator list (called "Track Insert" and it's for the Main UI only... we considered adding this to the TrackView accelerators but it's a File menu option and needs to live in the main ui only).

Implemented a keyboard accelerator for the Views/Update During Spinner Drag toggle called "Spinner Drag Update Toggle".

Implementated on-demand auto-UVmapping in all extended primitives, which finishes off all the primitives, so you can now drag and drop mapped materials onto them and the "Generate Mapping Coords" checkbox will turn on automatically.

Set it up so that the Spline Select modifier defaults to Vertex level instead of Segment.

AI had found a problem in which, if two materials were using the same map, and he replaced a map in one of them with another map, they'd get replaced in both of the materials. This was actually something that we thought was a feature and had recently implemented, but it's obvious that it's confusing and can cause problems. So, we've gone back to the way replacing textures used to work: it only replaces the instance you are working on.

~YG Bugs Resolved

Fixed a bug in which, once you turned on a Field Chart you couldn't turn it off. The display now toggles properly.

Fixed a bug that SD found in which you'd try to export a file to a non-existent drive and the program would crash. You now get the standard Windows warning message.

Dealt with an issue re better coexistence with OpenGL screensavers, etc. Max used to blow up when GL apps were addressing the screen at the same time Max was. This should be fixed with the "Redraw scene on window expose" option in the HEIDI and OGL driver config boxes. What happens is that the OGL screen saver appears over top of the Max window. When you move the mouse and stop the screen saver, Max gets a window expose (WM_PAINT) event because it's windows are just being "uncovered". But we optimized this out of our display pipeline so that it just does a blit from the backbuffer. But those buffers were trashed by the OGL screen saver since it also uses them. The "redraw scene on expose" setting causes Athena to redraw the scene completely on such events, and thus solves this problem.

Fixed a problem that LM found in which the FOV control didn't work in perspective views.

Fixed a problem that LM found in the Expression controller... In the debug panel the values shown for F, NT, T and S were garbage values until you changed the current frame. Now, the debug window comes up right, and F now has the right values no matter what FPS the user has set. (The debug window wasn't wrong -- the expression controller itself was.)

Fixed a bug that JW and RF found in which viewport backgounds wouldn't be displayed in certain cases, and would crash in others. (There was a bug in the interactive OGL background zoom code that had the side effect of essentially scaling the image to zero size when matching the rendering output. This disrupted the internal background state and led to an eventual crash.)

Fixed a problem that AI found in which FFD and Nurbs points weren't pickable. It was an OpenGL problem with hit-testing "markers".

Fixed an OGL problem that AI noticed with blown out specular shading. The OGL driver has been adjusted to more closely match how the HEIDI lighting works. The match will never be perfect (since they use different equations), but it's matching much better now.

Fixed a typo that RC found: "Display driver changes will take effect..."

Since we had to get into the group box code this week for determining the size on the screen of a LOD object, the process of updating the box has been made more robust. It now updates as the grouped objects animate or move around.

As noted for version 0.2.5, work has been going on to get VP filters (compositors and otherwise) to handle Gchannels. They all previously assumed the image to be RGBA and only that. So, when compositions were performed, the Gchannel data was lost. To fix this, the filters had to be upgraded in order to handle this extra data. (They were.)

The second problem was a bit more complicated. The bitmap manager didn't respect Gchannels when performing "Copy" operations (when one image is copied from one buffer to another). The fix was similar to the above but much more complex as it involved the scaling algorithm.

This week, work was completed in bmmstor.cpp (bmm.dll) which dealt with scaling, processing, and positioning of G Channel data. This was pretty extensive work and affects all bitmap copy/scale/position operations. So, it's now essential to regress all of those operations in video post.

Fixed a long-standing problem in the VP Image Input/Options dialog that GP found in which you couldn't move the image around if it was the same size as your output. (It only allowed you to move a smaller file than your output.)

Set it up in the Net Render (Network Job Assignment Dialog) so that the last used Manager connection is sticky in this dialog. If you have multiple Managers setup it always used to default to the first IP Address/Machine Name on the list.

Fixed a problem that RF found in which Multi-Sub Object materials were not displaying correctly in the OpenGL-only shaded view. The material was OK but the maps were not. Only the map from the first SO material slot displayed (and on all the slots). This was an extremely gnarly one, but OGL should now handle multi-material maps fine.

Fixed a problem that JC found in which, if you tried to set any of the configure paths preferences by just typing in the drive and directory, it wouldn't take the string. You'd have had to pick the drive and directory for the value to get changed. Now, if the typed directory is valid, it gets used. Else you stay in the dialog.

Fixed a problem that KM found in which, when incrementing on file saving, Max went from filename199.max to filename1100.max (instead of filename200.max). It was also fixed so that filename1.max goes to filename2.max, filename99.max goes to filename100.max, etc. (without the leading 0). Note that we only support names up to xxx999.max. This is a hardcoded limit. We could bump it up another digit, but since our original spec only called for 2 digits, three ought to be plenty.

Fixed a problem that MF found in which Image Motion Blur was not working for particle systems.

Fixed a "merge-pixel-fragments" bug that caused aliasing on thin objects. This is more fallout from the scary abuffer modifications mentioned in the 0.2.5 Renderer section. Please be on the lookout for any aliasing... It's very likely that there are more problems in the subpixel-fragment merge code that we need to be on the lookout for.

Localization: Moved over 40 strings from the code to the resource file in Client.dll (Job Assignment Dialogue).

Fixed a bug that IB found in which the program would crash if you merged a scene while a secondary controller in a list controller was active.

Fixed a bug that TB found in which, if you had bound a particle system (Spray, in this case) to a Displace space warp that had an animated map on it (an avi, in this case), when you'd set the Spray start frame to a value <1, you'd get an "invalid header" message.

Fixed a bug that BH found in which, if you used EditMesh to select just the right half of the faces of a teapot and then tessellated them, you'd get an Assert.

Fixed a bug that LM found in an extremely convoluted piece of geometry (emesh-af.max) in which extruding the faces of a cloned version of it would cause an Assert.

Fixed a problem in the Summary Info dialog in which the total virtual pagefile size value (lower right number in Memory Usage section) was always reporting the theoretical 2GB process size limit in NT. It now displays values corresponding to the actual pagefile size.

Fixed this request made by the Asia/Pacific localization folks:

"Since filename parsing was one of the few places that the Asia Pacific folks found globalization errors in Max, you need to check with whomever did these changes to make sure they did it properly, i.e. they used the functions CharPrev and CharNext to traverse the string instead of just parsing it a byte at a time."

We added the above functions to deal with this, and were able to test it using standard filenames (and that works fine). But all that's testing is that it didn't break the Western style filenames. We can't actually test this without installing either the Japanese or Chinese version of NT (and we're not going to do that). Please have someone get back to us if there are any problems.

Fixed a bug in which the EditableMesh object wasn't saving vertex animation.

Fixed a bug that MR found in which the Ambient, Diffuse, and Specular channels mapped correctly to their appropriate tracks in TrackView, but starting with Filter ( which mapped to Transparency Falloff), the rest mapped to the track that preceded theirs in Medit.

Fixed a bug that MW found in which, using the "Use Selccted Faces Only" option in the Scatter object would cause a crash.

Fixed a problem with both SuperSpray and Blizzard in which they had 3 unlabeled tracks (in TrackView) each.

Fixed a bug that LM found in which the program would crash if you created a Conform object, and then went into the Modify panel to select the "Pick Wrap To" object, and while in that pick mode either did an Undo or a Delete Object.

Fixed a bug that DC found in which the program would crash if you were rendering an .avi file to your disk and you ran our of room halfway through. (You could easily test this by rendering to a floppy disk with uncompressed settings.) The AVI code was closing the output file and doing general clean up no matter which button the user pressed. The code was changed to now only do the cleanup if the cancel button is pressed. (Please test this thoroughly.)

Fixed a bug that LM ofund in which copying an expression controller with text in the description box, and then pasting the expression as a copy, the description text wasn't copied over with the controller.

Fixed a bug in which the boolean "Extract Operand" button would become ungreyed out while you were still in the Create panel (and then if you did that operation, the program would crash). It only becomes ungreyed now while in the Modify panel.

Fixed a bug that GM found in which, if you boolean'd two objects together and then went into the Modify panel, selected the invisible operand and then moved it around quite a bit, the program would crash. This was due to a stripping related bug, btw (it wasn't actually in the boolean code).

Fixed a bug that MM found in which, if you cut a modifier from the stack of an object, then deleted that modifier from the object, then went into the Edit Stack dialog for another object, selected the base object and hit Paste, you'd get an assert.

Fixed a bug that MM found in which, if you created an object, went into the Edit Stack dialog and selected that base object and then selected Copy Object, the program would crash.

Fixed a bug that DD found in which the program would crash if you turned on the Key Mode Toggle icon after doing some Motion Capture Utility recording and then stepped through the keys.

Fixed a bug that RS found in which the program would crash if you undid the deletion of a space warp after binding it to an object and then deleting it.

Fixed a bug that MM and RF both found in which the program would crash if you went into the Edit Stack dialog on an object with a modifier and selected the modifier, dividing line, and object, and then did a Make Unique. This was a general bug with doing a Make Unique on a derived object.

Fixed a bug that JR found in which the program would crash when using the Collapse Utility multiple times on geometry (and sets of geometry) with the 'multiple objects' option selected.

Fixed a bug that DOL found in which changing the parameters in Video Post would not set the scene "dirty" flag.

Fixed a problem that RF found in the OpenGL driver in which self-illumination wasn't supported.

Fixed a problem that RF found in which moving the VFB around on the screen while rendering would crash the program in a specific case. It's interesting to note that although it looked like an OpenGL problem, it actually had nothing to do with OGL or animated topology. It had to do with the "Redraw scene on window expose" being checked (which it is by default with OGL but not HEIDI, hence the apparent OGL dependency).

What was happening was that moving any window around on top of Max during a render was causing the scene to be redrawn. This in turn caused traversal of the Max scene, which caused some crucial rendering data constructs to be trashed, which in turn caused the renderer to crash.

Since Max itself is not re-entrant (and -- it is safe to say -- never will be), this was fixed by having the renderer disable scene traversal in the viewports. If the "redraw scene on window expose" driver config option is checked (for SZB or OGL), moving a window around on top of Max during a render will cause the viewport to get cleared to the background color, but no scene elements will be redrawn. This avoids the crash and keeps the screen as nice-looking as it can get without doing anything 3D.

The above problem was also most likely the cause of the "Time-dependent crash" from LM. In that case, the program would crash if you rendered a sequence of images (no output file required), of a scene that took 30 seconds or so per frame to render (he was using blockman.max). As the scene rendered, if you right-clicked on the Max button in the NT4.0 task bar, and then clicked in the Max window to close the pop-up menu that came up, and repeated that several times, you could crash (in some cases). This needs to be regressed thoroughly.

The above problem was also most likely the cause for a problem that RF reported in which you'd get a hard display freeze while moving Medit with OGL and the cellular.max file. In that case, the program would crash (and sometimes lock the system) if you loaded cellular.max, opened Medit, and then dragged it around the screen (clipping the window). As with the others, the OGL driver is forcing the redraw, a window is moving over the viewports, and a render is taking place (inside Medit this time). This also needs to be regressed thoroughly.

Fixed a stripping bug that LS found in which L-Ext and C-Ext objects seemed to initially be created with missing segments.

Fixed a problem in which the interpolation of an environment background was slightly off (by one pixel) when using Render Blow-up.

Fixed a bug that LM found in which, when adding plugin file paths via File/Configure Paths, changing the Label field in the Choose Directory for New Entry didn't take. While in there, also fixed the label field so that it has a sunken border just like the NT 4.0 browser folder/file edit field.

Fixed a bug in which, when hierarchies with IK parameters were copied, some of the joint parameters wouldn't get set correctly.

Fixed a bug that TM found in which, if you assigned 2 volume light entries to the same lightsource the glow had "chatter" in it. This was a threading problem with volume lights. (This could stand some regression.)

Fixed the Euler controller so that it's functional again (with all of the various new orderings). This fixes the problem that MGB found with various primitives "flipping" when the controller was assigned and the problem that JB found with things just being generally wacky with it.

Fixed a bug that DT found in which the program would crash if you created an object, converted it to an EditableMesh, arrayed it to make 10 of them and then attached each of the arrayed copies to the original. (By the 8th attachment you'd get the crash.)

Fixed a bug that LM found in which, if you created a Space Warp and then deleted it while remaining in the Space Warp panel, the rollup for that space warp would become permanently attached in the rollup area.

Fixed a bug that PW found in which, if you saved a scene while not at the top of the modifier stack for a selected object, when you loaded that scene again Max would display that object evaluating the object only up to that point in the stack the object was saved at.

Fixed a bug that MR found with wireframe materials in which, if you had an object with a Multi/Sub-object material assigned, and the first of the sub-materials (ID#1) was a wire material. the entire object displayed as wire in shaded mode regardless of what Material ID numbers were assigned. Digging into this revealed many problems with multi-material displays (and the symptoms were different with HEIDI and OGL). The following areas were shored up:

Multi-materials with varying wireframe material states now display properly

Multi-materials with varying opacities now work

Multi-materials with different texture tiling settings now work

Multi-materials with different textures now work

While in the process of working on this, we broke (and then fixed) the ghosting display. That needs to be regressed thoroughly now.

Note that quite a bit of code had to be changed to get multi-materials working. (There turned out to be all sorts of vestigial problems left over from r1.x, and with the additional complexities of OGL and stripping, the problem turned out to be quite large... ) Anyway, please be on the lookout for any display anomalies since a thing or two (at least) must've slipped through the cracks.

Fixed a bug that RF found in which, if you undid the creation of a Conform object, the "Wrap To" field didn't update correctly.

Fixed a bug that MR found in PArray in which, if you were using Object Fragments with Use Distribution Material on, and were using a multi-material to get different color effects on the top, bottom and sides of the fragments, the multi assignment would get confused when you switched from All Faces mode to Number of Chunks mode. (That sentence is a real chunk-blower for sure.)

Note: Once a material is selected for the particle system, that material is assigned to the emitter. Thus, assigning the multimaterial to the emitter, and then going back and selecting Use Distribution Object material after choosing Use Emitter material, will deassign the multimaterial from the emitter (of course <g>).

Fixed a bug that MR found in which PArray wasn't generating mapping coordinates correctly when using fragmentation and emitter material". Now, you can apply a gradient material and the gradient will be mapped to the fragments over time, so you can get the effect of a red-hot explosion at the start cooling off to a grey-blue over time.

Sample file: PAGRAD.MAX: This illustrates the above effect.

Fixed a bug that RF found in the Undo/Redo code in which the program would crash if you applied a series of modifiers and then Undid/Redid them.

Fixed a bug in which right-clicking out of the create mode for the FFD box/cyl spacewarps would crash. (This may have been an interim 0.2.5-0.2.6 regression bug.)

Fixed a bug in which MeshSelect wasn't flagging you like EditMesh does when you went back in the stack before it that any changes that you do to the underlying geometry may be destructive. It does now.

Fixed a bug that RF and MM found in which, upon importing Max 1.x2 scenes the UVW Modifiers were are not scaled correctly.

Fixed a problem that RL found in which the system would slow way down if you had a number of noise modifiers in the scene that were applied to relatively high-resolution objects. (Deleting the default keys on the Noise Phase track would solve the problem previously, but this fix works with those keys present.)

JC suggested that the new "half green" icon to represent a running job in QueueMan was a bit hard to spot, so we've set it up so that it's now black when waiting and green when running.

Fixed a bug that DE found in which, if you were adjusting the Blur Offset spinner of a bitmap map through a range of negative values, the program could crash.

Note the he also noted that the Blur Offset field had to be a bit bigger to accomodate negative numbers. That's been done as well.

JB had noted that if you create a Blend material, go down into one of the submaterials, change the material ID#, and then go back up to the top and down into the material you just changed, the material ID# would be reset to the top value. We "fixed" this so the number you entered will display again, but that's still not going to do what he wants, because the Blend material does NOT pay any attention to the id's of its sub-materials: it just displays it's own id's, unlike a Multi material, which displays the id of the submaterial being used. That's because you can't "blend" sub-material id's.

Fixed a bug that RL found in which, if you got an instance of a map while in Medit, the name of the instanced map would sometimes get corrupted.

Fixed a bug that GN found in which, if you created a multi-material, assigned a map to one of its sub-materials, then opened the Browser to browse on the Active slot, without viewing Maps, and then edited the first material's map slot, you'd be kicked up to the root level of the next material down in the multi. Now, when you go into a map, the browser no longer mis-computes the selection: in this case there is NO selection in the browser. Perhaps a better way to fix this is to force both maps and materials to always be displayed when you are in browse active slot mode, but for now we'll leave it up to folks to figure that out.

Fixed a bug in which, in a certain case when you dragged a material from the Browser to a Multi/Sub-Object material slot, the associated "patch" in the sample slot was not updated until you actually went down into that material level.

Fixed a bug that JC found in which Animated Visibility was not affecting the shadows like an opacity map when using RayTraced shadows.

Fixed a problem that PM found in Medit in which parameters instanced within the same material had to be updated by "tickling" their values in TrackView.

Fixed a bug that DE found in which the Thin Wall Refraction map was only rendering half its scanline in field mode. The fix for this involved doubling the scan lines in the reflection/refraction map, which eliminates the problem, but at the sacrifice of resolution in the vertical direction. This is the same fix that was previously implemented for the mirror material in field rendering.

Fixed a problem in the Flat Mirror map in which it would have problems when blur was turned off and you did bump map distortion when rendering to fields.

Fixed a pretty heinous memory leak that you would've gotten any time you put an animated modifier on the stack and hit the Play button.

Fixed a bug that GN found in which the stripping code would get confused if you deleted a face in an EditableMesh object. (Fixed for both SZB and OGL.)

Fixed a bug in which the program would crash crash when you drag/dropped materials in Medit in certain cases while TrackView was up.

Fixed a crash that would happen in certain cases when you had Medit Magnifidy windows up and either exited Max or did a File/Reset.

Fixed a bug that MM found with the L-extrustion and C-extrusion primitives in which the normals could get wacked when passing various length parameters through 0. Note that in order to fix this we were forced to make some non-optimal changes with regards to interoperability checking, but the normals are stable now. Specifically, the side thicknesses can't always autoadjust down anymore. This was necessary because of the relationship of the sides, lengths, and et cetera.

Fixed a bug that JC found in which the Global Lighting Tint Color swatch (nor any of the other params in the top rollup of the Environment dialog) were updating when you moved the time slider.

Fixed a bug in which, when the Show Axis Tripod was OFF, it didn't get updated.

Fixed a bug that DS found in which you couldn't copy: 1) a sub euler rotation curve (single X, Y, or Z), or 2) a gizmo xform at the root (move rot scale, all at once).

Fixed a bug in which, during a merge operation targets of lights and cameras that were deleted via the "Delete Old" command werent being deleted.

Fixed a bug that DD found in which the Cellular map wasn't animating because it's Update() proc wasn't correctly computing the validity interval. There are some other maps that still have this problem and we'll be fixing them up over the next few weeks.

Fixed a bunch of problems that LM uncovered with regards to browsing the Active Slot in Medit while in the Modal browser. That's never going to work, so the Active Slot mode is always greyed-out now while modalling browsing.

Fixed a problem that PW found in which the Thin Wall Refraction map had some extra, unlabled tracks. There are additional problems with the new 3D maps that we'll deal with later.

Fixed a long-standing problem in which you'd get some UV "wraparound" when applying a planar map to an object with 1.0 tiling. Here's the problem... When you're interpolating values across a face you inevitably get miniscule errors. If, on a face, v is supposed to be 0, you will get some points for which v>0 and some for which v<0. If the map is discontinuous as it wraps from v=1 to v=0 (ie, a gradient that has a completely different color in the start and end fields is a good example) you are going to get random noise. (The barycentric interpolating formula for UVW was changed between R1.2 and R2.0 to an equivalent, but more balanced form, which explains why the errors take a slightly different form in the two versions.)

So, a "non-retroactive" fix has been implemented in which the UVW modifier has been modified so that when it does a "Fit" it scales up the bounding box of the object being mapped by a factor of 1.001. This is enough to prevent texture wrap-around on the sides of cubes, but not enough to visibly distort the texture. This will correct the problem in the future, but you have an existing UVW modifier, it will not fix the problem unless you go in and click the Fit button.

Fixed a bug that DM found in which 1-bit maps wheren't rendering correctly.

Fixed a bug in the Reflect/Refract map that JC found in which the Hit by Name function wasn't available while in the map's Pick mode. (Note that this also applied to the Falloff map's Pick mode as well.)


LM reported that, if you go into the Expression save or load dialog and drag a file name in the dialog, Max tries to open the file as a Max file. This is a NAB because the expression controller doesn't receive the file drop notification: Max does. And Max loads the file cleanly (asking to save the current scene, taking down the expression dialog, etc.)

Note that we only support file drag-and-drop at the scene level, so only Max, and now imported files, can be loaded via DnD. (The same DnD issue can come up for any load/save dialog -- it has nothing to do with expression controllers.)

LM had reported a problem he had with booleans... Here's the example: "Try the following: create a box, cylinder, and sphere. Boolean cylinder from box. Then just paste the sphere position controller to the cylinder. Position of cylinder is offset from that of the sphere." This is a NAB. Since the cylinder is now part of the boolean, its transform is relative to the boolean object's Transformation Matrix, so pasting in the TM of another object will not result in the same position.

DD had reported a problem in which selecting the middle faces around the entire circumference of a box and then applying a Face Extrude modifier would extrude faces in a twisted way. This is a NAB because by default, Face Extrude uses the average surface normal as the extrude direction. This average normal is slightly twisted at each corner due to the fact that we're using triangle faces to represent quads. And that's exactly why we include the Extrude From Center option. Use this and the faces don't become twisted. Alternatively, set the extrude amount to 0 and use an XForm modifier with NU scale to extrude.

LM had reported a problem with the Optimize modifier and Manual Update in which the effect of a manual update would be lost after deselecting and reselecting the object on an object whose stack must be re-evaluated to be displayed (due to sub-object selection in the stack). The bottom line is that there's nothing that we can do about this. If the stack gets evaluated (which it some\times does to determine the sub object level at various points in the pipeline) then an Optimize or Boolean with Manual Update will need to get updated. If folks are going to have a modifier downstream (like an EditMesh) which depends on topology then they shouldn NOT turn on Manual Update.

JC had reported a problem that he had in the Edit Time Tag dialog in which he couldn't select more than one tag at a time to delete. Bottom line is that that's just the way it works.

RL asked a question about Preferences/Colors/Grids/Grid Color... "can this automatically ramp down to the customized Viewport Background color? Apparently it is ramping to the old default Viewport BG color." Actually, the grid colors are not ramping to the old background color. The main grid lines take the color specified, and all other grid line colors are derived directly from that single color. It would be significantly non-trivial to change to use two colors, since all of the adaptive grid code uses a single computed intensity, and we have to work with the single grid intensity preference option too.

MS mentioned that if you rescale the Medit sample slot Magnify Window from the left corner top and bottom it will also move the window. That's just the way it is. (You also can't resize the window by dragging on the left or right sides.)

~non YG bugs and issues resolved

Cap Holes:

Fixed fairly serious CapHoles bug. User noted problem with Teapot on forum, but it was actually more widespread, affecting many meshes with more than one hole. Now seems to work fine.

Made sub-object selection work on CapHoles. Now, if you're in sub-object selection on a mesh, holes are only capped if they're adjacent to a selected vert, edge, or face (whatever selection type you're in).

CapHoles: fixed material assignment. Now if the user specifies smoothing with the rest of the mesh, the material is inherited from one of the surrounding faces. Otherwise, a new material ID is assigned to the hole caps.


There were two bugs reported in Bevel that were also found and fixed in a number of the other SA effects. One was that default values didn't reset with file/reset. The other was that parameters in the dialog didn't undo when the user clicked undo, although the values used in the model did.

Bevel/PathBevel: Fixed reset, undo bugs. Also added initial material assignments in accordance with the new scheme.

Relax: Fixed a number of bugs, including an undo bug. Relax sometimes was misinterpreting which verts should be "fixed" in place when the user clicked on "Keep Boundary Pts Fixed". This is now repaired, and the dialog is now Init-Capsized.

Tesselate: Made it remember face type and tessellation type, and made it forget upon reset.

MeshSmooth: Improved MeshSmooth's face property inheritance. Previously, face material ID's were handed down irregularly to new faces created on old edges or verts, resulting in fractal-like patterns of interlocking materials. Now implemented something that's somewhat arbitrary, in that some materials are more "dominant" than others, but it produces clean boundaries.


Fixed a bug that prevented users from being able to "pick" sub-object component in dialog.

There was a bug in 0.2.5 that prevented saving Update and Display options from the dialog. (The loading routine also ignored them, which means they were always loaded at the default.) This was fixed along with other things on last week, but this meant that the new loading routine was loading the old files with no update option selected and Display Operands, which is unusual. So it was set up to recognize the "no update option" load situation and override with the defaults (Update Always, Display Result) in that case.

Tension is now less limited: you can now go from -1000 to 1000 instead of only from 0 to 1. Negative values are interesting.

Geosphere: Fixed a reset bug and added material assignments.

~QE Bugs Fixed

BUG #: 52438


CODE FIX: The Network Manager dropdown functions correctly in this case now (The manager name was being saved even before it was noted as a valid name.)

BUG #: 57471


CODE FIX: When a Job name exceeds 8.3 and Include Maps is on, and an error is generated, that error is now reported. This was an interesting problem. First of all, there was indeed a problem in the Job Assignment dialog in which it would not display any errors. The main problem, however, was the fact that there was no error per se. When using a non 8.3 filename (or a name with spaces), pkzip would simply use whatever characters it would make sense out of and create the archive. As the resulting name was different than the one requested, the JAD would get confused and barf out. Pkzip doesn't return an error in this case... It creates the file just fine. It simply creates a file that contains a different name. If you use an NT version of pkzip (infozip, etc) , this all works fine. Code has been added to the JAD so that it looks for the file just written to see if it was indeed written. In this scenario, it won't find it and it will report a problem while creating the archive. The code that invokes pkzip has also been changed in order to handle file names with spaces (by just putting quotes around the name).

BUG #: 40280


CODE FIX: Under NT4, the Network Job Assignment dialog now has a question mark icon in its title bar. It's up to TechPubs to give us the hooks for something to put there.

BUG #: 57872


CODE FIX: In the NJA dialog, the High Priority checkbox now has an accelerator key assignment ("Alt-H").

BUG #: 57472


CODE FIX: In the NJA Dialog, the tab order is correct now.

BUG #: 57466


CODE FIX: In the NJA Dialog, the text "Submitting Job" is spelled with two t's now.

BUG #: 40669


CODE FIX: In Video Post, if the active viewport is changed to a trackviewport, the Render options button in the Edit Scene Event dialog doesn't give a "Can't Render" message anymore

BUG #: 57516


CODE FIX: Now, in the NJA Dialog, Servers that have been disallowed show up as Suspended in the Server Properties dialog.

BUG #: 39092


CODE FIX: Max doesn't crash when exiting the program in this way during a preview creation anymore. Now, the close button is ignored during preview creation -- you must cancel the preview first.

BUG #: 37280


CODE FIX: Fixed a bug in the Views/Background menu in which the Steps value was allowed to be set to 0. Now, the lower limit is 1.

BUG #: 33225


CODE FIX: Reset now affects the Views/Shade Selected state.

BUG #: 58169


CODE FIX: The Object label doesn't remain in the viewport after a Reset anymore. (Note that this bug is different from the problem where tooltips don't go away on the Intergraph card running OGL.)

BUG #: 36865


CODE FIX: File/Reset turns off Fastview now.

BUG #: 38057


CODE FIX: The Fastview display settings are now saved in the MAX file.

BUG #: 47140


CODE FIX: This argument is now passed to the FileReset method. (Note that this bug was an api issue only, with no UI consequences).

BUG #: 44967


CODE FIX: Changing the scene description in Summary info now marks the scene as dirty.

BUG #: 49723


CODE FIX: The memory stats in the Summary Info dialog are fixed so that the virtual memory section now displays values corresponding to the pagefile size, rather than the theoretical 2GB process size limit.

BUG #: 32890


CODE FIX: There was never supposed to be a "?" icon in the multi-spotlight and multi-camera chooser window, and it's now gone forever.

BUG #: 31874


CODE FIX: The .max filename appears on the title bar in mixed case now.

BUG #: 40145


CODE FIX: Under NT4, stopping a Manager or Server with a CTRL-C while connected on the same machine shouldn't crash the console anymore. This was due to a timing problem with the Ctrl-C handler within NT. Apparently, it would shut the application down before we had a chance to clean up behind it. The point of exception was way inside NT's kernel and well after the application was destroyed. It seems to be a problem in NT's network drivers as you can cause a similar problem in Netscape by typing a non-existing domain name and closing the application while Netscape is still searching for the domain name. The fix was control the closing routine very tightly, and you may be able to notice that now, when you hit Ctrl-C, things will shut down at a perceptably slower rate now. Hopefully this completely nails the problem, but if it doesn't there's not much more that we can do about it.

BUG #: 42461


CODE FIX: The program doesn't crash anymore when merging a scene while a secondary controller in a list controller is active.

BUG #: 43280


CODE FIX: Shift-cloning an object with a list controller while in the Motion/Parameters panel doesn't crash Max anymore.

BUG #: 47148


CODE FIX: Rendering after removing an environment map doesn't cause a crash anymore.

BUG #: 58041


CODE FIX: The program doesn't crash anymore when an FFD space warp is bound to an object, deleted and then undone.

BUG #: 58336


CODE FIX: Extracting an operand in a boolean object doesn't cause an assert anymore. Note that you cannot extract an operand from the Create panel... you must go to the Modify panel to do this.

BUG #: 58338


CODE FIX: Clicking Optimize Result while playing back an animated boolean won't crash the program anymore. (Note that this was another stripping-related bug.)

BUG #: 58940


CODE FIX: Copying an undone Conform object doesn't cause an assert anymore.

BUG #: 57633


CODE FIX: Rendering out large numbers of instanced geometry particles doesn't cause a crash anymore.

BUG #: 32493


CODE FIX: Drag and Drop of import file formats is now supported.

BUG #: 42566


CODE FIX: Changing the path of the help file works correctly now (and you can move the help file wherever and whenever you want).

BUG #: 53044


CODE FIX: The Title Bar text doesn't get trashed after doing a DXF export anymore.

BUG #: 58172


CODE FIX: Keyboard entry settings for the Geosphere object are being reset now.

BUG #: 32824


CODE FIX: The Tab and Arrow keys now work correctly in the Taper dialog. The note also said that "There are still many cases throughout the program in which tabbing b/w fields does not produce desirable results." Normally we would've gone back to QE for a detailed list of cases, but in this case we did a full sweep of the modifier dialogs and corrected whatever we could find. At this point, if there's anything else left in there that's not working correctly, please provide specific cases.

BUG #: 58316


CODE FIX: Servers now use their own bitmap cfg files instead of the info sent with the .max file. The [bmi] driver's private data is being saved correctly.

BUG #: 58385


CODE FIX: BMP's output correctly during net renders now.

BUG #: 58348


CODE FIX: The Target Dir Light rollout shows the target distance correctly now. Also fixed a problem with both targeted directional and spot lights whereby the target distance display was bogus when you clicked on the Create button but hadn't yet dragged out a light.

BUG #: 31229


CODE FIX: The axis tripod of the point helper object is calculated correctly with 'Show Axis Tripod' unchecked now.

BUG #: 36824


CODE FIX: Clicking in the status bar coordinate slots doesn't activate the Zoom All mode anymore.

BUG #: 58362


CODE FIX: Using an Environment opacity map yields the correct results in this case now.

BUG #: 58339


CODE FIX: Merging Environments don't crash with spacwarps in this case anymore.

BUG #: 56790


CODE FIX: Mutliple calls to Interface::StartAnimPlayback() work correctly now.

BUG #: 58334


CODE FIX: Combustion Effects are correctly translated from 1.x into Athena now.

BUG #: 33209


CODE FIX: Make Preview settings are saved with .max files now. But note that they will only be included with new .max files... loading old .max files will not alter the current settings.

BUG #: 44300


CODE FIX: A right click cancels correctly now with view panning while in the Edit Spline modifier: But the real problem was with changing subobject level while in a viewport command mode (pan, zoom, etc). Changing the subobject level was altering the command stack, so that when the pan was canceled there was no command mode to pop back to, leaving MAX in a limbo state. This also was a problem with, say, panning while in mesh select, and turning off the subobject button. The problem was fixed by automatically cancelling any viewport command mode when the subobject mode (or level) gets altered.

BUG #: 33217


CODE FIX: Simultaneously pressing the left & right mouse button to bring up dialogs work more predictably now. (yeesh) Code was installed that disallows simultaneous clicks. Whichever click comes first wins... the loser click is lost in the ether. This was a change in our custom buttons, so it fixes the "problems" all throughout Max.

BUG #: 41834


CODE FIX: The Save Preview As dialog now automatically adds the AVI extension.

BUG #: 39382


CODE FIX: Control points now move correctly on a FFD modifer that has been applied to co-planar objects. Note this bug existed in all the FFD modifiers including the new NxM FFDs.

BUG #: 57465


CODE FIX: In QueueMan you had to previously edit the queueman.ini file to change the Target Position INI setting. It's now beened added to the Queue Manger's User Preference dialog. There you can select the drop position of a drag & drop operation (Above or Below the selected target).

BUG #: 57511


CODE FIX: In QueueMan, the 'Delete Entire Queue' option is now grayed out when in Read Only mode.

BUG #: 57495


CODE FIX: In QueueMan, the report writer provides a warning before overwriting files now.

BUG #: 35792


CODE FIX: If QueueMan is running under Windows 95, the Boot Time correct now. This was a pretty weird one. All times recorded by the network code is in UTC (or Coordinated Universal Time). This is common practice (if not mandatory) with all network code as servers may be located in different time zones. Windows 95 does not support the UTC function. The fix implemented fix was to display the time in UTC as opposed to trying to convert to the local time. In NT everything works fine. In Windows 95 folks will have to understand the displayed time is in UTC and do their coversion. Converting all network code to local time is absolutely out of the question. Also note that instead of checking for Win95 specifically, the validity of the returned date and time is checked. By doing so, this will work in future versions of Win95 without having to change anything.

BUG #: 32756


CODE FIX: The QueueMan's Server Properties dialog has accelerator keys now. Accelerators have also been added to the Preferences dialogue.

BUG #: 57502


CODE FIX: In QueueMan, when in read-only mode, you can't move jobs anymore (which fixes the problem in which the queue would previously disappear if you attempted to do this).

BUG #: 58957


CODE FIX: The UDeflector's Pick Object operation is placed in the undo buffer now.

BUG #: 58976


CODE FIX: Undoing the deletion of an instanced geometry particle correctly shows the object selected now.

BUG #: 57333


CODE FIX: Scaling the Blizzard emitter affects the area of distribution now.

BUG #: 58942


CODE FIX: The UDeflector's display icon now is labled Size instead of Radius.

BUG #: 59610


CODE FIX: Undoing a WSM deletion doesn't cause a crash anymore

BUG #: 59067


CODE FIX: Max doesn't crash during an "edit modifier stack/copy object" operation anymore.

BUG #: 59588


CODE FIX: The Topology change warning appears correctly now underneath MeshSelect modifier applications.

BUG #: 59628


CODE FIX: In Boolean objects, turning Optimize Result off & on doesn't cause a crash anymore.

BUG #: 59629


CODE FIX: In Scatter objects, Use Selected Faces Only doesn't cause a crash with no faces selected anymore.

BUG #: 54237


CODE FIX: If TIF file output exceeds a resolution of 4096, Max doesn't crash anymore. A test has been installed to catch this and return an error code, so at least it doesn't crash, but it won't necessarily write the .tif file either. It may be possible to increase the "BLOCKSIZE" in the tif writer, but that code is too convoluted to mess with further, so this is all we can do.

BUG #: 37537


CODE FIX: Groups that are children are not selected anymore when parents are selected. This was a major bug. (I can't believe we missed this one. It essentially made groups unusable.) There was a flame on the ktx forum last year from someone saying that he NEVER used groups because when you selected a group it selected all sorts of other stuff in the scene etc... now it's obvious what he was talking about.

BUG #: 44904


CODE FIX: Attaching objects to nested groups now functions correctly.

BUG #: 42436


CODE FIX: The program doesn't crash anymore while in Medit the second time the "Show Map in Viewport" icon is selected.

BUG #: 50708


CODE FIX: Multiple flat mirrors on a single box object function correctly now.

BUG #: 57856


CODE FIX: The debug.txt file is not created along with output files anymore.

BUG #: 58174


CODE FIX: Reset correctly affects the Environment Map slot now.

BUG #: 58516


CODE FIX: Medit sample spheres don't darken when the sample scale is increased anymore. When the sample scale is increased, the sphere is actually made bigger, and the view is zoomed back to make it appear the same. The Medit lights (actually Omni's) were at a fixed distance, about 1000 units away, so when the sample sphere got almost out to the lights the spheres got darker. We took the straightforward path to fixing it and just moved the omnis WAY out to about 100000 units. That's all we can do here, so please don't submit this with a larger number than 100000 in the scale slot.

BUG #: 35313


CODE FIX: You can now merge files that have different system unit values and they'll merge in correctly (see the new Unit Scaling section above in this release's notes). At this point we have to make sure that all different entities properly convert. (Nurbs, particle systems, etc) Someone has to go through every entity and check them and report specific problems.

BUG #: 58431


CODE FIX: The Noise modifier phase spinner matches the TrackView value now.

BUG #: 55150


CODE FIX: Moving the Pivot of a WSM object doesn't affect the deformation anymore.

BUG #: 57504


CODE FIX: In QueueMan, the highlight stays in sync in this case now.

BUG #: 58035


CODE FIX: Pushing all four buttons under Compound Objects and then selecting the Move/Translate tool from the toolbar doesn't cause a crash anymore.

BUG #: 48111


CODE FIX: Spotlights are hidden both in the viewport and in the SbN list when their targets are hidden now. If you hide a target of either a light or camera, the entity it is a target of won't appear in the SbN list (or the viewport).

BUG #: 36188


CODE FIX: These strings are externalized now.

BUG #: 39066


CODE FIX: Rescaling time affects Ease Curve key values now.

BUG #: 33166


CODE FIX: Values at the beginning of a range are not changed anymore when the values at the end of the range are adjusted when using the Ping-Pong, Cycle and Loop Out-Of-Range Types.

BUG #: 42469


CODE FIX: The out of range operation works correctly with linear animation in this case now.

BUG #: 33963


CODE FIX: Re the question: "How do I make a rollup window that was added with CreateCPParamMap roll up and down programatically." There are now APIs in the Interface class to access the control panel rollup and all the pages allowing you to programatically scroll and open/close pages.

BUG #: 57475


CODE FIX: Changing the file output type from AVI to TGA doesn't cause a crash when trying to net render anymore.


BUG #: 58438


NAB: Frequency is not animatable.

BUG #: 58600


NAB: The spec is incorrect. There is now an IFL utility for viewing these files and the spec has been changed.

BUG #: 32702


NAB: This is just how applied IK works. It's as if you turned on the Animate button and started moving the object at frame 50, 51, etc. A key is always created at frame 0 if there are no other keys. If you don't want the object to maintain its current position at frame 0 and interpolate to the position at frame 50 (in this case) then you can simply delete the key at frame 0.

BUG #: 33599


NAB: Key Step mode is a submode to the current mode you're in, so if you're in Move mode then presumably you want to step to only position keys. However when in any mode other than move/rotate/scale it steps to all keys. This includes sub-object move, rotate, and scale as well as Key Stop sub-mode. When you are in sub-object move you do not create or alter position keyframes so why would you necessarily want to step to only position keys?

BUG #: 33173


NAB: In this case, the TrackView is minimized and then specifically given focus. Well, if the TrackView has focus (minimized or not), it has focus. That's the way the keyboard focus system works. Note that all keyboard shortcuts will be active, not just the delete key. In order to change this behavior then we'd need to special-case the keyboard shortcut code to not route shortcuts to the trackview, medit, or video post if those windows were active yet minimized, given how complex the focus code is already, with separate keyboard acclerators for the 4 major active windows, this would be madness.

BUG #: 31397


NAB: This is a NAB (although it certainly does seem like a bug). Here's the deal: when you copy a controller to the clipboard, the controller isn't actually copied (but instead is instanced. The controller in the clipboard is instanced so that you have the option to do a Paste Instance.) So, if the controller is modified after it has been copied then the controller in the clipboard is also modified (since it is an instance). The only way to "fix" this would be to remove the ability to paste controllers as instances (which is out of the question).

BUG #: 33172


NAB: This is the same as 31397, above.

BUG #: 59266


NAB: The calculation of metaparticles happens whenever you send anything out to render, either to the NJA or not. The scene has to be traversed in any case, and in this case there are a LOT of default metaparticles. Anyone working with metaparticles is going to get used to waiting a looong time for them pretty soon.

BUG #: 31205


NAB: Yes, with the selection filter set to other than all, filtered objects are affected. The selection filter is not respected in that objects are deselected which don't match the filter. This is how Max is designed. When you select something that passes the filter, it deselects everything else in the scene no matter what. If you want to add to the selection set, then ctrl-click on the object. Similarly, ctrl-clicking an object that is selected and that passes the filter only subtracts that one object from the selection set. Said another way, with interactive hit-testing, all the selection filter does is limit what objects accept a click...

If you want to deselect everything that matches the filter, then use Edit/Select None or Select Invert, which has specific code to follow the filtering for both selection and de-selection.

This may be asymmetric, but:

a)      It gives the most options with the least number of clicks or menu selections.

b)      Windows does not allow menu choices to have a ctrl-key modifier, so we can't use that to leave the current selection set in place when using the menu commands (i.e. we can't match the interactive behavior).

c)      With the conventions currently in place, the selection filters allow us to easily add, subtract, or replace the selection set interactively with elements only in a particular selection filtering group and the menu choices allow us to modify the selection set by only adding or subtracting objects that pass the filter.

Perhaps this should be documented more precisely. (The conventions are very deeply encoded in Max, and there's no way that they're going to ever change.)

BUG #: 56890


NAB: Inline Function NumCycles in Control.H does handle negative values properly.

This is the way this function is supposed to behave. The interval in the example referenced is not centered around 0. In other words there are more cycles between 0 and -300 then between 5 and 300.

BUG #: 31441


NAB: Yes, you can't add keys to a Morph track with a Cubic Morph Controller. The Barycentric morph controller can do this because it can create a new morph key by interpolating the barycentric coords. The cubic morph controller would have to create a new object that represents the interpolated mesh at the time of the new key, and that would make it a barycentric controller.

BUG #: 40547


NAB: Yes, box material ids can be altered when they are attached. This is that same case that has appeared on our list over and over in different forms. Boxes have IDs 1-6 assigned to their faces when they are created, so as soon as they get a sub-material assigned to them the faces are going to have different materials applied to them. That's just how it works.

BUG #: 57853


NAB: It's a feature that all of the pick modes put you into Move mode when you're done with them. There's no way that we'll change this, it's convenient for users the way it is now.

BUG #: 36970


NAB: Of course the Animation\Length value doesn't include all frames. (The default frame range of 0 to 100 is actually 101 frames but the length value reports 100.) We answered this a dozen times before r1 shipped. We're not measuring the space in-between the frames but the number of frames themselves. The most intuitive analogy for this is that a foot long ruler is 12 inches long, but there are 13 tick marks on the ruler counting 0 and 12.

BUG #: 39543


NAB: Splines can't be intersected with rays since they are only 2D and the ray-intersection method requires a 3D object.

BUG #: 32914


NAB: We shouldn't remove the filter to suppress XYZ curves for rotations because it's possible for a developer to create a rotation controller which does have X, Y, and Z function curves.

~QE NoRepros

BUG #: 57885


NO REPRO: In the NJA Dialog, the Server Properties button is active when the NJA dialog is set to single (ie, when in avi or flc mode).

BUG #: 58518


NO REPRO: When Turbulence is on, it appears correct here.

BUG #: 33103


NO REPRO: I can't reproduce this problem with the Help Topics menu item bringing up the menu bar help instead of the topics window. It seems to work fine here, but in general this report is so brief that it's even hard for me to tell exactly what's going on with it. Please be more specific if you really can find a problem here.

BUG #: 45067


NO REPRO: When going through these steps here, Fan.3ds from the WCT renders fine after doing a boolean union between "hub" and "hubcover".

BUG #: 45622


NO REPRO: Can't reproduce this report in which the object thinks that its validity interval is < forever even it it's not animated.

~QE NoFixes

BUG #: 33928


NO FIX: This "workaround" that the developer reports is the best we can do (period). The only time that this is a problem is when the plug-in wants to show a preview, and we can't disable the Setup button as there is nothing wrong with it for 99% of the cases. As the preview is the exception (not the case in which the button ought to be enabled), the plug-in should (and now can) handle it on its own.

BUG #: 34887


NO FIX: The Queue Manager can't be made into a file viewer. (Note that now that you can render with the VFB enabled, this is less of an issue.)

BUG #: 48107


NO FIX: The only way that we could get summary info to support a summary info button in the file open dialog would be to actually load the whole file, which would be ridiculous, especially since Max only has the notion of a single "active file" and we could thus only get the summary info by blowing away the current scene.

BUG #: 32786


NO FIX: Yes. When using the Include Maps option, if the job already exists, the Archive will go thru its routine first and zip up the file before it checks to see if the job exists and then prompts you that Job Already exists. If you have a hefty file, it takes a considerable amount of time to zip up the file. This is a chicken and the egg type deal. We need the size of the stuff we're sending over to make sure it will fit. In reponse, the manager will report back if it's ok to send, if the incoming job is too big, if there are existing file outputs in conflict, if the job itself already exists, etc. Not much we can do about it.

BUG #: 57881


NO FIX: We can't make the multiple QueueMan read-only mode an option. Note that as it is, the manager will automatically treat any "additional" QM as read only. The special case to accomodate situations where two or more QM's could actually act on the queue would be convoluted beyond belief. Also note that it is the manager who denies action from a second or nth QM.

BUG #: 32412


NO FIX: Yup, you should be able to use Ctrl-Pgdn/Ctrl-Pgup to navigate thru folders in Viewport Configuration, Grid and Snap Settings & File/Preferences dialogs. Agreed, but we've spent hours trying to figure out how to get the keyboard message for the PgUp and PgDn keys inside a tabbed dialog, and we just can't figure out how to do it. So, unless someone has some insight to help us along, we'll have to punt on this one. (Note that we also spent quite a bit of time on this for r1 before we deferred it, so it's probably hopeless.)

BUG #: 57879


NO FIX: Although it would be great to find a way to block a machine from being used as a net render server (while you're using it in interactive mode), it's just unbelievably complex. For now, we'll just have to live with folks bringing server down while using the program in interactive mode.

BUG #: 31359


NO FIX: Affecting the Pivot Only requires modifying the controller (since the controller represents the position of the pivot). If a controller is procedural (like an expression controller) then the pivot can't and won't move. There's absolutely nothing that we can do about it.

BUG #: 31340


NO FIX: IK for Path controlled objects with Follow on just isn't in the scope of this release. We've done as much as we can with the IK system except look for bugs in the basic system. These issues about making path follow and lookat controllers work with IK just aren't going to get addressed.

BUG #: 31346


NO FIX: Yup. Objects with Look At controllers will not IK bind to another object's position or orientation. We've done as much as we can with the IK system except look for bugs in the basic system. These issues about making path follow and lookat controllers work with IK just aren't going to get addressed.

BUG #: 31362


NO FIX: Yup. Using interactive IK to move a child (with a Path controller) will send the parent (with Sliding joints active) into the Twilight Zone. We've done as much as we can with the IK system except look for bugs in the basic system. These issues about making path follow and lookat controllers work with IK just aren't going to get addressed.

BUG #: 31380


NO FIX: IK Joint Paste doesn't support commonality (to allow pasting to multiple objects) and hence is never going to be able to paste into multiple objects simultaneously. Making it support commonality would involve rewriting big parts of the Joint system, which we're not going to do.

BUG #: 31747


NO FIX: Yes, entering "r10-5" in an edit field is accepted, but is invalid. It would be nice to not accept the '-', but acceptance has to be done on a character basis (not a string basis), so we can't know that the 10 preceded the '-' (and hence the '-' is invalid). We do process the final value (once return is pressed) as an entire string, and at that point we could either reject the whole thing and not change the value, or we could parse it as reasonably as possible. We're doing the latter (treating 'r10-5' as 'r-5'), and we absolutely aren't going to change this behavior. (In fact, in some ways it's a feature in that you don't have to go back and retype if you forgot to put in a minus sign.) Bottom line is that this code is extremely involved, and we'd only go in there and touch anything if we found a heinous bug.

BUG #: 43152


NO FIX: In this case, the boolean is incomplete since it is missing an operand. Theoretically, it would be possible to make this work but there are a slew of technical issues that make it next to impossible (so forget about it).

BUG #: 47020


NO FIX: It's true that unchecking "tile" for a bitmap with an offset will cause clipping of the map in this case, but there's nothing we can do about it. To make you feel better, this is a problem that has been in 3DS/DOS since r1 days (we just did a test to make sure). It's been something that we've tried to deal with for 8 years, and it's due to the fact that there is a discontinuity in the explicit UV's at the back of the cylinder (or sphere, or whatever). We'll kick it around in our spare time (for another 8 years probably), but it's most likely something that we have to live with. (Note that the only fix that we've ever figured out worked fine only until you started putting in UV rotations.) It's extremely clear that there is no way to fix this in the UV evaluation, after the uv's have been interpolated from the triangle values. The only way is to effectively remove the discontinuity earlier, when the uv's are being collected for the face (somehow..).) Workarounds for this: (1) Apply a UVW-modifer, and rotate it to move the map, instead of using U-offset. (2) Use "Planar from xyz".

BUG #: 52108


NO FIX: Although the "Limits" parameters may act inconsistently across various modifiers, changing them will break all old files. Not going to happen.

BUG #: 33956


NO FIX: There really is no point in adding a specific API to access the "Rescale Time" button since plug-ins already have all the APIs they need to scale time.


Document Info

Accesari: 4163
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta

Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site

in pagina web a site-ului tau. - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare

Copyright Contact (SCRIGROUP Int. 2024 )