Skip to content

ComputeNormalMap

Chuck Walbourn edited this page Dec 3, 2018 · 7 revisions

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 monochrome value computed from 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.

For Use

  • Universal Windows Platform apps
  • Windows desktop apps
  • Windows 11
  • Windows 10
  • Windows 8.1
  • Xbox One
  • Xbox Series X|S
  • Windows Subsystem for Linux

Architecture

  • x86
  • x64
  • ARM64

For Development

  • Visual Studio 2022
  • Visual Studio 2019 (16.11)
  • clang/LLVM v12 - v18
  • GCC 10.5, 11.4, 12.3
  • MinGW 12.2, 13.2
  • CMake 3.20

Related Projects

DirectXTex Rust bindings

DirectX Tool Kit for DirectX 11

DirectX Tool Kit for DirectX 12

DirectXMesh

DirectXMath

Tools

Test Suite

Content Exporter

DxCapsViewer

See also

DirectX Landing Page

Clone this wiki locally