script

Infocenter WHAT?? by David Mackenzie

Infocenter

No Infocenter!  

I hate the infocenter in max. I also hate the big "M" button they added when they removed the file menu (this file menu can at least be easily add back). I can understand Autodesk changing/adding these things as they decrease the learning curve for new users which is great as the more accessible Max is to new  users the better.

But none the less, people like myself that have been beating max in to doing what we want for many years no might not always appreciate these small "enhancements". If it where up to me I imagine max would still look exactly the same as version 2009 before they added all UI tweaks.  So it was with much excitement when a collegue of mine at Ourvision flicked me a link to a script that removed it. As soon as I looked at the 4 or so lines of codes I realised this is something I should had have thought of a long time ago.

None the less if you like to remove the info center check out the script below:

 Close Infocenter

If you would also like to remove the buttons that are to the right of the big "M" button you can use this version below:

( controlshwnds=windows.getChildrenHWND #max; InfoCenter=for c in controlshwnds where c[5]=="InfoCenterHwndSource" collect c; QATWind=for c in controlshwnds where c[5]=="QATHwndSource" collect c; try(UIAccessor.CloseDialog InfoCenter[1][1])catch(); try(UIAccessor.CloseDialog QATWind[1][1])catch(); )

 

No Buttons!

Both of these scripts should be placed in your scripts/startup directory. I have not found away to turn off the big "M" yet, if anyone knows how to I would be very interested in hearing about it.

Cheers,

Dave

V-Ray Simple Set GI Paths by David Mackenzie

set_gi_paths_feature

Continuing my theme of releasing  simple and useful scripts, I thought I would release this simple tool for quickly setting both Irradiance Map and Light Cache auto save and from file paths. When you are submitting jobs to be rendered this is one of those tedious things that you need to do which lends it self to human error as it is very easy to point a path to the wrong location (we have all done it)... It has a very simple interface, basically you set the path where you would like the GI passes to be saved, type in a name and hit the button. This will set the paths for light cache and Irradiance maps. I have also added some quick options for swapping the modes of GI passes.

The screen shot below should you give you the gist of what is going on.

V-Ray Set GI Paths
V-Ray Set GI Paths

You can download the script here.

This tool was actually extracted from our (Our Vision) custom Network Rendering Submitter I  wrote which basiclly did all of this automatically. It would submit a GI only job and then send the final rendering as a dependant job. This little tool sped up our workflow a great deal.  You can check it out below.

Deadline Quick Submit
Deadline Quick Submit

Oh and for those who have been asking it only works with Deadline from Thinkbox Software. I am planning an entire post related to this tool including some tips for when working with the Deadline scripts.

Cheers,

Dave

Meet Larry, the 3dsmax layer manager. by David Mackenzie

layers_feature

Why build a new layer manager? 3d Studio Max has had a layer manager for a long, long time. It works very well for what it is, however, as scenes over the years have grown large and complex the layer manager has not evolved to over come this. Scenes these days have more levels of detail and with that detail has come a need for better scene management. When deciding to create a new layer manager there were a couple of things that I wanted to do:

  • Keep the existing layer manager, this seems strange but I like solutions to problems that build in redundancy. If my new layer manager decided to stop working in the middle of production I wanted to be able to revert back to the old one. This meant anything new I created would either need to be built on top of or use the existing layer manager as its core.
  • The layer manager needed to be more granular. Everyone has wanted layer manager that has had sub-layers. I wanted to be able to have sub-layers of any depth.
  • Sub-Layers would inherit the properties of there parents.
  • Make it easy to build new tools and features into the new layer manager. If I was going to build a layer manager I wanted to be able to extend it easily.
  • Standardise our layers and workflow. I wanted to create a workflow were our files and how we worked in them was standardised so that anyone in the studio could open someones file and be able to hit the ground running.
With those goals in mind I got to work. I chose to write the layer manager with Max Script and .Net instead of hitting the SDK. The upside to working with Max Script and .Net is that I could write the tools very fast and after 2 days I had the first version out the door for the artists to try. Since then it has grown and been updated as it has needed to be. There were originally a flurry of bug fixes that were required but after that we set about creating new features as production called for it. It has been about a year since I first wrote it and now it is a solid production tool after cutting its teeth on small jobs and then proving itself on larger jobs it has become an integral part of our workflow.

Custom Features of the layer manager

There are many custom features I have written into the layer manager some of them are below:

  • Isolate Layer. Similar to Max's isolate feature when you right click on a layer and select isolate all other layers are hidden and the selected layer is turned on. The next time you right click on the layer you have the option to de-isolate it. This has proved very handy when yo need to do some quick modeling fixes in large scenes.
  • Rename Layers and Children. I wanted an easy way to rename layers and there children right in the dialog. This proved a little trickier than I first thought it would, however, you can now easily rename layers just by double clicking on them and typing.
  • Node View. An external view for handling nodes.
  • Export Layer. Saves the selected tree of layers as an X-Ref.
  • Layer Sets. For saving the layer states of layers. For instance you can save a state for a camera with all of the relevant layers turned on. This is great for large scenes that have multiple cameras.

A new Layer Manager

Below are some screen shots of the new layer manager. As you can see the interface is very simple and faithful to the original layer manager, this lets new artists in the studio get up to speed with the tool right away.

 

LayerManager v2.0

Standard Layer Manager

Most recently we used the tool on the Renovators with great success. Using it in conjunction with a few other tools we were able to achieve the impossible delivering animation for 6 houses in 6 days. You can see some of the work here.

 

What Next?

Moving forward there are a couple of things that I am currently working:

  • Increased Performance. I want to increase the performance of the tool so that I can add support of scene objects in the tree view. So far I have re-written the control and I am pleased to say the performance is much faster. Not to say the current version is slow but there is a difference between adding 200 or so layers and 5000 objects.
  • Tighter integration with X-Refs and containers. I want to make splitting up max files to be completely seamless and transparent. This will be a huge benefit on large projects with more than one artist working on it. Hopefully the layer manager will become a bug for scene management.
  • Create an connection between render passes and layers. It would be great to expand the layer sets functionality to be able to create different render passes.
Overall I am hoping the layer manager to grown into more of a scene manager which will allow artists to manage there scenes as quickly as possible all in one place.
A silver lining?
The biggest upside of writing this tool has been the change in artist behavior. Our scenes are now much more standardised enabling anyone to pick up a project and continue to work on it. Changing a team of artist habits is difficult at best some times it takes a good tool to serve as the catalyst for change. I happy to say that new layer manager has succeeded in this respect.
Cheers,
Dave

 

GML Importer Version 2 by David Mackenzie

gml_feature

I will assume most of you know what GML is, if not check out this post I made some time ago here. In the months that have gone passed we have developed three different version of the GML importer. The first version that was featured in a video here, was a basic hack that we used to get a job done. The second version was an expansion of the first while it was a little better it lacked a few important features:

  1. Easily update-able framework.
  2. An "API" or a library of functions to take advantage of in other scripts or tools.
  3. A single unified User Interface that exposes all of the data in the GML File.

So after taking a moment and addressing these issues we created what we believe to be a great tool. It includes a library of code that other 3ds Max TDs and scripters can take advantage of. We choose to focus more on the data and library that goes with it. In it's current form the script will only create a spline shape from the GML file. I will be updating it to include a feature to create proper geometry. We currently have it working by creating a sequence of points and using Delaunay Triangulation to create the surface.

The User Interface

The interface at first glance looks quite complicated, however, it is actually very simple. We wanted to expose everything to the artists so there are quite a lot of UI controls, most of which can easily be tucked away for later use. I was going to document what all of the UI controls do below but since each one has a question mark I'll let you work it out.

GML Importer Version 2
GML Importer Version 2

The Library

We believe simplicity is the ultimate sophistication so we tried to keep everything as simple as possible. Below is a brief run down of the maxscript structs that make up our GML importer.

  • gml_point GML point is a simple struct the stores x, y, z along with t (time) values. If it was not for the t I would had have just used a point3.
  • gml_sketch This struct represents a whole sketch. It is made up of strokes (s_strokes). Each stroke is an array of gml_point()
  • gml_custom_props This struct just stores some custom data that is not from the gml file.
  • gml_header Stores all the information in the header of the GML file. Mainly stores name, username, version and keyword information. This data is reflected in the GUI in the information rollout.
  • gml_enviro This struct holds all of the environment data in the GML file. This includes the canvas size, up vectors and related data. This information is reflected in the GUI in the Environment rollout.
  • gml_document is the guts of everything, its instantiates every one of the above structs. Through this struct you can interact with all facets of a GML file. The struct also provides three methods to create objects and shapes from the data, these are mainly included as examples of what you could do. These functions are  implemented in the GUI. We are currently working on a new method to create geometry that will be included in new updates.

Looking through the gml_data.ms file will give you a good understanding on what is going on. There is a pretty detailed example in the comments showing you how to create gml_documet to sum up the simplicity there is a snippet below:

a = gml_document() a.file = "C:\\18763.gml" a.init() a.createShape()

You can download the GML importer below.

For everyone that has posted and emailed me asking where is the importer? Well it is here now, thank you for your support and let me know how you go. If you create something cool then please send it in. In the spirit of community if you are making this better then lets make it better for everyone! Send in any changes or updates you find. Feel free to posts bugs in the comments below.

Cheers,

Dave

Studio Tools - Rapid Tool Development by David Mackenzie

Studio_Tools

One of the best features of maxscript is that you can create tools very quickly and intuitively. Often the simplest tools are the ones that can lead to massive time savings. This was the case when my good friend Warwick Hays from Monkey3Media asked for my assistance in creating a small tool. The tool in question was Studio Tools which would let artists quickly load up pre-configured studio rendering scenes. They could also choose to load relevant render settings. From concept to completion we had a production ready tool in less than 3 hours. It just goes to show that when you need a custom maxscript to speed up your workflow it need not cost an arm and a leg.

From our initial conversations on the phone Warwick quickly mocked up the user interface that he wanted. From there I created a prototype that was functioning correctly. Warwick then supplied some custom graphics for use in the tool. Shortly after, we rolled out the finished version graphics and all. The result ended up being a very usable, useful and time saving tool. It is amazing the difference it makes replacing 5-10 mouse clicks with a single click. As artists respond to things visually naturally, the icons go along way to simplifying the thought process.

3DS Max Hot Box by David Mackenzie

3ds_hotbox

There are many things I like and dislike about many software packages, one thing I do like is Maya's hot box. Over the years I have often thought it would be great to have a hot box style interface for max. Well lately two things have happened. First I have had some spare time up my sleeve which is very rare. Secondly I got inspired by a video on Script Spot (check it out here) that I thought would solve my hot box lust. As it turned out the project sounds like it is a quite a while off. So I got to work on my own version. At this stage I have just replicated the functionality that was in the video but I have also built an easily expandable framework. The GUI is created entirely on fly dynamically, I am currently adding support for fly out menus. Being that it is all dynamic it will be easy to customise the layouts and functionality in the future. I am unsure whether or not to save the configurations in XML or just write maxscript to a file.

HotBox
HotBox

I would love to here what you all think and if you have any ideas on how this type of interface can be utilised in max then please let me know. I have been using it in its current form and have found it quite useful.

You can download the script here.

You can download the source here.

Please remember this is beta software. Do not be surprised if there are any bugs. Please let me know any issues you do run into.

Why is the script encrypted? Well first off I will be keeping the script free. In time I will make the source available when development has progressed.

Update:

  • 07/09/2010 - New version available it fixes an issue that Max 2011. Users have reported a script error which is raised when trying to run it. This has now been fixed.
  • 31/08/2010 - I have optimised the script and gained more performance. It now shows and hides very quickly without any black ghosting taking place.
  • 31/08/2010 - User reported seeing the interface in black before it moved to the cursor. This has now been fixed. Users may still see some black the first time the hotbox is opened, after that it should be fine. I have also optimised the script so it should show faster.
  • 30/08/2010 - Added a new version label to the UI. Fixed a couple of new bugs.
  • 30/08/2010 - The download is now version 0.04. I have fixed a bug where the UI controls would become unresponsive. I also added some buttons to the center of UI for switching view.
Maya Style HotBox for 3dsmax
Maya Style HotBox for 3dsmax

Cheers,

Dave

Logo Tools - Convert Bitmaps to MXS by David Mackenzie

Maxscript_Image
Logo Tools v1.00
Logo Tools v1.00

Here is a script designed for other script writers. Anyone who has spent some time creating custom images for their scripts and tools know how much of a pain it can be wrapping them for distribution. Logo Tools is designed to make that a little bit easier. It allows you to pick an image and then convert it to a maxscript array so you can embed your bitmap into your script. All of the functions and code required to convert your maxscript array back into a bitmap are included.

This is a very easy, neat and tidy way to package your scripts up. I normally include the code in a install script that writes all of the bitmaps to disk so they can be used again later. If anything ever happens to those images your script has the code to recreate them on the fly.

Logo Tools is very easy to use, just follow the steps below:

  1. Pick an image file that you would like to convert. Do this by clicking the "+" button.
  2. Now pick the file to output again by clicking the "+" button. This file will contain the array representing the bitmap and a code required to convert the array back to a bitmap.
  3. You can now hit the "Make It So" button to get the ball rolling. The progress bars will continue to update until complete.
  4. You can now open the outputted script file which will have the array and a function to create the bitmap already in it.

If you run into any trouble or have any ideas on how I could improve this script please let me know. Feel free to leave a comment below.

To download Logo Tools just click here.

Remember the bigger the image you select the longer it will take and the larger the resulting script file will be.  This script is really designed to handle small logos and button icons that would be added to custom tools. Running the script on a large image will take a long time and the script file will be huge!

I have been asked for an example on how to integrate the images into a GUI control. Below you can download the source for my script (I think some people thing I did not write it??) along with a small example showing how to add an image to a button. I should also mention that the max script help file has excellent resources for working with images and UI controls.

To download Logo Tools source and demo click the link below.

{filelink=5}

Audi S5 Burnout by David Mackenzie

S5_Burnout

Audi S5 Burnout Image This a scene I put together a year or so ago to show case my new car rig. It is a very simple animation with only a few key frames used to generate the animation, everything else is handled by the rig. You can see the animation in the below. Keen observers will notice that the one of the front wheels does intersect the body work, this however was my fault for not setting the limits correctly.

I have also included a quick compositing brake down after the animation. I am happy to say that as soon as we get some time to prepare the rig for distribution we will make it available to everyone.

[youtube]0j8CniP4tgk[/youtube]

[youtube]EkjlaAwi5x8[/youtube]

Hope you guys liked it.

Cheers,

Dave

Wire Colour Tools by David Mackenzie

WireColourTools_Thumb

Wire Colour Tools is a simple script for setting random wire colours to all of the objects in the scene. Anyone who does allot of post work either in PS or a compositing package should find this script useful. Being able to adjust any element or of your project in post by the object enables you to get the most of your image, rendering Wire Colour passes is very simple and inexpensive from render time point of view.

Wire Colour Tools
Wire Colour Tools

You can download it here.

Wire Colour Tools has three way in which you can use it:

  • Colour By Layer. This sets a random wire colour all of the objects on each layer.
  • Colour By Material. Perhaps the most useful of the three options this one will set all objects wire colour based on the material that is applied to it.
  • Random Colour. This is pretty self explanatory it allows you to set a random wire colour to every object in the scene.

There is also the option to run these only on selected objects.

To install just copy "wireColourTools.ms" to you 3dsmax/Scripts directory and then run "wireColourTools_Macro.mcr". You will then be able to find the script in the Customize User Interface options under the category "Daves Tools".

I hope you find Wire Colour Tools useful. Again if you are doing allot photoshop work on your images I imagine this tool will save you some time.  If you have any suggestions for new features please let me know and I will do my best to get them in there. If you do come across a bug please let me know.

Cheers,

Dave

V-Ray Material Shortcuts by David Mackenzie

Vray Material Shortcuts

These short cuts are really collection of very simple Macro scripts. Like my Turn Viewport Maps On/Off this one has had some serious staying power with artists to date it has to be one of my most used scripts. All of the macros are designed to manipulate V-Ray materials globally throughout the scene, very quickly and efficiently. Each macro effects every V-Ray material in the scene. They are very handy in a number of situations, for example when you get a file from a junior that has the glossy sub divs on every material sky high.

Vray Material Short Cuts Screen Cap
Vray Material Short Cuts Screen Cap

You can download it here.

To install just run the script and all of the macros will be available under the category "Daves Tools" where you can choose to add all or some of them to a menu. I suggest you create a new menu and add them all to it. At the request of my good friend Warwick Hays from Monkey3Media I am currently in the process of creating a GUI version as well that will give artists a lot more control. If you have any suggestions for improvement or there is anything else you would like automated in V-Ray please let me know  I am always looking to expand upon and improve my scripts.

Cheers,

Dave