...
Light filters implement the RixLightFilter interface found in RixLightFilter.h. A light filter must implement three methods: Filter(), GetProperty(), and GetRadianceModifier().
Filter()
Filter is where the work is done.
...
Code Block | ||
---|---|---|
| ||
for(int j = 0; j < contribution->GetNumSpecularLobes(); ++j) { for(int i = 0; i < numSamples; ++i) { contribution->GetSpecularLobe(j)[i] *= RtColorRGB(1.0,0.0f,0.0f); } } for(int j = 0; j < contribution->GetNumDiffuseLobes(); ++j) { for(int i = 0; i < numSamples; ++i) { contribution->GetDiffuseLobe(j)[i] *= RtColorRGB(1.0,0.0f,0.0f); } } |
GetProperty()
GetRadianceModifier()
Instance Data
For a detailed discussion of instance data, see lightweight instancing services. When the CreateInstanceData routine is called, the plugin has access to the parameter list of the light filter and can create arbitrary data that is stored by the renderer and supplied as the instanceData pointer during filtering. This should be uniform data that can be accessed by multiple threads simultaneously. Pre-processing the parameter list is an important performance optimization. A light filter will be invoked for every surface-to-light interaction, and in a production-level shot there can be billions of these events.
...