# CopySHCoefficientArraysFrom

> This function converts and copies the entire source array into 7 Vector4 property arrays named unity_SHAr, unity_SHAg, unity_SHAb, unity_SHBr, unity_SHBg, unity_SHBb and unity_SHC for use with instanced light probe rendering.

## Definition

* **Type:** Method
* **Namespace:** [UnityEngine](/engine/6000.3/script-reference/unityengine.md)
* **Assembly:** UnityEngine.CoreModule

## CopySHCoefficientArraysFrom(List\<SphericalHarmonicsL2>)

This function converts and copies the entire source array into 7 Vector4 property arrays named `unity_SHAr`, `unity_SHAg`, `unity_SHAb`, `unity_SHBr`, `unity_SHBg`, `unity_SHBb` and `unity_SHC` for use with instanced [light probe](/engine/6000.3/script-reference/unityengine/lightprobes.md) rendering.

```csharp
public void CopySHCoefficientArraysFrom(List<SphericalHarmonicsL2> lightProbes)
```

### Parameters

**** (\[List\<SphericalHarmonicsL2>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of SH values to copy from.

### Remarks

If the array properties don't exist on the MaterialPropertyBlock, they will be created with the length of the source array.

Call [LightProbes.CalculateInterpolatedLightAndOcclusionProbes](/engine/6000.3/script-reference/unityengine/lightprobes/calculateinterpolatedlightandocclusionprobes.md) to calculate SH values at the given world space positions.

ArgumentNullException is thrown if `lightProbes` is `null`.

Note that all MaterialPropertyBlock arrays can only have a maximum of 1023 elements. Warnings are printed and the excess array elements are ignored if the source array exceeds the range.

Additional Resources: [MaterialPropertyBlock.CopyProbeOcclusionArrayFrom](/engine/6000.3/script-reference/unityengine/materialpropertyblock/copyprobeocclusionarrayfrom.md), [Graphics.RenderMeshInstanced](/engine/6000.3/script-reference/unityengine/graphics/rendermeshinstanced.md), [CommandBuffer.DrawMeshInstanced](/engine/6000.3/script-reference/unityengine/rendering/commandbuffer/drawmeshinstanced.md).

## CopySHCoefficientArraysFrom(SphericalHarmonicsL2\[])

This function converts and copies the entire source array into 7 Vector4 property arrays named `unity_SHAr`, `unity_SHAg`, `unity_SHAb`, `unity_SHBr`, `unity_SHBg`, `unity_SHBb` and `unity_SHC` for use with instanced [light probe](/engine/6000.3/script-reference/unityengine/lightprobes.md) rendering.

```csharp
public void CopySHCoefficientArraysFrom(SphericalHarmonicsL2[] lightProbes)
```

### Parameters

**** (\[SphericalHarmonicsL2\[]]\(/engine/6000.3/script-reference/unityengine/rendering/sphericalharmonicsl2)): The array of SH values to copy from.

### Remarks

If the array properties don't exist on the MaterialPropertyBlock, they will be created with the length of the source array.

Call [LightProbes.CalculateInterpolatedLightAndOcclusionProbes](/engine/6000.3/script-reference/unityengine/lightprobes/calculateinterpolatedlightandocclusionprobes.md) to calculate SH values at the given world space positions.

ArgumentNullException is thrown if `lightProbes` is `null`.

Note that all MaterialPropertyBlock arrays can only have a maximum of 1023 elements. Warnings are printed and the excess array elements are ignored if the source array exceeds the range.

Additional Resources: [MaterialPropertyBlock.CopyProbeOcclusionArrayFrom](/engine/6000.3/script-reference/unityengine/materialpropertyblock/copyprobeocclusionarrayfrom.md), [Graphics.RenderMeshInstanced](/engine/6000.3/script-reference/unityengine/graphics/rendermeshinstanced.md), [CommandBuffer.DrawMeshInstanced](/engine/6000.3/script-reference/unityengine/rendering/commandbuffer/drawmeshinstanced.md).

## CopySHCoefficientArraysFrom(List\<SphericalHarmonicsL2>, int, int, int)

This function converts and copies the source array into 7 Vector4 property arrays named `unity_SHAr`, `unity_SHAg`, `unity_SHAb`, `unity_SHBr`, `unity_SHBg`, `unity_SHBb` and `unity_SHC` with the specified source and destination range for use with instanced [light probe](/engine/6000.3/script-reference/unityengine/lightprobes.md) rendering.

```csharp
public void CopySHCoefficientArraysFrom(List<SphericalHarmonicsL2> lightProbes, int sourceStart, int destStart, int count)
```

### Parameters

**** (\[List\<SphericalHarmonicsL2>]\(https\://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)): The array of SH values to copy from.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the first element in the source array to copy from.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the first element in the destination MaterialPropertyBlock array to copy to.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The number of elements to copy.

### Remarks

If the array properties don't exist on the MaterialPropertyBlock, they will be created with the length of the spcified range.

Call [LightProbes.CalculateInterpolatedLightAndOcclusionProbes](/engine/6000.3/script-reference/unityengine/lightprobes/calculateinterpolatedlightandocclusionprobes.md) to calculate SH values at the given world space positions.

ArgumentNullException is thrown if `occlusionProbes` is `null`.

ArgumentOutOfRangeException is thrown if the source or destination range is invalid.

Note that all MaterialPropertyBlock arrays can only have a maximum of 1023 elements. Warnings are printed and the excess array elements are ignored if the source array exceeds the range.

Additional Resources: [MaterialPropertyBlock.CopyProbeOcclusionArrayFrom](/engine/6000.3/script-reference/unityengine/materialpropertyblock/copyprobeocclusionarrayfrom.md), [Graphics.RenderMeshInstanced](/engine/6000.3/script-reference/unityengine/graphics/rendermeshinstanced.md), [CommandBuffer.DrawMeshInstanced](/engine/6000.3/script-reference/unityengine/rendering/commandbuffer/drawmeshinstanced.md).

## CopySHCoefficientArraysFrom(SphericalHarmonicsL2\[], int, int, int)

This function converts and copies the source array into 7 Vector4 property arrays named `unity_SHAr`, `unity_SHAg`, `unity_SHAb`, `unity_SHBr`, `unity_SHBg`, `unity_SHBb` and `unity_SHC` with the specified source and destination range for use with instanced [light probe](/engine/6000.3/script-reference/unityengine/lightprobes.md) rendering.

```csharp
public void CopySHCoefficientArraysFrom(SphericalHarmonicsL2[] lightProbes, int sourceStart, int destStart, int count)
```

### Parameters

**** (\[SphericalHarmonicsL2\[]]\(/engine/6000.3/script-reference/unityengine/rendering/sphericalharmonicsl2)): The array of SH values to copy from.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the first element in the source array to copy from.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The index of the first element in the destination MaterialPropertyBlock array to copy to.**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The number of elements to copy.

### Remarks

If the array properties don't exist on the MaterialPropertyBlock, they will be created with the length of the spcified range.

Call [LightProbes.CalculateInterpolatedLightAndOcclusionProbes](/engine/6000.3/script-reference/unityengine/lightprobes/calculateinterpolatedlightandocclusionprobes.md) to calculate SH values at the given world space positions.

ArgumentNullException is thrown if `occlusionProbes` is `null`.

ArgumentOutOfRangeException is thrown if the source or destination range is invalid.

Note that all MaterialPropertyBlock arrays can only have a maximum of 1023 elements. Warnings are printed and the excess array elements are ignored if the source array exceeds the range.

Additional Resources: [MaterialPropertyBlock.CopyProbeOcclusionArrayFrom](/engine/6000.3/script-reference/unityengine/materialpropertyblock/copyprobeocclusionarrayfrom.md), [Graphics.RenderMeshInstanced](/engine/6000.3/script-reference/unityengine/graphics/rendermeshinstanced.md), [CommandBuffer.DrawMeshInstanced](/engine/6000.3/script-reference/unityengine/rendering/commandbuffer/drawmeshinstanced.md).
