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

IProbeIntegrator.IntegrateIndirectRadiance(IDeviceContext,int,int,int,BufferSlice<SphericalHarmonicsL2>)

Параметры

Параметр Описание
контекст Контекст устройства для вычислений и операций памяти.
positionOffset Начальный индекс в буфере положения зонда.
positionCount Число позиций зонда для обработки.
sampleCount Число проб, отбираемых с помощью каждого пробника.
ignoreEnvironment Если &quot; да &quot;, то из расчета косвенного вклада исключается освещение окружающей среды.
radianceEstimateOut Выходный буферный фрагмент, в который записывается оценка косвенного излучения, кодируемый как коэффициенты сферических гармоник.

Возвращаемое значение

void Результат, указывающий на успех или неудачу с подробной информацией об ошибке.

Описание

Расчет вклада косвенного освещения в местах расположения зондов с использованием сферической выборки и трассирования.

Этот метод выполняет расчеты глобального освещения с многократным отражением путем отслеживания лучей от каждого положения зонда и накопления отражений света через сцену. Число отражений контролируется параметром отражений, установленным в Prepare.

Косвенное излучение включает в себя вклад от:

  • Свет отражается от поверхностей.
  • Свет, пропускаемый через прозрачные материалы.
  • Освещение из эмиссионных материалов.
  • Мульти-отскок окружающей среды освещения.

Более высокое число выборок и отсеков значительно повышает качество, но увеличивает время вычислений.

// 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);

// Compute indirect lighting var indirectResult = integrator.IntegrateIndirectRadiance(context, 0, probeCount, 2048, false, indirectBuffer);

// Cleanup integrator.Dispose(); context.DestroyBuffer(posBuffer); context.DestroyBuffer(indirectBuffer); probePositions.Dispose();