So far our morphisms only let us compare presheaves and sheaves on a single topological space . In fact, we have a category of sheaves (of sets, by default) on . But there are also constructions that involve more than one space. The direct image functor is a way of pushing forward a sheaf structure along a continuous map. It’s relatively simple and we may find it useful, so let’s just get it out of the way now.
So, let’s say we have two topological spaces and , and a continuous function . I say that if is a sheaf on , then we can define a “direct image” sheaf on in a natural way. Indeed, given an open set , we know that its preimage is an open subset of . And so it only makes sense to define .
Now you might be thinking, “wait, if the canonical example of a sheaf is a sheaf of functions, shouldn’t we be pulling back?” And this does make a certain amount of sense: given a function on all of we can define a function on all of by composing it with , so it seems that “functions pull back” naturally. It would seem to make sense for us to take a function defined on an open subset , compose it with , and put the resulting into the set corresponding to .
But while this defines sets for all these preimages, not all preimages are of this form! Indeed, we have no idea how to define the elements of an “inverse image” sheaf over a set where is not itself open, and there is no guarantee at all that it will be. There is a way to remedy this problem, using a method called “sheafification”, but that’s a more involved subject I’d rather not dig into quite yet.