http://crazyferretstudios.com/ArtTech/
Hey guys. I've just started up a blog with the aim to simplify some technical concepts for artists. This will hopefully give people the ability to get more consistent results in art through understanding the underlying tech.
I'd love to get some feedback from you all, things like:
- Is the first post too long?
- Is the first post helpful, or not?
- Is the first post confusing? Do i need to simplify it further?
- What kind of things would you like explained in future posts?
I'm hoping to update this bi-weekly but at the very least, weekly.
Replies
As an artist looking to get more techy I'm looking forward to more!
I know that a float2/3/4 and vector2/3/4 is the same thing and the different terms are used by different software, but at least for me it simplifies to use the term "vector" mainly for speaking about directions. Such as normals or lights.
So when reading your text I was thinking "When is he going to mention that a vector is used to define a direction... That's the first thing I would have said.".
That was going to be part of the next article. however i'll edit the first post to mention that those are the same things.
sidenote: I wonder if they're called "vectors" because in c/c++ a vector is a collection of data, and so a vec3 would be a vector with 3 pieces of data...
I'd love a good article about tangets and bi-normals. What they are, how they are calculated, why tangent basis calculations differs between different engines, how they relate to UV-coordinates, etc.
I kind of get it, but I wouldn't mind getting it completely clear and right.
Might be worth mentioning that vectors effectively store both a direction and a magnitude. It's an important aspect (even though the average artist will only be dealing with normalized/unit length vectors).
Also mention that vertex positions, normals, UVs and cages are all vectors (to try and relate the more technical stuff back to what the artist is used to dealing with day-to-day).
Farfarer pretty much stole my feed back. I think an image like the following would enhance your description.
http://mathinsight.org/vector_introduction
Farfarer, just to clarify something here, when you're talking about magnitude, you mean the length of the vector, correct? if so i have some sweet pics coming up that covers that in either the next or immediately following post.
I really like how you drew an example from the UE4 material editor, I think for future posts that'll really help ground the concepts in something tangible.
I've been at fault for being one of those artists who works to make things look pretty without really knowing too much about the technical side - something i'd like to change, so I wholey support the blog and call for more pictures!
Might be an idea to explain that in computer graphics, we have vectors, which imply a direction in 3d space, and are described exactly the same way as float3, which in turn is used to store colours. Hence why normal maps and flow maps, which are maps of vectors, can be stored as a colour image.
It helps for these kinds of things to look a little into the history of the term. There's usually something really tangible for artists if you dig deep enough. Like, 'Float' comes from 'floating point' which means that point can be introduced anywhere in a given set of cyphers. This in turn means that floating point can describe much more numbers than an integer of the same size, etc.
Of course, you end up with really really long articles this way My own attempt at something similar(tutorials covering art-foundations using open source software) usually ranges somewhere between 2000 to 4000 words per piece.
I would say that this first blog is a bit too short, it ends right before it gets good. I'd like to see how you can apply this knowledge, like using 3 point vectors in unreal to manipulate normal maps or tint albedo maps, with pictures to break it down (actually maybe that's too advanced for starters?). What really helped me learn though was being able to actually look at the material editor in unreal and see how the nodes are used and what they did instead of just reading about it.
Again, I guess just stressing on more pictures, once you explain that the XYZ vectors are stored in the RGB channels, it would be cool to see something like this picture to visualize that and break it down a bit more instead of just seeing the end result of a sphere normal map. This concept might be easy to follow, but once you get to the more advanced concepts having more visual breakdowns will help a lot
Just my two cents, this is a good idea though. How often are you planning on writing an article?
A fairly consistent feedback i'm getting via skype too, is that it's still a little wordy/math heavy, and could do with more image based explanations. So my big focus right now is working up a second post explaining vectors in a far more visual way, as simply as possible (which is actually the hardest part).
I'm aiming to do one a week at the minimum.
And as for tangents/bitangents and the like... absolutely! a greater understanding of the way normals work is something i want to drive home, but i also feel like if people can't understand things like vectors or dot-products, then the more advanced concepts will be way out of their grasp. Similarly, if i have trouble explaining the simpler concepts, then i feel i may only add to existing confusion on the more difficult ones.
Tech art is something I've always liked, but never really dove into that hard. What is the average work day like for you?
I always enjoy how tech writing helps me figure out what I don't know, since trying to explain and clarify something points out all the gaps in my knowledge!
In the first blog post, I think it would help to quickly explain what a float is.
When you point out that you can have a vec2, it would help I think to say why there's no vec1. (then it would be just a point in space right? no length)
The sphere image was a little puzzling. I was wondering why the red values started in the middle of the sphere, instead of being 0 on the left side, .5 in the middle, and 1 on the right. If you're making a sphere using rgb vectors in world space, then I wonder why you wouldn't get something more like this?
Floats will be covered in the next post as i'll need to explain why they're the result of a dot product of two vectors.
Something like just an X coordinate, for example. Their length is their value.
you're describing a float.
Thanks for the blog Gir
Rock on brother
You can scale the coordinate system and still have the magnitude of the vector remain the same (under that coordinate system).
A float does not share these properties, it's just the unit (EDIT: it's actually the data type) used to describe the components of vectors.
A vector, by definition, is a direction and a magnitude. The lowest dimension that makes "useful" sense in is 2, which is a 2D vector, which has two components (in our case, 2 floats, one for each axis of the space).
A 1D vector has only one "direction" (the single axis of the space) so really all you've got is a magnitude along that singular axis. You can only describe that in a single, scalar value (in our case, a float).
The coordinate system is arbitrary in all cases.
The argument here is if a 1D vector is the same as a float value, and I hold the opinion that it isn't. A float is scalar, it can be used to describe the magnitude and direction components of a 1D vector.
In practice there's little difference (you will be dealing with a single float value after all), but if you're going by the vector definition then you need to make this distinction.
But a 2D vector has positive and negative directions to each axis... we don't say it had 4 directions (positive and negative x and y).
But by direction there I meant axis, which is why I put it in quotes. I just meant to say there is no other place for the point to go.
http://techartsurvival.blogspot.ca/2014/12/dot-matrix.html
magnitude is without sign, you need the sign information on the vector's directional properties, especially if you have multiple components. vec1 == float is prefectly fine reasoning imo. float happens to be the datatype here as well, but could use double, half...
In common sense computer science (no strict mathematically definition) a vector is more or less just a simple container for holding one or more data, to keep it simple, floats for now. In shader a vec1 ... vec4 just holds either one to four floats, without any attempt to interpret the contained data. A RGBA color is just a vector (4D), a three-dimisional position (3D), a two-dimisional direction (2D), a scale factor (1D), the width/height of a window (2D) etc. Therefor a 1d vector is just a single data piece, a float in this case.
It is just a simple way to keep related data easily together. Instead of using
float color_red = ...;
float color_green = ...;
float color_blue = ...;
float color_alpha = ...;
just use
vec4 color = ...;
That's all, no rocket science !