Сглаживание SCNGeometry с использованием subdivisionLevel

Мы работаем над приложением, похожим на приложение iPhone Animoji. Мы создали нашу собственную 3d модель, которая выглядит довольно красиво, единственная проблема заключается в том, что вокруг глаз или носа модели есть края, которые не являются гладкими. Модель была подготовлена ​​в программном обеспечении Maya 3D.

Смотрите скриншот

Скриншот

Вы можете видеть грубые края вокруг глаз и вокруг бровей.

Мы пытаемся следующий код, чтобы сгладить эти края:

let node = self.childNodes[0]
        let geometry = node.geometry
        
        let verticies = self.change(geometry: geometry!)
        geometry?.edgeCreasesSource = SCNGeometrySource(vertices: verticies)
        geometry?.subdivisionLevel = 0
        
        guard let element = geometry?.elements.first else {
            return
        }
        //print(element.debugDescription)
        
        geometry?.edgeCreasesElement = SCNGeometryElement(data: element.data, primitiveType: .line, primitiveCount: element.primitiveCount, bytesPerIndex: element.bytesPerIndex)
        

Мы пытаемся установить subdivisionLevel, чтобы края были сглажены. Это правильный подход? Или нам нужно сделать что-то еще, чтобы исправить это программно. У 3d Designer очень плавные края, когда мы видим его в Maya.

1 ответ

Использование уровня подразделения является правильным подходом для сглаживания геометрии. Однако во фрагменте кода вы не устанавливаете какой-либо уровень подразделения выше 0. Если вы работаете с небольшим количеством объектов, рекомендуется использовать редактор SceneKit и установить уровень подразделения в инспекторе атрибутов.

Другие вопросы по тегам