Distant-specular lighting effect

Use the distant-specular lighting effect to create an image that appears to be a reflective surface where the light source appears to be coming from a long distance (like the sun or overhead lights). This effect uses the alpha channel as a height map and lights the image with a distant light source.

The color of the output bitmap is a result of light color, light position, and the surface geometry. The alpha channel output for each pixel with specular lighting is the maximum of the red, green, and blue channel outputs for that pixel.

The CLSID for this effect is CLSID_D2D1DistantSpecular.

Example image

The example here shows the input and output images of the distant-specular lighting effect.

Effect example screenshot showing the input and output images of the distant specular lighting effect.

The final output bitmap can be calculated using the following equations.

Output Bitmap Calculation

where

ks = specular lighting constant.
Surface normal symbol.= surface normal unit vector.
Halfway vector symbol.= "halfway" unit vector between eye unit vector and light unit vector.
Cr, Cg, Cb = the light color in RGB components.

Distant light source

The image here shows an example of the direction of light from a distant light source.

Distant Light Source

The effect uses the azimuth and elevation parameters to calculate the light vector L vector. using the following equations:

Light Vector Calculation

where Lightx, Lighty, and Lightz are the input light position values.

Effect properties

Display name and index enumerationType and default valueDescription

Azimuth

D2D1_DISTANTSPECULAR_PROP_AZIMUTH

FLOAT

0.0f

The direction angle of the light source in the XY plane relative to the X-axis in the counter clock wise direction. The units are in degrees and must be between 0 and 360 degrees.

Elevation

D2D1_DISTANTSPECULAR_PROP_ELEVATION

FLOAT

0.0f

The direction angle of the light source in the YZ plane relative to the Y-axis in the counter clock wise direction. The units are in degrees and must be between 0 and 360 degrees.

SpecularExponent

D2D1_DISTANTSPECULAR_PROP_SPECULAR_EXPONENT

FLOAT

1.0f

The exponent for the specular term in the Phong lighting equation. A larger value corresponds to a more reflective surface. The value is unitless and must be between 1.0 and 128.

SpecularConstant

D2D1_DISTANTSPECULAR_PROP_SPECULAR_CONSTANT

FLOAT

1.0f

The ratio of specular reflection to the incoming light. The value is unitless and must be between 0 and 10,000.

SurfaceScale

D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE

FLOAT

1.0f

The scale factor in the Z direction. The value is unitless and must be between 0 and 10,000.

Color

D2D1_DISTANTSPECULAR_PROP_COLOR

D2D1_VECTOR_3F

{1.0f, 1.0f, 1.0f}

The color of the incoming light. This property is exposed as a D2D1_VECTOR_3F – (R, G, B) and used to compute LR, LG, LB.

KernelUnitLength

D2D1_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH

D2D1_VECTOR_2F

{1.0f, 1.0f}

The size of an element in the Sobel kernel used to generate the surface normal in the X and Y direction. This property is a D2D1_VECTOR_2F (Kernel Unit Length X, Kernel Unit Length Y) and is defined in (device-independent pixels (DIPs)/Kernel Unit). The effect uses bilinear interpolation to scale the bitmap to match size of kernel elements.

ScaleMode

D2D1_DISTANTSPECULAR_PROP_SCALE_MODE

D2D1_DISTANTSPECULAR_SCALE_MODE

D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR

The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.

 

Scale modes

EnumerationDescription
D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBORSamples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.
D2D1_DISTANTSPECULAR_SCALE_MODE_LINEARUses a four point sample and linear interpolation. This mode outputs a higher quality image than nearest neighbor.
D2D1_DISTANTSPECULAR_SCALE_MODE_CUBICUses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image.
D2D1_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEARUses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.
D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPICUses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.
D2D1_DISTANTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBICUses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.

 

Note  If you don't select a mode, the effect defaults to D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR.

Sample code

For an example of this effect, download the Direct2D lighting effects sample.

Requirements

Minimum supported clientWindows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps]
Minimum supported serverWindows 8 and Platform Update for Windows 7 [desktop apps | Windows Store apps]
Headerd2d1effects.h
Libraryd2d1.lib, dxguid.lib

 

Related topics

ID2D1Effect

 

 

Community Additions

ADD
Show:
© 2014 Microsoft