Line 1: |
Line 1: |
− | The 3DS GPU supports procedural generation of texture data using [[GPU_Textures|texture unit 3]]. Little is known about this feature, albeit a few public hints have been dropped. The contents of this page are solely based on reports on a [http://www.4gamer.net/games/017/G001762/20120822007/ presentation] given by DMP. | + | [[Category:GPU]] |
| + | The 3DS GPU supports procedural generation of texture data using [[GPU/Internal_Registers#GPUREG_TEXUNIT3_PROCTEX0|texture unit 3]]. Little is known about this feature, albeit a few public hints have been dropped. The contents of this page are solely based on reports on a [http://www.4gamer.net/games/017/G001762/20120822007/ presentation] given by DMP. |
| + | |
| + | The related GPU registers can be found starting [[GPU/Internal_Registers#GPUREG_TEXUNIT3_PROCTEX0|here]]. |
| | | |
| == Overview == | | == Overview == |
| Procedural texture generation has four stages: | | Procedural texture generation has four stages: |
− | * Noise Module | + | * Noise Module (outputs u′,v′) |
− | * Repeat Module | + | * Repeat Module (outputs u′′,v′′) |
− | * Base Shape | + | * Base Shape (also notated as G(u′′,v′′), output g) |
| * F(g) and Lookup Table | | * F(g) and Lookup Table |
| | | |
| == Noise Module == | | == Noise Module == |
| This stage applies noise on the input coordinates. Little is known about this other than that there are three noise parameters: | | This stage applies noise on the input coordinates. Little is known about this other than that there are three noise parameters: |
− | * Turbulence (?)
| |
| * Amplitude | | * Amplitude |
| + | * Frequency |
| * Phase | | * Phase |
| + | |
| + | These parameters are configured starting [[GPU/Internal_Registers#GPUREG_TEXUNIT3_PROCTEX1|here]]. |
| | | |
| == Repeat Module == | | == Repeat Module == |
Line 19: |
Line 24: |
| == Base Shape == | | == Base Shape == |
| | | |
− | The U’’ and V’’ coordinates are used to generate a scalar value in the range [0;1] from the wrapped coordinates using one of six functions: | + | The U’’ and V’’ coordinates are used to generate a scalar value in the range [0;1] from the wrapped coordinates using one of six functions documented [[GPU/Internal_Registers#GPUREG_TEXUNIT3_PROCTEX0|here]]. |
− | * ADDSQRT2: sqrt(U’’*U’’+V’’*V’’) (?)
| |
− | * U’’: U’’ (discards V’’)
| |
− | * V’’: V’’ (discards U’’)
| |
− | * MIN: min(U’’,V’’)
| |
− | * MAX: min(U’’,V’’)
| |
− | * ADD: U’’+V’’
| |
| | | |
| The output of this function is named "g". | | The output of this function is named "g". |
Line 35: |
Line 34: |
| * a triangle function | | * a triangle function |
| | | |
− | The final texel color is determined by using the value of F(g) as an index into a configurable lookup table (which is presumed to span 3 kilobytes of data). | + | The final texel color is determined by using the value of F(g) as an index into a configurable [[GPU/Internal_Registers#GPUREG_PROCTEX_LUT|lookup table]]. |