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