Sensors or sensor nodes are invisible objects that can be used to monitor light distributions with a scene without interfering with the rest of the scene or the light modelling. For this, GroIMP provides the SensorNode class, a spherical object that can be placed arbitrarily within the scene. To obtain the sensed spectrum, the function getSensedIrradiance() for the Twilight and the getSensedIrradianceMeasurement() function for the GPUFlux light model needs to be called.
Note: The size of the sensor node directly correlates with the probability of got hit by a light ray. For a very small sphere the probability to got hit by a light ray is relatively low, so the number of light rays simulated by the light model needs to be much larger to get repayable results. Therefore, better not to use very small sensor nodes.
Note: The colour of the sensor node determines which wavelengths should be monitored. The default value is white, what stands for 'monitor all colours'. If, for instance, the sensor colour is set to red, only red spectra will be sensed. One can even use smaller values than one, e.g., to sense less parts of a colour - if for whatever reasons this is wanted.
Note: The output of a sensor node is normalized to absorbed radiance per square meter, independent of the actual size of the sensor.
Note: Sensor nodes can be enabled and disabled for the light model using the LM.setEnableSensors(true/false) function. By default they are disabled, since GroIMP version 2.1.4, before they were enabled by default. Having them disabled speeds up the light computation time for scenarios where not sensor nodes are involved.
Below an (incomplete) example for the spectral GPUFlux light model:
import de.grogra.gpuflux.scene.experiment.Measurement; // create a 5cm, white sensor node Axiom ==> SensorNode().(setRadius(0.05), setColor(1, 1, 1)); const FluxLightModel GPU_LM = new FluxLightModel(RAYS, DEPTH); // enable dispersion GPU_LM.setDispersion(true); //check what the sensor node has sensed x:SensorNode ::> { Measurement spectrum = GPU_LM.getSensedIrradianceMeasurement(x); float absorbedPower = spectrum.integrate(); ... }