DarkTree Textures 2
SRP $479 ($125 upgrade from 1.x)
Darkling Simulations
www.darksim.com
Reviewed By David Duberman
The procedural texture is one of the most powerful tools in the 3D artist's armamentarium. Unlike bitmap images, which are, in effect, cast in stone, the flexible, algorithm-based procedural texture gives you one or more parameters that you can alter to change and even animate its appearance. For example, 3ds max's Wood map lets you define grain thickness plus radial and axial noise, and assign two colors or other maps to the texture. Other benefits of procedural textures include minimal use of memory and the ability, with some, to change parameters as you move through the mapped object, resulting in a 3D texture. Perhaps more importantly, you can use procedurals to create fantastic, special-effects imagery such as plasma and alien scales-just right for that latest sci-fi spectacular-that would be otherwise difficult to come by. Drawbacks include the extra time necessary to calculate the texture's appearance from the formula and input parameters, although with today's super-fast processors, this often doesn't add a lot of overhead.
For users, the primary disadvantage of procedural textures is that they're not all that easy to come by. Given a digital camera or camcorder, or an analog image recorder plus digitizing device such as a scanner, anyone can generate a virtually unlimited supply of real-world images for use with the 3D application of choice. And if you can drag a mouse or use a drawing pad, you can generate images for texturing with software like Adobe Photoshop and MetaCreations Painter. But most 3D programs come with a limited selection of procedural textures, and it takes a talented programmer equipped with useful algorithms to create new ones. That is, it did until the good folks at Darkling Simulations came up with their brilliant DarkTree Textures 2 (DT2), a stand-alone program that lets the non-hacker with an eye for design create a practically infinite number of procedural textures. It comes with a nice variety of still and animated preset textures, but its real strength is the editor, which lets you string together a generous selection of supplied modules in a hierarchical structure to create your own textures. DT2 generates bitmaps, but Darkling has also considerately created plug-ins, called Simbionts, for bringing the procedurals directly into 3ds max, LightWave 3D, Hash Animation Master, and trueSpace.
As its name indicates, DT2 is the second major revision of Darkling's premiere app. The way the program works is still basically the same, but a number of significant improvements have been made, particularly in the area of animation. I'll cover some of these during the course of this review; if you want a quick rundown of everything that's new, check out http://www.darksim.com/html/dt2_new_features.html. And if you're the impatient type, and just want my opinion right up front, here ya go: This is a killer piece of software, one you'll be using for years to come. Buy or upgrade now; you won't be sorry.
The User Interface

DarkTree Textures uses three different windows to display data and let you control the program. The main program window (see Figure 1) offers the Texture library, a scrolling Explorer-style list with a small preview pane above it that depicts the current selection. Each texture, which Darkling calls a "darktree," is represented by its name and a small icon whose color specifies the type of channel it defines. The three major channel types are color, bump, and percent (the latter can fill in for any numeric parameter). A texture can also be a fourth type: fully shaded, which comprises many attributes. The rest of the main window is for rendering images and image sequences, including batch processing capabilities. Supported output formats include Windows Bitmap (16- and 24-bit), JPEG, Targa, PICT, TIF, FPX, IFF, PSD, XPM, PCX, and PNG. All but the first three are new; as with BMP, a number of formats can be output in several different bit depths. Also new is support for alpha channel output, so, for example, you can save Targa-format images in 24-bit or 32-bit depth.

Once a darktree's thumbnail is displayed in the preview pane, you can click the Examine button to open a larger a resizable Examine window appears (see Figure 2). This window offers a wealth of functionality. For example, you can combine textures any way you like by dragging different channel types from the list to the window. The new toolbar lets you map the texture onto a plane, sphere, cylinder, cube (new), or the new Frame option, which is a plane you can rotate in any direction. Here you can also tile the texture, play and record an animation if it exists, rotate the preview object, or toggle any channel's action. The latter options include the ability to see the "surface bump," (formerly raw elevation) which is the bump component in grayscale.
Because the program can take a little while to calculate a texture's final appearance, even on a fast machine, the Examine window uses two passes at successively higher resolutions to fully render an image, plus an optional third pass for anti-aliasing. Unfortunately, DT2's renderer doesn't support multiple processors.
The DarkTree2 Editor
Next the preview pane in the main DT window is the Edit button--the key to the heart of the program. The DarkTree editor (see Figure 3) lets you design, build, and display the structure of your textures. You can also enter the editor with the New menu command, in which case you start out with a blank slate, or open an existing texture for editing simply by double-clicking it.

