3dsMax 2021.3 has been released. The biggest addition of this update is the brand new Retopology modifier. I’ll have another post for the collection of showcase and tutorial videos.
It comes with 3 algorithms to choose, Reform, InstantMesh and QuadriFlow. Reform is the internally developed Autodesk’s own retopology engine.
I have had a chance to beta test while is was developed. This post is the collection of images that I have created while beta testing. I tried my best to test many different types of sources includes 3D scanned model, ZBrush sculpting, CAD import, booleaned meshes and more. Enjoy!
Make sure click image to see big to see wireframe better. Under the image I also tried to post the original source of model as much as remember.
ZBrush Sculpt
Do you like new Retopology modifier? renderStacks is as good as this for rendering! Click here to learn!
Scanned Model
CAD Import
Boolean
Up Resolution
One more chance! Click here to learn about renderStacks. It will change your rendering life!
52,464 / 106,302 / 246,787 / 394,237 https://gumroad.com/l/xAQxj
One of the new feature of 3dsMax 2020.1 is the new Hot Key Editor plus Hot Keys and underlying system.
Hot Key Editor
The new Hot Key editor is cool. But, the more important change is the way of how the customized hot keys are stored and loaded. When you save and load hot keys in the past, 3dsMax had saved and loaded the entire hot key assignment. Because of this save/load mechanism, any newly added hot keys by 3dsMax dev would have lost when you load the hot keys from previous version. It was not possible to have a studio0wide custom hot keys since the hot keys would have gone when an artist load their own hot keys.
To solve this kinds of issues and make UI customization upgrade-safe, the new override based hot key customization engine is developed. Now 3dsMax stores only the changed hot key assignments in the file when users customize their hot keys. Then 3dsMax will override only the changed keys when the file is loaded.
This will allow users to keep the changed they made while still receiving updates from the global changes. Also you can deploy multiple level of hot key customization. For example, you can have a studio-wide hot keys on top of 3dsmax default hot key while artist still can have own hot keys if they want.
New Hot Keys
Another change is the new hot keys.Yes, some of hot keys have been changed. This new hot key assignment is the fruit of the community effort of 3dsMax and beta users. There has been many feedback and discussion for the best hot keys on the beta. Special thanks to Sergio Santos for the great contribution. 3dsMax put a nice documentation with map images to show the complete list of changes like this. Please visit HERE for all images.
But, I know there are always ones who doesn’t want to change their 20 years old hot keys. For them, here is a hot key files to go back the legacy hot keys. Download it and load in the Hotkey Editor.
If you have had customized hot key in pre-2019 version, this is the step to move to new hot key system.
1) Generate KBDX file using the maxscript command actionMan.saveKeyboardFile “C:\TEMP\LegacyDefaultUI-2019.kbdx”.
If you specify a KBDX extension, it will convert the entire active hotkey set to the legacy format through the old code. If you specify HSX, it will output in the new format and only contain user customizations.
Or Download this file.
2) Swap it out with the one in your UI_ln/CUI folder (rename the old one to keep a backup). This will use the new hotkey defaults as a reference point when doing the migration, and will treat every difference as a user customization, reaching the same result as if you remapped every single difference back to how it was in 2020-
3dsMax developer has changed their delivery model to continuous delivery. Instead of delivering a feature at one release, now a feature will be delivered continuously until all the planned feature is finished. The automatic OSL > HLSL conversion for viewport was the one of them. It has been improved in every PU since tisinception. Now almost all OSL shader will be automatically converted to HLSL including 3rd party OSL shaders.
Also, the viewport playback performance of animated OSL map has been greatly improved.
This is the viewport playback of the sample file for my OSL shader pack1 in 3dsMax 2019/2020.
Since I posted the Alembic improvement of 3dsMax 2019 release, each PU has been added more and more improvements continuously. Let’s check what has been added.
Per object metadata with .userProperties and .arbGeomParams
3dsMax 2019 introduced the export of per object propery. But, it was only compatible between 3dsMax. With the PU3 update, you can export/import per object properties via .userProperties and .arbGeomParams. This allows a greater compatibility between 3dsMax and Maya/Houdini.
Here is an example of Alembic file exported to Maya.
Here is some details.
Import
- It will read from both .arbGeomParams(Maya default) and .userProperties
- It supports integer, float, boolean, string.
- It supports animated value.
- If Extra Attribute is on shape node, it will be in Alembic Geom Parameters rollout(alembic_geom_attributes). If Extra Attribute is on transform node, it will be in Alembic XformParameters rollout(alembic_xform_attributes)
Export
- The custom attributes on the top modifier and base object will be exported.
- 3dsMax will use .userProperties for export and store data on transform node by default.
- If you use the same custom attribute name alembic_geom_attributes and alembic_xform_attributes which 3dsMax alembic importer uses. You can even have control over where your custom attribute export goes. To store data on shape node, you need to make the alembic_geom_attributes on the baseObject.
- If you have duplicated name custom attributes on an object, none of custom attributes will be exported. You will see the warning in Maxscript elistener.
- Layer name will be on transform node.
- Material name and Object ID will be shape node.
- 3dsMax will import Layer name/Material name/Object ID as custom attribut on the respective rollout, too
Alembic Inspector
This is added in PU1. This allows to browse the content of the alembic object even without opening the alembic file. Now PU3 allow you to open the Alembic Inspector for the already imported alembic files. Use the Alembic Inspector button in the Alembic container object(the root Alembic object with Alembic logo icon),
Alembic Inspector is also accessible via Maxscript. Link.
Maya compatble Multi UV and Vertex Color
Maya is very picky about reading the multi UV and vertex color in Alembic file. To send multi UV(UV channel 2+) to Maya, you need to choose UV for Extra Channels type. Also vertex color data from Maya will be imported as a proper vertex color channel. Before PU3, the vertex color channel was imported as an UV 2+ channel.
Instancing Support
Support for instances allows files to be much smaller while maintaining complexity and can dramatically improve export speed. PU2.
Alembic library 1.7.5
Alembic library has been updated to 1.7,5 in PU2.
Alembic Transform Controller Performance improvemant
Alembic Transform controller playback is more than 2x faster in PU3. Also Source and Object browse buttons are added for Alembic Transform controller.
Material ID will be exported when all Material IDs for an object were the same
Before PU3, None if mMaterial ID was exported.
Alembic Peformance mode will only cache the current animation range
Before PU3, it was caching from frame 0 all the time.
UV Channel will be preserved
Unicode Support
Fixed Alembic not able to use relative paths
Fixed High-speed rotations no longer deform objects
Thanks for 3dsMax team for continuous effort to improve Alembic support!
Since it is introduced in 3dsMax 2019, OSL Map has been comtinuously improved in every release.
There has been many updated on performance, OSL editor useability and viewport display.
The most important improvement among all is the viewport display.
Now 3dsMax viewpot can display almost all shippinig OSL and many 3rd party OSL shaders properly even as 3D procedural map.
How canit even support random 3rd party OSL shader?
The 3dsMax rendering team has developed automatic OSL > HLSL converter instead of making HLSL shader for each OSL shader.
The OSL shaders in the following images are all 3rd party OSL as 3D procedural map.
It is oddly satisfying to see all the 3D shaderes in the viewport exactly as renders.
And,,, a little bird told me even more stuff might come in the future. 🙂
3dsMax 2019.1 has been release with many improved features.
Many new features has been added to Alembic/OSL/Fluid/Arnold. Python and Project got some improvement. Plus 94 fixes.
One of the item among “Bringing your ideas to life in 3ds Max 2019.1 Update” was “Attaching large amounts of meshes is up to 7 times faster”.
So, I decided to test if it is true. The enhancement was done for Collapse utility. I think 3dsMax dev choose to enhance this because this is the only attach which keeps explicit normals.
I test total 4 files. I open the file and attach all geometries.
The result is… drum roll…
05_TM_manyLowRes
Obj:5616 Verts:99,686 Faces: 165,505
2019 : 3.335s
2018 : 32.724
9.81 times faster
08_Static_Many
Obj:19913 Verts:2,264,540 Faces: 3,265,430
2019 : 11.2s
2018 : 2236s
199.35 times faster
bistro
Obj:2429 Verts:2,766,360 Faces: 3,850.480
2019 : 9.5s
2018 : 546s
57.23 times faster
EmeraldSquare
Obj:29596 Verts:9,065,430 Faces: 7,722,170
2019 : 274s
2018 : 19980s
72.95 times faster
It is actually far better than 7 times!
Alembic is a geometry cache format developed by Sony Imageworks and ILM. It is a very powerful format. It can handle animated transform and deformation(include topology changing animation). It can also have custom meta data as much as you want.
Alembic has been added to 3dsMax 2016 and developed continuously since then. I’ll go over Alembic improvement of 3dsMax 2018 first and show what has been added for each previous versions.
But, before we jump on the improvement list.Allow me go over how 3dsMax implementation works first. 3dsMax Alembic works more like referencing system. Each object in Alembic file is imported as separate object which has two component, AlembicObject for geometry data and AlembicXform Controller for transform animation data. This allows users to edit anything after it is imported. You can apply any modifiers, edit geometry, change controller setup and delete any objects. Imported Alembic object is just like any other object. In a way, it almost like ObjectXref.
Other way of using alembic is treating the entire alembic object as one object like VRayProxy or Arnold Procedural object.This makes overall workflow simpler and easy to manage. But, you lose granular control. I think It is good to have both workflow inside of 3dsMax.The more choice is always better.
3dsMax 2019
Per object metadata export
3dsMax Alembic supported faceset(material ID) and per vertex arbirary channel from the beginning. But, it never had support for per object metadata. Now you can export per object meta data using Custom Attribute and some export options in Export dialog.
You can choose to export the following data from Alembic Export Option dialog.
- Layer Name
- Material Name
- Object ID
Custom Attribute export supprts most data types like float, integer, string and boolean. It even support animated values.
BUT, Please keep in mid, Alembic format specification doesn’t have amy standard on this matter. Because 3dsMax write these data into Alembic file, it doesn’t mean that other DCC will magically read this data. User must figure out how to load this data in other DCC.
To know, how 3dsMax exporter stores these information, You can export a test Alembic file with HDF5 format and use the great tool called HDFView. This tool will show the entire structure of the Alembic file. Here is a sample screen grab.
As of now, the 3dsMax importer doesn’t support these data yet. I hope we would see the support for these meta data import soon.
UV/Extra Channel and FaceSet(MaterialID) name parsing
Since 3dsMax is rely on ID number for UV and Material ID. It was very challenging to get consistent UV channel or material ID number when you import and update alembic file. At least, 3dsMax 2017 added a way to keeping uv channel and material ID number consistent between 3dsMax. Therefore, if you export from 3dsMax and import into 3dsMax, all uv channel IDs and material IDs are preserved. But, when you import an alembic from other DCC. You didn’t have any controls. It just came in the order of channel order in the Alembic file.
Now alembic importer will check the face set and extra channel name, and if the name is end with number, the number will be used as Material ID or uv channel number. For example, if you name face group name as “group_7” in Houdini, the faces will get material id 7 when it is imported. THIS IS A SMPLE YET VERY IMPORTANT UPDATE!
Also when you export/import between 3dsMax, the data about the original uv channel and material ID is explicitly stored in the Alembic file instead of relying on naming convention. This makes the ID preservation between 3dsMax even more solid and allow the export the UV channel you set in 3dsMax. For eample, if you name your uv channel 2 as “the second UV“. the exported Alembic channel will have the name, “Max Map Channel the second UV”
Option to choose what to export/Import
Now you can choose which channels to export and import. In the previous version, 3dsMax import/export everything it supported. The following image is the new import and export dialog.
Ont thing you need to know is that, there is a hidden ExtraChannels Maxscript option for both import and export. What is ExtraChennels? For export, ExtraChannel means UV channel other than 1. For import, it is arbirary per vertex data other than UV. By default, it is on for both export and import.
This new options are also very important for troubleshooting. Alembic from a different DCC can easily have problematic data. At work, I found out that most of the crash while importing Alembic file turned out to be a bad data in the Alembic file(Especially normal and extra channel). Without this options, it was very hard to troubleshoot because you have to try to a data and export again iover and over again. Usually the normal and uv data caused the problem. Now with this option, I can just exclude some data to see whats causing problem. I can also decide not to import the problematic data instead od waiting for re-export.
Of course, this also allow to get better performance by removing unnecessary data.
Velocity Channel
Velocity channel in 3dsMax is a long story. It requires its own long post. In a nutshell, 3dsMax itself never has had the concept of velocity vertex channel at all. When you don’t even have the concept, it is abvious that the imported Alembic can not handle vertex velocity.
Finally 3dsMax dev added the vertex velocity channel support in the SDK. If the Alembic file has standard velocity(or v) channel, 3dsMax import the channel as vertex velocity channel. If you have been re-routing the v channel to extra channel. You don’t need to do that anymore.
But, this doesn’t mean that all renderers will magically start to see vertgex velocity channel. Each rednerer need to support the new velocity channel to utilize this data.
Vertex Color
Now you can export and import vertex color channel(uv chennel 0)
Subsampling
You can export Alembic file with subsampleing in the previous version of 3dsmax 2019. Butm the worklow was confusing. To export subsamples. You need to set 2 things.
- Set Every Nth Frame less than 1.0. IF you set 0.5, you will get 2 subsamples per frame.
- Then, you must be in tick mode. You need to set Time Display in Time Configuration dialog either FRAMETICKS ir MM:SS:TICKS
Now you dont need to turn on tick mode anymore. Also the Every Nth Frame option has been changed to Samples per Frame.
Option for Exporting Hidden Geo
In the previous version, 3dsMax Alembic Exporter export geometry data only for unhidden object. If your object is hidden, only transfom animator was exported. THis might make sense for some. But, it also make some users scratch their head for sure.
Now there is a Maxscript property to control this. In AlembicExport interface, .Hidden property controls this hehavior.
Here is a tip. You can utilize this behavior as a way to export only transform animation. If you want to export transform animation only without any geometry data. Turn off this option and hide all object and export.
Graceful warning/exit for import/export malfunction
Sometimes bad geometry causes crash when you export/import Alembic file. 3dsMax 2019 will pop-up an explanatory Alembic Export Malfunction message box and abort when the Alembic Export plug-in encounters an unexpected issue while exporting instead of crashing.
Generally 3dsMax 2019 handles geometry import a lot more stable than the previous versions. In many cases, 3dsmax importer will try to fix the problem and give you a best possible result. If Alembic library itself errors, 3dsMax will relay the error message.
Export Selected will grab only needed hierarchy.
Since alembic is designed to keep hierarchy, 3dsMax exporter is grabbing other necessary object when you Export Selected object. The problem in the previous version was that it is grabbing too much(the entire hierarchy tree). This is changed now. 3dsMax will grab only the immediate ancestors of selected object.
Better duplicated object name handling
If you have duplicated name object while exporingAlembic file, it can cause problems. In ideal world, user should check if they have the duplicated name objects before export. But, since that’s not ganna happen most time, 3dsMax will check the duplicated name and suffix nodel handle to make all object name unique.
Respect Maxscript #noPrompt option for duplicated name object handling for import
When an Alembic file is imported, you get a duplicated warning pop-up if there is already the same name object. When you use importFIle with #noPrompt option, this dialog will not pop up as it should be.
Alembic Container Object Icon
Alembic log shape icon insteaf of dummy for AlembicContainer object.
Remember dialog setting
The export and import will remmeber the last used settings.
Extra Channel UV Data Animation Fix
In the previous version, the Extra channel(UV 2+) animation was not imported if the channel has UV data(vertex data + face indice). It is fixed. Please do not confuse this with per vertex channel data which never has been a problem.
More Maxscript Exposure for AlembicImport
.FitTimeRange : bool : Read|Write
.SetStartTime : bool : Read|Write
Performance Mode Stabilixation
The Performance Mode in AlembicContainer has been stablized a lot. This feature is probably the most underrated feature of 3dsMax considering how poerful it is. I’ll mpost about this feature someday.
3dsMax 2018
Visibility Support
Visibility track support is added including visibility animation.
.ShapeSuffixMaxscript Option for Maya
Our little precious Maya could not handle the geometry name from Alembic file properly. Therefore, 3dsMax dev had to add a solution for them. If you tuen on this option, yout geometry name will get “Shape” suffix.
3dsMax 2017
Preserving UV Channel and Material ID number
When you export and import an Alembic file between 3dsMax, the UV channel ID and Material ID number will be preserved.
Extra Channel Import Support integer, float, vector, color
3dsMax 2016 only supported color and vector.
Proper Deformation Export for Object with Spacewrap
In the previous version, 3dsMax exported the object with SpaceWarp in World coordinate. If the object is not at the root level, the object will get double transform since the deformation animation already include the animation.
Alembic Performance Mode for Any Object
Alembic Performance Mode cab be used for any 3dsMax geometry. In the previous version, only AlembicObject without any modifier was supported.
More Stable UV Loading
In the previous release, UV data loading was unstable. Sometimes UV data corrupt after user scrub time slider. User need to use Channel Info dialog to copy UV channel data and paste back to the same channel to lock the UV data right after they import thr Alembic file. This is fixed.
Full Maxscript Exposure for Alembic Export
All Alembic Export funcions are exposed to Maxscript.
Preserving Object Name
3dsMax 2016 suffix “_mesh” for geometry. Now object will be exported with unchanged name,
AlembicContainer Object as Dummy
——————————————————————————————-
OK, that’s it. I hope it is helpful for you.
3dsMax 2019 has been released.
The most noticable feature is the OSL(Open Shading Language) map. You should watch Mads video to see what it can do. Obviously this is a god send for technical minded users. It is like MCG for maps. You can make anything. Your imagination is the limit.
But, what does it brings to the artist who doesn’t/can’t/doesn’t want to code?
3dsMzx 2019 is shipped with 101 OSL maps from bitmap loading to procedural noise, color correction and utilities. Thisbrings some interesting features and workflows. Let’s see what we can do with them.
Random By Index
You can randomize any vaule type that OSL supports by index number. For example, You can randomize gain value(float) or UVW offset(vector) or diffuse color. Anything!
Object property access
Even better, OSL map allows to access various object data such as Material ID, Object ID, Wire(frame) Color, Node Handle(a unique id per object), Node(Object) name and User properties(!). If you combine these maps with Rendom By Index map, you can randomize almost every map/material paramateres per object. Here is an exmaple. All object have the same material with single bitmap texture.
Switcher
Finally the switcher map has been arrived. This map allow you choose a map among the multiple children map. You have 1-of-10 and 1-of-5. But, you can cascade them to support more than 10.
Independent UVW control
It is like Coordinate rollout is a seperate map, and you can plugin the UVW into multiple maps. Yes, now you can instance UVW across multiple maps. Also you can also randomize UV by using the above maps. Do you want to distort UV? then apply a noise map to UVW map.
Randomized Bitmap
“Randomly place (and alpha blend) a set of bitmaps on top of something else”.
Just try it. So much fun!
Shuffling channel
You can easily shuffle channels around. Find Compoments(Color) map and connect from where you want get to where you want to put.
.tx /.dpx format loading
OSL uses OIIO for image IO. Therefore, the image formats which supported by OIIO will be supported in OSL map. But, you can read .tx and .dpx directly.
Filename as a map
When you have a single file which is needed be used in multiple map. You can use Filename map and feed to the path to multiple Bitmap Lookup maps(OSL version of bitmap map).
Gamma checkbox in the map
You don’t need to use file dialog anymore for gamma settings. Gamma setting is in the paramaters rollout! It also has AutoGanna option which will set gamma value depends on the file format.
Samplerinfo
OSL gives you access to various scene data such as position/normal/uv. You can get this data in various space. You can use local object position or world normal vector as map. Do you want to render out UV as texture? Just plug UVW to diffuse color.
Math, Math, Math
You can do all kinds of math you want to do. Many math functions are exposed as maps. You don’t have to “code” for simple math operations. Do you want to have a black and white mask for your mountain? Let world position value and remap to 0-1. Simple.
Granular color correction
Of course, you can use any math maps to do whatever you want. But, 3dsMax 2019 also has 2 OSL maps you can use for color correction, Lift/Gamma/Gain and Tweak. This should cover all features of legacy Color Correction map.
Procedural map that renders exactly same across renderer
Many renderers support 3dsMax noise map. But, the result of the noise map could be different for the renderer which doesn’t use 3dsMax map api because they have own implementation of noise map. In this case, your rendered noise mapptern would not match with other portion of 3dsMax such as Displace modifier. If you use OSL procedurals, the render result would be exactly same regardless of renderers. This is HUGE. OSL allow to have a foundation of unified map workflow across renderers. Check out these renders. The left one is rendered with VRay. The right one is rendered with Arnold.
3dsMax 2019 come with new noise map with the follwing 6 types of new noise. perlin/uperlin/simplex/cell/hash/gabor
New pattern maps
It also has a few interesting new pattern maps.
Checker(3D), Candy, Mandelbrot, Revets, Digits
Unified and portable map tree
The biggest chanllenge of moving shader around between renderer is the complicated map tree. One incompatible map in the middle of shader tree will break the shader tree from that point. Even thiough there are enough matching maps. It is almost impossible to reuse shader tree and produce exactly the same result. With OSL, you can. As long as you stay in OSL, the result map tree will always be same just like procedurals.
Possibility of rendering on Linux
You already can convert mesh data to a renderer scene file format like vrscene or ass, rib file for rendering. But, the nature of 3dsMax renderer integretion always requires 3dsMax to evaulate map tree unless you only uses the renderer native maps. This is the main obstacle to render max scene on linux. Now with OSL, the renderer scene file format could include all map tree in the file and render. It opens a posibility of rendering 3dsMax scene on Linux.
This is a new era for rendering in 3dsMax. Enjoy!
In 3ds Max 2017, there are a lot of performance improvements in may area.
I think It is the fastest 3ds Max ever.
- Viewport is faster than ever in many cases. Selecting and manipulating sub-object is also a lot faster.
- UV Editor is totally rebuilt with DirectX which is a lot faster and can handle bigger mesh.
- TrackView also perform better and stable.
- Now you can use alembic performance mode for any object and have an option for force cache.
- Many unnecessary evaluation problem is fixed. For example, if object is hidden/frozen/display as box, the applied material would not be evaluated.
Here is some benchmarks numbers to show how much 3ds Max is faster than the previous versions.
2012 | 2014 | 2016 | 2017 | |
Deforming Mesh | 6.9 | 32.0 | 45.4 | 95.3 |
HiRes Transform Anim | 25.0 | 17.9 | 20.0 | 27.7 |
Static Many Object | 3.8 | 3.9 | 3.7 | 14.8 |
Production Scene | 1.0 | 3.1 | 3.2 | 5.1 |
All numbers are fps. The fps number is measured by script. It is not from viewport statistics.
Deforming Mesh
This scene has 4 point cached characters.
4objs / 142k verts / 283k Faces.
Thanks to the brand new GPU mesh builder in 2017, 2017 is 1,300% faster than 2012.
HiRes Transform Animation
This scene has an animated hires rigged rigid mesh robot.
800 obj / 9.1mil verts / 18mil faces.
Many Static Objects
I made a 10+ buildings with Building Generator script. It has more than 20,000 low-res statics objects.
20,000 obj / 2.2mil verts / 3.2mil faces
You can see 400% performance improvement
Production Scene
One of sample scene file from Blur which is included in Brandon Young’s DVD.
Four point cached hires character and baked transforms.
106 obj / 407k verts / 791k faces
You can see 500% performance improvement compare to 2012.