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

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Настройка отслеживания прогресса для операций интеграции.