3D Software for the Next Generation, Part I

Heya, ex-bioware here. So does that make me the .5 in the Bioware-Volition face off? :wink:

Anyways, I believe Iā€™m in the minority here in saying that I actually like 3dsmax and Maxscript. From a purely systems point of view - I like XSI better, but practically speaking MXS is easily more flexible for me. While Iā€™m an avid C#'er too, the typelessness of MXS does mean thereā€™s less glue code to do callbacks, pipeline branching, etc. That relaxation of dependencies also means I can swap components with minimal fuss. Doing the same in C# would require a boatload of interfaces.

But it is a double edge sword. I concur with JS that the lack of a debugger greatly hampers things, which is why at Bioware, we had a bunch of MXS code conventions to smooth over the rough patches. The conventions (especially loose hungarian) really do help in eeking out what was intended versus what you see.

As for the future of 3d software packagesā€¦

  1. How about something that can actually run from command line in a clean form? Better yet, build the core (file loaders, etc), as a library that we can link to. That way, if we want to incorporate MAX21 into our pipeline, we can automate a good deal of it by creating custom headless MAX21 programs.

  2. Iā€™d like to see XSIā€™s Custom Display Host system become more prevalent. I did like the ability to customize viewport display in 3dsmax, but with the current set of engines, we need to bring more ā€˜crapā€™ into the display logic. The CDH would be a better alternative nowadays.

  3. Iā€™d still like to see a scripting language that isnā€™t .NET though. Or at least make it JScript.NET. C# has way too much baggage to be an effective scripting language.

  4. Iā€™d like to see the companies DROP support for grandfathered features. This is definately a double edge sword, and has probably kept packages like XSI from gaining more ground. That said, there are ways to minimize the impact of said changes (see Drupal4/5/6/7 transitions).

  5. Iā€™d like to see a more open community of modules. See Drupal again. The quality of the modules is hit-or-miss, but whatā€™s important is that the Core (as Yunus puts it) is maintained to a much higher standard. The Drupal project is a pretty good example in how a good framework is structured, in that it deals with dependencies which are allowed in a controlled fashion. Modules that become vital and well stabilized sometimes get brought into the Core, but more likely theyā€™ll just get promoted to a higher priority level when the next version ships. Everyone else is left to upgrade as they need.

Ted

One of the things that Iā€™ve really enjoyed about the development of Silo is that they not only add features, but are not afraid to remove or combine features. Case in point woudl be the Cut Tool, which combined Cut and Slice and so behaves differently whether you click on an edge (cut), or across an object (slice).

Iā€™d like to see apps shipping with a fully customisable XML based drag and drop UI. Iā€™d like to be able to switch between simple and full UI at a keystroke.

Iā€™d like to see a scripting language that is not cobbled together as the software is built - Maxscript feels so much like this and itā€™s very infuriating. Iā€™d like to see proper feedback in the scripting language when you perform operations in the app - the maxscript listener seems to have selective hearing. Copying and pasting from the listener wonā€™t always work - why on earth should the syntax be different?

Iā€™d like to be able to embed my scripts and functions into the UI, and Iā€™d like to be able to assign hotkeys to not only full scripts, but to each button on the UI of a script (the most recently ran script having focus).

ā€¦and Iā€™d like to have windows within a session, so rather than having two or three copies of Max open, itā€™d behave like docs in Photoshop where I can copy and paste, drag and drop between them.

>3. Iā€™d still like to see a scripting language that isnā€™t .NET though. Or at least make it >JScript.NET. C# has way too much baggage to be an effective scripting language.
Hey Ted,

That is a very interesting comment about too much baggage for scripting. Iā€™m curious whether your definition of baggage is the same as mine. I recently took a break from my Python scripting to port over some scripts to C# that I need a bit more speed and while at first I marveled at how much less baggage there was compared to c++, I quickly got tired of all the extra lines of code I had write. Generally when Iā€™m scripting/prototyping, I want to iterate as quickly as possible. Is this the baggage that you think takes away from its effectiveness for scripting?

Harvey

BTW, Ted was my C++ sensei

Yes. I also use silo from time to time and love it. I really wish more programs wouldnā€™t be afraid that their users canā€™t adapt to changes.

Iā€™ve been using Modo latelyā€¦ If youā€™re interested in an extremely customizable program, you might want to check it outā€¦ If you decide to, most people (including myself) hate the default camera rotation (it rolls, instead of just pitch and yaw). Figuring out how to turn it off isnā€™t as well documented as it should be imoā€¦ To disable it do: (from the menus) System > Preferences > Display > Open GL > Uncheck ā€œTrackball Rotationā€

ā€¦ Yeah seriouslyā€¦ check out modoā€¦ dig into itā€¦ you can customize everything. Button/keyboard actions reference the actual command.

As much as I love the program and the direction Luxology is taking itā€¦ itā€™s also important you know the downfalls:
[ul]
[li]No real animation system yetā€¦
[/li][li]They have hard edges, but only for subdivided surfaces. which is justā€¦ weirdā€¦
[/li][li]Sculpting is buggyā€¦ creates open edges along uv seams. Can be used for details, but probably best to stick with zbrush/mudbox/silo for the meat of the sculpting.
[/li][/ul]

