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

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

Параметры

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