Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

LightProbes.CalculateInterpolatedLightAndOcclusionProbes

Declaration

public static void CalculateInterpolatedLightAndOcclusionProbes(Vector3[] positions, SphericalHarmonicsL2[] lightProbes, Vector4[] occlusionProbes);
public static void CalculateInterpolatedLightAndOcclusionProbes(List<Vector3> positions, List<SphericalHarmonicsL2> lightProbes, List<Vector4> occlusionProbes);

Параметры

Параметр Описание
должностей Система мировых космических позиций, используемая для оценки зондов.
lightProbes Массив, в который записываются полученные светочувствительные зонды.
occlusionProbes Массив, в который записываются полученные зонды окклюзии.

Описание

Рассчитать световые зонды и окклюзионные зонды на данных мировых космических позициях.

Если в емкости не запекаются пробники, то Scene, зонд окружающей среды будет записан в lightProbes массив и Vector4 (1,1,1,1) будет записано в occlusionProbes массив.
ArgumentNullException бросается, если positions является null.
Вы можете пропустить либо lightProbes или occlusionProbes массив по прохождению null функции, но вы не можете опустить оба массива одновременно. Если оба массива опущены, ArgumentException брошена. lightProbes и occlusionProbes следует рассчитывать вместе для лучшей работы.
Для перегрузки, которая принимает массивы в качестве аргументов, lightProbes и occlusionProbes должно иметь по крайней мере такое же число элементов, как и positions массив.
Для перегрузки, которая принимает списки в качестве аргументов, выходные списки будут изменены в соответствии с размером positions массив, если в заданном списке не хватает места.
Возвращенные зонды могут быть далее использованы для инстанционного отображения путем копирования их в MaterialPropertyBlock объект через MaterialPropertyBlock.CopySHCoefficientArraysFrom и MaterialPropertyBlock.CopyProbeOcclusionArrayFrom.

using UnityEngine;

// This script uses OnPreCull for the rendering. It is mandatory to put the script to a Camera object. // Make sure light probes are placed and baked in the Scene. // Use Shadowmask mode and mixed lights to see occlusion probes approximating shadowness. [RequireComponent(typeof(Camera))] public class Simple : MonoBehaviour { public Material material;

private Matrix4x4[] transforms; private MaterialPropertyBlock properties; private Mesh cubeMesh;

void Start() { const int kCount = 100;

// Generate 100 random positions var positions = new Vector3[kCount]; for (int i = 0; i < kCount; ++i) positions[i] = new Vector3(Random.Range(-20.0f, 20.0f), Random.Range(-20.0f, 20.0f), Random.Range(-20.0f, 20.0f));

// Calculate probes at these positions var lightprobes = new UnityEngine.Rendering.SphericalHarmonicsL2[kCount]; var occlusionprobes = new Vector4[kCount]; LightProbes.CalculateInterpolatedLightAndOcclusionProbes(positions, lightprobes, occlusionprobes);

// Put them into the MPB properties = new MaterialPropertyBlock(); properties.CopySHCoefficientArraysFrom(lightprobes); properties.CopyProbeOcclusionArrayFrom(occlusionprobes);

// Compute the transforms list transforms = new Matrix4x4[kCount]; for (int i = 0; i < kCount; ++i) transforms[i] = Matrix4x4.Translate(positions[i]);

// Create the cube mesh cubeMesh = GameObject.CreatePrimitive(PrimitiveType.Cube).GetComponent<MeshFilter>().sharedMesh;

// Make sure the material property is assigned if (material == null || !material.enableInstancing) Debug.LogError("material must be assigned with one with instancing enabled."); }

// OnPreCull happens before every culling, which is the perfect timing to inject DrawMesh* function calls. void OnPreCull() { if (material != null && material.enableInstancing) { RenderParams rp = new RenderParams(material) { matProps = properties, lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.CustomProvided, // enable instancing for probes shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On, receiveShadows = true }; Graphics.RenderMeshInstanced(rp, cubeMesh, 0, transforms); } } }

В примере показано, как использовать зонды печеного света для повышения визуального качества инстанционного рендеринга.