Sunday, July 1, 2018

First Figure Painting Class

This month I took my first oil painting class with Aaron Coberly. Specifically, it was "Painting the Alla Prima Figure". Aaron Coberly's style looks very loose and almost chaotic to me. Yet he somehow manages to pull it together to create beautiful and intriguing portraits. I really like it and I originally thought I wouldn't have too much trouble mimicking what he does and getting decent results. What hubris on my part. The class made me realize blending and rendering things nicely is not exactly important, and that is what I tend to focus on. One reason Aaron Coberly has such nice results is that he is very accurate in terms of feature and shape placement - he doesn't spend his time slowly blending one color to the next like I try to do.

I learned a lot in the class and I've been trying to apply what he taught to some drawings:


Tuesday, May 8, 2018

First Portrait Painting

Out of the blue, I thought it would be neat to try my hand at oil painting. I got fed up with making a digital painting, sending it to the printers and having it arrive different than anticipated - many times too dark. With oil painting, what you see is what you get. Plus, spending some time away from a computer screen could be good for me.


So I made my first attempt - a 24x24" portrait of my daughter.


It was definitely an overly ambitious attempt - 24x24" is not a small canvas and I didn't have the first idea how to handle oil paints. I was lucky it turned out as nicely as it did. The pose, composition, and aspect ratio worked well. However, there are lots of problems with it. The ear and neck are incorrectly drawn and rendered. There is also something odd about the eye. Probably the thing that strikes me as most amature-ish is the washed out, monochromatic color of the skin. I really like this painting, but there is lots of room for improvement. 

Sunday, July 25, 2010

OpenGL ES 2.0 Phong Shaders

I had a class during my last semester of school with a great professor who let us study just OpenGL ES 2.0 shaders. After mastering the basic programming concepts, the shader creation felt like painting with code. Pretty interesting. Here are a couple of pictures of models I made and wrote the shaders for.














Both shaders use the standard Phong shading equation. The die has a normal map applied to make the divets and slightly rough surface. There were two tricky concepts I had to learn to get the normal map to show up properly.

a. I had to put the view and light vectors into "tangent space" because that's the space the normals from the normal map are in. Tangent space is defined for each vertex by the normal, binormal, and tangent. This space is preferrable to world or view space because it preserves the normal map when transformations occur on the model. I defined tangent space with this line of code in the vertex shader: "mat3 tangentMatrix = mat3(a_tangent, a_binormal, a_normal)". Then I multipied the tangent matrix by the view and light vectors. Thus, in the fragment shader, all I had to do was grab the pertinent normal from the normal map and change the range from [0, 1] to [-1, 1] before performing the usual lighting calculations.

b. Some exporters and formats include the binormals and tangents, but the format I was using (3ds) did not so I needed to calculate them. The key is to use the vertex positions and texture coordinates. Both pieces of information are pertinent because you want to take into account significant changes in either one. I found a good website that describes how the calculations are derived: http://www.terathon.com/code/tangent.html. The code I ended up writing is below.