\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}