(De-)Forming Models with SharpConstruct
Creating 3D models usually requires abstract imagination; one needs to construct and merge geometric figures together. Claus Schwarm looks at SharpConstruct which uses a different, more visual approach to 3D modelling.
The motion picture industry uses quite a lot of it: 3D modelling skills. Due to current trends in the industry – many fantasy, science fiction, and animation related movies have been released in the last 10 or 15 years – studios in Hollywood and elsewhere continue to rely on complex 3D models.
It’s not just the movie industry. Visualization is a hot topic in many industries with the need to sell ideas, plans, and projects. After all, a picture is worth a thousand words.
Creating 3D models is a complex art; even simple 3D models may require rather detailed knowledge and hours of study, training and an in-depth knowledge of the particular tool that you’re using. SharpConstruct, however, is different.
Just like a child may use clay to model simple figures, SharpConstruct lets you use simple tools to form complex figures out of basic geometric figures. It’s as simple as a paint program for children.
You may now think that the results will probably look like a child made it. This may be true, to some extent. As with any other tool, the quality of the results depend on practice. No software will ever be able to make you create a Mona Lisa just after a few hours of using it.
However, you can expect to have fun while learning to do so.
SharpConstruct is maintained and developed by Nicholas Bishop, a seventeen year old developer from South Carolina who’s just finishing up his last year of high school. He’s supported by Timon Christl who wants SharpConstruct to be ported to the Microsoft Windows platform.
Bishop started to think about SharpConstruct in May 2004, just a year after switching to GNU/Linux. “I had been using the 3D modeler ZBrush for several years, and it was the one program that I really missed in switching away from Windows. I needed an alternative to ZBrush, one that would be free and could run on a wider set of operating systems. When I didn’t find any, I decided to give it a try myself.”
The project registered at Sourceforge in June 2004.
In the beginning, SharpConstruct used FLTK for its interface, but dropped it to use a own custom-coded, OpenGL-based solution. During last year, it was decided to switch, again. According to Bishop, the reason was the maintaince burden: “The custom OpenGL toolkit worked well, but maintaining it was taking too much of my coding time, so I decided to switch back to an external library. I looked at both GTK and QT, but neither API really struck me as being better suited to SharpConstruct’s needs than the other.”
In the end, the choice was made to use GTKmm, the C++ binding from GNOME’s binding package. Several other projects such as Inkscape, K-3D or Synfig are also using GTKmm. However, the main reason was basically GNOME’s look according to Bishop: “What convinced me was installing the GNOME 2.12 desktop. I was very impressed with how the GTK look and feel had progressed since I’d last upgraded.”
He started porting SharpConstruct to GTKmm in November 2005. Just a month later, the new code hit SharpConstruct’s CVS at the beginning of December, resulting in the first release using GTKmm five weeks later. “Overall, I found the porting process to be relatively easy, largely thanks to the good documentation available for the GTK+ and GTKmm libraries,” says Bishop.
So far, reactions from SharpConstruct’s user base have been positive, according to comments in SharpConstruct’s forum. Many hope for a faster Windows port due to the switch. However, GNOME users will probably favor the additional ease of use that SharpConstruct gained by using a familiar looking interface.
You’ll need to start SharpConstruct from the command line as there is no menu entry created if you install from the source code. On the other hand, you’ll find its icon in your workspace switcher when running SharpConstruct, which is a nice detail. Another nice detail can be found when the application is restarted for the first time: It remembers its window size (althought it forgets its position).
SharpConstruct presents a clean, and easy looking user interface. This is an interesting innovation for a 3D modeling application. Besides the usual menu- and toolbar on the top and the status bar on the bottom, its main area is split into a left-side control panel and the main view on the right.
The menubar presents no major surprise; it’s a good mix of known and unknown entries. An application without new functionality is usually rather boring to use and unknown entries everywhere usually creates an unnecessary impresssion of complexity. Also, all uncommon entries on the toolbar have tooltips showing the care of development that SharpConstruct recieves. Beginners should activate the “Wireframe” option at the start. That will make it easier to detect some of the finer details of SharpConstruct.
SharpConstruct’s main view presents a sphere whenever you start it. To change the basic model you’ll need to start a new file as there seems to be no other way. The “New file” dialog will let you pick from a sphere, a plane, or a cube. Additionally, you can determine the amount of polygons for the model by editing the initial numbers.
It’s easy to understand the way SharpConstruct works: Just position your “cursor” – the red circle – on the sphere, keep your left mouse button clicked, and then move your mouse. You’ll note the sphere changes. Congratulations! You just made you first abstract art! It will probably look like a sphere with a bump.
If you’re not quite sure what happened, right-click with your mouse and move it to rotate the sphere until you have a better angle. You should see a deformation. If you’d like to get a closer look at the change, you can zoom into the view with the scroll wheel of your mouse (assuming you have a scroll wheel). Mouse movements with the middle buttom held will finally move the center of the model. If you have ever worked with an application like K-3D, navigating is a snap!
SharpConstruct is much more powerful; it is capable of much more than just turning bumps into spheres. The main tool, of course, is the red circle which is called a brush. You have four types of brushes at your disposal: a Draw Brush, a Grab Brush, a Pinch Brush, and a Smooth Brush. You have already used the first brush. For each type of brush, you can determine the kind of stroke, symmetry, and shape of the brush. This is all done on the first tab of the left-hand panel.
The two other tabs on the panel present Deformations and Settings. It’s advisable to change the Undo Steps in the Settings tab to a higher value when you first start. It defaults to a setting of three.
Beginners, however, will probably start with just two brushes: the one for drawing and the other one for smoothing.
You can also configure the characteristics of your stroke. The first two buttons determine the interaction between the model and the brush; activating Layer, for instance, makes a rather flat deformation. Changing the size and strenght of a stroke does just what is says. Your brush will additionally indicate the size of the brush by the size of the red circle.
The intensity of a stroke is not that obvious. It determines the intensity of the drawing color. To use color, you’ll need to active the RGB button, and pick a proper color in the color chooser just beside the RGB button. Let’s say you pick red and then adjust the intensity of the color to 100.
To test the basics, make a new file and this time maybe not the ususal shere but a cube. Center it by clicking View > Center (or just type the key combinationCtrl+C), zoom a little bit into the view, and then roll it down by dragging the sphere with your right mouse botton. Now just make a brush stroke with your left mouse button. You should get a glowing red bumb. Nothing new here.
Now center again and zoom into the model. Activate the X_ button for symmetry, adjust your brush size to something smaller, and then pick a nice blue color. Activate the _Sub button. Click a few times on the left side of the sphere, just where you’d expect an eye to be. Those are the first steps for an absolutely ugly “Robo Punk Model”.
You should have noted that you didn’t just make an eye, but two. The reason is of course, the activated X_ which makes every action have an symmetric action on the activated axis. Additionally, you didn’t create an ‘outer bump’ but an inner one. Again, the reason is obviously your previous switch from _Add to Sub.
Let’s attempt to add a mouth, and a nose. There!
OK, it’s not the Mona Lisa. But you were told that a little bit of practice is needed!
To smooth all the hard edges, just switch to the Smooth brush type, adjust the size and strength appropriately and try to make it less robot-like. Use the symmetry buttons to reduce the necessary work.
Of course, this is neither good-looking, nor an impressive piece of art. However, to create the same effects with a standard 3D modeling software might have required a lot more time and effort to get to this point.
Installing SharpConstruct is a two-step process on Ubuntu Linux 5.10, althought similar remarks probably hold for other distributions as well.
SharpConstruct uses a C++ binding for the GTK+ binding to the OpenGL library for its 3D magic. Confused? There’s no need to be. Just think in terms of layers. The needed library, called libgtkglextmm (“GTK+ OpenGL Extension -mm”), had released its last stable version several months ago, and thus is available in most distributions. Unfortunatly, SharpConstruct needs the 1.1.0 development version.
Step 1 is thus compiling libgtkglextmm 1.1.0 from the source.
This is rather easy with a special trick for Ubuntu users: Install the version Ubuntu provides as if you are going to to use it, and then remove it, again. This way you will satify all build dependencies for compiling the library:
sudo apt-get install libgtkglextmm1c2 libgtkglextmm1-dev sudo apt-get remove libgtkglextmm1c2 libgtkglextmm1-dev
Of course, regular Debian and Ubuntu users will complain that this is not the proper way to do it! Indeed, one should use “apt-get build-dep $package” to do this properly. But you need the source code repository adresses in your list for it to work.
You’re probably now wondering what the difference between these version are if it’s sufficient to use the dependecies of the old version. We need a more recent version of a library, namely the GTKmm libraries. That’s not a major problem; we would have needed them in the next step anyway.
sudo apt-get install libgtkmm-2.4-dev
With the build dependencies installed, download the 1.1.0 development version from Sourceforge and do the usual three steps of _./configure_, make, and sudomake install. You should get a few new libraries under /usr/local/. In the end, you will just need to add two symbolic links otherwise SharpConstruct won’t be able to find the libraries. The commands look a little bit strange but there’s nothing to worry about:
sudo ln -s /usr/local/lib/libgdkglextmm-x11-1.1.so.0.0.0 /usr/lib/libgdkglextmm-x11-1.1.so.0 sudo ln -s /usr/local/lib/libgtkglextmm-x11-1.1.so.0.0.0 /usr/lib/libgtkglextmm-x11-1.1.so.0
Now you can start step 2 by installing SharpConstruct. It’s a GTKmm application using Glade so you will need a few more libraries. SharpConstruct’s homepage provides no list of its required dependencies but since we built one from source, installed another one to do so, there’s just one open, libglademm. The following command should install all necessary pieces for you:
sudo apt-get install libglademm-2.4-dev
When you now do the usual three steps, again: _./configure_, make, sudo make install, SharpConstruct will be built and installed under /usr/local.
You can spare the last compilation step by using a pre-compiled binary available on the SharpConstruct’s homepage. However, without the proper version of libgtkglextmm, this is not very useful. Compiling the required library was the most complicated step; building SharpConstruct is then just a small step to do.
The need for a development library of the GTK OpenGL Extensions is currently SharpConstruct’s major flaw. In fact, it’s a shame that it’s possible for such a library to become unmaintained, and remain so for over two years. Fortunatly, a new maintainer volunteered recently: Timothy M. Shead. Regular GNOME Journal readers will remember him as the creator and developer of K-3D.
Hopefully, someone will find the time to provide a proper autopackage of SharpConstruct soon – one that uses static linking for the problematic libraries. That’ll make installation of future versions much easier.
SharpConstruct is easy and fun to use. This makes it absolutely great. And did I forget to mention that it’s stable. Given the low version number, 0.11, and its history of interface switches, that’s amazing.
Bishop, who’s currently waiting on answers from colleges where he applied to study computer science, is, of course, not yet satiesfied with SharpConstruct: ”[It] is still not even close to a complete replacement for ZBrush, but it’s definitely useful for easy creation of organic models.”
Thus, he continues to improve SharpConstruct whenever possible: “Right now I’m implementing surface reconstruction algorithms, which will take a 3D model as input and output a clean, evenly subdivided model. Better polygon tools will help obviate the need to create low-poly base mesh in an external program.”
He’s also looking to improve the interface to be more user-friendly: “The response to the new interface has been generally good, but there’s a lot of room for improvement by making better use of GTK’s widgets. For example, a model-preview widget could be added to the Open dialog, and time-consuming operations, such as subdivision or model loading, should display a progress bar.”
Let’s hope his studies will allow him to continue to work on Sharp Construct. A larger community of supporters could help him; the manual, for instance, is still showing the old interface. However, given the fun of using SharpConstruct, there’s a good chance it will find many fans. I know that I’m a fan for sure.