\begin{figure}[tbp] \centering \begin{tikzpicture}[>=Latex, line join=round, line cap=round] \path[use as bounding box] (-0.30,-0.20) rectangle (9.30,3.15); \coordinate (A) at (0.55,0.45); \coordinate (B) at (3.00,0.90); \coordinate (C) at (1.35,2.20); \coordinate (M) at (1.65,1.18); \fill[gray!35] (A) -- (B) -- (C) -- cycle; \draw[thick] (A) -- (B) -- (C) -- cycle; \draw[->, very thick, blue!70!black] (M) -- ++(0.45,1.02) node[anchor=west] {surface normal}; \draw[->, very thick, orange!85!black] (0.85,2.72) -- (1.40,1.88) node[pos=0.10, anchor=south east] {$\ell_1$}; \draw[->, very thick, orange!65!black] (2.95,2.62) -- (2.10,1.77) node[pos=0.12, anchor=south west] {$\ell_2$}; \node[align=center] at (1.75,2.70) {incoming light directions}; \draw[rounded corners, fill=white] (5.05,0.25) rectangle (8.95,2.90); \node[anchor=west, font=\small] at (5.30,2.60) {illustrative brightness rule}; \node[anchor=west, font=\small] at (5.30,2.22) {$\text{intensity} = 1 - \theta/90^\circ$}; \fill[white] (5.35,1.60) rectangle (6.35,2.00); \draw (5.35,1.60) rectangle (6.35,2.00); \node[anchor=west, font=\small] at (6.62,1.82) {$\theta = 0^\circ$}; \node[anchor=west, font=\footnotesize] at (6.62,1.56) {brightest face}; \fill[gray!55] (5.35,0.95) rectangle (6.35,1.35); \draw (5.35,0.95) rectangle (6.35,1.35); \node[anchor=west, font=\small] at (6.62,1.17) {$\theta \approx 45^\circ$}; \node[anchor=west, font=\footnotesize] at (6.62,0.91) {mid-tone face}; \fill[black] (5.35,0.30) rectangle (6.35,0.70); \draw (5.35,0.30) rectangle (6.35,0.70); \node[anchor=west, font=\small, text=black] at (6.62,0.52) {$\theta = 90^\circ$}; \node[anchor=west, font=\footnotesize] at (6.62,0.26) {darkest face}; \end{tikzpicture} \caption{Directional lighting in the package. Triangle shading depends only on the angle between the face normal and each appended light direction, and the implemented falloff is linear in that angle rather than cosine-based.} \end{figure}