Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы SceneKit ссылка класса SCNTechnique

Опции
Развертывание Target:

На этой странице
Язык:

SCNTechnique

SCNTechnique объект описывает метод рендеринга, использующий одну или более дополнительных передач получения, каждая из которых использует пользовательскую программу программы построения теней OpenGL, чтобы увеличить или постобработать рендеринг SceneKit сцены.

Примеры многопроходных методов рендеринга включают:

  • Постобработка представленных пикселей. Для создания эффектов, таких как цветная классификация и отображение смещения определите методы, использующие в качестве ввода цветной буфер, представленный SceneKit и процессом, буферизующими с программой построения теней фрагмента.

  • Задержанная штриховка. Для создания эффектов, таких как размытость изображения движущегося объекта и окружающее поглощение газов экранного пространства (SSAO) определите методы, получающие информацию о сцене в посреднический буфер во время основного рендеринга, передают и затем выполняют дополнительные передачи получения с помощью того буфера для создания изображения окончательного результата. Рисунок 1 иллюстрирует процесс рендеринга для метода SSAO.

Рисунок 1Example многопроходного метода image: ../Art/technique.pdf

Создать SCNTechnique объект, Вы предоставляете определение метода, указывающее буферы изображения ввода и вывода, программы программы построения теней, входные переменные программы построения теней и опции рендеринга для каждой передачи получения в методе. Определение метода не требует клиентского кода OpenGL, но необходимо быть знакомы с терминологией и соглашениями рендеринга OpenGL.

Для использования метода присвойте его technique свойство представления (или другой объект средства рендеринга SceneKit) или камера.

Определение метода

Обработки SceneKit, представляющие методы — вместе с программами построения теней, 3D моделями и 2D художественными активами — как ресурсы, а не как часть Вашего кода приложения. Поскольку эффекты, которые Вы создаете с методами, очень наглядны, этот подход позволяет Вам разделять конструкторские разработки от усилий по разработке и быстро выполнять итерации при создании визуального содержания Вашего приложения или игры.

Создайте объект метода использование techniqueWithDictionary: метод, обеспечивая словарь, определяющий метод как ряд рисования передач, каждого с его собственной программой программы построения теней, вводами и выводами и рендерингом опций. Как правило, Вы получаете этот словарь из файла списка свойств, включенного в ресурсы пакета Вашего приложения. Следующие таблица 1 и дополнительные таблицы и разделы указывают формат содержания этого словаря.

Табличный 1Technique формат словаря определения

Ключ

Значение

passes

Словарь рисования определений передачи.

Каждый ключ является уникальной строкой, которую Вы обеспечиваете для идентификации передачи, и соответствующее значение является словарем, определяющим ту передачу получения. Посмотрите Таблицу 2.

sequence

Массив строк, каждая из которых называет передачу получения от passes словарь. SceneKit выполняет передачи получения в порядке, указанном этим массивом.

symbols

Словарь, определяющий привязку для атрибутов GLSL и универсальных переменных, используется в программах программы построения теней метода.

Каждый ключ соответствует имя символа, используемого в исходном коде шейдера, и соответствующее значение является словарем, описывающим, как должен использоваться тот символ. Посмотрите Таблицу 4.

targets (дополнительный)

Словарь, определяющий посреднические цели рендеринга.

Каждый ключ является уникальной строкой, которую Вы обеспечиваете для идентификации цели (используемый в словарях вводов и выводов определения передачи получения), и соответствующее значение является словарем, определяющим цель рендеринга. Посмотрите Таблицу 5.

Табличный 2Drawing формат словаря определения передачи

Ключ

Ввести

Значение

draw

Строка

Что представить для передачи получения:

  • DRAW_SCENE: Представьте всю сцену.

  • DRAW_NODE: Представьте только узел, указанный node ключ (и его иерархия дочерних узлов).

  • DRAW_QUAD: Представьте только прямоугольник, покрывающий все границы представления. Используйте эту опцию для рисования передач, обрабатывающих буферы изображения, выведенные более ранними передачами.

