diff --git a/ComputeNormalMap.md b/ComputeNormalMap.md new file mode 100644 index 0000000..dabd373 --- /dev/null +++ b/ComputeNormalMap.md @@ -0,0 +1,53 @@ +Converts a height-map to a normal-map. + + HRESULT ComputeNormalMap( const Image& srcImage, DWORD flags, + float amplitude, DXGI_FORMAT format, + ScratchImage& normalMap ); + + HRESULT ComputeNormalMap( const Image* srcImages, size_t nimages, + const TexMetadata& metadata, + DWORD flags, float amplitude, DXGI_FORMAT format, + ScratchImage& normalMaps ); + +# Parameters + +_flags_: a combination of the following flags +* ``CNMAP_DEFAULT`` Default flags + +Selects which channel to use as the height. Luminance is the average of R, G, and B. +* ``CNMAP_CHANNEL_RED`` +* ``CNMAP_CHANNEL_GREEN`` +* ``CNMAP_CHANNEL_BLUE`` +* ``CNMAP_CHANNEL_ALPHA`` +* ``CNMAP_CHANNEL_LUMINANCE`` + +Selects mirroring semantics for scanline references. Otherwise defaults to wrap. +* ``CNMAP_MIRROR_U`` +* ``CNMAP_MIRROR_V`` +* ``CNMAP_MIRROR`` Same as both ``CNMAP_MIRROR_U`` and ``CNMAP_MIRROR_V`` + +* ``CNMAP_INVERT_SIGN`` Inverts the sign of the computed normal vector + +* ``CNMAP_COMPUTE_OCCLUSION`` Computes a crude occlusion term and stores in the resulting alpha channel + +_amplitude_: Scaling factor for normals + +_format_: Format of the resulting ScratchImage + +# Example + + ScratchImage hmapImage; + + ... + + ScratchImage normalMap; + hr = ComputeNormalMap( hmapImage.GetImage(0,0,0), CNMAP_CHANNEL_LUMINANCE | CNMAP_COMPUTE_OCCLUSION, 2.f, DXGI_FORMAT_R8G8B8A8_UNORM, normalMap ); + if ( FAILED(hr) ) + ... + +# Remarks +This function does not operate directly on block compressed images. See [[Decompress]] and [[Compress]]. + +This function cannot operate directly on a planar format image. See [[ConvertToSinglePlane]] for a method for converting planar data to a format that is supported by this routine. + +This method computes the normal by using the central difference with a kernel size of 3x3. The central differencing denominator used is 2.0. RGB channels in the destination contain biased (x,y,z) components of the normal.