Skip to main content
Fading Object Shader         A fade-to-dark effect

Description

This shader applies to an object a color that fade to dark when getting away from the camera. I use it for large object, to emphase the feeling of largeness. The object is not textured, but just colorized.

Gradient_shader.jpg

Usage

To use the shader, you will need to give 2 custom parameters:

  • the color of the object.
  • the radius of the object.


And then apply the shader/gradient material to your object.
Example :

Copy to clipboard
Vector4 vColour = Vector4(circlecolour.r, circlecolour.g, circlecolour.b, circlecolour.a); Vector4 vRadius = Vector4(mRadius,0,0,0); mObject->setCustomParameter(0,vColour); mObject->setCustomParameter(1,vRadius); mObject->setMaterial("shader/gradient");

Gradientshader.cg

Copy to clipboard
// -------------------------------------------------------------------- // Gradient shader : vertex program // Author : David de Lorenzo // ----------------------------------------------------------------- void gradient_vp( in float4 position : POSITION, uniform float4x4 worldViewProj, uniform float3 camera_position_object_space, uniform float4 customParamColour, uniform float4 customParamRadius, out float4 oPosition : POSITION, out float4 oColor : COLOR ) { // Get the custom parameters float objectradius = customParamRadius.x; // calculate output position oPosition = mul(worldViewProj, position); // Calculate the color value, depending on the position float3 vect_center_to_cam = camera_position_object_space; float3 position_closest = normalize(vect_center_to_cam) * objectradius; float Rc = (position_closest.z * position.z ) + (position_closest.x * position.x); // Ratio on Center-to-Cam axis Rc = Rc / (objectradius * objectradius); // recalibrate (-1..1) float ratio = (1+Rc); // recalibrate ( 0..2) - (x2 to emphasis the color) oColor= ratio * customParamColour; } // ----------------------------------------------------------------- // Gradient shader : fragment program // Author : David de Lorenzo // ----------------------------------------------------------------- float4 main_fp(in float4 color : COLOR) : COLOR0 { return (color); }

Gradientshader.material

Copy to clipboard
vertex_program shader/gradientVP cg { source gradientshader.cg entry_point gradient_vp profiles vs_1_1 default_params { param_named_auto worldViewProj worldviewproj_matrix param_named_auto camera_position_object_space camera_position_object_space } } fragment_program shader/gradientFP cg { source gradientshader.cg entry_point main_fp profiles ps_1_1 } material shader/gradient { technique { pass { vertex_program_ref shader/gradientVP { param_named_auto customParamColour custom 0 param_named_auto customParamRadius custom 1 } fragment_program_ref shader/gradientFP { } } } }


Alias: Fading_Object_Shader