December 28, 2006
Simplicity vs. Power in Photoshop
Yesterday’s discussion of Smart Filters made me think that it’s worth writing up some thoughts on Smart Objects & the future of compositing in Photoshop in general.
I have a hypothesis, at least as regards Photoshop: flexibility generally breeds indirectness. That is, when you step away from the familiar world of applying pixel tools directly to a plane of pixels, you introduce complexity. Whether or not that complexity is worth accepting depends on bang for the buck.
Photoshop has always had a great advantage over other Adobe apps: to start using it, you can simply open an image, then start mashing away with the brushes, eraser, filters, etc. It’s pretty immediate gratification. Compare that to a program like Illustrator, where the price of admission is that you must gain at least some understanding of vector art. ("It’s like pounding nails and wrapping rubber bands around them," people have said since the beginning.) And in Flash, you immediately have to learn about symbols & the nature of parent/child relationships.
Of course, the price of that simplicity & directness is a lack of power and flexibility, and with each version people have (rightly) demanded more freedom. Layers were the first big step in this direction, and subsequent releases added text layers, shape layers, and layer sets. Each of these has added its own particular method of editing & removed some of the directness that you’d have just editing a single layer.
And now we come to a real crossroads, where Smart Objects represent a kind of "magic box" into which you can place anything you’d like, and to the outside of which you can apply a lot of things non-destructively (filters, scaling, rotation, warps, blending). The greater the flexibility, the greater the number of ways in which you can edit the content. But by and large you can’t have the same kind of directness you had before.
When framed in this context, it makes sense that Smart Objects (and non-destructiveness in general) would generate a good deal of existential angst & require some hard work to get right. I mean, there’s simply more cognitive overhead attached to "This blob of pixels is actually comprised of 10 layers, treated as a stack, that have been scaled down, warped, and had three filters applied" than there is to "These pixels are these pixels, period."
We’ve done kind of a classically "Photoshop" thing here. That is, instead of doing something narrow–a specific solution to one specific problem–we’ve opted to build a foundation for doing a million and one interesting things. (Think, "The power of AND, not the tyranny of OR.") The trade-off is that the solution has some limitations, at least for now, that a more narrow solution might not.
Smart Objects feel weird to a fair number of Photoshop users because you can’t simply grab a brush, eraser, etc. and start editing them directly. Instead, you edit the contents in a separate window, then hit Save to update it in the parent document. Why is that? The answer is that it’s really tricky to enable directly editing things inside the magic box (or black box, if you prefer).
For example, let’s say we wanted to make it possible to scale pixels layers up and down without loss–and that’s it. I can imagine it being possible to modify the various painting tools so that they’d have a straight X/Y transformation applied (scaling up or down) as you painted. To enable precise pixel-editing, you’d have to find some creative way of the native scale of a layer & letting people edit directly. For instance, maybe you’d require that the tips of brush tools scale up visually (as they do today when you zoom in) in order to match the scale of the source pixels. I don’t know, but it could be done.
But now, what if you wanted to let people warp non-destructively? The task of editing pixels directly gets a good deal harder. For example, let’s say you peeled back a corner of a layer and made it meet up with the opposite corner, then started painting a horizontal stroke. As you dragged from left to right, what would you expect the paint to do? Would you expect the horizontal stroke to remain horizontal as you painted, or should the cursor go off in some different direction, separate from your mousing?
What if you applied a filter to the layer, then started painting it? Using some filters, you could have a pretty reasonable experience (performance aside). That is, you could click on a certain location and be pretty confident that you were editing that location. But what if you ran Displace? Or Emboss, or Polar Coordinates? What would it mean to click on a certain spot? Are you painting the "before" spot or the "after" spot? So, it seems either we’d do something wacky in some cases, or Photoshop would prevent you from editing directly if certain filters were applied.
What if you want to manipulate Smart Object content isn’t natively comprised of pixels (say, vectors from Illustrator, or raw camera data)? What would it mean to paint directly onto it? Not much, I’d argue, in which case we’d have to come up with a different editing mechanism, and we’d have one of those "yes-but" situations: yes, you can edit non-destructively transformed layers directly, but not if X, Y, Z, Q, R, or S is present… I think that would be lamer than having to edit the content in a separate window.
Is that making sense? We could make the very simple case (scale only) work, but only at the cost of either not implementing other capabilities, or or doing them through some other system, or of making the system work sometimes and not others. The nice thing about the general, "classically Photoshop" solution is that there is a consistent set of things you can do to the outside of a Smart Object (scale, rotate, warp, filter, mask, adjust blending), and what you do to the inside is governed by whatever content is inside. The single system can work the same way for all kinds of content, regardless of its native form (pixels, vectors, raw, Flash, SVG, data feed from Flickr… whatever Adobe or plug-in developers could enable placing inside Photoshop).
So, in a nutshell, we’ve sacrificed ease/directness in one case in order to open a lot of other doors. It’s a trade-off, to be sure, but it seemed better than any alternatives we could devise.
Is the added complexity worth the cost? Well, for one thing it’s complexity you can ignore if you don’t need it, just as you can avoid making layers if they’re not valuable to you. We can also make the equation more favorable by adding more bang for the same buck. That is, we can improve what Smart Objects can do, and once you learn how they work, you can take advantage of more things without learning much more.
I should close by saying that I don’t intend this entry as a way of saying we can’t or won’t do better. We can, and we will. But I thought it would be interesting to raise some of the conceptual issues that make non-destructive editing a challenging–and rewarding–aspect of Photoshop.