SCNSkinner
SCNSkinner объект обеспечивает доступ к частям иерархии узла, используемой для скелетной анимации. Вы используете объект кожевника управлять отношением между скелетными анимациями, загруженными из файла сцены и узлов и конфигураций, которые они анимируют.
Скелетная анимация является методом для упрощения анимации сложных геометрий, таких как гуманоидные символы в игре. Скелет анимации является простой иерархией узлов управления, самих не имеющих никакой видимой геометрии. Соединение скелета с геометрией (также названный «очищением» скелета или созданием покрытой кожей модели) позволяет SceneKit автоматически деформировать геометрию при перемещении узлов управления скелета (как показано на рисунке 1).
Работа со скелетом анимации
Как правило, художник создает покрытую кожей модель с помощью внешних 3D инструментов разработки и сохраняет ее, вместе с анимациями, использующими скелет в файле сцены. Вы загружаете модель из файла сцены и позы или анимируете его в Вашем приложении, или при помощи объектов Animation, также загруженных из файла сцены или путем прямого управления узлами в скелете.
Можно также создать покрытую кожей модель из отдельно определенной геометрии и скелетных данных с помощью skinnerWithBaseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices: метод.
Совместное использование объекта кожевника
Для работы со скелетом покрытой кожей модели используйте skinner свойство корневого узла модели. Например, один файл мог бы содержать анимированный игровой символ, и другие файлы могли бы содержать аксессуары (такие как шляпы или рюкзаки) для символа для износа. Художник, использующий 3D инструменты разработки, может указать что символ и аксессуары быть анимированным с помощью идентичных скелетов. Для присоединения шляпы к символу так, чтобы они анимировали вместе Вы соединяете объект кожевника, ответственный за анимацию шляпы к скелету, связанному с анимированным символом, как в следующем примере:
Swift
let hero = SCNScene(named: "Hero").rootNodelet hat = SCNScene(named: "FancyFedora").rootNodehat.skinner.skeleton = hero.skinner.skeleton
Objective C
SCNNode *hero = [SCNScene sceneNamed:@"Hero"].rootNode;SCNNode *hat = [SCNScene sceneNamed:@"FancyFedora"].rootNode;hat.skinner.skeleton = hero.skinner.skeleton;
Соответствует
-
AnyObject -
CVarArgType -
Сопоставимый -
Hashable -
NSCoding -
NSObjectProtocol -
NSSecureCoding -
Печатаемый -
NSObject -
NSSecureCoding
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в OS X v10.9 и позже.
-
init (baseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices:) + skinnerWithBaseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices:Создает объект кожевника с указанной видимой геометрией и информацией о скелете.
Объявление
Swift
convenience init!(baseGeometrybaseGeometry: SCNGeometry!, bonesbones: [AnyObject]!, boneInverseBindTransformsboneInverseBindTransforms: [AnyObject]!, boneWeightsboneWeights: SCNGeometrySource!, boneIndicesboneIndices: SCNGeometrySource!)Objective C
+ (instancetype)skinnerWithBaseGeometry:(SCNGeometry *)baseGeometrybones:(NSArray *)bonesboneInverseBindTransforms:(NSArray *)boneInverseBindTransformsboneWeights:(SCNGeometrySource *)boneWeightsboneIndices:(SCNGeometrySource *)boneIndicesПараметры
baseGeometryГеометрия, поверхность которой скелет анимации кожевника деформируется.
bonesМассив
SCNNodeобъекты, каждый представляющий кость или контрольную точку для скелета анимации.boneInverseBindTransformsМассив
NSValueобъекты, содержащиеSCNMatrix4преобразовывает, каждый из которых соответствует узлу вbonesмассив. Каждое значение является обратной матрицей (см.SCNMatrix4Invert) из того узлаtransformсвойство для позы скелета по умолчанию.boneWeightsИсточник геометрии, определяющий влияние каждой кости на позициях вершин в геометрии. Для получения дополнительной информации посмотрите
boneWeightsсвойство.boneIndicesИсточник геометрии, определяющий отображение от индексов кости в скелетных данных к массиву костей кожевника. Для получения дополнительной информации посмотрите
boneIndicesсвойство.Возвращаемое значение
Новый объект кожевника.
Обсуждение
Для использования объекта кожевника в сцене присвойте его
skinnerсвойство узла. Тот узелgeometryсвойство должно сослаться на то жеSCNGeometryвозразите как кожевникbaseGeometryсвойство.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
baseGeometry baseGeometryСвойствоГеометрия, поверхность которой скелет анимации кожевника деформируется.
Объявление
Swift
var baseGeometry: SCNGeometry!Objective C
@property(retain, nonatomic) SCNGeometry *baseGeometryОбсуждение
Используйте это свойство для:
Измените появление покрытой кожей модели с помощью материалов геометрии.
Замените геометрию кожевника различной моделью. Новая модель должна быть совместима со скелетом анимации кожевника (т.е. это должно иметь то же число вершин).
Поскольку многократные объекты кожевника могут сослаться на ту же геометрию, можно использовать геометрию с несколькими узлами в сцене, каждом с различным объектом кожевника изложить модель по-разному.
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.9 и позже.
-
Координатная трансформация для геометрии кожевника в ее состоянии по умолчанию.
Объявление
Swift
var baseGeometryBindTransform: SCNMatrix4Objective C
@property(nonatomic) SCNMatrix4 baseGeometryBindTransformОбсуждение
Эта матрица преобразования преобразовывает от координатного пространства геометрии модели до используемого скелетом анимации. Это должно соответствовать координатное пространство в который скелет (узлы в
bonesмассив), первоначально определяется, связывая модель с ее позой по умолчанию.Значение по умолчанию
SCNMatrix4Identity.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Корневой узел скелета анимации объекта кожевника.
Обсуждение
При замене скелета кожевника путем присвоения различного узла этому свойству новый скелет должен иметь ту же структуру как скелет, который это заменяет. Т.е. иерархия узлов должна соответствовать, несмотря на то, что текущее состояние каждого узла не может.
Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.9 и позже.
-
Узлы управления скелета анимации. (только для чтения)
Объявление
Swift
var bones: [AnyObject]! { get }Objective C
@property(readonly, nonatomic) NSArray *bonesОбсуждение
Массив
SCNNodeобъекты, каждый из которых представляет контрольную точку скелета анимации. Перемещение узла деформирует поверхность геометрии кожевника, на основе скелетных данных, из которых создавался объект кожевника.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
Значение по умолчанию преобразовывает для узлов кости скелета анимации. (только для чтения)
Объявление
Swift
var boneInverseBindTransforms: [AnyObject]! { get }Objective C
@property(readonly, nonatomic) NSArray *boneInverseBindTransformsОбсуждение
Массив
NSValueобъекты, содержащиеSCNMatrix4преобразовывает, каждый из которых соответствует узлу вbonesмассив. Каждое значение является обратной матрицей (см.SCNMatrix4Invert) из того узлаtransformсвойство для позы скелета по умолчанию.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
boneWeights boneWeightsСвойствоИсточник геометрии, определяющий влияние каждой кости на позициях вершины геометрии. (только для чтения)
Объявление
Swift
var boneWeights: SCNGeometrySource! { get }Objective C
@property(readonly, nonatomic) SCNGeometrySource *boneWeightsОбсуждение
Этот источник геометрии
semanticсвойство должно бытьSCNGeometrySourceSemanticBoneWeights. Его данные являются массивом векторов с плавающей точкой, чейcomponentsPerVectorколичество является числом костей, влияющих на каждую вершину. Каждый вектор соответствует вершине в геометрииSCNGeometrySourceSemanticVertexисточник геометрии и каждый компонент в векторе указывают влияние кости на позиции той вершины.boneIndicesисточник определяет, какие узлы в массиве костей соответствуют каждому компоненту в векторе. Значение компонента0.0средние значения, что кость не имеет никакого влияния на ту вершину; положительные или отрицательные величины масштабируют трансформацию узла кости, прежде чем SceneKit применит ту трансформацию к вершине.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
-
boneIndices boneIndicesСвойствоИсточник геометрии, определяющий отображение от индексов кости в скелетных данных к массиву костей кожевника. (только для чтения)
Объявление
Swift
var boneIndices: SCNGeometrySource! { get }Objective C
@property(readonly, nonatomic) SCNGeometrySource *boneIndicesОбсуждение
Этот источник геометрии
semanticсвойство должно бытьSCNGeometrySourceSemanticBoneIndices. Его данные являются массивом целочисленных векторов, каждый из которых соответствует вектору веса вboneWeightsисточник геометрии. Каждый компонент в векторе указывает индекс узла вbonesмассив для соответствующего компонента веса кости.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в OS X v10.10 и позже.
