Сглаживание SCNGeometry с использованием subdivisionLevel - PullRequest
0 голосов
/ 11 июня 2018

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

См. Скриншот

screenshot

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

Мы пытаемся использовать следующий код для сглаживания этих краев:

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 голосов
/ 25 июня 2018

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

...