SCNTechnique
Соответствует
-
AnyObject
-
CVarArgType
-
Сопоставимый
-
Hashable
-
NSCoding
-
NSCopying
-
NSObjectProtocol
-
NSSecureCoding
-
Печатаемый
-
SCNAnimatable
-
NSCopying
-
NSObject
-
NSSecureCoding
-
SCNAnimatable
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в iOS 8.0 и позже.
SCNTechnique
объект описывает метод рендеринга, использующий одну или более дополнительных передач получения, каждая из которых использует пользовательскую программу программы построения теней OpenGL, чтобы увеличить или постобработать рендеринг SceneKit сцены.
Примеры многопроходных методов рендеринга включают:
Постобработка представленных пикселей. Для создания эффектов, таких как цветная классификация и отображение смещения определите методы, использующие в качестве ввода цветной буфер, представленный SceneKit и процессом, буферизующими с программой построения теней фрагмента.
Задержанная штриховка. Для создания эффектов, таких как размытость изображения движущегося объекта и окружающее поглощение газов экранного пространства (SSAO) определите методы, получающие информацию о сцене в посреднический буфер во время основного рендеринга, передают и затем выполняют дополнительные передачи получения с помощью того буфера для создания изображения окончательного результата. Рисунок 1 иллюстрирует процесс рендеринга для метода SSAO.
Создать SCNTechnique
объект, Вы предоставляете определение метода, указывающее буферы изображения ввода и вывода, программы программы построения теней, входные переменные программы построения теней и опции рендеринга для каждой передачи получения в методе. Определение метода не требует клиентского кода OpenGL, но необходимо быть знакомы с терминологией и соглашениями рендеринга OpenGL.
Для использования метода присвойте его technique
свойство представления (или другой объект средства рендеринга SceneKit) или камера.
Определение метода
Обработки SceneKit, представляющие методы — вместе с программами построения теней, 3D моделями и 2D художественными активами — как ресурсы, а не как часть Вашего кода приложения. Поскольку эффекты, которые Вы создаете с методами, очень наглядны, этот подход позволяет Вам разделять конструкторские разработки от усилий по разработке и быстро выполнять итерации при создании визуального содержания Вашего приложения или игры.
Создайте объект метода использование techniqueWithDictionary:
метод, обеспечивая словарь, определяющий метод как ряд рисования передач, каждого с его собственной программой программы построения теней, вводами и выводами и рендерингом опций. Как правило, Вы получаете этот словарь из файла списка свойств, включенного в ресурсы пакета Вашего приложения. Следующие таблица 1 и дополнительные таблицы и разделы указывают формат содержания этого словаря.
Ключ |
Значение |
---|---|
|
Словарь рисования определений передачи. Каждый ключ является уникальной строкой, которую Вы обеспечиваете для идентификации передачи, и соответствующее значение является словарем, определяющим ту передачу получения. Посмотрите Таблицу 2. |
|
Массив строк, каждая из которых называет передачу получения от |
|
Словарь, определяющий привязку для атрибутов GLSL и универсальных переменных, используется в программах программы построения теней метода. Каждый ключ соответствует имя символа, используемого в исходном коде шейдера, и соответствующее значение является словарем, описывающим, как должен использоваться тот символ. Посмотрите Таблицу 4. |
|
Словарь, определяющий посреднические цели рендеринга. Каждый ключ является уникальной строкой, которую Вы обеспечиваете для идентификации цели (используемый в словарях вводов и выводов определения передачи получения), и соответствующее значение является словарем, определяющим цель рендеринга. Посмотрите Таблицу 5. |
Ключ |
Ввести |
Значение |
---|---|---|
|
Строка |
Что представить для передачи получения:
|
|
Строка |
Программа программы построения теней GLSL для использования для передачи получения. Файлы исходного кода шейдера в каталоге ресурсов пакета приложения должны иметь то же базовое имя и расширения |
|
Словарь |
Определения входных переменных для передачи получения. Каждый ключ является именем универсальной переменной, используемой в исходном коде шейдера GLSL, на который ссылается ключ программы. Соответствующее значение может быть любым из:
|
|
Словарь |
Определения вывода отображают буферы для передачи получения. Каждый ключ является одной из строк |
|
Строка |
|
|
Словарь |
Опции для вывода цвета; один или больше этих ключей и значений:
|
|
Словарь |
Опции для глубины выводятся; один или больше этих ключей и значений:
|
|
Словарь |
Опции для шаблона выводятся; один или больше этих ключей и значений:
|
|
Строка |
Поверхности геометрии сцены, которая будет представлена:
|
|
Словарь |
Опции для смешения цветов; один или больше этих ключей и значений:
Посмотрите смешивание. |
|
Строка |
Пользовательский прямоугольник области просмотра в поле зрения координирует, отформатированный как четыре числа (источник x, источник y, ширина и высота). По умолчанию передача получения покрывает все границы представления. |
|
Число (целое без знака) |
Число выборок на пиксель для включения мультивыбранного рендеринга для передачи получения. Значения по умолчанию к |
|
Число (8-разрядное целое без знака) |
Битовое поле использовало для включения узлов в передаче получения если |
|
Число (8-разрядное целое без знака) |
Битовое поле использовало для исключения узлов от передачи получения если |
Ключ |
Ввести |
Значение |
---|---|---|
|
Строка |
Работа шаблона, чтобы использовать, если тест глубины перестал работать: |
|
Строка |
Работа шаблона, чтобы использовать, если тест глубины успешно выполняется и тестовые сбои шаблона: |
|
Строка |
Работа шаблона, чтобы использовать, если успешно выполняются глубина и тесты шаблона: |
|
Строка |
Тестовая функция шаблона: |
|
Число (8-разрядное целое без знака) |
Битовая маска для выбора битового слоя буфера шаблонов, который будет протестирован. |
|
Число (8-разрядное целое без знака) |
Битовая маска для выбора битового слоя буфера шаблонов для записи в. |
|
Число (8-разрядное целое без знака) |
Ссылочное значение для тестов шаблона. Значения по умолчанию к |
Ключ |
Ввести |
Значение |
---|---|---|
|
Строка |
Используйте эту опцию связать символы программы построения теней с данными, снабженными SceneKit:
Если Вы устанавливаете a |
|
Строка |
Тип GLSL входной переменной: Используйте эту опцию при обеспечении пользовательских значений для программ программы построения теней (см. Параметры Обработки для Программ Программы построения теней Метода). |
|
Строка |
Если тип символа |
Маски категории
Когда SceneKit выполняет передачу рендеринга чей draw
опция DRAW_SCENE
или DRAW_NODE
, можно использовать маски категории для фильтрации набора узлов, нарисованных во время той передачи. Для каждого узла в сцене (или для DRAW_NODE
, в поддереве узла), SceneKit сравнивает узел categoryBitMask
свойство и includeCategoryMask
и excludeCategoryMask
опции в определении передачи с помощью поразрядных операций И. Если маска категории узла и включать перекрытие маски (т.е. поразрядные результаты AND в ненулевом значении) и маска категории узла и исключить маска не накладываются, SceneKit включает узел в передачу получения. Иначе узел не представляется в передаче.
Цели рендеринга, вводы и выводы
Передача получения представляет пиксельные данные в одном или буфере более целевого изображения (или кадровый буфер). В основной передаче получения SceneKit цветная цель рендеринга является экраном (или скорее представление или уровень для отображения на экране), и цель рендеринга глубины временно хранит информацию, должен был гарантировать, чтобы представленные поверхности появились в корректном порядке глубины.
Передача в пользовательском методе рендеринга может постобработать пиксельные данные в цели рендеринга SceneKit, генерировать ее собственные пиксельные данные для дисплея или представить к промежуточной цели, которая будет использоваться в качестве ввода в более поздней передаче. Вы указываете цели рендеринга с помощью следующих идентификаторов в inputs
и outputs
словари определения передачи:
Используйте
COLOR
иDEPTH
цели как вводы для идентификации цветных и буферов глубины, представленных для в основной передаче получения SceneKit.Используйте
COLOR
предназначайтесь как вывод для идентификации буфера изображения, выведенного на экран как конечный результат метода.Для создания промежуточной цели определите собственный идентификатор как ключ
targets
словарь определения метода. Для соответствующего значения обеспечьте словарь, определяющий цель рендеринга использование ключей и значений в Таблице 5. Промежуточные цели могут быть цветом, глубиной, или объединенной глубиной и буферами шаблонов. После определения цели можно использовать ее идентификатор вinputs
иoutputs
словари определения передачи.Для использования изображения в качестве входной текстуры для передачи определите символ типа
sampler2D
в методеsymbols
словарь.
Указать цель рендеринга или сэмплер изображения в inputs
словарь определения передачи, можно обеспечить или строку идентификатора или словарь с форматом, описанным в Таблице 6. Опции для сэмплеров соответствуют подобным свойствам для текстур материала SceneKit. Для получения дополнительной информации на каждом, посмотрите Ссылку класса SCNMaterialProperty.
Ключ |
Ввести |
Значение |
---|---|---|
|
Строка |
Тип цели рендеринга: |
|
Строка |
Формат пикселя цели рендеринга; одно из следующего:
|
|
Строка |
Размер целевого изображения рендеринга, в точках, указанных в строке формата «WxH». Например, строка «320x480» указывает, что изображение буферизует 320 точек, широких 480 высокими точками. |
|
Число (с плавающей точкой) |
Масштабный коэффициент цели рендеринга. Значения по умолчанию к |
Ключ |
Ввести |
Значение |
---|---|---|
|
Строка |
|
|
Строка |
|
|
Строка |
|
|
Строка |
|
Смешивание
blendStates
ключ определения передачи определяет опции смешения цветов. Смешивание отключено по умолчанию для более быстрой производительности рендеринга. Включая словарь для этого ключа позволяет смешаться (если словарь enable
ключ указывает NO
false
). Смешение цветов комбинирует исходный цвет (вывод цвета программой программы построения теней передачи получения) с целевым цветом (существующее содержание буфера вывода) использование указанных режимов и операций.
Доступные режимы смешивания (для
colorSrc
,colorDst
,alphaSrc
, иalphaDst
ключи):zero
,one
,srcColor
,oneMinusSrcColor
,srcAlpha
,oneMinusSrcAlpha
,dstColor
,oneMinusDstColor
,dstAlpha
,oneMinusDstAlpha
,constantColor
,oneMinusConstantColor
,constantAlpha
,oneMinusConstantAlpha
, иalphaSaturate
.Доступные операции смешения (для
colorOp
иalphaOp
ключи):add
,subtract
,reverseSubtract
,min
,max
.
Эти значения соответствуют параметрам наложения, определенным спецификацией OpenGL. Для получения дальнейшей информации консультируйтесь с OpenGL Реестр API или OpenGL ES Реестр API.
Определение метода в качестве примера
Перечисление 1 показывает словарь определения в качестве примера для метода что смещение использования, отображающееся с шумовой текстурой для постобработки представленной сцены. Для простоты чтения словарь отформатирован в синтаксисе JSON. (Для загрузки NSDictionary
объект из текста в этом формате, используйте NSJSONSerialization
класс.) Перечисление 2 и Перечисление 3 показывают исходный код GLSL для вершины метода и программ построения теней фрагмента.
{
"passes" : {
"displacement" : {
"outputs" : {
"color" : "COLOR"
},
"inputs" : {
"colorSampler" : "COLOR",
"noiseSampler" : "noiseSymbol",
"a_position" : "a_position-symbol"
},
"program" : "displacement",
"draw" : "DRAW_QUAD"
}
},
"sequence" : [
"displacement"
],
"symbols" : {
"a_position-symbol" : {
"semantic" : "vertex"
},
"noiseSymbol" : {
"image" : "noise.png",
"type" : "sampler2D"
}
}
}
attribute vec4 a_position;
varying vec2 uv;
void main() {
gl_Position = a_position;
uv = (a_position.xy + 1.0) * 0.5;
}
uniform sampler2D colorSampler;
uniform sampler2D noiseSampler;
varying vec2 uv;
void main() {
vec2 displacement = texture2D(noiseSampler, uv).rg - vec2(0.5, 0.5);
gl_FragColor = texture2D(colorSampler, uv + displacement * vec2(0.1,0.1));
}
-
Создает метод из словаря определения метода.,
Объявление
Swift
init?(dictionary
dictionary
: [NSObject : AnyObject]) -> SCNTechniqueObjective C
+ (SCNTechnique *)techniqueWithDictionary:(NSDictionary *)
dictionary
Параметры
dictionary
Словарь, определяющий ряд рендеринга передач, включающих метод.
Возвращаемое значение
Новый объект метода.
Обсуждение
См. обзор класса для подробных данных словаря определения метода.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
Создает новый метод рендеринга, комбинирующий серию методов.
Объявление
Swift
init?(bySequencingTechniques
techniques
: [AnyObject]) -> SCNTechniqueObjective C
+ (SCNTechnique *)techniqueBySequencingTechniques:(NSArray *)
techniques
Параметры
techniques
Массив
SCNTechnique
объекты.Возвращаемое значение
Новый объект метода.
Обсуждение
Новый метод применяет эффекты методов в порядке, указанном в
techniques
массив. Каждый вывод метода в массиве становится вводом к следующему методу в массиве.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
dictionaryRepresentation
СвойствоСловарь, определяющий метод рендеринга. (только для чтения)
Объявление
Swift
var dictionaryRepresentation: [NSObject : AnyObject] { get }
Objective C
@property(readonly) NSDictionary *dictionaryRepresentation
Обсуждение
Считайте это свойство, когда Вы захотите сохранить файл списка свойств, содержащий определение метода.
См. обзор класса для подробных данных словаря определения метода.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
Указывает блок, который вызовут прежде, чем представить программы использования с указанной универсальной переменной GLSL или названием атрибута.
Объявление
Swift
func handleBindingOfSymbol(_
symbol
: String, usingBlockblock
: SCNBindingBlock)Objective C
- (void)handleBindingOfSymbol:(NSString *)
symbol
usingBlock:(SCNBindingBlock)block
Параметры
symbol
Универсальная переменная GLSL или название атрибута используются в одной из программ программы построения теней метода.
block
Блок тот SceneKit вызовы.
Обсуждение
Этот метод связывает блок для обработки установки атрибута или универсальной переменной в программах программы построения теней, связанных с методом. SceneKit вызывает Ваш блок перед любым выполнением любых передач рендеринга то использование тот символ. В блоке можно выполнить любые команды OpenGL или другой код, необходимый для подготовки пользовательской программы построения теней.
Используйте этот метод, когда необходимо обновить значение в программе программы построения теней каждый раз, когда SceneKit представляет кадр. Устанавливать значение нечасто, или только один раз, использование
setValue:forSymbolNamed:
метод вместо этого.При соединении блока с символом с помощью этого метода SceneKit игнорирует набор значений с помощью
setValue:forSymbolNamed:
метод.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.