Tuesday, October 28, 2008

Building Hatching Patterns from Embedded Bezier Paths

The previous post talked about how to build hatching patterns from Movie Pixel Indexing Background Textures in the Paint Synthesizer. But there are many other approaches to generating hatching patterns in the paint synthesizer. This post will explore the use of embedded bezier paths to define custom hatching patterns.

The particular factory preset we will be examining is the BezSmartHatch1 and is located in the Default : Auto Sketch category. It is designed to draw on a white canvas, so make sure you erase the canvas to white before using it. The example image at the top shows off how this paint preset renders an image in black and white. The hatching patterning is defined by a set of bezier paths stored in the internal path frame memory of the paint synthesizer. The set of 4 bezier paths used in this preset are shown below.

The bezier paths are used to define the path shape the paint synthesizer draws. If you look in the Path Shape control panel you will see that the Path Type is set to Internal Path Memory 1. This path type draws the complete set of bezier paths in the internal path memory for each auto-generated paint stroke. Using the Random or Cycle Internal Path Memory options would randomly draw 1 of the set of bezier paths, or cycle through them sequentially as individual auto-generated paths are drawn.

Blind drawing sets of hatch marks would eventually fill in the entire canvas with black hatching, so there needs to be an intelligent mechanism turned on to determine where to draw individual paths or more importantly when to stop drawing individual paths to best represent the source image. There are a lot of different ways to program this kind of behavior in the paint synthesizer. One could intelligently work with path start and path end settings to achieve this goal. However, this particular preset uses a WhiteCanvasErr Probability setting in the Path Application control panel.

When this particular setting is activated, before an individual brush nib is rendered onto the canvas, Studio Artist determines if adding it will properly represent the source image at that canvas location. If this is true, then the nib is drawn. If Studio Artist thinks the nib will make the canvas too dark at that location, it skips drawing that particular nib and moves onto the next one. Remember, the settings in the Path Application control panel determining how nibs are applied from the generated internal path to the canvas.

To modify this paint preset to use your own custom bezier hatching, just go to Bezier Draw operation mode. Then draw a set of bezier paths you want to define your custom hatch pattern. Then record the current bezier path frame into the internal bezier path memory. If you now run the preset dsscussed above it will render the source image using your own unique custom bezier hatching pattern.

To illustrate this i drew the following custom hatch pattern in Bezier draw operation mode.

After recording this into the internal bezier path memory, i then ran the editied paint preset and got the following result. Note that the hatching has changed from the square patterning used in the original preset to the circles i used to define my custom bezier hatch pattern.

Version 4 has a new Path Shape feature associated with embedded bezier paths. This is the Cycle Internal Path Memory1 path type option. When this option is used to generate path shapes in the paint synthesizer, the set of individual bezier paths stored in the internal path memory are used as keyframes in an interpolated animation as individual path shapes are drawn. So you can define a set of keyframes for an animation and then have the paint synthesizer generate a complete interpolated animation off of those individual keyframes as it draws auto-generated paths. This can be quite effective when used with Time Particles.

Saturday, October 25, 2008

Custom Hatching Using Pixel Indexed Movie Background Textures

Many people aren't aware of a powerful feature associated with the Background Texture control panel in the Studio Artist paint synthesizer. One of the background texture types is called 'Movie Pixel Index'. It's one of 2 different background texture types that work with loaded movie files. What's unique about the Movie Pixel Index texture type is that the movie frame indexing for the texture movie file is updated for each pixel as the paint synthesizer renders a brush nib. This allows for pixel accurate hatching patterns to be derived off of the individual movie frames.

The image at the top of the page is an example of how you can use movie pixel indexing to build a paint preset that generates a black and white hatching effect. This preset called Circle Hatcher1 is included in your factory paint preset in the Default : general category. It uses a movie brush for the background texture called tex_circle1 that is stored in your Brush folder.

If you look at the individual frames of that movie file you will see that each frame corresponds to a hatching pattern built up from a small number of hatching circle representing a very light gray tone value to a large number of hatching circles representing a very dark tone value. By building your own movie file that defines your own desired set of hatching patterns you can easily modify this default preset to draw with your own unique hatching patterns. One frame of the hatch pattern movie is shown below.

