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

IWorld

интерфейс в UnityEngine.LightTransport

Описание

Интерфейс для интеграции мировых структур данных, используемых для расчетов в области легкого транспорта.

Этот интерфейс абстрагирует структуры данных мирового пространства, используемые интеграторами: структуры ускорения, таблицы поиска и другие оптимизированные данные, которыми можно делиться между разными операциями интегрирования.

Интерфейс IWorld обеспечивает: — хранение геометрии сцены и данных материалов; — пространственные структуры ускорения для эффективной трассировки лучей; — хранение данных об источниках света и структуры ускорения для быстрого поиска; — общие структуры данных для нескольких проходов интегрирования.

Unity предоставляет конкретную реализацию этого интерфейса: UnityEngine.LightTransport.RadeonRaysWorld — для операций с ускорением на GPU через OpenCL 1.2.

Объекты мира заполняются с помощью InputExtraction.PopulateWorld и потребляемые IProbeIntegrator осуществления.

// Extract scene data for baking.
bool extractResult = InputExtraction.ExtractFromScene(out var bakeInput);
Assert.IsTrue(extractResult);

// Create context and world for GPU acceleration. using var context = new RadeonRaysContext(); Assert.IsTrue(context.Initialize()); var world = new RadeonRaysWorld();

// Populate world with scene data. using var progress = new BakeProgressState(); bool populateResult = InputExtraction.PopulateWorld(bakeInput, progress, context, world); Assert.IsTrue(populateResult);

// Use world with multiple integrators. var directIntegrator = new RadeonRaysProbeIntegrator(); var indirectIntegrator = new RadeonRaysProbeIntegrator();

// Both integrators can share the same world data. directIntegrator.Prepare(context, world, probePositions, 0.5f, 1); indirectIntegrator.Prepare(context, world, probePositions, 0.1f, 3);

// Perform light integration passes var directResult = directIntegrator.IntegrateDirectRadiance(context, 0, probeCount, 256, false, directBuffer); var indirectResult = indirectIntegrator.IntegrateIndirectRadiance(context, 0, probeCount, 2048, false, indirectBuffer);

// Clean up world.Dispose();