IProbeIntegrator.IntegrateIndirectRadiance(IDeviceContext,int,int,int,BufferSlice<SphericalHarmonicsL2>)
Параметры
| Параметр | Описание |
|---|---|
| контекст | Контекст устройства для вычислений и операций памяти. |
| positionOffset | Начальный индекс в буфере положения зонда. |
| positionCount | Число позиций зонда для обработки. |
| sampleCount | Число проб, отбираемых с помощью каждого пробника. |
| ignoreEnvironment | Если " да ", то из расчета косвенного вклада исключается освещение окружающей среды. |
| 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();