In order to make the hatching patterns seamlessly tile, you can turn on the Path End popup control called Wrap Path at Edge.

Turning on this control will insure that any paint paths you draw wrap at the canvas edges to finish on the other side of the path, leading to a seamless tile.

The hatch patterns in the Circle Hatcher1 preset discussed above were generated using auto-painting with the paint synthesizer circle path shape and a 1 pixel black pen preset. But you are free to hand draw your own hatching patterns if you wish, and you can use any paint presets you want to build up the hatching patterns.

To build you own custom hatching movie file, start by setting the canvas size to something reasonable for a background texture movie brush. For this example i'll set the canvas size to 64x64 pixel. Then open a new movie stream. Now draw your hatching marks one at a time. You can use the cmnd F shortcut to write frames out to the open movie stream as you build up your hatching pattern. Each frame you write out will be used to represent a constant gray level when you render an image with your custom hatching movie background texture. I used a pencil paint preset and hand drew rough x's to build up a more organic hatching pattern, as shown below for one frame.

Each time i drew a new x hatch i wrote out a new movie frame. After i had filled in my small hatch pattern canvas with x's i closed the open movie stream.

I then imported the Circle Hatcher1 paint preset and then ran the File : Paint Synthesizer : New Background Movie Texture menu to replace the movie file used in that factory preset with my own. I selected the custom hatching movie file i just generated. I then went to the Background Texture control panel in the paint synthesizer and changed the Texture Type popup from Movie to Movie Pixel Index. When i ran the edited paint preset i generated the image below that is based on my own custom hatching patterns i rendered out to my hatching movie file.

You want to try to position your individual hatching patterns as evenly as possible when building up the individual movie frames to avoid introducing repetitive patterning into the final rendered image. You can also experiment with different movie frame sizes for the background texture.

Note that you want to use the Fixed Orient Mod and Global Tracking settings for your Movie Pixel Index background texture. These tracking settings insure that the texture tiles as opposed to some other option like tracking the pen orientation.

This example deals with black and white hatching patterns. However, you could build up color hatching patterns if you wish. Duo-tones or tri-tone patterning can be particularly effective to reproduce simulation of chromolith printing.

Tuesday, October 21, 2008

Abstraction vs Realism in Paintings

I question i often get asked when demoing Studio Artist is something along the lines of, 'I love that paint effect, but is there any way to make it more representational of the original source image?' An easy solution to this question is to just mix some of the original source image into the painting. But there are also many different editing techniques you can use to modify the way paint presets draw to make them more representational.

The example shown at the top is using a technique called Local Color Range masking. You can turn this on in the Paint Fill Apply control panel by setting the Nib Masking control to 'Local Color Range'. The image below was made with the same paint preset as the image at top. The only different is that the top image was made with Local Color Range Nib Masking turned on and the bottom image was made with Nib Masking set to Normal (which mean there is no nib masking going on while painting).

Note that the top example does a much better job of reproducing edge detail associated with the original source image.

You can also use local color range masking as a Path End parameter. Doing so will mask your paint paths, leadings to a tighter painting without the artificial nib masking seen when you mask the actual paint nib itself. Which technique is appropriate depends on what you are trying to achieve in your final image.

There are lots of additional paint synthesizer editing techniques you can use to tighten up a painting. You could work with path start and path end settings to restrict painting to specific source luminance or texture ranges. You can work with progressively smaller brush sizes and shorter path lengths over time to build detail in a painting. Like a real artist would do when they start with a large brush to rough in a painting and then use progressively smaller brush sizes to fill in more detail information.

Selection masking is also a useful approach to helping define edge structure in a painting. The image below was created by using the Smart Contrast Ip Op to generate a selection mask, and then path masking a soft airbrush effect.

Artists also combine different media types that work together to create finished images. So, you could start off with an abstract rendition of an image to define mass and then use something like an edge sketch superimposed on top of the rough mass painting to define the edges and make the abstract mass image more representational. The example below shows the addition of an edge sketch to the initial abstract painting (no local color masking) shown in the second image from the top.