program

Строка

Программа программы построения теней GLSL для использования для передачи получения.

Файлы исходного кода шейдера в каталоге ресурсов пакета приложения должны иметь то же базовое имя и расширения .vsh (вершинный шейдер) и .fsh (программа построения теней фрагмента). Например, если название программы является «инвертированием», файлы «invert.fsh» и «invert.vsh» должны существовать.

inputs

Словарь

Определения входных переменных для передачи получения.

Каждый ключ является именем универсальной переменной, используемой в исходном коде шейдера GLSL, на который ссылается ключ программы. Соответствующее значение может быть любым из:

outputs

Словарь

Определения вывода отображают буферы для передачи получения.

Каждый ключ является одной из строк color, depth, или stencil, и соответствующее значение является строкой, идентифицирующей цель рендеринга. Посмотрите Цели Рендеринга, Вводы и выводы.

node (дополнительный)

Строка

name свойство узла для рендеринга, или self для ссылки на узел, метод присоединен. Применяется только если draw ключ указывает DRAW_NODE.

colorStates (дополнительный)

Словарь

Опции для вывода цвета; один или больше этих ключей и значений:

  • clear (Булевская переменная, значения по умолчанию к NOfalse на OS X и YEStrue на iOS): Очистить ли цель рендеринга перед получением. Если YEStrue, необходимо указать один из clearColor и clearWithSceneBackgroundColor опции.

  • clearColor (строка): цвет для заполнения рендеринга предназначается с при очистке, указанный в формате RGBA с плавающей точкой. (Например, “0.5 0.5 0.5 1.0” полностью непрозрачный серый цвет.) Также строка sceneBackground указывает для использования сцены background свойство при очистке.

depthStates (дополнительный)

Словарь

Опции для глубины выводятся; один или больше этих ключей и значений:

  • clear (Булевская переменная, значение по умолчанию NOfalse): Очистить ли буфер глубины перед получением.

  • enableWrite (Булевская переменная, значение по умолчанию YEStrue): Записать ли в буфер глубины при рисовании.

  • enableRead (Булевская переменная, значение по умолчанию YEStrue): Читать ли из буфера глубины при рисовании.

  • func (строка): тестовая функция глубины: never, always, equal, notEqual, less, lessEqual, greater, или greaterEqual.

stencilStates (дополнительный)

Словарь

Опции для шаблона выводятся; один или больше этих ключей и значений:

  • clear (Булевская переменная, значение по умолчанию NOfalse): Очистить ли буфер шаблонов перед получением.

  • enable (Булевская переменная, значение по умолчанию NOfalse): Должна ли передача получения записать в буфер шаблонов.

  • behavior: Словарь, указывающий, как использовать буфер шаблонов при рендеринге передних сторон (или обе поверхности, если ничто не указано для backFaceBehavior ключ). Посмотрите Таблицу 3.

  • backFaceBehavior: Словарь, указывающий, как использовать буфер шаблонов при рендеринге задних сторон. Посмотрите Таблицу 3.

cullMode (дополнительный)

Строка

Поверхности геометрии сцены, которая будет представлена:

  • back (значение по умолчанию): Отберите задние стороны, представив передние стороны только.

  • front: Отберите передние стороны, представив задние стороны только.

  • none: Представьте и выходите - и обращенные к задней стороне многоугольники.

blendStates (дополнительный)

Словарь

Опции для смешения цветов; один или больше этих ключей и значений:

  • enable (Булевская переменная): Использовать ли смешение цветов. Если NOfalse, другие параметры наложения не имеют никакого эффекта.

  • colorSrc (строка): режим смешивания для исходных цветов.

  • colorDst (строка): режим смешивания для целевых цветов.

  • alphaSrc (строка): режим смешивания для исходных альфа-значений.

  • alphaDst (строка): режим смешивания для целевых альфа-значений.

  • colorOp (строка): работа смешения для компонентов цвета.

  • alphaOp (строка): работа смешения для альфа-значений.

