All right, finally posting. I’m currently physically exhausted from a long day at the Australia Zoo, but my brain is still clear enough to make out sentences. ;). I’m not exactly sure if I should post this here, make a new thread, or post it in the public discussion forum. Either way it’s a start, and I may have to come back and wrap up further.
I understand it’s a long process, and we’re only at the stage of throwing out ideas and such. That said, I’m going to pitch in as well, from my own personal point of view, thrown into the pile of ideas we already have for thought.
Thanks, Rob, for adding me to this usergroup.
I’m typing as I go, but here’s a list of what I’m going to comment on:[ul]
[li]Customisation[/li][li]User Interface[/li][li]Community Sharing System[/li][li]OO Scripting Language[/li][li]API Design[/li][li]Expandability[/li][/ul]
Customisation
Taking most softwares, each comes with its own API for programmers to expand on; some have scripting languages built in for quick, nasty tools; some has built-in features for users to create their own things.
As I’m sure everyone had agreed on earlier, modularity is essential, and probably one of the best solutions for a flexible design. Ideally, we have a shell, and a hundred modules added onto it, which makes taking things in and out easier.
However, most software today (not only 3D) lack one thing - the core is locked from the users. It’s unbelievably hard to, say, override Maya’s Split Polygon Tool. The current solution is to make another one, improving from/using the existing tool. Sure, there is API and we have all the power to do things we can - it’s still horribly difficult to some extent.
I believe a truly customisable software allows the user to:[ol]
[li]Utilise the API provided and develop their own tools[/li][li]Implement into the current pipeline and workflow[/li][li]Replace/update existing tools[/li][li]Maintain the user-friendly design[/li][/ol]
Taking the Split Polygon Tool example above, with this in mind, I should be able to take the API, look at the Split Polygon Tool function, override a few things, plug it in, and replace said tool in the package.
I should be able to use the exact same hotkey I’m used to, click on the exact same menu I know where, and use the exact same way I’m comfortable working but with the new tool. Nothing else changed for the front-end, compared to what is changed in the back-end. If I wanted to expose another option in the Tool Option box, I can too.
This is allowed by having a true Object-Oriented Design 100% throughout the program and development. While we can always add another menu or button, it’s important if we can just get rid of the old one without trouble. If done right, the scripting language (say Python) should be able to accomplish this without having going too deep into the API.
Keep in mind that this is by far, in my opinion, the second most important thing, and is kept throughout this post.
User Interface
This one is hard. People who are comfortable with Starcraft controls may not like how Command & Conquer works. People who plays a real guitar has an amazing trouble picking up Guitar Hero right away with minimal practice. People used to Maya may not like to be forced to use Max the first day.
To pick on somebody, the fact that Microsoft removed all the menus from the top in Internet Explorer and Media Player ticks me. Who the hell came up with that idea, and why did they actually agree and go with it? Wow. I remember the first day I upgraded to WMP 9 and can’t find a way to change my playback until I stumbled on right-clicking on the panel. I also remember when I closed down WMP 9 the music wouldn’t stop, and I had to open it up again, stop the playback, and then close down the program. Very annoying.
On UI I’m both a traditionalist and a believer of innovation. The key is to find a balance between the two. Well, that’s vague.
To break it down, there are two things: the old, and the new.
We’re all used to docked panels, tool boxes, dropdown menus, buttons on the shelves, etc. Things like these are great for people to just jump on, and start right away. I like to take this and add the philosophy of Web Design. In a perfect world, people shouldn’t need to think in order to navigate a website. It needs to flow smoothly, appealing to reading, and allows the user to get where they’re most interested to go in the least amount of effort.
That said, even if we reused the basic windows UI and design it right, we have an user-friendly software.
And here comes the new. I’m sure at one point or another we’ll have a good idea that may boost the program to another level. ICE in XSI for example, was launched only a few months ago and has received a great amount of positive comments. People loved it for how easy it was to use (the old) and the opportunity it opened up. (the new, which was the API exposed through Nodes) They reused what they have, and revamped it into a new box.
UI design isn’t about fancy. It’s not about having cool-looking buttons and windows, and a skin that no other software has. It’s about how fast people can get to know how to use this tool, how fast they can work within the tools provided, and if they needed new tools, we have room for them too. (I’ll talk more about this in the Expandability section.)
The obvious is already known: User-definable hotkeys, shortcuts, good locations for buttons, logical menu structure, etc.
The not-so-obvious is this: What don’t we need?
There are a lot of redundancy in many today’s software, or pointless updates (New look for Dreamweaver CS3! Woohoo! But we didn’t tell you we stopped developing it since version 8 or so!), and worse - old tools never improved (Wow, Mirror geometry in Maya, was it ever fixed?)
So, I’d like to repeat this point again before I move on: What don’t we need in our UI? That’s the question. We already know what we need.
Community Sharing System
This one has been discussed in the public thread, so I’ll not rant for too long. If anything, I like how nVidia’s FX Composer is doing it. They have a tab for browser that links to the online shader database. Click and drag downloads the shader and plugs it right away into the selected model, or available for use. I haven’t seen any other software that has an easier implementation.
I’d like to have an option for the developers to “tag” their tools. Like how Wordpress is doing it, or Digg. Keywords. Related tools.
That’s right. Wouldn’t it be nice if one of the menus in the option box links directly to any published tools with a tag of the name of the tool? It also makes easier for searching, as well as categorisation.
OO Scripting Language
First of all:
- What languages are we supporting?
- Are we making up another language of our own?
- How powerful will this language be compared to C++/C#?
- How efficient will it work?
- How fast can the developer make that tool?
All right. So, I like the idea of UnrealScript. It’s not the most beautiful language in the world, but its expandability is amazing. It codes like C++ without all the excessive worries, and it works like a charm.
Wouldn’t it be nice if we have a scripting language (quick type-up dirty tool) that uses the fundamental design of OO? It will speed up tools development by a mile. And I’m a fan of reusability as well.
The ideal situation is that 100% of the API is open for the scripting languages to access.
API Design
To recursive is divine. The simpler the better. The lighter the better. Really. That’s all I’m saying.
Expandability
The cool thing is we’re already going for modules, parts, plugins, addons, macros, whatever you like to call it. These things are awesome tools we can add to what we already have.
But one thing we need to keep in mind is that our shell is very important. The basic mould, the fundamental container that should abstract everything and absorb new things easily. I’m not saying we should design the core to fit what we will have in 10 years - that won’t happen. We can’t know what is going to happen in 10 years. So, what we can do, is to keep our things clean (if it costs the program a 10% efficiency to have a clean code and full comment and great logic, the hell I care; we’re not running 60fps games) and make everything interchangeable.
We need to constantly look out for what other software is doing. True, we can steal nice tools and nifty options, but that’s not the main thing we need to look for. What’s important is if we can make our program very flexible for adding new features.
Why? By the time we noticed that we’re behind on some tools, maybe our community already got one set up roughly and already featured on our database for others to use!
That’s important. The most.
All right. That is a lot of ranting, but I hope I got my ideas through. More to come if I can get feedbacks on these.
I look forward to that design you talked about, Rob, and good night everyone. Thanks for reading. :]