The Vectorizer outline technique can also be used to superimpose more defined edge structure on top of an abstract painting. The image below was created by first using a very abstract paint effect, followed by 2 different applications of a vectorizer outline.

All of the techniques described above are really concerned with different approaches to creating tighter edge reproduction in a painting. This is really a key component of how realistic a viewer will perceive a representation painting. So even if you are starting with a paint preset that generates a very abstract rendition of the source image, there are a wide range of different techniques like the ones we discussed above you can use to modify or complement your abstract paint preset to generate more realistic paintings.

Sunday, October 19, 2008

Paint Synth Regionization

There are a number of different path start generators in the Studio Artist Paint Synthesizer that support paint regionization. What this means is that the paint synthesizer analyzes your source image and then breaks it into a series of different geometric regions and paints in each region individually. This is an alternative approach to the individual 1 paint stroke at a time auto-rotoscoping capabilities of the paint synthesizer that you typically use when you press the Action button while in the paint synthesizer.

Many people are unaware that you can extend the stylistic capabilities of paint synth regionization by incorporating the Studio Artist Vectorizer into the paint regionization process. The trick to using the Vectorizer to define the regions you wish to automatically paint is to route the output of the Vectorizer into the current region selection. And to then use the 'selection as regions- all levels' path start generator. In version 4 you can just set the vectorizer composite option to replace the region selection. In 3.5 you would need to run the vectorizer and then set the selection to the vectorized canvas.

When working with paint synth regionization i typically use one of the paint synthesizer macros associated with regionization (like 'auto regionize loose') to quickly reconfigure a given paint preset to draw as a regionization process. I can then make any individual edits needed to this macro edited preset, like setting the path start generator to 'selection as regions- all levels' for this particular example.

The images at the top and bottom of this post show off using the vectorizer to define the regions used for paint synth regionization. The top example was using the vectorizer 'simplify extreme' region effect and the bottom examples was using the 'straighten extreme' region effect. Since the vectorizer has many different editable controls that can affect it's stylistic output, using it in conjunction with paint synth regionization greatly increases the range of possible effects you can generate when auto-painting this way.

Tuesday, October 14, 2008

Studio Artist at Honolulu Mactoberfest

Studio Artist creator John Dalton will be giving a 1 hour presentation on Digital Creativity and Studio Artist at HMAUS's Mactoberfest on Saturday, October 18th from 11-12 am. Mactoberfest is a free and public event celebrating mac computer culture. Everyone interested in Studio Artist or Apple computers is urged to attend. For more information on Mactoberfest and HMAUS you can go here.

Mactoberfest is a part of Hawaii Geek Week, which has it's own web site here.

Monday, October 13, 2008

Canadian Premiere of Mugenkei

October 14th is the Canadian premiere of the Studio Artist animation "Mugenkei" at the Festival Nouveau Cinéma in Montréal. The film is by Studio Artist user Jean Detheux and features the music of German composer Wilfried Jentzsch. The film shows Oct 14th and Oct 18th. You can learn more about the festival here, and info on the "Focus 1 - Mémoires" program including Jean's film is here.

Jean has another Studio Artist film entitled "Shade Lost" which will be the official opener of the New Music Festival Thursday, Oct 23rd in Bowling Green, Ohio. The film will be shown mute while the Eastman Triana will perform the music live as the film is presented. You can learn more about the festival here.

Tuesday, October 7, 2008

MSG Path Start Generators

We've recently been profiling some different ways to utilize MSG presets within the Studio Artist Paint Synthesizer. Another approach to using MSG's modular image processing architecture to extend the functionality of the paint synthesizer is the MSG Scan Generator option in the Path Start control panel.

Some MSG processors that generate a series of internal scan coordinates as a part of their internal processing can make the scan generation available to external programs. All of the chaotic attractor MSG processors like the IFS generators support this feature. So you can use the chaotic attractor to generate a series of path start coordinates within the paint synthesizer when using this option. The first processor in the MSG processor chain needs to be a processor that supports this feature in order for this to work.

The screen snap below of the MSG advanced editor processor chain list shows a simple chaotic attractor preset that uses the IFSGen2 processor, followed by a 1to3 processor to convert the BW single channel attractor image into a 3 channel rgb output. The MSG preset was used as a MSG path start generator for this tutorial.

