---
title: "init(named:in:)"
framework: realitykit
role: symbol
role_heading: Initializer
path: "realitykit/custommaterial/surfaceshader/init(named:in:)"
---

# init(named:in:)

Creates a surface shader object from a named function in a Metal library.

## Declaration

```swift
init(named name: String, in library: any MTLLibrary)
```

## Parameters

- `name`: The name of the surface shader function.
- `library`: The Metal library that contains the function.

## Discussion

Discussion To create a surface shader for a custom material, create a Metal file in your Xcode project. Prefix the function with the keyword [[visible]]. The function needs to take a single parameter of type realitykit::surface_parameters. Here’s what a minimal surface shader function looks like: #include <metal_stdlib> #include <RealityKit/RealityKit.h>

// Specify the current default namespace as metal so our code // doesn't have to to prefix Metal Standard Library symbols. using namespace metal;

[[visible]] void mySurfaceShader(realitykit::surface_parameters params) {    // Calculate parameters needed for rendering. } To create a custom material using this shader, get a reference to your app’s Metal library: guard let device = MTLCreateSystemDefaultDevice() else {     fatalError("Error creating default metal device.") } guard let library = maybeDevice.makeDefaultLibrary() else {     fatalError("Error creating default metal library") } Once you have a reference to your Metal library, use it to create the surface shader reference: let surfaceShader = CustomMaterial.SurfaceShader(     named: "mySurfaceShader",     in: library ) important: RealityKit loads surface shader functions by name, so name your surface shader uniquely and to exactly match the named parameter. For more information on creating custom materials and writing shader functions, see Modifying RealityKit rendering using custom materials.
