\begin{figure}[tbp]
\centering

\begin{minipage}[t]{0.31\linewidth}
\centering
\begin{tikzpicture}[scale=1.12, line join=round, line cap=round]
\path[use as bounding box] (-0.10,-0.15) rectangle (2.30,1.85);
\coordinate (A) at (0.10,0.20);
\coordinate (B) at (1.85,0.35);
\coordinate (C) at (0.75,1.55);
\coordinate (D) at (0.32,1.35);
\coordinate (E) at (1.95,1.05);
\coordinate (F) at (1.10,-0.05);
\coordinate (P) at (0.62,0.98);
\coordinate (Q) at (1.42,0.54);
\fill[blue!20] (A) -- (B) -- (C) -- cycle;
\fill[orange!25] (D) -- (E) -- (F) -- cycle;
\draw[thick, blue!60!black] (A) -- (B) -- (C) -- cycle;
\draw[thick, orange!75!black] (D) -- (E) -- (F) -- cycle;
\draw[very thick, red!80!black] (P) -- (Q);
\node[draw, rounded corners, fill=white, align=left, anchor=south west] at (0.18,1.58)
  {one projected\\intersection segment};
\end{tikzpicture}

\small\textbf{Before partitioning.}
Each triangle changes depth order across the intersection segment, so neither face
admits one global front-to-back placement.
\end{minipage}\hfill
\begin{minipage}[t]{0.31\linewidth}
\centering
\begin{tikzpicture}[scale=1.12, line join=round, line cap=round]
\path[use as bounding box] (-0.10,-0.15) rectangle (2.30,1.85);
\coordinate (A) at (0.10,0.20);
\coordinate (B) at (1.85,0.35);
\coordinate (C) at (0.75,1.55);
\coordinate (D) at (0.32,1.35);
\coordinate (E) at (1.95,1.05);
\coordinate (F) at (1.10,-0.05);
\coordinate (P) at (0.62,0.98);
\coordinate (Q) at (1.42,0.54);
\fill[blue!18] (A) -- (B) -- (Q) -- cycle;
\fill[blue!28] (A) -- (Q) -- (P) -- cycle;
\fill[blue!38] (P) -- (Q) -- (C) -- cycle;
\fill[orange!18] (D) -- (P) -- (Q) -- cycle;
\fill[orange!28] (D) -- (Q) -- (E) -- cycle;
\fill[orange!38] (P) -- (F) -- (Q) -- cycle;
\draw[thick, blue!60!black] (A) -- (B) -- (Q) -- cycle;
\draw[thick, blue!60!black] (A) -- (Q) -- (P) -- cycle;
\draw[thick, blue!60!black] (P) -- (Q) -- (C) -- cycle;
\draw[thick, orange!75!black] (D) -- (P) -- (Q) -- cycle;
\draw[thick, orange!75!black] (D) -- (Q) -- (E) -- cycle;
\draw[thick, orange!75!black] (P) -- (F) -- (Q) -- cycle;
\draw[very thick, red!80!black] (P) -- (Q);
\end{tikzpicture}

\small\textbf{After partitioning.}
The original faces are replaced by smaller pieces whose local depth order is now
stable enough to sort.
\end{minipage}\hfill
\begin{minipage}[t]{0.31\linewidth}
\centering
\begin{tikzpicture}[scale=0.56, line join=round, line cap=round]
\path[use as bounding box] (-2.20,-1.75) rectangle (2.20,1.95);
\appendlight[
  v = return Vector:new{0.45, -0.25, 1, 1}
]
\setobject[
  name = partframe,
  object = {return Matrix.axis_angle(Vector:new{1, 0, 0, 1}, 1.00)
    :multiply(Matrix.axis_angle(Vector:new{0, 0, 1, 1}, 0.52))
    :multiply(Matrix.perspective(Vector:new{0, 0, 0.10, 1}))}
]
\appendsurface[
  uparams = return Vector:new{-1.15, 1.15, 14},
  vparams = return Vector:new{-1.15, 1.15, 12},
  v = return Vector:new{u, v, 0.40*u, 1},
  transformation = return partframe,
  fill options = {fill=blue!60!ltdtbrightness, draw=blue!35!black, line width=0.1pt},
  filter = local cz = (A[3] + B[3] + C[3]) / 3; return cz > -0.28
]
\appendsurface[
  uparams = return Vector:new{-1.15, 1.15, 14},
  vparams = return Vector:new{-1.15, 1.15, 12},
  v = return Vector:new{u, 0.26*u + 0.16*math.sin(1.5*v), v, 1},
  transformation = return partframe,
  fill options = {fill=orange!65!ltdtbrightness, draw=orange!40!black, line width=0.1pt}
]
\displaysimplices
\end{tikzpicture}

\small\textbf{Rendered case.}
Intersecting sampled sheets plus a simple filter create exactly the kind of local
ambiguity that requires partitioning before occlusion sorting.
\end{minipage}

\caption{Partitioning makes a sortable scene out of a locally ambiguous one. The
left and middle panels isolate the geometric idea; the right panel shows the same
principle inside an actual surface rendering.}
\end{figure}