LOD Displace
This shader is a result of an experimentation with the application of AOV (Arbritary Output Variables) in RenderMan. More specifically, a depth pass was calculated from the camera using zdepth = depth(P). A ray is shot from camera space in the z axis to determine a point distance from the camera. Obvious uses for the AOV received from this function is depth of field application in post. This function however, may not be limited to only this use. The initial idea for this experiment was to see if we can create a heat wave effect using distance of point P from camera. I however proceeded to go a different path to see if i could create a shader that can calculate displacements based on distance of geometry from camera. Here are some screenshots thus far.:
This default greyscale output may be used to simulate depth of field in post. |
In this basic displacement shader, a 3d Noise function is driven by the proximity of point P from the camera. |
Using depth(P) function in a constant shader, I can also output the same grey values by multiplying the surface color by the depth result. This introduces the possibility of volumetric calculations also. |
Close focal distance with "depth pass" |
Far focal distance with "depth pass" |
The noise is driven by proximity of P, located in the camera coordinate system. To make the noise stick to the surface I store the value of P in another variable, transforming it into object space instead. This way, the noise driven displacement stay stationary. One can notice from the clip below that once the camera moves back, the geometry eventually disappears. This is because of excessive clipping of the displacement because it goes beyond the displacement bounds. Just increasing the displacement bounds would fix that problem.
|