Like the main window's Texture library, the editor contains a scrolling list of components arranged into various categories. To its right is a grid of "sockets" into which you drag the components. You then wire these together to create a sideways hierarchical layout, or "tree," whose tip, which the program calls the root, is the component in the single socket in the first column. Each component can be linked to a parent by its type icon-the dot in the lower-left corner-and to one or more children from its "links panel," the protruding area at the upper right. Right-clicking the links panel brings up a menu of available parameters, color-coded to show what type of component they can be connected to. Parent components must be situated to the left of their children, but can be higher or lower.
Here's an example. If you're creating a procedural texture for use in 3ds max, you might start with the shader component in the root socket. The original shader had eight such as Color and Bump; DT2's version adds 12 more, including several Clear Coat parameters that let you add a second specular highlight to your surface representing a clear coat of lacquer or finish. Also new in the shader are settings for anisotropy, metal highlight, and transparency.
By linking a parameter to a child component, you control that parameter with the child's settings. For instance, you can control the shader's color with a pattern such as Bricks or Checkerboard, and its specular level with a Noise component such as Rough. You can create long, branching chains of components, with the results becoming increasingly modulated and complex as you move leftward, culminating in the root module where everything comes together. It's easy to see the cumulative effects, because each component's face depicts, by default, the result of its settings combined with those of all of its children.
The editor offers 103 components, expanded from DT1's 75. A helpful enhancement in DT2 is the ability for component names to include spaces; in DT2 words in names were separated by underscores. The components are divided into categories such as Control, which handles randomization tasks, and Deform, which provides distortion functions like Radial Twist and Turbulence.
An important tool category is Generator, with 2D functions like Sine Wave, Linear and Bias. You can use these to control geometric shapes, blend functions and more, and to modulate animation. For smooth transitions there's the Gradient class, and for realistic textures there are the Naturals, with Agate and Clouds, and the Noises, with Fractal and Manhattan. The Pattern class provides your basic Bricks, Checkerboard and more, and the Process class implements such image-processing functions as Darken, Fade, and Multiply. There's also a Transform class with standard Translate, Rotate and Scale functions, and for using existing images and image sequences, there's the External class.
You won't have much of a problem discovering what a component's parameters do, but you'll spend a lot of time learning how they interact with each other and with those of other components. DT is a perfect toy for the tinkerer at heart.
Here's a list of all the new components in each category:
- Deform: Froster
- External: Audio Wave, Cache, Incident, Poster Board, Surface Distance, Surface Up, Time (Trigger is gone)
- Generator: Cross Section, S Curve, Spline, Stair Step
- Natural: Blobs, Gravel, Pumice, Scratches
- Noise: Tech, Worm Sign
- Pattern: Mosaic, Polyhedra, Rock Wall
- Process: Color Convert, Derivative, HSV Attractor, Hue Rotate, Invert (Tiles broken out into new Tile category)
- Tile: Blend Loop, Blend Tile, Carousel Loop, Vblend Tile, Warp Loop, Warp Tile
When I reviewed DT1, I expressed disappointment that some of the Pattern components, like Bricks and Weave, were 2D only, and thus couldn't be used as 3D textures. Good news: Four previously 2D-only components--Bricks, Checkerboard, Dots, and Flagstones--can now be mapped in three dimensions, and Flagstone also has a new parameter for rounding corners.
Among the new components of particular interest to those doing 3D rendering is Incident, which interpolates between two values (colors, etc.) based on the difference between the viewing angle and that of the surface normal. This can be used for very realistic-looking surfaces, or very unrealistic ones. Similar to Incident is Surface Up, in which the resultant value is derived from the difference between the viewer angle and the "up" angle (world Y axis); it's useful for adding top-surface textures such as snow or moss. 3D artists will also be able to make good use of Surface Distance, which blends between two values (textures, etc.) based on viewer distance; sort of an LOD tool for textures.
In DT1, right-clicking a component did nothing; you had to double-click it to edit it. In DT2, you can do the same, but you can also right-click for a menu with choices like Examine (obviating DT1's eponymous button), Edit Component, and the ability to convert the component and its children (i.e., the subtree) to a different type.
Another major addition to the editor are tabs in the side panel that previously contained only the component list, which is now available from the default Components tab. New is the Properties tab, which lets you name the texture and its author, add a description, and specify the number of animation frames. Here you also set global thumbnail parameters: mapping type, which includes Frame, Planar, Cylindrical, Spherical, and Cubic; aspect ratio for Frame mapping; and Frame view angles. I'm guessing DT3 will let you set these, as well as the angle settings for the Examine window, interactively. I'll get to the third tab--Tweaks--in a bit.
Editing Components
Click-and-drag methods are fine for high-level texture editing, but at some point you've got to examine and possibly hand-alter some parameters. You do this by double-clicking a component, which opens the component editor. Every component has a different set of parameters--the Rough component, from the Noise category, depicted in Figure 4, is fairly representative. Depending on the Views setting, a small window shows the current component, the component as acted on by any children, or the root component as modified by all of its children. This window gets updated while you change a setting, not after as in DT1. You can set translation, rotation and scaling transforms numerically or, new in DT2, with the mouse. And you can align a component with its parent (applying the parent's transform settings to the component), return transform settings to the defaults, and copy and paste transformations between components.

