Как указать двусторонний материал для RealityKit / ARView? - PullRequest
3 голосов
/ 18 октября 2019

Я пытаюсь загрузить модель и текстуру в RealityKit (настроенный в экземпляре ARView), но не могу понять, как указать, что материал должен быть двусторонним.

У меня модель загружена как ModelEntity, текстура загружена как TextureResource. Модель и текстура загружаются, но рвутся в одну сторону. Так как модель открыта (т.е. видны задние грани), есть пробелы в том, как она отображается.

Пока что у меня есть,

let entity: ModelEntity = try .loadModel(named: "model.obj")

var material = SimpleMaterial()
material.baseColor = try .texture(.load(named: "texture.png"))
entity.model?.materials = [material]

Я надеялся найтисвойство, такое как

material.twoSided = true

, но до сих пор я не нашел эквивалентной вещи в RealityKit.

Кто-нибудь знает, как устанавливать двусторонние материалы в RealityKit?

Ответы [ 2 ]

1 голос
/ 18 октября 2019

В настоящее время, похоже, нет никакого способа сделать это программно с помощью API RealityKit.

Можете ли вы изменить определение модели, чтобы оно не выполняло выборку на обратной стороне? Например, в импортируемом файле USDZ одна часть сетки определяется следующим образом:

def Mesh "Plane_1"
  {
    uniform bool doubleSided = 1

Вы можете сначала преобразовать файл obj в используемый файл, используя usdzconvert (https://developer.apple.com/download/more/?=USDPython)затем отредактируйте файл вручную, а затем импортируйте его в свою сцену.

Это также может зависеть от того, как настроена модель, что вы можете передать более одного материала в массив материалов, которые применяются к различным частяммодели, вы можете увидеть, сколько материалов ожидает модель:

entity.model?.mesh.expectedMaterialCount
0 голосов
/ 18 октября 2019

То, что вы описываете, называется выбраковкой. Проверьте MTLCullMode , например. Оттуда вы можете перейти к различным точкам, где вы можете установить режим отбраковки (вас не интересует отсутствие отбраковки).

...