Right now It seems like it would be good for environment artā€¦ especially with Seneca Menardā€™s (id software) UV scripts. But once they get past the above issues I could see it being extremely powerful.

Some .NET languages are pretty relaxed IMO, which would make them more suitable to use as a scripting language with the added benefit of still being able to use the language you are comfortable with. Like someone might have done some Lisp programming before and now could extend the program without much problem.

How about LOLCode for starters? It is a .NET compatible language too.

Cheers,
Light

I learned to use MELScript before MAXScript, and now Iā€™m adjusting to working under Maxā€™s hood.

My Godā€¦what a mess.

There is just a lack of consistency at every level of MAXscript, and, nothing is intuitive. I have to say, I had my frustrations with Maya too. If I had to ask for something from the ā€˜ultimateā€™ solution, I would just ask for 2 things.

-A consistent paradigm. Is it too much to ask for Autodesk to be consistent with their implementations? Iā€™d echo what Rick said about the listener but he said it perfectly. Issues like that piss me off. I dont want to relearn a new paradigm each time uncover a different part of Max

-fix broken commands, donā€™t patch them with new commands that do what the broken one was supposed to do in the first place. Both packages are guilty of this.

Simpleā€¦isnā€™t it :slight_smile:

-R

Volition only has eleven TAs signed up here? Weā€™re missing a few. Iā€™ll have to work on that.

Iā€™ve been having an email discussion with Ben, Steve, Ross, Chris E., etcā€¦ about TA roundtables and panels for GDC next year. I just sent out an idea that we should be making a concerted effort to get the DCC app devs to attend our presentations and talks. I donā€™t think the DCC app devs realize the depth and breadth of the tools we are making with their built in scripting languages. ADSKā€™s inability to provide a decent IDE for MXS, and to leave the debugger languishing in an unusable state for 4+ releases shows that they still think MXS is that language artists use to automate repetitive tasks. Until the devs understand what we do and the complexity of what we are making they wonā€™t know that we need to have these languages and dev environments improved.

I would like ADSK to either completely expose the interfaces to MXS so that a third party could build a proper IDE with forms layout, properly integrated debugging, source control, and a profiler (an idea Light and I have discussed before) or to integrate Python so that we could make use of any of the numerous Python IDEs/debuggers/profilers that are available. MXS is decent (not great), Boboā€™s never ending work on the docs over the past 5-6 releases has been a godsend, but the whole thing is just brought down by the 1/2 finished debugger and the extremely basic editor.

Hey Jeff,

I agree completely. I think VS is a very mature IDE. Take a look at what some other folks did with Visual Studio shell:

Ruby

IronPython

Cheers,
Light

[QUOTE=oomer;1570]>
That is a very interesting comment about too much baggage for scripting. Iā€™m curious whether your definition of baggage is the same as mine. I recently took a break from my Python scripting to port over some scripts to C# that I need a bit more speed and while at first I marveled at how much less baggage there was compared to c++, I quickly got tired of all the extra lines of code I had write. Generally when Iā€™m scripting/prototyping, I want to iterate as quickly as possible. Is this the baggage that you think takes away from its effectiveness for scripting?
[/QUOTE]

Yup, thatā€™s the gist of it. Thereā€™s that whole scoping issue which makes you have to wrap all your variables into something. While I donā€™t like globals or session variables, I do find them quite handy from a scripting command line. Take for instance the operation in pseudo-script


var a = $scene.$body01.$legL.rotation;

In C# would at least haveā€¦

[highlight=c#]
class MyScript
{
public Execute( )
{
Rotation3 a = Scene.GetObject(ā€œbody01ā€).GetObject(ā€œlegLā€).Rotation;
ā€¦
}
}



Interactively, since the pseudo-scripts tend to behave more like 'sessions' in a listener window, I can add subsequent commands as I think of them.  In C#, I pretty much have to recompile the entire Execute function every time I add a new line.  This gets pretty tiresome especially when I just want to inspect something.

Then there's also the whole issue of types.


```pseudo

var a = #( "my text", 20, 150 );
doSomething( a );
doSomething( #( "my other text", 50, 350 ) );

Versus the C# way of

[highlight=c#]
ArrayList a = new ArrayList();
a.Add( ā€œmy textā€ );
a.Add( 20 );
a.Add( 150 );
doSomething( a );

ArrayList b = new ArrayList();
b.Add( ā€œmy textā€ );
b.Add( 50 );
b.Add( 350 );
doSomething( b );



Don't get me wrong though.  I still love C# and would like to see it used more in plugin development.  However, a scripting language should be fast and easy to use with the minimum amount of overhead fuss.  If this means global session variables and no type safety, then so be it.

Ted

Nice demonstration of contrast between these languages there, Ted. I too agree that the scripting language should do pretty much everything for you, so you are really left out to simply define your idea, at the cost of some performance.

Personally I love Maxscript for this. Yes, itā€™s harder to develop without the proper dev tools, but if you really know what you are doing, then itā€™s really hard to make any mistakes IMO. The expressiveness of the language makes it very intuitive I think, thanks to its inspiration from Lisp.

Functional programming is perfect for this case I think. Each of the se requires a different mindset to work, but thatā€™s expected if you want to code to perfection, in different mediums exclusively.

Light