tutorial

ASCII Graphical Techniques V1.0 by Rowan Crawford

   Back to ASCII Art Academy.

Table of contents

  1. Introduction
  2. Line Art
  3. Small/Sig Art
  4. Solid Art
  5. Three Dimensional Art
  6. Conclusion
              ____           _  ..
       dHHA  /^  |T AHHHHHA (_) : .
      dHPHH Y  __jj HP"  IH .-. I::    
     dHP HH l__  \\ H  HHHH | | HI:    
    dHHHHHH |    // Hb.  IH | | HHI    
   dHP   HH l___//  UHHHHHU l_j UHU

1. Introduction

Producing pictures from ascii is such a strange idea, and yet the results can sometimes be quite impressive. Although there are a many different forms of ascii art, they all use basically the same ideas to produce the end result.

The techniques I use are based around a few simple rules. These rules help me make decisions about which character to use, and where to place it. Of course they aren't strict rules, but they make a good foundation upon which to build a picture.

This is not intended as the "definitive" guide to ascii creation, but is instead simply an analysis of how I approach the subject.

2. Line Art

Line art is where you represent a picture by just it's outlines and details. Comic art is good material for this type of work since you have a definite outline to work from. However, any picture can be reproduced just by defining it's various boundaries.

There are many standard characters which can be applied to this form of ascii art. These are the most obvious ones:
    / \ | - _ + ( ) < > , . ~ ^ " V X T Y I l L : ` ' ! j J 7
Start by finding an area of the picture which is fairly simple. From there, work your way around the perimeter creating an outline using just these "basic" ascii characters:
    / \ | - _ ( )
Try to get proportions correct at this stage, because it IS important, and the later you leave it the harder it is to correct. You can also draw in some of the larger details at this stage, which may help get the proportions correct.

Once you're happy with that, it's time to go over the whole thing and work on the anti-aliasing. I like to have *every* line connect up, leaving no large gaps such as:

    ~~~~~~~~________


If I come across an area which has no "ultimate" choice of characters, I may decide to add an extra detail there. For example, "near" vertical lines are virtually impossible in ascii. Here's some options:
                   |         |        |        |        |
                   |         l        l.       \        l
                    |         I       `|        Y       `L
                    |         |        |        |        |

                 START       ^----------OPTIONS----------^
As you can see, none of them produce the "perfect" results I'd like. In this case, I would try adding some form of detail in there thus removing the problem. It doesn't always work, but it's worth a try.

