20px - +
wrap
zh en
-
发信人: AOL (C++/C++/C++/C++/C++/C++), 信区: ANSI 标 题: From Rowan Crwaford 发信站: 日月光华 (2002年03月31日19:52:53 星期天), 站内信件 From: dljar1@giaeb.cc.monash.edu.au (Dwayne Jarvis) Date: 21 Apr 94 16:45:44 GMT --------------------------------------------------------------------------- ..ASCII GRAPHICAL TECHNIQUES V1.0.. By Rowan Crawford. All text and art copyright (c) 1994 Sumaleth Productions. --------------------------------------------------------------------------- CONTENTS: 1. Intro ____ _ .. 2. Line art dHHA /^ |T AHHHHHA (_) : . 3. Small/sig art dHPHH Y __jj HP" IH .-. I:: 4. Solid art dHP HH l__ \\ H HHHH | | HI: 5. 3 Dimensional art dHHHHHH | // Hb. IH | | HHI 6. Conclusion dHP HH l___// UHHHHHU l_j UHU 7. Quick plug 1. Intro 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: / 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. _,-~ CURVE USING COMMA 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: "-._ / "-._ / Here the incoming line should join / 7 onto the main part halfway through / / a "/". That's where you can use some other chars. In this example, a "7" INTERSECTION FIX 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. ____ .-~. /_"-._ This T-Rex head demonstrates how you can use / /_ "~o\ :Y the character shapes to an advantage. The "L" / : \~x. ` ') at the bottom joins three connections together | Y< ~-.__j quite well, as does the "Y" at the back of the : l l< /.-~ mouth. These are things too look out for when l /~\ \<|Y creating a picture, and by using the chars in '.-~\ \L| 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. ___ {~._.~} This little koala pic is a good example of how a ( Y ) 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. This example is a "mini" __CL\H--. Millennium Falcon. Since I'd already L__/_\H' \\--_- drawn a bigger one, I knew exactly what __L_(=): ]-_ _-- - shape it needed to be, and what features T__\ /H. //---- - it needed to make it look like the Falcon. ~^-H--' " 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^^^ See how the bottom arm fits in with the solid dHP appearance of the main part, yet the "^" (which dHBooan 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 Note the use of the "p" to make the effect just dHP that little bit more effective. An "r" could also dHP work well at the end of each arm. Purely cosmetic dHBooan 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 Smooth shading can be created by using MH[: .adAHHHI:. :H different chars to fade out at the edges, HI: .:IHHHHHI:' .jIH instead of the anti-aliasing (which Y: `:YHHI:' .:|IHM 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. 3 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. --- --- 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 O O 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 Here I have placed two koalas 10 chars ___ ___ apart from each other. Generally, a good {~._.~} {~._.~} distance would be between 7 and 15 chars, ( Y ) ( Y ) 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 .-~_)_ This picture has 3 distinct layers: ~>x".-~ ~-. ~x".-~ ~-. the hat, head and face. There are ( / \ ( / \ many other examples of 3D ascii T o o Y T o o Y around, plus there are programs l < ! l < ! 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 /\ /l into creating ascii pictures, and I ((.Y(! imagine that I haven't even begun to \ |/ cover it all. / 6~6, \ _ +-. 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 ( . Y open your awareness to the art form, and /"\ `--^--v--. it's a great way to learn the various / _ `--"T~\/~\/ techniques. I hope that you have found / " ~\. ! my ideas about ascii interesting. _ Y Y./' Y^| | |~~7 In the end however, it's up to the | l | / ./' individual artist to work the way they | `L | Y .^/~T want to, and not necessarily the way | l ! | |/| | -Row someone else would do it. Finding | .`\/' | Y | ! your own style is all part of the fun, l "~ j l j_L______ and perhaps this text will aid people \,____{ __"~ __ ,\_,\_ in finding that style. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :D 7. Quick Plug Check out my ascii art collection v1.2 (it's on the various ascii FTP sites around). Collection 2 coming soon(ish). -------------------------[ Sumaleth Productions 1994 ]----------------------- -- ____ ______ _ __ ___ _____ ______ ______ _ __ ______ ______ / __ \ / ____// | / // | / ___/ / ____// ____// | / // ____// ____/ / /_/ // __/ / |/ // /| | \__ \ / / / __/ / |/ // / / __/ / _, _// /___ / /| // ___ | ___/ // /___ / /___ / /| // /___ / /___ /_/ |_|/_____//_/ |_//_/ |_|/____/ \____//_____//_/ |_/ \____//_____/ ────── AOL ※ 来源:·日月光华 bbs.fudan.edu.cn·[FROM: 211.154.89.165]