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

IProbeIntegrator.IntegrateOcclusion

Declaration

public LightTransport.IProbeIntegrator.Result IntegrateOcclusion(LightTransport.IDeviceContext context, int positionOffset, int positionCount, int sampleCount, int maxLightsPerProbe, BufferSlice<int> perProbeLightIndices, BufferSlice<float> probeOcclusionEstimateOut);

Параметры

Параметр Описание
контекст Контекст устройства для вычислений и операций памяти.
positionOffset Начальный индекс в буфере положения зонда.
positionCount Число позиций зонда для обработки.
sampleCount Число направленных проб, отбираемых с помощью каждого пробника.
maxLightsPerProbe Максимальное число огней для расчета окклюзии на зонд (обычно 4).
perProbeLightIndices Буфер, содержащий световые индексы для каждого пробника, рассчитанные с использованием ,InputExtraction.ComputeOcclusionLightIndicesFromBakeInput,.
probeOcclusionEstimateOut Выходный буфер для значений окклюзии. Размер должен быть positionCount × maxLightsPerProbe × sizeof(float).

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

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

Описание

Вычисляет значения окклюзии для сценариев смешанного освещения с поддержкой shadowmask.

Этот метод рассчитывает коэффициенты окклюзии для смешанных источников света в каждом положении зонда. Смешанные источники света — это источники света, которые обеспечивают как динамическое освещение в реальном времени, так и печеные тени через маски теней.

Расчет окклюзии:

  • Значение 1.0: отсутствие окклюзии (свет полностью видим).
  • Значения от 0 до 1: частичное окклюзионное состояние.
  • Значение 0.0: полная окклюзия (свет полностью блокируется).

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

Дополнительные ресурсы: InputExtraction.ComputeOcclusionLightIndicesFromBakeInput, InputExtraction.GetShadowmaskChannelsFromLightIndices.

// Compute light indices for occlusion
var probePositions = GetProbePositions(); // Vector3[]
var lightIndices = InputExtraction.ComputeOcclusionLightIndicesFromBakeInput(bakeInput, probePositions, 4);

// Create buffer for light indices BufferID lightIndexBuffer = context.CreateBuffer((ulong)(probePositions.Length * 4), sizeof(int)); var lightIndexSlice = new BufferSlice<int>(lightIndexBuffer, 0); context.WriteBuffer(lightIndexSlice, new NativeArray<int>(lightIndices, Allocator.Temp));

// Create output buffer for occlusion values BufferID occlusionBuffer = context.CreateBuffer((ulong)(probePositions.Length * 4), sizeof(float)); var occlusionSlice = new BufferSlice<float>(occlusionBuffer, 0);

// Compute occlusion var result = integrator.IntegrateOcclusion(context, 0, probePositions.Length, 512, 4, lightIndexSlice, occlusionSlice);

Assert.AreEqual(IProbeIntegrator.ResultType.Success, result.type);