SCNSkinner
SCNSkinner
объект обеспечивает доступ к частям иерархии узла, используемой для скелетной анимации. Вы используете объект кожевника управлять отношением между скелетными анимациями, загруженными из файла сцены и узлов и конфигураций, которые они анимируют.
Скелетная анимация является методом для упрощения анимации сложных геометрий, таких как гуманоидные символы в игре. Скелет анимации является простой иерархией узлов управления, самих не имеющих никакой видимой геометрии. Соединение скелета с геометрией (также названный «очищением» скелета или созданием покрытой кожей модели) позволяет SceneKit автоматически деформировать геометрию при перемещении узлов управления скелета (как показано на рисунке 1).
Работа со скелетом анимации
Как правило, художник создает покрытую кожей модель с помощью внешних 3D инструментов разработки и сохраняет ее, вместе с анимациями, использующими скелет в файле сцены. Вы загружаете модель из файла сцены и позы или анимируете его в Вашем приложении, или при помощи объектов Animation, также загруженных из файла сцены или путем прямого управления узлами в скелете.
Можно также создать покрытую кожей модель из отдельно определенной геометрии и скелетных данных с помощью skinnerWithBaseGeometry:bones:boneInverseBindTransforms:boneWeights:boneIndices:
метод.
Совместное использование объекта кожевника
Для работы со скелетом покрытой кожей модели используйте skinner
свойство корневого узла модели. Например, один файл мог бы содержать анимированный игровой символ, и другие файлы могли бы содержать аксессуары (такие как шляпы или рюкзаки) для символа для износа. Художник, использующий 3D инструменты разработки, может указать что символ и аксессуары быть анимированным с помощью идентичных скелетов. Для присоединения шляпы к символу так, чтобы они анимировали вместе Вы соединяете объект кожевника, ответственный за анимацию шляпы к скелету, связанному с анимированным символом, как в следующем примере:
Swift
let hero = SCNScene(named: "Hero").rootNode
let hat = SCNScene(named: "FancyFedora").rootNode
hat.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!(baseGeometry
baseGeometry
: SCNGeometry!, bonesbones
: [AnyObject]!, boneInverseBindTransformsboneInverseBindTransforms
: [AnyObject]!, boneWeightsboneWeights
: SCNGeometrySource!, boneIndicesboneIndices
: SCNGeometrySource!)Objective C
+ (instancetype)skinnerWithBaseGeometry:(SCNGeometry *)
baseGeometry
bones:(NSArray *)bones
boneInverseBindTransforms:(NSArray *)boneInverseBindTransforms
boneWeights:(SCNGeometrySource *)boneWeights
boneIndices:(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: SCNMatrix4
Objective 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 и позже.