2016-10-27 22 views
3

Я хотел бы знать, есть ли только Point Light и Ambient Light в Metal API, или я также могу использовать Spot Light и Directional Light в моей 3D-среде?Типы света в металле API

struct Light { 

    var color: (Float, Float, Float) 
    var ambientIntensity: Float 

    static func size() -> Int {  
    return sizeof(Float) * 4 
    } 

    func raw() -> [Float] { 
    let raw = [color.0, color.1, color.2, ambientIntensity] 
    return raw 
    } 
} 

Как реализовать Spot Light и Directional Light, если они существуют в Metal API Apple?

Picture from SolidAngle User Manual

+1

MetalKit легко взаимодействует с каркасом ввода-вывода модели. Модель ввода/вывода имеет класс MDLLight, который можно использовать для создания этих типов света. developer.apple.com/reference/modelio/mdllight – Marius

+0

@Marius Thanx много. – andy

+1

ModelIO не поможет вам для легкого рендеринга - он в некоторой степени совместим с металлом, но в основном для таких вещей, как создание удобных буферов из данных модели. –

ответ

4

Сам Металл API не имеет ни малейшего понятия о чем, как высокого уровня, как «легкая», таким же образом, что современные OpenGL это не распространяется API-интерфейсы для такого рода вещи пошли по пути динозавр с fixed-function pipeline. Благодаря современным низкоуровневым графическим API-интерфейсам вам необходимо свернуть свое собственное освещение; отличная серия «Metal By Example» имеет номер , хотя вы можете пройти через предыдущие разделы, чтобы получить более четкое представление о том, что происходит.Обратите внимание, что эта статья касается только направленного света; точечные огни значительно сложнее, и вам нужно будет провести некоторое исследование, чтобы найти, как это обычно делается, а затем реализовать этот подход в Metal.

В качестве альтернативы использованию металла напрямую вы можете ознакомиться в SceneKit, который достаточно мощный и имеет встроенную поддержку для многих типов света с помощью класса SCNLight.

1

Marius дал мне намек, что MDLLight класс является абстрактным классом для объектов, описывающих источники света в сцене. Когда вы загружаете огни из файла активов с использованием класса MDLAsset или создаете огни при создании актива для экспорта, вы используете один или несколько конкретных подклассов MDLPhysicallyPlausibleLight, MDLAreaLight, MDLPhotometricLight или MDLLightProbe.

... и MDLLightType является Перечень, который имеет варианты формы и стиля освещения, предоставленной свет, используемый свойством lightType:

case unknown = 0 

0. Тип света неизвестно или не было инициализировано.

case ambient = 1 

1. Источник света должен освещать сцену равномерно независимо от положения или направления.

case directional = 2 

2. Источник света освещает сцену из однородного направления независимо от положения.

case spot = 3 

3. Источник света освещает сцену из определенного положения и направления.

case point = 4 

4. Источник света освещает сцену во всех направлениях от определенного положения.

case linear = 5 

5. Источник света освещает сцену во всех направлениях от области в форме линии.

case discArea = 6 

6. Источник света освещает сцену во всех направлениях от области в форме диска.

7. Источник света освещает сцену во всех направлениях от области в форме прямоугольника.

case superElliptical = 8 

8. Источник света освещает сцену во всех направлениях от области в форме прямоугольника.

case photometric = 9 

9. Освещение от света определяется фотометрическим профилем.

case probe = 10 

10. Освещение от света определяется изображениями текстуры, представляющими образец сцены в определенной точке.

case environment = 11 

11. Освещение от света определяется изображениями текстур, представляющими образец окружающей среды для сцены.

Это выдержки из Справочника API Apple Metal.

MDLPhysicallyPlausibleLight

MDLPhysicallyPlausibleLight объекта описывает источник света для использования в модели затенения на основе реальной физики.

MDLAreaLight

MDLAreaLight объекта представляет собой источник света, который освещает 3D сцены не из одной точки или направлений, но из зоны с определенной формой. Форма луча области представляет собой двумерную фигуру в плоскости xy локального координатного пространства света, а ее освещение направлено в направлении отрицательной оси z (распространяясь из этого направления в соответствии с унаследованными свойствами innerConeAngle и outerConeAngle).

Area Light

MDLPhotometricLight

MDLPhotometricLight объект представляет собой источник света, форма, направление и интенсивность освещения определяется фотометрическим профилем. Вы создаете фотометрический свет из файла в формате IES, содержащий физические измерения источника света. Многие производители светильников реального мира публикуют такие файлы, описывающие характеристики освещения своих продуктов. Данные фотометрии измеряют световое полотно, окружающее источник света, - измерения интенсивности света во всех направлениях вокруг источника.

IES Lights

MDLLightProbe

MDLLightProbe объект описывает источник света с точки зрения вариаций цвета и интенсивности его подсветки во всех направлениях. Световой зонд представляет это изменение либо как текстуру карты куба, где каждый тексель представляет цвет и интенсивность света в определенном направлении от центра куба или как набор коэффициентов сферической гармоники. В дополнение к описанию таких источников света, MDLLightProbe предоставляет способы генерации текстур световых зондов на основе содержимого сцены и для создания коэффициентов сферической гармоники из текстуры.

Image Based Lighting Probes

+0

HI @ Andy, вы тестировали модель ввода/вывода с MDLPhotometricLight? У вас есть или нашли пример? Спасибо –

+0

Нет, извините. Я использовал точечный, направленный и точечный свет. – andy

+0

Спасибо за ваш ответ –

 Смежные вопросы

  • Нет связанных вопросов^_^