Generic Render Operator Visibility Options

From Valve Developer Community
Jump to: navigation, search

Every render operator has options that can control the visibility of particles created within that system. These options are specific to the renderer because each particle system may be rendered multiple times from multiple cameras, despite only being simulated once. So traditional operators should not be involved with camera specific operations to particles because you don't always know that it might not be seen multiple times via splitscreen, render-to-texture style in game surfaces (monitors, overlays, etc.), portraits, etc.

Single or multiple inputs can be used simultaneously such as a Pixel Visibility proxy, distance and dot-product tests. The total of these inputs will be applied to the outputs of the system, be it alpha or radius or both.

Inputs


Visibility Proxy Input Control Point Number [int]
If set, this determines which control point will be used as a reference point for all visibility inputs to the system. Visibility input/output settings disabled if -1.
Visibility Proxy Radius [float]
If set, this is the size, in units, of the pixel occlusion visibility proxy that will be created at the input control point. The number of pixels visible of this proxy will be returns as a percentage between 0-1. Larger proxy radius means more potential pixels to be seen relative to anything that could occlude them. If all pixels are occluded by geometry, such as behind a character or wall, 0 will be returned to the Visibility Input. If all are visible, 1 will be returned.
Visibility input minimum [float]
This is the minimum amount of pixels visible to be remapped into the output for visibility. A normal range of 0-1 for min/max inputs will remap the visibility of the proxy normally. However, it can be clamped on either end to provide more or less aggressive remapping. For example a range of .5-1 would mean that once the proxy is 50% occluded, the output value would be the minimum. Setting both input/output to 0 disables.
Visibility input maximum [float]
This is the maximum amount of pixels visible to be remapped into the output for visibility. A normal range of 0-1 for min/max inputs will remap the visibility of the proxy normally. However, it can be clamped on either end to provide more or less aggressive remapping. For example a range of 0-.5 would mean that once the proxy is 50% visible, the output value would be the maximum. Setting both input/output to 0 disables.


Visibility input dot minimum [float]
Visibility input dot maximum [float]
Like visibility input min/max, this takes the referenced control point and does a dot product of the current camera versus the orientation of the control point. The range returned is -1 to 1. This is essentially the facing or how similar the two orientations are to one another. -1 means the two orientations are opposite of one another, which for our purposes means facing. 1 means they're pointed the same direction. 0 means their orthogonal, or 90% off. This value can be remapped into the output. This is useful for changing the brightness or radius of a light beam, lens flare, car headlights, or explosion, for example, based on how much it is facing into the camera.
Visibility input distance minimum [float]
Visibility input distance maximum [float]
Like visibility input min/max, this takes the referenced control point and does a distance check to it in units. The percentage between the two distances will be remapped into the visibility outputs.


Outputs


Visibility Alpha Scale minimum [float]
Visibility Alpha Scale maximum [float]
Visibility Radius Scale minimum [float]
Visibility Radius Scale maximum [float]
If a pair is set to non-zero, the inputs will be remapped into these outputs. Generally speaking this will be used by pixel visibility to make $ignorez particles fade away when occluded by geometry with a standard 0.0 - 1.0 range. These can be clamped inside of the 0-1 range or overdriven outside of the range. So for example the distance of the control point could fade the particle between 0.5 - 1.0 but scale it from 4.0 - 1.0 meaning at one end of the distance range all particles are rendered half as opaque but 4 times as large, while at the other end they are normal as output by simulation.
Visibility Radius FOV Scale base [float]
If set, this output will scale radius based on the FOV of the camera, so as the FOV of the camera changes, particles maintain the same pixel width on screen (for 1.0) or warped as some scale of the rest of the scene.
Visibility Camera Depth Bias [float]
If set, particles will be spatially biased towards or away from the current camera in units, effectively pushed out of or into nearby geometry. Useful for effects which do not ignore the z-buffer, but are in situations where they may clip nearby geometry. This allows them to be pushed towards the camera, regardless of camera position relative to the effect. If negative, the effect is pushed away from the camera, allowing for things like silhouettes and such where regardless of rotation about an object, particles will always appear behind it.