AREnvironmentProbeAnchor
(работает в iOS 12 и выше) является якорем для технологии освещения на основе изображений.Шейдер вашей 3D-модели в сцене может отражать свет от ее окружения (конечно, в зависимости от типа поверхности в этом шейдере, поэтому пусть это будет отражающий хром).Принцип прост: 6 квадратных изображений с 6 фотоаппаратов поступают в канал отражения от затенения материала.Эти шесть камер (буровая установка) имеют следующие направления: +x
/ -x
, +y
/ -y
, +z
/ -z
.Эта операция ARKit делает для вас абсолютно бесплатной.Изображение ниже иллюстрирует 6 направлений установки:
Плоскости zFar
соседних камер выглядят как Cube
не так ли?
И шесть камер имеют объем этой Cube
.
Патчи текстуры будутбыть доступным в определенных местах, где ваша камера сканирует поверхность.Или вы можете использовать усовершенствованные алгоритмы машинного обучения (это более надежно и проще для пользователя), чтобы покрыть куб с полными 360-градусными текстурами.
AREnvironmentProbeAnchor
служит для позиционирования этой фото-установки в определенную точку сцены.Вам необходимо включить генерацию карты текстур для сеанса AR.Для этого есть два варианта:
ARWorldTrackingConfiguration.EnvironmentTexturing.manual
При текстурировании среды manual
вы определяете точки на сцене, для которых вы хотите карты текстур светового зонда, создавая AREnvironmentProbeAnchor
объекты и добавляя их в сеанс.
ARWorldTrackingConfiguration.EnvironmentTexturing.automatic
При текстурировании среды automatic
ARKit автоматически создает, размещает и добавляет объекты AREnvironmentProbeAnchor в сеанс.
В обоих случаях ARKit автоматически генерирует текстуры среды какСессия собирает снимки камеры.Используйте метод делегата, такой как session(_:didUpdate:)
, чтобы узнать, когда текстура доступна, и получите доступ к ней из свойства environmentTexture
якоря.
Если вы отображаете AR-содержимое с помощью ARSCNView и опции automaticallyUpdatesLighting
, SceneKitавтоматически извлекает AREnvironmentProbeAnchor
текстурные карты и использует их для освещения сцены.
Вот как должен выглядеть ваш код в ViewController.swift
:
sceneView.automaticallyUpdatesLighting = true
let torusNode = SCNNode(geometry: SCNTorus(ringRadius: 2, pipeRadius: 1.5))
sceneView.scene.rootNode.addChildNode(torusNode)
let reflectiveMaterial = SCNMaterial()
reflectiveMaterial.lightingModel = .physicallyBased
reflectiveMaterial.metalness.contents = 1.0
reflectiveMaterial.roughness.contents = 0
reflectiveMaterial.diffuse.contents = UIImage(named: "brushedMetal.png")
torusNode.geometry?.firstMaterial = [reflectiveMaterial]
let configuration = ARWorldTrackingConfiguration()
if #available(iOS 12.0, *) {
configuration.environmentTexturing = .automatic // WHERE A MAGIC HAPPENS
}
sceneView.session.run(configuration)
func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
print(anchors)
}
Вот и все.Надеюсь, это поможет.
PS Любая камера в 3D может действовать не только как фото / видеокамера, но и как проектор (для проецирования текстур на объекты).