Посмотрите смешивание.

viewport (дополнительный)

Строка

Пользовательский прямоугольник области просмотра в поле зрения координирует, отформатированный как четыре числа (источник x, источник y, ширина и высота). По умолчанию передача получения покрывает все границы представления.

samples (дополнительный)

Число (целое без знака)

Число выборок на пиксель для включения мультивыбранного рендеринга для передачи получения. Значения по умолчанию к 1.

includeCategoryMask (дополнительный)

Число (8-разрядное целое без знака)

Битовое поле использовало для включения узлов в передаче получения если draw ключ указывает DRAW_SCENE или DRAW_NODE. Значения по умолчанию ко всем битам установлены. Посмотрите Маски Категории.

excludeCategoryMask (дополнительный)

Число (8-разрядное целое без знака)

Битовое поле использовало для исключения узлов от передачи получения если draw ключ указывает DRAW_SCENE или DRAW_NODE. Значения по умолчанию ни к каким битам установлены. Посмотрите Маски Категории.

Табличный 3Stencil формат словаря определения поведения

Ключ

Ввести

Значение

depthFail

Строка

Работа шаблона, чтобы использовать, если тест глубины перестал работать: keep, zero, replace, increment, decrement, invert, incrementWrap, или decrementWrap.

fail

Строка

Работа шаблона, чтобы использовать, если тест глубины успешно выполняется и тестовые сбои шаблона: keep, zero, replace, increment, decrement, invert, incrementWrap, или decrementWrap.

pass

Строка

Работа шаблона, чтобы использовать, если успешно выполняются глубина и тесты шаблона: keep, zero, replace, increment, decrement, invert, incrementWrap, или decrementWrap.

test

Строка

Тестовая функция шаблона: never, always, equal, notEqual, less, lessEqual, greater, или greaterEqual.

readMask

Число (8-разрядное целое без знака)

Битовая маска для выбора битового слоя буфера шаблонов, который будет протестирован.

writeMask

Число (8-разрядное целое без знака)

Битовая маска для выбора битового слоя буфера шаблонов для записи в.

referenceValue

Число (8-разрядное целое без знака)

Ссылочное значение для тестов шаблона. Значения по умолчанию к 0.

Табличный 4Shader формат словаря определения символа

Ключ

Ввести

Значение

semantic

Строка

Используйте эту опцию связать символы программы построения теней с данными, снабженными SceneKit:

  • Значения vertex, normal, color, и texcoord свяжите с исходной семантикой геометрии. Посмотрите Геометрию Семантические Идентификаторы.

  • Значения modelViewProjectionTransform, modelViewTransform, modelTransform, viewTransform, projectionTransform, normalTransform, modelViewProjectionInverseTransform, modelViewInverseTransform, modelInverseTransform, viewInverseTransform, projectionInverseTransform, и normalInverseTransform свяжите с рендерингом матриц трансформации. Посмотрите, что Рендеринг Преобразовывает Ключи.

  • Значение time связывает системное время, истекшее, так как начался рендеринг.

Если Вы устанавливаете a semantic значение для символа, нет type значение требуется.

type

Строка

Тип GLSL входной переменной: float, vec2, vec3, vec4, mat4, int, ivec2, ivec3, ivec4, mat3, sampler2D, или none.

Используйте эту опцию при обеспечении пользовательских значений для программ программы построения теней (см. Параметры Обработки для Программ Программы построения теней Метода).

image (дополнительный)

Строка

Если тип символа sampler2D, имя файла образа в каталоге ресурсов пакета приложения.

Маски категории

Когда 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.

Табличный 5Render целевой формат словаря определения

Ключ

Ввести

Значение

type

Строка

Тип цели рендеринга: color, depth, или stencil.

format (дополнительный)

Строка

Формат пикселя цели рендеринга; одно из следующего:

  • Цвет: rgba (значение по умолчанию), rgb32f, r8, или r16

  • Глубина/шаблон: depth24 (значение по умолчанию) или depth24stencil8

