IProbeIntegrator.IntegrateDirectRadiance(IDeviceContext,int,int,int,BufferSlice<SphericalHarmonicsL2>)
Параметры
| Параметр | Описание |
|---|---|
| контекст | Контекст устройства для вычислений и операций памяти. |
| positionOffset | Начальный индекс в буфере положения зонда. |
| positionCount | Число позиций зонда для обработки. |
| sampleCount | Число проб, отбираемых с помощью каждого пробника. |
| ignoreEnvironment | Если установлен параметр " true ", то из расчета прямого вклада исключается освещение окружающей среды. |
| radianceEstimateOut | Выходный буферный фрагмент, в который записывается оценка прямого излучения, кодируется как коэффициенты сферических гармоник. |
Возвращаемое значение
void Результат, указывающий на успех или неудачу с подробной информацией об ошибке.
Описание
Расчет прямого освещения в местах расположения зондов с использованием сферической выборки.
Этот метод выполняет сферическую выборку вокруг каждой позиции зонда для расчета прямого освещения от всех источников света в сцене. Результаты хранятся как L2 коэффициенты сферических гармоник, которые могут быть использованы для поиска освещения в реальном времени.
Прямое излучение включает в себя вклад от:
- Направленные огни
- Точечные огни
- Светодиодные фонари
- Осветительные приборы
- Освещение окружающей среды (если не игнорируется)
Качество интеграции зависит от количества выборок — более высокие значения дают более точные результаты, но требуют больше времени для расчетов.
// 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);
// Integrate direct lighting var result = integrator.IntegrateDirectRadiance( context, 0, // Start from first probe 32, // Process 32 probes 64, // Faster, low quality sampling, usually okay for final bake if area lights are not used. false, // Include environment lighting shBuffer );
if (result.type != IProbeIntegrator.ResultType.Success) { Debug.LogError($"Direct radiance integration failed: {result}"); } // Cleanup integrator.Dispose(); context.DestroyBuffer(posBuffer); context.DestroyBuffer(shBuffer); probePositions.Dispose();