\section{Methodology OLD}
%In the following, a systematic approach for characterizing angular color drift in high-resolution LED panels is presented, detailing the transition from robogoniometric far-field measurements to a real-time compensation workflow.
\subsection{Robogoniometric Measurement Setup}
We utilize a robotic goniometer to characterize the LED panel. Unlike Jacobs et al.  who worked in the near-field, we measured in the far field according to IDMS \cite{international_committee_for_display_metrology_information_2025} measurement conditions (20 minutes warm up time with full white). We positioned a spectroradiometer and an ARRI S35 film camera in 8 meter distance to the panel in a dark room, representing a full white test pattern in HDR PQ format with 1500cd/m2 with ACES gammut and $D_{65}$ whitepoint. The panel is rotated in 15° azimuth steps and 45° rotations capturing the spectral power distribution (SPD) at 1nm intervals.

%\begin{figure}[h]
%    \centering
%    \includegraphics[width=0.5\linewidth]{img/test_case.png}
%    \caption{Robogonimetric Test Setup}
%    \label{fig:placeholder}
%\end{figure}

For the initial tests we measured the CoA at full luminance of the panel, which took 20 minutes of measurement time for the proposed 24 data points. Further test procedures need to investigate, if different brightness settings of the LED controller also influence the angle specific color drift, or if these color brightness shifts are the same inherent of the viewing angle. As most virtual production LED panels are characterized with 1500nits peak brightness, we chose 1500 nits as reference value assuming that the temperature dependent color drift is mostly visible at maximum brightness.
% wie argumentiert man, dass wir nur bei 1500nits gemessen haben?
% temporales verhalten, möglichst viel licht in die wand. die meisten VP panels sind bei 1500 gespekt. Bei 1500nits ist der effekt am größten, weil am meisten temperatur?
%eigentlich ändert sich ja die farbtemperatur bei jedem pixel. die LED binning in einem modul sind aus dem gleichen batch, daher nähern wir uns darüber an, dass wir das ganze panel warm laufen lassen und bei maximaler temperatur arbeiten.
% thermal compensation in the LED controller was not enabled.
%Test Patterns: Brightness steps (logarithmic steps).

\subsection{Far-Field Approximation and Observer Dependant LUT for the inner Frustum}
Based on the observation by Jacobs et al. that near-field data converges to intensity distributions in the far field, we simplify the LED model. We assume that for the camera distances typical in OSVP (+2m from the LED wall to avoid moiré with 1.56mm pixel pitch) the spatial variation across a single LED pixel is negligible compared to the angular variation. Out of the SPDs, we computed a CCT over angle plot for the measured angles (shown in figure \ref{fig:polarCoA}). 

\input{img_coa.tex}

We process the measured data into a  2D 8x8 Look-Up Table (LUT). The input key is the incidence angle between the camera vector and the LED surface normal. The output is a color correction transform required to neutralize the drift relative to the on-axis baseline adjusting the R,G,B primaries as floating values.

The previously measured CoA pattern can be used for better planning in OSVP sets where nDisplay nodes are movable (e.g. with kinematics), the orientation can be optimized so that the axis with less color drift can adressed.

\subsection{Live Link \& Digital Twin Implementation}

In an engine-driven environment (Unreal Engine nDisplay), the geometric complexity is abstracted by the rendering pipeline. The view vector $\mathbf{v}$ (derived from Live Link tracking data) and the surface normal $\mathbf{n}$ (from the Digital Twin mesh) are intrinsic shader variables.

$$I_{out}=I_{target}\cdot D^{-1}(\theta)$$

The correction logic simplifies to a direct mapping of the dot product to the measured gain curve $f_{LUT}$:

\begin{equation}
    C_{out} = C_{in} \times f_{LUT}(\mathbf{n} \cdot \mathbf{v})
\end{equation}

Where: $\mathbf{n} \cdot \mathbf{v}$ is calculated by the \texttt{DotProduct(PixelNormal, CameraVector)} node. \newline
$f_{LUT}$ is the \texttt{CurveSample} node containing the robogoniometric data.

This method eliminates the need for manual coordinate space transformation or polynomial approximation in HLSL, as the \texttt{Curve} asset handles interpolation natively.
\subsection{Real-Time Engine Implementation Angle}

This approach allows for a performant per-pixel execution in HLSL shaders without branching or texture lookups, ensuring smooth gradients between the measured angular steps.
Inside the game engine, in our case we use Unreal Engine V5.5, we implement an HLSL shader for the inner frustum to compensate for the color drift over angle. For every frame, the engine calculates the dot product between the camera's forward vector and the LED wall's normal vector to determine the incidence angle. This angle drives the LUT to retrieve the corrective coefficients, which are applied to the pixel data before it is sent to the LED processor. This approach avoids the heavy computational load of spectral ray tracing, enabling this approach within the time-budget of 24fps – 50fps real-time rendering. In the event that the camera's tracking data was also recorded, our approach could also be applied to post-editing or colour grading processes following the shoot.
At the time of publication, the implementation is a proof of concept; detailed measurement of colour differences and evaluation are still pending.

As this poster is work in progress, we have yet not come up with evaluational results comparing the color rendering performance against OSVP results without our methodology. The planned evaluation is outlined as a comparison between the rendered ACES gammut with tracking data and the recorded data from the camera, following by color comparison metrics like deltaE2000.