Posts Tagged “art”
Mar 9, 2021
The last months I have been working on my first video game. First I made a 2D prototype (because everyone said that it was a bad idea to make your first video game 3D), and then I worked on the 3D version, which was what I wanted to make in the first place.
The 3D version involved a lot of Blender (in fact, I would imagine that more than half the time spent on it was really inside of Blender, not writing code), so I figured I would make a cheatsheet for myself, which others would maybe find useful.
This is probably not going to make any sense if you have never used Blender: it’s not a tutorial and it won’t teach you how to use it. However, if you start using Blender and have a need to remember keyboard shortcuts or want to discover some things Blender can do for you that you might not know yet, this might be useful!
One of the most important things is that 1, 2, and 3 choose between vertex, edge, and face selection. You have to make sure you’re in the right mode before anything else.
- Ctrl-click will select from the last selected item (vertex/edge/face) to the clicked item (Blender finds the shortest way, sort of).
- Alt-click on an item to select all “related” items (depends on context and might not always do what you want, but it can be used to select a whole line). This is usually a horizontal or vertical “line” containing the clicked item.
- Shit-click to add the clicked item to the current selection.
- C to “circle select”. This is a special mode that will let you modify the current selection by adding new items (hold the left mouse button and drag the circle), or removing items (hold the middle click and drag the circle). You can make the circle bigger or smaller with the mouse wheel, and you exit the circle select mode by right clicking.
- Shift-Z toggles “see-through” mode, useful to select things that are on the back.
- Ctrl-NumPad+ expand selection by taking items that surround the current selection.
- J after selecting two vertices will create an edge between them.
- F3 -> Subdivide to subdivide a face (eg. single-face plane into plane with many faces that can be sculpted).
- E to extrude.
- S to scale.
- I to inset.
- M to get the menu after selecting vertices, then choose “By Distance” to collapse vertices that are in the same place. Eliminating this kind of duplicate vertices is really useful to avoid problems with your geometry.
- Shift-Tab to toggle snapping (can choose in the menu if snap to vertices, by distance, or other things).
- O for proportional editing (whatever operation you perform will not only affect the current selection, but also the surrounding items). You can change the area of effect with the mouse wheel. There are several modes for proportional editing, including “random”. See the menu at the top.
- X, Y, or Z when moving/scaling to lock the move/scale to that axis.
- Shift-X, Shift-Y, or Shift-Z when moving/scaling to lock the move/scale to exclude that axis.
- Ctrl-drag while moving a vertex along a given axis to snap the other axes to the vertex under the cursor (useful to align stuff).
- Ctrl-R to chop a face (and all connected “in the same direction”) in many.
- Shift-D to duplicate an object.
- Alt-D to duplicate an object but keeping it linked to the original. This can potentially save a ton of space and processing if you are going to have many identical copies of the same object. It also means that they will stay the same, so if you edit one, you will be editing all linked-duplicated objects at once.
- F creates a faces from the selected vertices.
- LoopTools extension is great! You have to add it in Preferences. It adds a submenu at the top of the menu in edit mode.
Blender is a wonderful, free tool for 3D modelling that has all sorts of features (and not only for 3D modelling!). If you want to learn 3D low poly modelling, I recommend you start with Learn Low Poly Modeling in Blender 2.83.
Dec 3, 2020
The last month or so I have been working on a project that I will talk about shortly. For that I had to do some simple image edits often, and after the third time or so I figured it was better to script them. I had done a little GIMP scripting before so I figured it wouldn’t be hard to write a couple of scripts to do what I wanted (which was very simple to start with). However, every time I had to do something with GIMP scripting I forget the details and I need to check again, so I figured it would be useful to leave some notes for myself and for others who might be interested.
There are two main scripting engines you can use in GIMP: Script-Fu (which uses Scheme, a Lisp dialect), and python-fu (which uses Python). I have used both at some point but this tutorial will use Script-Fu. Unfortunately, making an introduction to Scheme as a language would be too long for this blog post, but you can check the Script-Fu tutorial in the official documentation.
Note that in the example I’m using some function defined in GIMP 2.10 and later, so the example code will not work as-is with older versions of the software (in particular, you will have to delete the calls to the functions
gimp-context-set-line-width, and change
gimp-edit-stroke… but if you do that, the script will lose some functionality).
Types of scripts/uses
There are two typical uses for these scripts: adding extra menu entries so we can call our script from within GIMP itself, and adding functions that we can call from the command-line. The former typically receive images or layers, and the latter typically receive filenames. In both cases we define functions that do what we want (from images/layers or from filenames) and then we either register them in the menu, or leave them as-is so we can call them from the command-line.
Defining a simple function
Create a new file
add-border-to-image.scminside your GIMP
scripts/directory. If you don’t know where that is, go to Edit ➝ Preferences ➝ Folders ➝ Scripts. You can use any of the folders in that list, or even add a new one.
In that file, enter the following text:
(define (add-border-to-image image) (let* ((drawable (car (gimp-image-get-active-layer image)))) ;; The context push allows us to change settings (like the ;; foreground colour) and go back to the previous settings ;; when we pop it. The gimp-image-undo-group-* makes sure ;; that all the operations are considered only one with ;; regards to undo. (gimp-context-push) (gimp-image-undo-group-start image) (gimp-selection-all image) (gimp-selection-shrink image 2) (gimp-context-set-stroke-method STROKE-LINE) (gimp-context-set-line-width 4) (gimp-context-set-foreground "#657487") (gimp-drawable-edit-stroke-selection drawable) (gimp-image-undo-group-end image) (gimp-context-pop)))
This code defines a function called
add-border-to-imagewhich receives an image and paints a 4-pixel border on it. It also makes sure that all the operations are considered only one for undo purposes.
Once we have that function, we can add a menu entry for it, or we can prepare it so it’s easy to call from the command-line.
Functions already defined in GIMP
When you write these scripts you will need to check which functions are already defined in GIMP (like
gimp-drawable-edit-stroke-selectionhere). You do that by going to Filters ➝ Script-Fu ➝ Console and then clicking on the “Browse…” button. You will see a list of functions and a search box you can use to search for them. Note that by default the search only looks for functions with those names, so you might want to change that to “by description”.
Adding a menu entry for the function
If we want to be able to paint borders on an image we have open in GIMP, we can add the following code at the end of the file, then either restart GIMP or go to Filters ➝ Script-Fu ➝ Refresh Scripts:
(script-fu-register "add-border-to-image" "<Image>/Edit/Add border" "Paints a 4-pixel border" "Esteban Manchado Velázquez" "Esteban Manchado Velázquez" "2020" "RGB*" SF-IMAGE "Image" 0)
This will add a new menu entry under Edit called “Add border”. The entry will be grayed out if you don’t have any image open. If you do, you will be able to click on the new option and see the newly added border.
Note: for some reason that I haven’t been able to find out, you will need to click anywhere on the image for the border to appear. This is only a problem when using it from the menu.
Calling the function from the command-line
To call the function from the command-line we will have to create a new function that receives a file path pattern (could be a file path or something like
images*.png), opens the file(s), calls the function we defined, and then saves the file(s) somewhere. Add this at the top of
(define (add-border-to-file file-pattern) (let* ((filelist (cadr (file-glob file-pattern 1)))) (while (not (null? filelist)) (let* ((filename (car filelist)) (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename))) (drawable (car (gimp-image-get-active-layer image))) (output-filename (string-append (car (strbreakup filename ".")) "-focused.png"))) (add-border-to-image image) (gimp-file-save RUN-NONINTERACTIVE image drawable output-filename output-filename) (gimp-image-delete image)) (set! filelist (cdr filelist)))))
This will receive one parameter, namely
file-pattern, interpret it as a file pattern with possible wildcards (with the
file-globfunction) and go through every file that matches that pattern. Then, for every file, it will open it, calculate the output filename for that file, call
add-border-to-imagewith the open image, and then save the result in the calculated output file and close the image.
Calling the function from the command-line
The command-line incantation to call this function is not trivial and I always forget it. We need to call the
gimpprogram with the
-ioption (so that the user interface doesn’t load) and the
-boption (for batch) and pass it some Scheme to call the function we want (in this case,
add-border-to-file). We also need to call the special function
gimp-quitso that GIMP quits after the function has finished. We do so by calling it like this:
gimp -i -b '(add-border-to-file "img*.png")' -b '(gimp-quit 0)'
Automating repetitive tasks with Script-Fu can be extremely useful and save us a bunch of time. We can expose the functionality we create in two ways: via GIMP’s own menus, and via the command-line’s “batch mode”. If one is used to Lisp dialects, using Script-Fu with Scheme is not too difficult; otherwise, Python-Fu can be a better alternative. Both languages have an interactive console inside of GIMP to try things out, plus a documentation browser to see and search for available Script-Fu functions.
If one wants to learn more details, the official documentation has a Script-Fu tutorial.
Feb 2, 2013
Laying out the comic
Once the script is ready, you sketch the comic storyboard to answers these questions:
Composition of each panel (where characters go). See example on p.108. Tips: rule of thirds, writing speech bubbles first to use space better, avoid intersecting lines in foreground and background.
Perspective (how the audience will look at the characters). Use and be aware of perspective and distance (where the camera is). For inspiration, have a look at Wally Wood’s “22 panels that always work”.
Flow & progression (change of locations, how time passes, …). What happens between panels should be obvious. Take care of small details like which hand is used, or the side of something.
Drawing and refining
Resources to make higher-quality art, faster:
Reference materials: tracing over stuff is easy, quick and gives good results (eg. photographs, incl. made by yourself for the purpose, or avatar generators like IMVU or XBox).
Templates: a couple available on the net, but tend to be limiting. Create your own templates?
Comic creation software: several, seem too complex and/or expensive.
Possible uses of comics:
Requirements/vision: documents don’t get read, and if they do, they’re ambiguous. Comics are easy to read and explaining requirements through real use-cases often works better.
Good start for projects/companies: comics help you validate your ideas before you build anything, or decide exactly what to build. In these cases, make the person read the comic on her own, then explain with her own words as she reads again. That way, misunderstandings are easier to spot. Also, make people say how it relates to them: if they or someone they know would use it.
Marketing materials. Explaining your product, or why it’s special, through comics.
Certain kinds of documentation.
It’s generally easier to get people to read comics than to read text descriptions of the same content.
Breaking Down the Barriers
When convincing bosses to approve the use of comics, there’s usually less resistance than what people think. That said, understand who you’re convincing and what arguments to use (eg. some designers think that comics take relatively little time compared to alternatives, or the evidence suggesting that words + pictures help in understanding and memory). Fidelity and polish in comics (and any other medium) needs to be higher for certain audiences, eg. bosses or corporate clients.
Useful templates and references
The appendix has ideas about how to show someone in front of a computer, interesting panels, gesture dictionary and a facial expression dictionary:
Jan 31, 2013
Oh, boy. It’s been a while, hasn’t it? This is the first post of the year, and it will be about the first book I’ve finished, “See What I Mean” by Kevin Cheng (which, by the way, I got from O’Reilly’s Blogger Review Program). It’s a book about using comics “for work”, to communicate ideas like product concepts, user stories, and such, more effectively.
This post will cover about half the book, from chapters 2 to 5. These notes are much more useful if you have the book to refer to the pictures, but hey, this is mostly for me ;-)
Properties of comics
Basic vocabulary for the anatomy of comics:
Properties of comics:
Communication: comics don’t need words, or can express a lot without them (p. 23). They’re universal!
Imagination: characters with few features make more readers relate. This can be applied to UI mockups/sketches, too: people focus less on design if it’s abstract (p. 25,26).
Expression: give interpretation to words (“I’m sorry”/”Thank you” examples with different facial expressions on p.27). When combining text and pictures, the sum is bigger than the parts.
Time: comics can express time passing by using empty or repeated panels. Also, via words in “narration” and reference objects (like burning candles, clocks, or day/night).
Drawing faces is easy! Eyebrows and mouth go a long way to express mood. Body language helps quite a bit, too, and it’s easy to represent. See examples of combinations of eyebrows and mouths on p.47, 48. In faces, eyes go in the middle, and dividing the bottom half in three gives bottom of nose and mouth. Also see http://www.howtodrawit.com for tips on how to draw different things.
Approx. proportions for a person are two heads for torso, 1 for hips/groin, and 3 for the legs. Body language basic guidelines: leaning forward shows interest, concentration or anger (depends on arm position and context; curling the spine works, too); arm position can tell a lot (lifting one or both, on chin, in front of body); head positions don’t change much, but facial expressions or where the person is looking, does. When drawing body language, try to imagine the situation and exaggerate it. It often helps to start with a stick figure, then add detail.
Steps to create a comic
There’s no single correct way to create a comic. One possible approach:
What’s your comic about? Why you’re using comics, what to include, who’s the product and comic for. This chapter is about this step.
Writing the story: create scripts in words, an outline, define characters, setting and dialogue.
Laying out the comic: plan each panel, what to show and how much of it.
Drawing/refining the comic.
What’s your comic about?
Don’t approach the question broadly and vaguely, break it down! Define goals (what to accomplish), length (3-8 panels encouraged; should fit on site homepage, a postcard or e-mail; if longer, consider physical prints), audience (expertise level, context), and representative use case (help your readers understand why they should care).
Writing the story
When writing a script, you can use a similar format as that of film scripts. Each panel’s needs four primary elements:
Setting (defined up front, usually in bold). It can be time of day, location, or maybe what happens in the background. It depends heavily on the audience. The first panel can help with the setting (“establishing shot”). There are different graphical ways to convey a setting: the description of it describes a concrete way (eg. exterior of coffee shop vs. interior of coffee shop vs. close-up of coffee cup being served).
Characters (all caps, bold). There are several types: target audience, people who interfact with them, and objects/locations that play a significant role (eg. the solution). Target audience is typically based on personas, go make them if you don’t have them already.
Dialogue (regular font). It’s defined by more than the text itself: fonts, sizes, colours, bubble shapes or the split into different bubbles are very important, too! The text can be hard to get right: make it fit the character, keep it realistic (avoid marketing jargon and overly enthusiastic conversation). Captions can communicate time, setting, action, and even dialogue, but don’t add unnecessary information in them, and always try to speak from the character’s voice.
Actions (usually italics). It’s what characters do, depicted in the panel art.
How to tell a story: remove all unnecessary. You can combine several points in a single panel. Show, don’t tell. See examples on p.98-100.
And that’s it for today. In a few days I’ll publish the rest of the summary.
Jun 21, 2012
Gustav Vigeland’s sculpture park in Frognerparken is without doubt my favourite part of Oslo. It’s “simply” a collection of sculptures of people doing different things, but ever since the first time I saw it I fell in love with the park. I have been there many times and I have taken many pictures of the sculptures, and when I went there again about a week ago I remembered how much I like it and decided it was about time I wrote about it and made my personal “ode” to it.
The most famous sculpture is the “Angry Boy”, a sculpture of a little boy crying. While it’s expressive, funny and original, I think it’s a pity that many visitors seem to only pay attention to that one, and miss the dozens of amazing sculptures around it.
The reason why I like these sculptures so much is that, in my view, they represent the essence of what is being human. They are completely stripped down, timeless and lacking unnecessary elements. Adding clothes to these sculptures wouldn’t work because they would make them belong to a concrete time and culture, and thus lose their expressive power. I also like the nakedness because it reminds me of how clothes and many other social conventions often hide how similar we all are, and how we often forget what really matters and what doesn’t. Thus, it’s no surprise I get annoyed when people refer to it as the “park with the naked sculptures” :-) They’re indeed naked, but that’s missing the point of the park miserably.
When I think about why I like these sculptures so much, I can’t help thinking about the book “Technopoly” and the book (and movie) “The Road”. I see all three as being about being human and about stopping for a second, forgetting about all the things you assume (as part of your everyday life in whatever society you live in) and considering what you think is actually important; what is “essentially human” and what is simply a detail of the current culture and time; what is strictly necessary and what “needs” are artificial.