Near-horizontal lines are much easier (thankfully). Using these chars: ( ~"-.,_ ) you can quite easily produce a reasonably decent line. The previous (horizontal) example would become:
    __
      "~~"----..,___
    
Or at least something to that effect. I usually get very "nit-picky" and arrange the comma just before an underscore since it sits down one pixel lower than the full-stop ("."). I also like to carefully select between the " and ~ since they each have their own distinct properties. Avoid using this technique at angles around 30 degrees (looks a bit odd), and very slight angles (because it results in a long line of dots, and that doesn't look good).

Actually, the selection of the picture is very important in determining how the resulting pic will look. You also have the option of changing certain parts of the pic, so that they work better in the ascii format. For example, instead of trying to do a near-vertical line, just make it perfectly vertical.

Curves also play an important role in ascii art. Although the standard ascii character set does not directly support curves (apart from "(" and ")" of course :), you can get some nice curves with a little bit of work. Here's the most often used chars for curve creation:

/ \ - _ ~ " . , ' ` ! I l Y

And here's a couple of sample curves to demonstrate the idea:
                     ___
                 .-~"   "~-.                           /
                /           \                      _.-~
               Y             Y                   ,^
               |             |                  /
               l             !                 /
                \           /             __.-~
                 "-.,___,.-"

                   CIRCLE                SUBTLE CURVATURES
    
Some people wouldn't like the use of "Y" and "^", but to me, the advantages outweigh the negative aspects. Also note the use of "l" and "!" to make the transition from vertical to angled less pronounced.

I also consider the choice between "." an "," important because it affects the smoothness of the line. For example, in the part on the above curve: _.- :it looks like a "," may have been a better choice:
                      /             
                  _,-~              
                ,^                  
               /                    
              /                     
          _,-~

        CURVE USING COMMA
But as you can see here, using the comma has altered the flow of the line somewhat. It now appears as more of a "step" rather than an angled line.
Intersections require yet another strategy. Often you'll find that one line must join onto another at a place where the join isn't neat:

        "-._ /         "-._ /           
            /              7            
           /              /             
                                        
     INTERSECTION        FIX            
Here the incoming line should join onto the main part halfway through a "/". That's where you can use some other chars. In this example, a "7" would work well, as seen in the example to the left.
You could also try "Z" "X" "T" "Y" as a replacement, but it depends entirely on what is happening around that point as to which char works the best. Other chars which work well in these situations are "K" "<" ">" "r" "L" "j" "J" and "I" because they all point in at least 3 directions.

After practice, the anti-aliasing can be done as you are drawing the main outline. Not that it really makes any difference.

That basically covers the outline techniques. The smaller details are the next, and final, step. Adding details isn't always necessary, but it will be in most cases. Eyes, noses, finger nails, switches, knobs, handles, plus a host of other things are usually confined to just one or two character spaces, so the choice of chars is quite important.

Eyes are a common example. You have quite a few different characters available which work well as eyes, but it's up to you to decide which work best. You need to decide what "emotion" you want to portray, and then find an appropriate character.

As some examples, I have used two "6"'s for a kangaroo, a "bd" combo for a horse, a pair of "r"'s for a giraffe and: -=b- :as the eye of an eagle. In each case, I tried many different combinations until I was happy with the selection:
              .
          /\ /|            .  ,       ___,A.A_  __       _____
         ((.Y(!            |\/|       \   ,   7"_/      /     ~"-.
          \ |/             bd "n.      ~"T(  r r)      Y   -=b-. _)
          /  6~6,         /   _,"n       | \    Y      l      c"~o \
          \ _    +-.     <co>'\          |  ~\ .|       \_.-~"~--.  )
           \`-=--^-'      ~~             |   |`-'                 )/
            \ \                                                   '

    
Other details are equally important, and the same technique is used. Just trying different combinations of characters until a "solution" is found. Sometimes there is no optimum arrangement, so you either have to live with it, or rearrange things just enough to give you a fresh angle of attack.
  
              ____
           .-~. /_"-._       
          / /_ "~o\  :Y      
         / : \~x.  ` ')      
           |  Y< ~-.__j      
         : l  l<  /.-~      
         l /~\ \<|Y         
          '.-~\ \L|          
               "--'         
This T-Rex head demonstrates how you can use the character shapes to an advantage. The "L" at the bottom joins three connections together quite well, as does the "Y" at the back of the mouth. These are things too look out for when creating a picture, and by using the chars in such a fashion, you can usually get quite a lot of detail into a small area.

3. Small/Signature Art

Smaller artwork requires a slightly different approach than the large pieces. Due to the smaller area, you aren't always able to recreate a picture perfectly, so a different frame of mind is needed.

Take, for example, the kangaroo head above. The back of the neck should of course be curved, but this was not possible with only two characters. In smaller pics however, it's not always necessary to be that detailed, it is more important to focus on making the object immediately identifiable.

Small ascii pictures usually start from a simple motif or idea. The way certain characters fit together often creates the idea, and once an idea is found, you have a base to work from.
  
            ___
          {~._.~}      
           ( Y )       
          ()~*~()       
          (_)-(_)      
This little koala pic is a good example of how a relatively simple collection of characters can produce a very "familiar" result.
Some experimenting was done with the eyes, "bow tie" and the bottom "-", with these being chosen simply because they worked the best. Different "eye" characters produced different emotional feelings (which is how the "Koala Collection" came about), but the simple "." resulted in the most familiar appearance. Remember, shape is the most important aspect of small ascii art. There are so many different shaped ascii characters available that there is bound to be one which fits the needs of the picture.
              _ .                
           __CL\H--.              
          L__/_\H' \\--_-         
           __L_(=): ]-_ _-- -     
          T__\ /H. //---- -       
             ~^-H--'
                "                 
This example is a "mini" Millennium Falcon. Since I'd already drawn a bigger one, I knew exactly what shape it needed to be, and what features it needed to make it look like the Falcon.
Picking out the main features is a good step, and then find chars which closely resemble them. The blasters on top of the Falcon were well emulated by the "=" for example. The combination of "CL" worked perfectly as the cockpit, as did a simple ":" for the distinctive markings on it's back.

Simplicity is the key in small art, but that doesn't necessarily make things any easier. Many things simply cannot be successfully drawn in small sizes, so a touch of planning can sometimes help.

4. Solid Art

Solid ascii art differs from line art in that the resulting image is more of a "silhouette" rather than an outline.

By using a "heavy" character such as: W M H 8 :you build up a basic silhouette (filled in outline), and then use other characters to anti- alias (smoothen) the image.

"W" and "M" are the darkest characters in most character sets, but they do vary quite a lot and are a bit too bottom/top heavy which ruins the effect somewhat. "H" and "8" also produce patterns of similar darkness, but result in two different "looks". The "H" is more stark and rigid, whereas the "8" produces a more "bubbly" appearance (which prints up quite well apparently).
            WWWWWWWW       MMMMMMMM       HHHHHHHH       88888888
            WWWWWWWW       MMMMMMMM       HHHHHHHH       88888888
            WWWWWWWW       MMMMMMMM       HHHHHHHH       88888888
            WWWWWWWW       MMMMMMMM       HHHHHHHH       88888888
    
I originally used "M" and "W" since they worked well with the font I once used, but now I use "H" because I like its consistency. Other people prefer "8", so it's really just a matter of personal taste. Indeed, remapping an image from one type into another is quite simple, and should not affect the picture at all.

Different effects can be created by varying the chosen texture over various sections of the picture (shading). The choice of character can also be based on the subject matter, for example, if money were involved the obvious choice would be a "$". Try to avoid using "*" though, as it looks a bit cheesy (imho).

Once the basic shape is defined with the chosen character, the anti- aliasing process is next. The most used chars are:

d b P F 9 V T Y A U _ , . - * ^ ~ " ` ' n a o l L j J k [ ] ( ) : \ / | !

Each character has a purpose based on its shape, although there are cases where no character will produce perfect results. In these cases, you either have to make do as best you can, or remodel that particular area of the picture, thus giving you a fresh approach.

Going back to the earlier "curve" examples, here they are in solid form:
                  .adAHHHAbn.                           JHH
                 dHHHHHHHHHHHb                      _.adHHH
                dHHHHHHHHHHHHHb                   ,AHHHHHHH
                HHHHHHHHHHHHHHH                  dHHHHHHHHH
                VHHHHHHHHHHHHHP                 JHHHHHHHHHH
                 YHHHHHHHHHHHP              _.adHHHHHHHHHHH
                  "^YUHHHUP^"              HHHHHHHHHHHHHHHH
                      "~"
                    SPHERE                   CURVED HILL
It's important to get a good understanding of how best to use the characters. The basic forms are as follows:
          _,.aomdAHAbmon.,_     For the upper curves.

            "~^*YUHUP*^~"       For the lower curves.
The characters: d b P :are all extremely useful, but there is no equivalent character for bottom/left. There is, however, four chars available which do a decent job: T Y V 9 .The 9 works well for *some* char sets, but generally it has a big hook at the bottom so isn't quite so useful.

Notice how I've used "A" and "U" to smoothen the transistion from "H" to "d"/"b" (and "Y"/"P" respectively) even though the effect is quite subliminal. A minor detail, but it does help. I don't often use "_" in these types of pics because of the way it touches the top of the "H". It does come in handy sometimes though.

Side curves require more of an "on the spot" approach. The chars: l [ ] : j i :all come in handy when trying to smoothen out vertical curves, and I've also seen "(" and ")" used (although I wouldn't use them myself). Consistency in contrast is very important.

Adding details using the solid ascii technique is a bit harder than in line art because there isn't the same number of possible choices for each position. The letters: a n o :are all very useful because they are nice "solid" chars which only occupy the bottom half of the character space, but there is no good alternative for the top half.
             dHF^^^      
            dHP          
           dHBooan       
See how the bottom arm fits in with the solid appearance of the main part, yet the "^" (which is the closest char available) doesn't look so beefy.
Even the "^" varies across different char sets, so that leaves just: " ~ : which are of no use at all. In that particular case, it is necessary to expand the picture by one line:
              anpoan     
             dHP         
            dHP          
           dHBooan       
Note the use of the "p" to make the effect just that little bit more effective. An "r" could also work well at the end of each arm. Purely cosmetic though. Note that if you're using "M" or "W", then "m" and "w" can be used to keep it consistent.
Details aren't always as simple as that example though (unfortunately).
                   HHHH              aann               .aoon.
           HHHHHHHHHHHHH      aanndHHHHHHP"     "^vaondAHHHHHP"
                HHHHHHH         "~^YHHHHH           "~^SHHHHH
              HHHHHHHHHH          dHHHHHHb          .adHHHHHHh,
                   HHHHHH           ~^VHHHP             ~^VHHHP
                     HH                YHP                 "VP

                 START            HALF WAY           FINISHED
The different steps can be seen here. Starting by roughing out the shape (a wizards head incidentally) using the chosen character. Next, go over all the edges making all the obvious replacements. That means using: d P b Y V a n :plus the occasional: " ~ :if there's an obvious place for it. Just enough to give it some shape.

The final stage requires a bit more work. Start with "A" and "U"/"V", and then the rest is purely experimentation. The "S" was chosen because it seemed to have the right shape, although there are many chars which could really go there.

The curve section at the back required quite a lot of work. An "a" seems to be the best opposite of "n", and for long stretches, I like to use some "o"'s in there just to mix it up a bit. The: "^ :piece at the end was an obvious combination, so it was just a matter of finding a char to connect the "a" to the "^". As it turned out, "v" was custom made for that position.
          WMHI:    .:IHb.      I     
          MH[:   .adAHHHI:.   :H     
          HI:  .:IHHHHHI:'  .jIH     
          Y:     `:YHHI:' .:|IHM     
Smooth shading can be created by using different chars to fade out at the edges, instead of the anti-aliasing (which produces hard edges).
Good "outer" characters are: . , : ; ' ` For the transition from solid to outer edge: I H A U V T Y | i j d b n a o [ ] :or basically anything that produces the desired effect.

Both line and solid techniques can be combined together, resulting in a "comic book" look and feel. Each form of ascii art works well in certain circumstances, so why not use this to your advantage. Line art for the various outlines and small details, and solid art for large dark areas.

5. Three Dimensional Art

3D ascii art is basically an extension of SIRDS, where you can create the illusion of depth on a flat surface. This is achieved by producing two slightly different versions of the one picture, and placing them a certain distance apart.
                .                 .   Focus Point
               / \
              /   \               x   Where the image appears
             /  x  \
           ---     ---            __  The original pictures on the screen
           /         \
          /           \           /\  Where your eyes are looking
         /             \
        O               O         OO  Your eyes

            PLAN VIEW
Although the scale and angles are a bit off, the basic principle can be seen from the above diagram (seen looking down). The two versions of the picture are located on the screen, but you don't look there. You need to focus on a point *past* the screen which produces a third image at "x".

This resulting image occurs because of the way eyes work. They can only focus on one "depth" at a time, and anything either further away or closer becomes blurred. These "blurs" are just two different views of the one object produced by the two eyes seeing different things.

Try this: stand three feet from a wall. Now hold two fingers up about one foot from your face, and about 1.5 centimeters apart. Look between your fingers, and focus onto the wall. Keep focus on the wall, but look into the foreground at your fingers. You should see a ghost image from both fingers converging into the center. The trick is to make the two ghost images overlap each other resulting in (hopefully) one solid image. This image should appear at a different level than the originals:
                           |  |                |  |  |
                           |  |                |  |  |

                       TWO FINGERS         RESULTING IMAGE
The results from this experiment won't be 100% perfect since your two fingers are likely to be different, but it is a good way to understand the concept. With a little practice, you should be able to focus on real 3D pictures without too much effort.
       ---  ---   
         \  /     
          \/      
          /\      
         /  \     
        /    \    
       O      O   
Note that if you cross your eyes instead of using the above technique, you actually see the picture in reverse. This diagram shows the effect from above, and the resulting image will appear where the lines cross over. Since most stereograms (STARE-eograms') are created to go into the screen, looking at them this way will produce an incorrect vision (and is somewhat harder on the eyes).
That's the hard part out of the way, now a bit about how to create them. Getting back to the little koala example (which is a perfect size for this type of work), lets bring him into 3 dimensions.
             X         X          
            ___       ___         
          {~._.~}   {~._.~}       
           ( Y )     ( Y )        
          ()~*~()   ()~*~()       
          (_)-(_)   (_)-(_)       
Here I have placed two koalas 10 chars apart from each other. Generally, a good distance would be between 7 and 15 chars, although you can use any distance you like. Values outside those bounds tend to be difficult to focus on however.
The distance determines how much the resulting image sits "into" the screen. If the distance is 0 (ie. no separation), the image is neutral which means it appears -at- the screen. As the distance is increased, the resulting image appears further -into- the screen.

By having many koalas laid out across the screen (all separated by the same distance), the effect becomes slightly easier to focus on. Any extra layers should then be added across the whole picture, with the result being quite effective.

The picture is quite boring so far, with just one layer of 3D being created, so the next thing to do is to add another layer or two. The "tried and tested" approach is to add a "pole" in front of him, and since we want it -in front- of the existing layer, each pole should be 9 chars apart:
     _        _        _        _        _        _        _        _
    (_)      (_)      (_)      (_)      (_)      (_)      (_)      (_)
     H___     H ___    H  ___   H   ___  H    ___ H     ___H      __H
    {H._.~}   H~._.~}  H{~._.~} H {~._.~}H  {~._.~H   {~._.H}   {~._H~}
     H Y )    H( Y )   H ( Y )  H  ( Y ) H   ( Y )H    ( Y H     ( YH)
    (H~*~()   H)~*~()  H()~*~() H ()~*~()H  ()~*~(H   ()~*~H)   ()~*H()
    (H)-(_)   H_)-(_)  H(_)-(_) H (_)-(_)H  (_)-(_H   (_)-(H)   (_)-H_)
     H        H        H        H        H        H        H        H
    ~"~~~~~~~~"~~~~~~~~"~~~~~~~~"~~~~~~~~"~~~~~~~~"~~~~~~~~"~~~~~~~~"~~
Notice that since the pole is to appear in front of the koala, it actually replaces the koala where they overlap. Here's the same pic except the pole appears behind the koala:
          _          _          _          _          _          _
         (_)        (_)        (_)        (_)        (_)        (_)
      ___ H     ___  H    ___   H   ___    H  ___     H ___      H___
    {~._.~}   {~._.~}H  {~._.~} H {~._.~}  H{~._.~}   {~._.~}   {~._.~}
     ( Y )H    ( Y ) H   ( Y )  H  ( Y )   H ( Y )    H( Y )     ( Y )
    ()~*~()   ()~*~()H  ()~*~() H ()~*~()  H()~*~()   ()~*~()   ()~*~()
    (_)-(_)   (_)-(_)H  (_)-(_) H (_)-(_)  H(_)-(_)   (_)-(_)   (_)-(_)
          H          H          H          H          H          H
    ~~~~~~"~~~~~~~~~~"~~~~~~~~~~"~~~~~~~~~~"~~~~~~~~~~"~~~~~~~~~~"~~~~~
Now, since the pole is to appear behind the koala, its chars do not write over the koala where they overlap. The poles here are 11 chars apart, so appear one "step" behind the koala. All layers are built like this, and of course I could have the poles both behind and in front of the koala in the same picture. Here's a multi-layer example:
          _               _
       .-~ \           .-~ \
      /     \  _      /     \ _
      ~x    .-~_)_    ~x   .-~_)_        
        ~>x".-~   ~-.   ~x".-~   ~-.     
         ( /         \  ( /         \    
          T  o  o     Y  T o  o      Y   
          l   <       !  l  <          
           \  .__/   /    \  ._/    /    
            "-.___.-'      "-.___.-'
This picture has 3 distinct layers: the hat, head and face. There are many other examples of 3D ascii around, plus there are programs available for the easy creation of SIRDS.
A quick examination of the above picture shows that the head (circle), part of the hat and a part of the mouth are all 15 characters apart. The rest of the face is just 14 chars apart, and the top section of the hat is 16 chars apart.

Note that all this information is from pure observation, so it may not be 100% accurate.

6. Conclusion

Perhaps there's more to ascii art than meets the eye? Before writing this, I had no idea just how much thought goes into creating ascii pictures, and I imagine that I haven't even begun to cover it all.

Analyzing the work of other people is a great way to learn what works, and what doesn't. Analyzing "art" may seem like a strange concept, but it does open your awareness to the art form, and it's a great way to learn the various techniques. I hope that you have found my ideas about ascii interesting.

In the end however, it's up to the individual artist to work the way they want to, and not necessarily the way someone else would do it. Finding your own style is all part of the fun, and perhaps this text will aid people in finding that style.

:D
                .
            /\ /l
           ((.Y(!      
            \ |/      
            /  6~6,
            \ _    +-.      
             \`-=--^-'      
              \ \      
             _/  \
            (  .  Y
            /"\ `--^--v--.
           / _ `--"T~\/~\/
          / " ~\.  !
    _    Y      Y./'     
   Y^|   |      |~~7     
   | l   |     / ./'     
   | `L  | Y .^/~T
   |  l  ! | |/| |   -Row  
   | .`\/' | Y | !  
   l  "~   j l j_L______      
    \,____{ __"~ __ ,\_,\_               
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


to Rowan Crawford's ASCII Art



Back to ASCII Art Academy



© 1994 tutorial and pictures by Rowan Crawford of Sumaleth Productions

Further Resources