InputExtraction.PopulateWorld
Declaration
public static bool PopulateWorld(LightTransport.InputExtraction.BakeInput bakeInput, LightTransport.BakeProgressState progress, LightTransport.IDeviceContext context, LightTransport.IWorld world);Параметры
| Параметр | Описание |
|---|---|
| bakeInput | Данные Scene извлечены с помощью ExtractFromScene. |
| прогресс | Объект отслеживания прогресса для мониторинга мирового демографического положения. |
| контекст | Контекст устройства, который будет использоваться для расчетов на легковых транспортных средствах. |
| мир | Объект мира для заполнения обработанными данными сцены. |
Возвращаемое значение
логическое True, если население мира успешно завершено, false, если возникли ошибки.
Описание
Преобразование извлеченных данных сцены в оптимизированные структуры данных для расчетов легкого транспорта.
Этот метод преобразует необработанные данные сцены из BakeInput в оптимизированные структуры данных, подходящие для трассирования лучей и интеграции света. Процесс включает:
Обработка данных:
- Создание структур пространственного ускорения (BVHs) для быстрого пересечения лучей.
- Загрузка геометрии в память устройства.
- Предварительная обработка материалов и текстур.
- Создание легких структур данных для эффективных запросов.
Совместимость устройств:
Заполненный мир оптимизирован для конкретного контекста устройства: — GPU контексты: Данные загружаются в память GPU с оптимизированными макетами. — CPU контексты: Данные организованы для SIMD эффективности обработки и кэширования.
Влияние на производительность:
Эта операция может занять значительное время для сложных сцен, поскольку она включает: — предварительную обработку и оптимизацию геометрии. — выделение памяти и передачи данных. — построение ускоряющей структуры. — компиляцию шейдеров (при первом использовании).
Заполненный мир может быть повторно использован несколькими интеграторами для повышения эффективности.
// Complete workflow: extract scene data and populate world bool extractResult = InputExtraction.ExtractFromScene(out var bakeInput); Assert.IsTrue(extractResult, "Scene extraction failed");
// Create device context and world using var context = new RadeonRaysContext(); bool initResult = context.Initialize(); Assert.IsTrue(initResult, "Failed to initialize RadeonRays context");
var world = new RadeonRaysWorld();
// Set up progress monitoring using var progress = new BakeProgressState(); progress.SetTotalWorkSteps(1000); // Estimate based on scene complexity
// Populate world with extracted data bool populateResult = InputExtraction.PopulateWorld(bakeInput, progress, context, world);
if (!populateResult) { Debug.LogError("Failed to populate world with scene data"); return; }
// World is now ready for integration operations var integrator = new RadeonRaysProbeIntegrator(); integrator.Prepare(context, world, probePositions, 0.1f, 2);
// Proceed with lighting calculations var result = integrator.IntegrateDirectRadiance(context, 0, probeCount, 1024, false, outputBuffer);