<!--
{
  "availability" : [
    "iOS: 8.0.0 - 26.0.0",
    "iPadOS: 8.0.0 - 26.0.0",
    "macCatalyst: 13.1.0 - 26.0.0",
    "macOS: 10.8.0 - 26.0.0",
    "tvOS: 9.0.0 - 26.0.0",
    "visionOS: 1.0.0 - 26.0.0",
    "watchOS: 3.0.0 - 26.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "SceneKit",
  "identifier" : "/documentation/SceneKit/SCNMaterial/normal",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Property",
  "symbol" : {
    "kind" : "Instance Property",
    "modules" : [
      "SceneKit"
    ],
    "preciseIdentifier" : "c:objc(cs)SCNMaterial(py)normal"
  },
  "title" : "normal"
}
-->

# normal

An object that defines the nominal orientation of the surface at each point for use in lighting.

```
var normal: SCNMaterialProperty { get }
```

## Discussion

Simulating the interaction of lights with a material requires information about the orientation of the surface at each point. Typically, normal vectors provided by a geometry object provide this information. However, this limits the level of detail for surface contours because a geometry can only provide one unique surface normal vector per vertex (and increasing vertex count to model a highly detailed surface exacts a high performance cost).

Alternatively, you can use a texture image as a *normal map* that describes the orientation of a surface for each pixel in the texture. When SceneKit uses an image, it treats the R, G, and B components of each as the X, Y, and Z components of a surface normal vector. Because a normal map texture can store much more detailed surface information than a geometry, you can use a material’s normal property to simulate rough surfaces such as stone or add embossed or engraved designs to an otherwise smooth surface.

By default, the normal property’s [`contents`](/documentation/SceneKit/SCNMaterialProperty/contents) object is a white color. Setting the normal property’s contents to any solid color disables normal mapping, causing SceneKit to shade the material using only the surface normal information provided by its geometry. Setting the normal property’s contents to an image or other texture-mapped content enables normal mapping, which also automatically sets the material’s [`isLitPerPixel`](/documentation/SceneKit/SCNMaterial/isLitPerPixel) property to <doc://com.apple.documentation/documentation/Swift/true>.

The figure below shows the effect of setting the normal property’s contents to a texture image on a material whose other properties have default contents.

![](images/com.apple.scenekit/media-2934163@2x.png)

The material’s [`lightingModel`](/documentation/SceneKit/SCNMaterial/lightingModel-swift.property) property determines the formula SceneKit uses to combine its surface normals and other visual properties with lights and other contents in a scene to produce the final color for each rendered pixel in the rendered scene. For details, see `Lighting Models`.

## See Also

[`specular`](/documentation/SceneKit/SCNMaterial/specular)

An object that manages the material’s specular response to lighting.

[`reflective`](/documentation/SceneKit/SCNMaterial/reflective)

An object that defines the reflected color for each point on a surface.

[`multiply`](/documentation/SceneKit/SCNMaterial/multiply)

An object that provides color values that are multiplied with pixels in a material after all other shading is complete.

[`ambient`](/documentation/SceneKit/SCNMaterial/ambient)

An object that manages the material’s response to ambient lighting.

[`transparent`](/documentation/SceneKit/SCNMaterial/transparent)

An object that determines the opacity of each point in a material.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)