The lower part of the component editor dialog lets you edit the actual parameters, which are typically numbers and colors. If a child component or tweak is controlling a parameter, the setting is unavailable. Otherwise, you can enter numeric parameters from the keyboard, or use the mouse with the gizmos to the right of the number setting. Called zip-sliders, these work similarly to 3D Studio MAX's spinners, where you can click to change a setting by a small increment, or drag for a larger change. You change colors with a custom color selector, which unfortunately lacks zip-sliders, or drag on the color swatch to change hue, saturation, and value. The editor has an Undo button but doesn't respond to Ctrl-Z, although that key combo is available in the rest of the program.
Animating and Tweaking
One of the biggest improvements in DT2 is the addition of the Timer component, which replaces DT1's Trigger component. In DT1, a darktree could use up to 11 triggers for animating various texture elements. However, the triggers were relatively primitive; you could specify start and end frames and start and end values, and that was about it. DT2's Timer component, on the other hand, is one of its most flexible tools, thanks to the new spline editor, shown in Figure 5. Incidentally, the new Spline generator component uses the same editor.

DT2's spline editor is nicely designed and easy to use. The graph's horizontal and vertical axes represent time (or input) and value respectively. You can add and delete control points, drag them around one at a time, and enter input and value settings with the keyboard or via zip-sliders. Bezier handles aren't implemented, but you can set a point's in and out slopes to smooth or linear. You can also move the whole spline horizontally and vertically, and shift and scale the view horizontally. Lastly, you can specify that the spline should take effect only once, or repeat in standard or Ping-Pong fashion.
If you prefer a more formulaic animation-control method, you can simply plug a Timer into an intermediate component, such as a generator. For example, if you link a Timer to a bell-curve generator's Input parameter, and then use that to modulate an object's width (say, a brick pattern's mortar), the width starts at 0 in the first frame, increases smoothly to maximum size at the middle frame, and then shrinks to 0 again in the last frame. If you change the Timer's upper value to 50, you get only the left half of the bell curve.
The other major new feature in DT2 is Tweaks. Basically, what it does is give you external control over any component parameters. This offers three significant benefits:
- You can control the parameter from the editor's Tweaks panel, without having to open its component.
- You can tweak one or more parameters with another tweak, thus giving you global control over any number of parameters with a single setting. Of course, the parameters must all be of the same type, such as integer or color.
- Best of all, you can adjust the tweak within your 3D app of choice via the Simbiont plug-in. No more going back and forth between DT and the 3D program to adjust a component.
Tweaks are easy to understand and simple to use; a truly powerful addition to an already-great program. The only thing I'd add is that, when you create a new tweak and are presented with a dialog for naming it, that the field be filled in by default with the name of the parameter you're tweaking.
Plugging In to 3ds max et al
Using DarkTrees with 3D apps like 3ds max is fairly easy, thanks to free plug-ins you can download from the Darkling Website. With max, you can load a DarkTree file as a map or as a material; in the latter case, the root component must be a shader. You can find a review of SimbiontMAX 2.0, the for-sale version of the 3ds max plug-in, on this site at http://www.creative-3d.net/productFeatureDisplay.cfm?content=simbiontmax.
The Docs
One of the nicest new features for documentation junkies like myself is a Help link in most of the components' edit windows. Click it and a browser page opens with a description of the component, an explanation of how it works in more-or-less plain English, and hints for usage. Symbols indicate whether the component works in two or three dimensions, or both, or is a modifier that doesn't actually generate imagery. This is accompanied by brief explanations of each of the component's parameters, both internal and available for linking. Incidentally, those aren't always the same. For example, several of the Tile components have Distortion and Time parameters that are available only for linking. It makes sense when you understand that they need some sort of external function to work.
The well-written printed manual complements the online component help by offering a number of short, pithy tutorials, plus detailed descriptions of the program's various sections, along with a wealth of techniques for achieving specific results. For instance, the Seamless Looping section tells how to use the Loop components to create animations that can be repeated without an obvious starting or ending point. A number of parameters are common to several members of each component family, and the manual discusses these in greater depth than the online help. You'll be consulting the latter on a regular basis while using DarkTree 2, but if you don't read the printed documentation as well you'll be cheating yourself of much of the program's utility. If you'd like to check out the manual before you buy, download the free version in Acrobat format from http://www.darksim.com/html/arcanum.html.
Conclusion
Nice little touches--the obvious result of much thought and care--abound in DarkTree Textures 2. For instance, whenever you drag a component to a tree slot, a dialog opens in which you click a button to indicate the type: Color, Percent, or Bump. Normally, the default type, which to accept all you need do is press Enter, or click if you've set your mouse to automatically move to the default button, is Color. However, if you've pasted a component into the Root socket as different type, this type then becomes the default for all subsequently placed child components.
Almost all graphical components are 3D textures, so you can produce fascinating animations simply by moving a texture perpendicular to an object surface. To do this in 3ds max, you first apply a UVW Mapping modifier to the object and animate its gizmo on the Z axis. In the Material Editor > Coordinates rollout, set the texture's Source to Explicit Map Channel, and set the Map Channel to the same number as the UVW Mapping modifier's (both default to 1). A relatively small movement can have a noticeable effect.
I love little 3D graphics programs that don't play by the big boys' rules, thus creating software that's different and outstandingly usable and useful. Amorphium is one excellent example of this; DarkTree Textures 2 is another. DT2 isn't a traditional 3D program by any means; it doesn't do modeling, and it knows nothing about character animation. It does one thing--creating procedural and bitmapped textures--and it does it superbly. It's a 3D program because most of the procedural textures live in three-dimensional space. Thus, moving them perpendicular to an object's surface creates a sequence of "slices" from the texture's depth, generating a fascinating abstract animation that can't be done any other way.
Imagine a toolchest (or, if you like, a toy box) from which you keep taking items, and every time you look back into the box, you spot a new, enchanting tool that's just what you were looking for. Or even better, you didn't know you were looking for it, but as soon as you see it, you know what you can use it for. And best of all, the box is always full. For 2D and 3D artists, DarkTree Textures 2.0 is that toolchest. From a finite set of components and parameters you can create endless varieties of great-looking textures--it's magic!
Don't take my word for it: download a free demo version from http://www.darksim.com/html/dt2_demo.html.
|