279 |
|
|
280 |
\subsection{Register combiners} |
\subsection{Register combiners} |
281 |
|
|
282 |
Register combiners are usually used for \\ |
Register combiners are used for fusing together the values read |
283 |
- lighting effects \\ |
from the basis textures and computing the fragment output color |
284 |
- color interpolation/blending \\ |
using the palette chosen for the texture. |
285 |
|
|
286 |
Possible operations: addition and multiplication \\ |
NVIDIA register combiners subsume the standard OpenGL |
287 |
- designed for easily computing |
texture environment, color sum, and fog application with a |
288 |
blending (AB+CD) and dot products (A dot B) |
more general programmable model. |
289 |
|
The possible computations are designed for the |
290 |
Limitations: \\ |
needs of ordinary operations such as bump map lighting and color blending. |
291 |
- could use more scaling range \\ |
The primitive operations are dot product ($A \cdot B$), componentwise |
292 |
- value range $[-1,1]$ |
multiplication ($AB$), and ``blending'' ($AB + CD$). |
293 |
|
There is also a small set of simple input and output mappings |
294 |
We use them for \\ |
for the registers, such as invert ($1-A$). |
295 |
- dot products between texture values and constant vectors \\ |
|
296 |
- real values used to interpolate between colors |
Our need for the combiners is rather unconventional: |
297 |
|
we want to lose most of the information from the texture input values |
298 |
band-like |
for the shapes of the basis textures to not become visible. |
299 |
- draws a ``surface contour'' \\ |
Additionally, we want to create new, different shapes by varying |
300 |
- computed by squaring the distance from the contour level |
the parameters of the combiner code based on the seed number. |
301 |
|
|
302 |
{\bf jvk} |
We use dot products between texture values and random constant vectors |
303 |
|
to extract information from the textures. |
304 |
|
Because the numeric range of all register values is $[-1,1]$, |
305 |
|
information is best lost by using the built-in output scaling (by $2$ or $4$) |
306 |
|
of the dot product results before clamping to the register range. |
307 |
|
|
308 |
|
New shapes can be created by computing polynomials of the real values. |
309 |
|
For example, the zero value contour of a real value can be obtained |
310 |
|
by squaring the value, scaling up, and then clamping to $1$. |
311 |
|
This produces nice band-like shapes. |
312 |
|
|
313 |
|
Finally, the computed real values are used for interpolating between |
314 |
|
the colors chosed for the texture. Typically, because of the scaling |
315 |
|
and clamping, the interpolation values have modes at $0$ and $1$ |
316 |
|
and a transition band between the modes. |
317 |
|
|
318 |
|
|
319 |
|
%Because of the unconventional uses, the limitations of the |
320 |
|
%register combiners come up sooner: for example, |
321 |
|
%the output values can be scaled up only once per each general |
322 |
|
%combiner stage by at most 4. |
323 |
|
|
324 |
\subsection{Multi-pass} |
\subsection{Multi-pass} |
325 |
|
|
326 |
A simple way of increasing the visual features of the |
A simple way of increasing the visual features of the |
327 |
textures is to use multiple passes. |
textures is to use multiple passes. |
328 |
An alpha value computed with register combiners can be |
The register combiners can be used to compute an alpha |
329 |
used for blending shapes over the texture drawn in the first pass. |
value in the same way as the color interpolation values |
330 |
This allows using features of different combiner codes |
and use it for blending shapes over the texture drawn in the first pass. |
331 |
|
This allows using features of different register combiner codes |
332 |
in one texture. |
in one texture. |
333 |
|
|
334 |
All the passes are assigned the same set of colors and |
All the passes are assigned the same set of colors and |
339 |
|
|
340 |
{\bf jvk} |
{\bf jvk} |
341 |
|
|
342 |
|
\subsection{Texture shading} |
343 |
|
|
344 |
|
Offset textures used for creating new shapes. |
345 |
|
|
346 |
\section{Example application} |
\section{Example application} |
347 |
|
|
348 |
\begin{figure*} |
\begin{figure*} |