PRT for Arbitrary Geometries

How to store in transfer signals in implicit surfaces


Part 1 - Unnecessary tessellations
Part 2 - Use Neural Transfer Approximator

What to do in case of Implicit surfaces? The work is presented in two parts:

Part 1 - Unnecessary tessellations

The the naive approach of the using vertex attributes to store the transfer usually causes the following issues:

Earlier methods mostly concentrated on the using the high-tessellations [PRT Sloan et al. 2002] else it causes artefacts like one show in the results in 2nd left. Use of the UV-mapped space to store the Transfer is more appropriate option. In case of the Glossy surfaces it requires a storage of the a matrix which increases memory requirement. But we used Triple product formulations to allevate the problem and stored a vector instead of matrix as now we can store the vectors in the UV-mapped texture.

We also incorporated the secondary bounce information in the setting:

(a) Method of calculating secondary irradiance, (b) Results of Interreflections

But this suffer from the problem of accurate UV Mapped Texturing requirement, else you see the results as show below: We have used the multiple textures for each sub-geometry and it occupies same memory

Results of Texture-sets

Here are some results

(left) Results of Transfer Textures, (right) Results of Interreflections
Still requires a good UV preserving mapping.

Part 2 - Use Neural Transfer Approximator

Implicit surfaces do not have any UV locations As the surface representation does not have a storage schema, how can we store transfer values?

  • It does not have a Vertex Position
  • It does not have UV mapping

What we do then?

1) Sample points, calculate the visibility.

Data Creation

2) Fit a small shallow MLP which can regress a transfer from the surface parameters? (normal and position)


3) Once fit extract weights into mat4 ops rather than serial for loops

4) Extract the MLP weights into GLSL for a forward evaluation

GLSL Implementation

5) In case network is big CUDA based implementation helps. Refer to the paper for more info

CUDA Implementation

6) Large scence

Large Scenes