IProbeIntegrator.Prepare
Declaration
public void Prepare(LightTransport.IDeviceContext context, LightTransport.IWorld world, BufferSlice<Vector3> positions, float pushoff, int bounceCount);Параметры
| Параметр | Описание |
|---|---|
| контекст | Контекст устройства для вычислений и операций памяти. |
| мир | Объект мира, содержащий геометрию сцены и другие входные данные. |
| должностей | Буферный сегмент, содержащий позиции 3D встраиваемых световых зондов. |
| Пусхофф | Расстояние до смещения лучей от позиций зонда во избежание артефактов самопересечения. |
| bounceCount | Максимальное число отражений света для расчетов косвенного освещения. |
Описание
Инициализация интегратора зонда с данными сцены и параметрами интеграции.
Этот метод необходимо вызвать до любых операций интегрирования. Он готовит внутренние структуры данных, при необходимости компилирует шейдеры и задаёт параметры интегрирования.
Этап подготовки может быть весьма продолжительным для крупных сцен, поскольку он может включать:
- Создание ускоряющих структур.
- Компиляция вычислительных шейдеров для целевого устройства.
- Предварительная обработка геометрии сцены и материалов.
- Создание легких структур данных.
Параметр pushoff помогает предотвратить самопересечение луча, когда зонды расположены очень близко к поверхности.
// Create probe positions buffer var probePositions = new NativeArray<Vector3>(numProbes, Allocator.Persistent); // ... populate positions ...
BufferID posBuffer = context.CreateBuffer((ulong)numProbes, 12); var posSlice = new BufferSlice<Vector3>(posBuffer, 0); context.WriteBuffer(posSlice, probePositions); context.Flush();
// Prepare integrator with 2 bounce indirect lighting integrator.Prepare( context, world, posSlice, 0.05f, // 5cm push-off to avoid self-intersection 2 // 2 bounce indirect lighting );
// Now ready for integration operations var result = integrator.IntegrateDirectRadiance(context, 0, numProbes, 1024, false, outputBuffer);