This project ultimately turned out to be an interesting failure.

My original goal was to try and implement a form of Sobel's edge detection algorithm.
Through this algorithm, the fragment shader examines neighboring pixels to establish a spatial gradient.

I believe my mistake was in thinking that I could implement the algorithm in one shader pass. Looking further into it, I believe the correct approach is to render your scene into a texture, and then pass over that texture using Sobel edge detection. I'll be continuing to look into the process, but unfortunately, I ran out of time to implement it for this assignment.

Along the way, when I added my tree model to the scene, I discovered this graphical oddity using textures, which I found rather mesmerizing, almost like an optical illusion. The cause, aside from my partial Sobel implementation, involves rendering to the default buffer, which in this case is zero. The tree itself is a straightforward sphere model with vertices of the tree base splayed out to resemble simple roots. The sword and shield were designs with a stone-like texture to emulate a memorial using the existing deferred-npr shaders.

For anyone interested in the Sobel edge detection, I was using these sites for reference:
http://fiveko.com/tutorials/image-processing/sobel-filter/
https://webglfundamentals.org/webgl/lessons/webgl-image-processing-continued.html