I’m trying to learn more about shaders, and can’t find any documentation or tutorials on what I would think would be a very basic concept: what order are shader functions executed, and how are variables passed between them?
The documentation is pretty clear with vertex/pixel shaders: vertex functions happen first and their results get passed on to pixel shaders. However, what about surface shaders with lighting functions and optional vertex functions?
After playing around for a while, this appears to be the order:
- vert is called first with information from Unity (e.g. appdata_full) as input, and outputs an Input struct
- then surf is called, with Input as input and EditorSurfaceOutput as output
- then the lighting function is called with EditorSurfaceOutput as input and a color (of type half4) is output for each pixel
- then the PrePass lighting function (if defined) is called from within the lighting function, passing EditorSurfaceOutput and the light information to it