IProbeIntegrator
интерфейс в UnityEngine.LightTransport
Описание
Интерфейс для операций интеграции светочувствительных зондов, обычно используемый для глобальной запекания освещения.
Интерфейс IProbeIntegrator предоставляет методы для вычисления различных составляющих освещения в позициях зондов освещения: прямой яркости, непрямой яркости, затенения и достоверности. Эти операции необходимы для запекания зондов освещения в системе освещения Unity.
Unity предоставляет конкретную реализацию этого интерфейса:
- UnityEngine.LightTransport.RadeonRaysProbeIntegrator для GPU-ускоренной интеграции с использованием OpenCL 1.2.
Интегратор работает на позициях световых зондов и генерирует коэффициенты сферических гармоник для освещения и значения окклюзии для смешанных сценариев освещения.
// Extract scene data bool result = InputExtraction.ExtractFromScene(out var input); Assert.IsTrue(result);
// Create context and world using var context = new RadeonRaysContext(); Assert.IsTrue(context.Initialize()); var world = new RadeonRaysWorld();
// Populate world with scene data using var progress = new BakeProgressState(); var worldResult = InputExtraction.PopulateWorld(input, progress, context, world); Assert.IsTrue(worldResult);
// Create integrator var integrator = new RadeonRaysProbeIntegrator(); integrator.SetProgressReporter(progress);
// Prepare probe positions var probePositions = new NativeArray<Vector3>(64, Allocator.Persistent); // ... fill probe positions ...
BufferID posBuffer = context.CreateBuffer(64, 12); // Vector3 = 12 bytes var posSlice = new BufferSlice<Vector3>(posBuffer, 0); context.WriteBuffer(posSlice, probePositions);
// Prepare integrator integrator.Prepare(context, world, posSlice, 0.1f, 2);
// Create output buffer for direct and indirect spherical harmonics BufferID shBuffer = context.CreateBuffer(64, 108); // SHL2 = 108 bytes var shSlice = new BufferSlice<SphericalHarmonicsL2>(shBuffer, 0); BufferID shBufferIndirect = context.CreateBuffer(64, 108); // SHL2 = 108 bytes var shSliceIndirect = new BufferSlice<SphericalHarmonicsL2>(shBuffer, 0);
// Integrate direct lighting var directResult = integrator.IntegrateDirectRadiance(context, 0, 64, 128, false, shSlice); Assert.AreEqual(IProbeIntegrator.ResultType.Success, directResult.type);
// Integrate indirect lighting var indirectResult = integrator.IntegrateIndirectRadiance(context, 0, 64, 2048, false, shSliceIndirect); Assert.AreEqual(IProbeIntegrator.ResultType.Success, indirectResult.type);
// Combine direct and indirect results if needed using the IProbePostProcessor interface.
// Cleanup integrator.Dispose(); context.DestroyBuffer(posBuffer); context.DestroyBuffer(shBuffer); context.DestroyBuffer(shBufferIndirect); probePositions.Dispose();
Открытые методы
| Метод | Описание |
|---|---|
| IntegrateDirectRadiance | Расчет прямого освещения в местах расположения зондов с использованием сферической выборки. |
| IntegrateIndirectRadiance | Расчет вклада косвенного освещения в местах расположения зондов с использованием сферической выборки и трассирования. |
| IntegrateOcclusion | Вычисляет значения окклюзии для сценариев смешанного освещения с поддержкой shadowmask. |
| IntegrateValidity | Расчет коэффициентов достоверности, указывающих на надежность каждого положения зонда. |
| Prepare | Инициализация интегратора зонда с данными сцены и параметрами интеграции. |
| SetProgressReporter | Настройка отслеживания прогресса для операций интеграции. |