size

Строка

Размер целевого изображения рендеринга, в точках, указанных в строке формата «WxH». Например, строка «320x480» указывает, что изображение буферизует 320 точек, широких 480 высокими точками.

scaleFactor (дополнительный)

Число (с плавающей точкой)

Масштабный коэффициент цели рендеринга. Значения по умолчанию к 1.0. Например, значение 2.0 указывает 2 пикселя за точку, таким образом, цель, размер которой «320x480», 640 на 960 пикселей.

Таблица 6Sampler ввела формат словаря

Ключ

Ввести

Значение

target

Строка

COLOR, DEPTH, ключ от метода targets словарь или ключ от метода symbols словарь, идентифицирующий сэмплер текстуры.

magnificationFilter (дополнительный)

minificationFilter (дополнительный)

Строка

linear или nearest.

mipFilter (дополнительный)

Строка

linear, nearest, или none.

wrapS (дополнительный)

wrapT (дополнительный)

wrapP (дополнительный)

Строка

clamp, repeat, clampToBorder, mirror.

Смешивание

blendStates ключ определения передачи определяет опции смешения цветов. Смешивание отключено по умолчанию для более быстрой производительности рендеринга. Включая словарь для этого ключа позволяет смешаться (если словарь enable ключ указывает NOfalse). Смешение цветов комбинирует исходный цвет (вывод цвета программой программы построения теней передачи получения) с целевым цветом (существующее содержание буфера вывода) использование указанных режимов и операций.

  • Доступные режимы смешивания (для 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 для вершины метода и программ построения теней фрагмента.

Словарь определения перечисления 1JSON для метода
  • {
  • "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"
  • }
  • }
  • }
Исходный код шейдера перечисления 2Vertex для метода отображения смещения
  • attribute vec4 a_position;
  • varying vec2 uv;
  • void main() {
  • gl_Position = a_position;
  • uv = (a_position.xy + 1.0) * 0.5;
  • }
Исходный код шейдера перечисления 3Fragment для метода отображения смещения
  • 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

import SceneKit

Objective C

@import SceneKit;

Доступность


Доступный в OS X v10.10 и позже.
  • Создает метод из словаря определения метода.,

    Объявление

    Swift

    init?(dictionary dictionary: [NSObject : AnyObject]) -> SCNTechnique

    Objective C

    + (SCNTechnique *)techniqueWithDictionary:(NSDictionary *)dictionary

    Параметры

    dictionary

    Словарь, определяющий ряд рендеринга передач, включающих метод.

    Возвращаемое значение

    Новый объект метода.

    Обсуждение

    См. обзор класса для подробных данных словаря определения метода.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • Создает новый метод рендеринга, комбинирующий серию методов.

    Объявление

    Swift

    init?(bySequencingTechniques techniques: [AnyObject]) -> SCNTechnique

    Objective C

    + (SCNTechnique *)techniqueBySequencingTechniques:(NSArray *)techniques

    Параметры

    techniques

    Массив SCNTechnique объекты.

    Возвращаемое значение

    Новый объект метода.

    Обсуждение

    Новый метод применяет эффекты методов в порядке, указанном в techniques массив. Каждый вывод метода в массиве становится вводом к следующему методу в массиве.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • Словарь, определяющий метод рендеринга. (только для чтения)

    Объявление

    Swift

    var dictionaryRepresentation: [NSObject : AnyObject] { get }

    Objective C

    @property(readonly) NSDictionary *dictionaryRepresentation

    Обсуждение

    Считайте это свойство, когда Вы захотите сохранить файл списка свойств, содержащий определение метода.

    См. обзор класса для подробных данных словаря определения метода.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.10 и позже.

  • Указывает блок, который вызовут прежде, чем представить программы использования с указанной универсальной переменной GLSL или названием атрибута.

    Объявление

    Swift

    func handleBindingOfSymbol(_ symbol: String, usingBlock block: 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

    Доступность

    Доступный в OS X v10.10 и позже.