The example image at the top of the page is a screen snapshot from a paint animation. Directed evolution was used to create a series of different ISF chaotic attractors. A paint preset was built that used the MSG Scan path start generator. Paint Action keyframes were recorded in a Paint Action Sequence within Studio Artist to build a keyframed timeline for the desired animation. This was then rendered out using the Action : Animate with Paint Action Sequence : to Movie menu command.

The end result is an animating chaotic attractor that is painted by the paint synthesizer over the course of the the animation. By overpainting on top of a ip op modified previous canvas image a softer more organic effect was created for the generated paint animation.

Saturday, October 4, 2008

MSG Time Particles

The example above is a frame from an animation created using time particles in the Studio Artist paint synthesizer. Each time particle is an instantiation of a MSG preset. The particular preset used in this example is the same IFS chaotic attractor preset used in the previous post on MSG Live Source Brushes. This means that each time particle is a dynamic IFS fractal animating with movement over time.

Time particles give temporal continuity to individual paint strokes in an animation. The path start control settings are used to specify the individual time particle positions for the first frame in the animation. But for subsequent frames the existing set of time particles move spatially based on the adjustable parameters in the 2 time particle control panels.

Time particles are the mechanism you can use to animate multiple instances of a MSG preset in an animation. In this particular animation we used a MSG Live Source Brush. The alternate approach would be to use a MSG Brush Load. Both options allow you to embed a MSG preset within a paint synthesizer preset.

The Paint Action Sequence (PASeq) used to generate the animation is shown below.

The next to last AutoPaint step is the paint synthesizer step that displays the time particles. The other steps in the PASeq were designed to fade and dissipate previous frame images to give a drifting smoke effect with some gravitation pull. The Geodesic Displacement ip op was used to simulate the gravitation pull, and the Geodesic Warp ip op was used to create the dissipation effect. By modifying the previously drawn frame and then overdrawing the time particles on top of it we introduce temporal continuity into the animation, reducing flicker that could occur if we erased to black each frame.

The name of the last PASeq action step is a little misleading. We used the Blur ip op with an Edge 1 composite setting to create an enhancement effect. This boosts the contrast of the rendered frame prior to it being output to a movie file.

By using multiple paint action steps in a PASeq that have different MSG presets embedded in them you could create animations using different kinds of MSG effects working together to create an overall aesthetic.

Wednesday, October 1, 2008

MSG Live Source Brush

The image above was created using a MSG preset that generates an IFS chaotic attractor as a MSG Live Source Brush. What this means is that the MSG preset is used to generate the source brush dynamically as you paint. This is a new feature in Studio Artist 4.

Note that this is different than the previous post on painting with pickover chaotic attractors. In those examples we showed how to use a MSG preset to create a movie brush with embedded alpha and then paint with that movie brush. So in that example the chaotic attractor images created from the MSG preset are initially generated and then stored in a movie brush. In this example the MSG preset generates the paint synthesizer source brush dynamically on the fly as you paint.

An advantage of the live approach is that you can interactively modulate different MSG processor parameters using things like pen pressure, tilt, orientation, etc. You can also use temporal generators (TG) to dynamically modulate MSG processor parameters. So you can generate a dynamic paint brush based on the MSG preset that can either modulate under your interactive control or proceduraly vary over time or both. So the brush shape can always be unique and different with each paint stroke.

The IFS chaotic attractor was generated using the simple MSG preset shown below.

Some of the IFSGen2's adjustable parameters were modulated by the pen pressure and tilt orientation, others were modulated with procedural temporal generators. Because of this modulation each pen nib is dynamically generated from the MSG preset and has a unique shape as seen below.

The Source Brush control panel was configured to use the new MSG Live source brush.

The MSG TG Option parameters is set to path-random so that the temporal generators in the MSG preset modulate as the path advances (as opposed to modulating with increasing frame time). This and the interactive pen modulation is what drives the unique shapes generated for each paint nib.

Of course there's a lot more you can do with MSG Live Source Brushes besides painting with chaotic attractors. There's really unlimited potential for creating custom paint brush effects depending on how you configure the over 500 MSG processors in your MSG live source brush.