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

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);