СПОСОБЫ ОБРАБОТКИ РЕБЕР
EDGE PROCESSING METHODS

Область техники, к которой относится изобретение
Описанный здесь объект, в общем, касается обработки графики и, более конкретно, обработки ребер патчей.
Уровень техники
Графический конвейер может быть предназначен для визуализации графики в играх, компьютерной анимации, медицинских приложений и подобных приложений. Конвейеры обработки графики, такие как Microsoft DirectX 11, увеличивают геометрическую детализацию путем увеличения уровня тесселяции. Тесселяция представляет собой процесс формирования наборов треугольников, предназначенных для визуализации изображения объекта, начиная с грубой модели с многоугольниками. Патч представляет собой базовый блок на грубом уровне, описывающий управляемую клетку поверхности. Патч может представлять собой кривую или область и может располагаться по касательной к поверхности объекта. Поверхностью может быть любая поверхность, которая может быть описана в виде параметрической функции. Управляемая клетка представляет собой модель низкого разрешения, используемую художниками для построения гладких поверхностей. Таким образом, обеспечивая больший уровень тесселяции, можно достичь большего уровня графической детализации при отображении. Тем не менее, это может негативно сказаться на скорости обработки. Желательно увеличить скорость, при которой обеспечивается некоторый уровень графической детализации.
Краткое описание чертежей
На чертежах проиллюстрированы варианты осуществления настоящего изобретения, при этом указанные варианты никак не ограничивают изобретение и одинаковыми ссылочными позициями обозначены аналогичные элементы.
Фиг.1 - схематический вид, показывающий графический конвейер, соответствующий одному варианту осуществления настоящего изобретения;
фиг.2 - вид, поясняющий процесс, который может быть использован для выяснения, сохранять атрибуты общего ребра в таблице или извлекать их из таблицы;
фиг.3 - вид, показывающий подходящую систему, которая может использовать варианты осуществления изобретения.
Подробное описание изобретения
В этом описании ссылки на «один вариант осуществления изобретения» или «вариант осуществления изобретения» означают, что конкретное свойство, структура или характеристика, описанная в связи с вариантом осуществления изобретения, содержится, по меньшей мере, в одном варианте осуществления настоящего изобретения. Таким образом, появления фразы «в одном варианте осуществления изобретения» или «в варианте осуществления изобретения» в различных местах настоящего описания не обязательно ссылается на один и тот же вариант осуществления изобретения. Более того, конкретные свойства, структуры или характеристики могут быть объединены в одном или нескольких вариантах осуществления изобретения.
В некоторых вариантах осуществления изобретения предусмотрена выработка находящейся в кэш-памяти таблицы данных по ребрам, принадлежащих двум или большему количеству геометрически смежных патчей. Каждому патчу присваивается идентификационное значение. Когда первый патч имеет общее ребро со вторым патчем, для записи таблицы вырабатывают уникальное идентификационное значение, что делают на основе идентификационных значений двух патчей с общим ребром. Атрибуты общего ребра сохраняют в записи таблицы, связанной с этим уникальным идентификационным значением. Когда общее ребро необходимо оценить для второго патча, ребро считывают из таблицы в обратном порядке. В некоторых вариантах осуществления изобретения патч представляет собой двухмерную поверхность, которую можно нарисовать с целью создания трехмерной формы.
Использование находящейся в кэш-памяти таблицы данных по ребрам может потенциально исключить использование требующих большого объема вычислений копий шейдеров, просмотров текстуры и фильтрации. Использование этой таблицы может потенциально уменьшить обработку лишних вершин и просмотров текстуры вдоль ребер, общих для двух или большего количества геометрически смежных патчей.
Известные в настоящее время способы предполагают обработку одного патча за один раз с целью эксплуатации параллелизма и получения возможности повторных вычислений для вершин вдоль ребер. Это представляет угрозу или вносит разрывы из-за некоммутативной природы арифметики с плавающей точкой. С целью получения водонепроницаемых поверхностей в Microsoft DirectX 11 определены места оцениваемых доменов в арифметике с фиксированной точкой. С целью использования параллелизма в блоках обработки графики в различных вариантах осуществления изобретения предусмотрено, чтобы вершины ребра можно было оценивать и смещать несколько раз и потенциально может быть достигнута водонепроницаемость вдоль ребер. Соответственно различные варианты осуществления изобретения могут уменьшить оценку вершин вдоль общих ребер приблизительно на 50%.
Различные варианты осуществления изобретения могут быть встроены в драйвер тесселяции DirectX 11, но также могут быть использованы в других типах графических конвейеров. Описанные здесь находящиеся в кэш-памяти таблицы данных по ребрам могут быть использованы в любом конвейере на основе микромногоугольников типа «Визуализирует Все, что Вы Когда-либо Видели».
На фиг.1 показан графический конвейер. Графический конвейер может быть реализован в графическом процессоре в виде независимой, специализированной интегральной схемы, в виде программного обеспечения, с помощью реализованных программно процессоров общего назначения или с помощью комбинации программных и аппаратных средств. В некоторых вариантах осуществления изобретения, на фиг.1 элементы с прямоугольными краями могут быть реализованы аппаратно, а элементы с закругленными краями могут быть реализованы программно.
Графический конвейер может быть реализован, например, в беспроводном телефоне, мобильном ручном вычислительном устройстве, в которое встроено проводное или беспроводное устройство связи, или в любом компьютере. Графический конвейер может предоставлять изображения или видео на устройство отображения с целью их показа. Для обработки изображений, поданных на дисплей, могут быть использованы различные способы. Например, для передачи изображений на дисплей могут быть использованы: мультимедийный интерфейс высокой четкости (HDMI), стандарт DisplayPort сигнального интерфейса для цифровых дисплеев, беспроводной HDMI и/или беспроводные технологии, совместимые с технологией высокой четкости.
Модуль 12 сборки входных данных считывает вершины из памяти с использованием фиксированных функций, формируемой геометрии и создающих рабочих элементов конвейера. Генерируемые автоматически идентификаторы позволяют осуществлять обработку для конкретного идентификатора, что показано пунктирной линией справа на фиг.1. Идентификаторы вершин и идентификаторы копий доступны далее в вершинном шейдере 14. Идентификаторы примитивов доступны далее в поверхностном шейдере 16. Идентификаторы контрольных точек доступны в поверхностном шейдере 16.
Вершинный шейдер 14 осуществляет такие операции, как преобразование, создание кожи или расчет освещения. На вход его может быть подана одна вершина и на выходе может быть получена одна вершина. В фазе контрольной точки, вызванной для выходной контрольной точки, каждой из которых приписан идентификатор контрольной точки, вершинный шейдер имеет возможность считать все входные контрольные точки для патча независимо от выходного количества. Поверхностный шейдер 16 подает на выход контрольную точку при вызове. Совокупный выход представляет собой общий вход для следующей фазы поверхностного шейдера и для доменного шейдера 20. Фазы постоянных патча могут быть вызваны один раз для каждого патча с совместно считываемым входом для всех входных и выходных контрольных точек. Поверхностный шейдер 16 подает на выход показатели тесселяции ребер и другие постоянные данные для патчей. Здесь взаимозаменяемы термины показатель тесселяции ребер и уровень детализации ребер с количеством интервалов на ребро домена примитива. Коды сегментированы так, что работа может быть выполнена параллельно, а совместный этап присутствует в конце.
Тесселятор 18 может быть реализован или аппаратными или программными средствами. В некоторых целесообразных вариантах осуществления изобретения тесселятор может являться программно реализованным тесселятором. Тесселятор 18 должен извлекать закодированные доменные точки или (u,v) значения. Сохраненные закодированные доменные точки могут быть представлены в формате «целое число без знака». Тесселятор 18 может принимать от поверхностного шейдера числа, определяющие уровень тесселяции. Тесселятор 18 генерирует топологии, такие как точки, линии или треугольники. Тесселятор 18 может подавать на выход, по меньшей мере, одну вершину.
Блок 19 определения ребра должен определить, принадлежит ли ребро оцениваемого патча А другому патчу, патчу В. Если ребро также принадлежит патчу В, то для общего ребра в таблице создают уникальный идентификатор. Уникальный идентификатор может являться численным значением или алфавитно-цифровым кодом. В записи хранятся численные атрибуты вершин общего ребра. Доменный шейдер 20 может быть использован для выработки численных атрибутов для общего ребра. Когда оценивают патч В (после патча А), может быть определено общее с патчем А ребро. На основе общего ребра может быть определен уникальный идентификатор. Запись может быть извлечена из таблицы на основе этого уникального идентификатора. Численные атрибуты для патча В могут быть извлечены в обратном порядке вместо вычисления этих значений с использованием доменного шейдера 20. Извлеченные численные значения для патча В могут быть переданы в геометрический шейдер (ГШ) 22. Соответственно, при оценивании патча В при определения атрибутов ребра, общего для патчей А и В, может быть исключено использование доменного шейдера 20. Блок 19 определения ребра может запрашивать, чтобы таблица хранилась в кэш-памяти или другой памяти (не показана).
Доменный шейдер 20 представляет собой программируемую стадию, которая использует доменные точки, (u,v) значения, поданные от тесселятора 18 с целью выработки фактической трехмерной точки на патче. Доменный шейдер 20 оценивает координаты вершины и атрибуты и смещает точки путем просмотра карт смещения. Доменный шейдер 20 оценивает нормаль к координатам и другие атрибуты с использованием (u,v) значений, полученных от тесселятора 18. Мелкие детали патча могут быть добавлены с использованием карты смещения. В некоторых вариантах осуществления изобретения доменный шейдер 20 может быть реализован программно. В некоторых вариантах осуществления изобретения сгенерированная компилятором шейдера часть доменного шейдера 20 применяет технологии масштабирования и смещения с целью преобразования закодированных доменных точек, полученных от тесселятора 18, в домен [0,1].
Доменный шейдер 20 может сместить точку с использованием карты скалярного смещения или вычислять другие атрибуты вершины. В некоторых случаях оценки вершин могут включать в себя:
1. Определение бикубического многочлена для координат.
2. Вычисление частных производных или оценивание касательной и бикасательной с использованием вспомогательных управляемых клеток касательной и бикасательной и взятие их векторных произведений.
3. Осуществление просмотра текстуры с некоторой фильтрацией, например линейной фильтрацией.
4. Смещение точки вдоль нормали (в случае скалярных значений смещений).
5. Смещение точки вдоль направлений, которые могут быть потенциально считаны из других считываний текстур (в случае векторно-значных смещений).
Геометрический шейдер 22 может получать на вход один примитив и подавать на выход до четырех потоков, каждый из которых независимо получает ноль или более примитивов. Поток, появляющийся на выходе геометрического шейдера, может предоставлять примитивы в растеризатор 24, при этом до четырех потоков могут быть сцеплены в буферах 30. Растеризатор 24 может реализовывать отсечение, деление перспективы, переносы точки зрения, реализацию выбора ножницами и установку примитивов.
Пиксельный шейдер 26 получает на вход один пиксел и подает на выход один пиксел, расположенный в той же позиции, или ничего не подает на выход. Выходное устройство 28 объединения обеспечивает фиксированные функции: визуализацию, слияние, глубину и операции по шаблону.
На фиг.2 показан процесс, который может быть использован для определения, сохранять атрибуты общего ребра в таблице или извлекать их из таблицы. Блок 202 включает в себя определение того, имеет ли патч А общее ребро с другим патчем, патчем В. Если общее ребро существует, то за блоком 202 следует блок 210. Если общего ребра нет, то за блоком 202 следует блок 204. В момент времени, когда вершины этого общего ребра оценены (и смещены) в контексте патча А, таблица не содержит записи для общего ребра патчей А и В. Обработка патча А включает в себя оценивание всех точек патча А с использованием u, v значений с целью создания значений х, y, z. Обработка патча А также включает в себя оценивание точек вдоль ребер патча А, которые также принадлежат другим патчам. Точка патча имеет координаты u, v. Если u или v равно 0 или 1, то точка находится на ребре. В некоторых вариантах осуществления изобретения, если фактические координаты х, y, z конечных точек ребра патча соответствуют координатам х, y, z конечных точек ребра другого патча, то ребро является общим для патчей.
Блок 204 включает в себя выработку значений атрибутов для вершин патча А. Доменный шейдер может быть использован для выработки значений атрибутов. Значения атрибутов могут быть направлены в геометрический шейдер. Эту запись заполняют после оценки и смещения всех точек вдоль общего ребра патчей А и В. В некоторых вариантах осуществления изобретения значения атрибутов могут совпадать со значениями, представленными в таблице, приведенной ниже. Далее содержится пример таблицы.
Указатель
Координаты
Нормали
Координаты текстуры
Касательные
Бикасательные
Hash(PIDA,PIDB)
Hash(PIDX,PIDY)
Hash(PIDM,PIDN)
В столбце Координаты содержатся координаты вершин вдоль общего ребра. В столбце Нормали содержатся нормали для каждой вершины. В столбце Координаты текстуры содержатся координаты текстуры для каждой вершины. В столбце Касательные содержатся касательные векторы для каждой вершины. В столбце Бикасательные содержатся бикасательные векторы. Другими атрибутами могут быть атрибуты цвета, передача или другие определенные пользователем атрибуты. Записи таблицы могут хранить все (или некоторые) атрибуты вершин, расположенных вдоль общих ребер. Каждый столбец хранит несколько значений для каждой записи, такие как несколько значений координат.
Блок 210 включает в себя определение, присутствует ли запись для общего ребра в находящейся в кэш-памяти таблице для ребер. Если запись присутствует, то за блоком 210 следует блок 220. Если запись отсутствует, то за блоком 210 следует блок 212. Определение того, присутствует ли запись для общего ребра в находящейся в кэш-памяти таблице для ребер, может быть выполнено с использование вычисления некоторой функции от идентификаторов патчей А и В. Например, вычисление может определить идентификатор записи на основе значения хеш-функции от номеров патчей А и В, так как патчи А и В имеют общее ребро. Когда точки вдоль ребра, общего для патчей А и В, необходимо оценить в контексте оценивания патча В, таблицу оценивают в месте Hash(B, А), что делают с целью определения, присутствует ли надлежащая запись. Так как значение Hash(B, А) совпадает со значением Hash(A, В), то запись существует и вместо оценивания точек извлекают данные, сохраненные в таблице. Кроме того, значение хеш-функции присваивает номера фиксированного размера записям таблицы. Например, если в таблице 16 записей, то хеш-функция предоставляет 16 уникальных идентификаторов.
Например, для hash(patchIDl, patchID2), где максимальное значение patchID равно 2^N, где N<=16, хеш-функция может быть следующей:
Эта хеш-функция рассматривает последние 8 бит идентификаторов двух патчей. Большую из двух строк по 8 бит сдвигают на 8 бит и применяют операцию логического ИЛИ с меньшей из двух строк по 8 бит. Возвращаемое значение представляет собой 16-битовое значение без знака, которое используют в качестве идентификатора I записи. Если идентификаторы двух патчей отличаются на 64, то эти патчи будут указывать на одну и ту же запись.
∧
В другом примере для hash(patchID1, patchID2), где максимальное значение patchID равно 2N, где N<=16, хеш-функция может быть следующей:
Возвращаемое значение, указатель I, представляет собой большее значение, сдвинутое на N бит, после чего к нему и меньшему значению применяют операцию логического ИЛИ. В этом примере N равно 16, но параметр N может принимать другие значения. Когда N равно 16, указатель становится 32-битным значением и тогда таблица может покрыть приблизительно 4 гигабайта памяти. Далее указатель I может быть преобразован для попадания в меньшую область памяти.
В некоторых вариантах осуществления изобретения хеш-функция может минимизировать количество смежных записей в таблице и распределять их в свободное пространство памяти, которая может быть использована для хранения записей, содержащих другую информацию. Например, если в таблице присутствуют две записи, то значения указателя может быть присвоено двум записям в смежных местах памяти. В других сценариях память, которую не используют для хранения записей, доступна для использования другими приложениями. В некоторых случаях записи, которые считаны в обратном порядке, доступны для перезаписи и соответствующее значение указателя может быть использовано для присвоения другому общему ребру.
Блок 220 включает в себя считывание вершин из записи I находящейся в кэш-памяти таблицы для ребер, в обратном порядке и сохранение вершин в буфере вершин текущего патча. Считывание вершин происходит в обратном порядке, так как в смежных патчах ребра просматривают в противоположных направлениях. Например, если патч В является текущим патчем и определено, что атрибуты общего с патчем А ребра сохранены в таблице, то атрибуты для общего ребра, оцениваемого в связи с патчем А, считывают в обратном порядке.
Блок 212 включает в себя выработку уникального идентификатора I для общего ребра. Для выработки уникального идентификатора I для общего ребра может быть использовано вычисление значения хеш-функции, основанное на идентификационных значениях патчей А и В. Для определения уникального идентификатора для записи таблицы могут быть осуществлены различные типы вычислений. Например, SV_PRIMITIVE_IDs из DirectX11 представляет идентификационное значение патча.
Блок 214 включает в себя оценивание и смещение точек вдоль общего ребра. Например, для смещения точек вдоль общего ребра может быть использована карта скалярного смещения. Для оценки и смещения точек может быть использован доменный шейдер.
Блок 216 включает в себя вставку вершин в запись I находящейся в кэш-памяти таблицы для ребер.
Блок 218 включает в себя сохранение вершин в промежуточном буфере вершин для текущего патча. Далее атрибуты вершины могут быть использованы геометрическим шейдером.
Так как для некоторых архитектур высокой производительности их вычислительные возможности превосходят их объем памяти, то более предпочтительными могут быть технологии, которые требуют большого объема вычислений, а не технологии, которые требуют большого объема памяти. Тем не менее, в этом случае, из-за большого времени задержки для блоков текстуры, могут быть использованы технологии, опирающиеся на доступ к памяти, а не на вычисления. Различные описанные здесь варианты осуществления изобретения могут быть использованы в архитектурах типа «Визуализирует Все, что Вы Когда-либо Видели», так как текстурирование вершины является обычным в этих архитектурах и подразумевает доступ к большему количеству текстур по сравнению со случаем карт смещения.
Различные варианты осуществления изобретения могут быть использованы для способов отложенной тесселяции с целью исключения лишнего определения общих ребер в вычислительных средах, описанных в заявке на патент США №12/347114, озаглавленной "A TESSELLATOR WHOSE TESSELLATION TIME GROWS LINEARLY WITH THE AMOUNT OF TESSELLATION," зарегистрированной 31 декабря 2008 (attorney docket P29143), авторы Сате (Sathe) и Розен (Rosen); №12/347,114, озаглавленной "IMAGE FORMATION TECHNIQUES," зарегистрированной 29 апреля 2009 (attorney docket P29929), авторы Сате (Sathe) и Розен (Rosen), и документе PCT/US2009/069353, озаглавленном "Image Processing Techniques," зарегистрированном 23 декабря 2009 (attorney docket P31681).
В многоядерной вычислительной среде каждое ядро может содержать свою собственную находящуюся в кэш-памяти таблицу. Например, первое ядро вырабатывает запись, находящуюся в кэш-памяти, для общего ребра и первое ядро использует запись, находящуюся в кэш-памяти. Так как каждое ядро работает с меньшим количеством патчей, может быть использована меньшая кэш-память по сравнению с ситуацией, когда таблица совместно используется несколькими ядрами. Если каждое ядро используется свою собственную таблицу, то просмотр записей может выполняться быстрее. В некоторых случаях находящиеся в кэш-памяти записи о ребрах могут быть перезаписаны после считывания общего ребра.
Ядро может быть выделено для выполнения любого типа операции шейдера, такой как затенение домена, геометрии или пиксела. Соответственно, если запись извлекают из таблицы, то ядро может быть освобождено от выполнения затенения домена и это освобожденное ядро может выполнять операции других типов.
На фиг.3 показана подходящая система, которая может использовать варианты осуществления настоящего изобретения. Компьютерная система может содержать центральную систему 302 и дисплей 322. Компьютерная система 300 может быть реализована в переносном персональном компьютере, мобильном телефоне, телеприставке или любом вычислительном устройстве. Центральная система 302 может содержать набор 305 микросхем, процессор 310, основную память 312, устройство 314 хранения данных, графическую подсистему 315 и радио 320. Набор 305 микросхем может обеспечивать взаимодействие процессора 310, основной памяти 312, устройства 314 хранения данных, графической подсистемы 315 и радио 320. Например, набор 305 микросхем может включать в себя адаптер (не показан) для устройств хранения данных, способный обеспечивать взаимодействие с устройством 314 хранения данных. Например, адаптер для устройств хранения данных может взаимодействовать с устройством 314 хранения данных в соответствии с любым протоколом.
В различных вариантах осуществления изобретения компьютерная система осуществляет способы, описанные в связи с рассмотрением фиг.1-2, с целью определения визуализируемых патчей.
Процессор 310 может быть реализован как процессоры вычислительной машины с полным набором команд (CISC), процессоры вычислительной машины с сокращенным набором команд (RISC), х86-совместимые процессоры, многоядерные микропроцессоры или любые другие микропроцессоры или центральный процессор.
Основная память 312 может быть реализована в виде энергозависимого запоминающего устройства, например, помимо прочего, оперативного запоминающего устройства (ОЗУ), динамического оперативного запоминающего устройства (ДОЗУ) или статического ОЗУ (СОЗУ). Устройство 314 хранения данных может быть реализовано в виде энергонезависимого запоминающего устройства, например, помимо прочего, накопителя на магнитных дисках, дисковода на оптических дисках, запоминающего устройства на магнитной ленте, внутреннего запоминающего устройства, прикрепленного запоминающего устройства, флеш-памяти, синхронного ДОЗУ (СДОЗУ) с резервным батарейным питанием и/или доступного по сети запоминающего устройства.
Графическая подсистема 315 может осуществлять обработку изображений, таких как неподвижное изображение или видео, с целью их показа. Для соединения графической подсистемы 315 и дисплея 322 может быть использован аналоговый или цифровой интерфейс.Например, в качестве интерфейса может быть использован любой из следующих интерфейсов: мультимедийный интерфейс высокой четкости (HDMI), стандарт DisplayPort сигнального интерфейса для цифровых дисплеев, беспроводной HDMI и/или беспроводные технологии, совместимые с технологией высокой четкости. Графическая подсистема 315 может быть интегрирована в процессор 310 или набор 305 микросхем. Графическая подсистема 315 может представлять собой отдельную карту, соединенную с набором 305 микросхем.
Радио 320 может содержать один или несколько устройств радиосвязи, способных передавать и принимать сигналы в соответствии с подходящими беспроводными стандартами, такими как, помимо прочего, любой версией стандартов IEEE 802.11 и IEEE 802.16.
Описанные здесь способы обработки графики и/или видео могут быть реализованы в различных аппаратных архитектурах. Например, графическая и/или видеофункциональность может быть интегрирована в набор микросхем. В качестве альтернативы может быть использован отдельный графический и/или видеопроцессор. В еще одном варианте осуществления изобретения графические и/или видеофункции могут быть реализованы процессором общего назначения, в том числе многоядерным процессором. В еще одном варианте осуществления изобретения эти функции могут быть реализованы в устройстве потребительской электроники.
Варианты осуществления настоящего изобретения могут быть реализованы, например, в виде компьютерного программного продукта, который может содержать один или несколько пригодных для считывания машиной носителей информации, на которых хранятся выполняемые машиной команды, которые при выполнении одной или несколькими машинами, такими как компьютер, сеть компьютеров или другими электронными устройствами, могут приводить к тому, что одна или несколько машин выполняют операции в соответствии с вариантами осуществления настоящего изобретения. Пригодные для считывания машиной носители информации могут представлять собой, помимо прочего, гибкие магнитные диски, оптические диски, диски CD-ROM (постоянная память на компакт-диске) и магнитооптические диски, постоянные запоминающие устройства (ПЗУ), ОЗУ (оперативные запоминающие устройства), СППЗУ (стираемые программируемые постоянные запоминающие устройства), ЭСППЗУ (электрически стираемые программируемые постоянные запоминающие устройства), магнитные или оптические карты, флеш-память или другие типы носителей информации/ пригодные для считывания машиной носители информации, пригодные для хранения выполняемых машиной команд.
Чертежи и приведенное выше описание дают примеры настоящего изобретения. Хотя показано некоторое количество отдельных функциональных элементов, специалистам в рассматриваемой области ясно, что один или несколько таких элементов могут быть объединены в единые функциональные элементы. В качестве альтернативы определенные элементы могут быть разделены на несколько функциональных элементов. Элементы одного варианта осуществления изобретения могут быть добавлены в другой вариант осуществления изобретения. Например, описанный здесь порядок следования процессов может быть изменен и не ограничен описанным здесь вариантом. Более того, действия из любой блок-схемы не обязательно надо реализовывать в показанном порядке, то же самое относится к действиям, которые необходимо выполнить. Также эти действия, которые не зависят от других действий, могут быть осуществлены параллельно другим действиям. Тем не менее, объем настоящего изобретения не ограничен приведенными конкретными примерами. Возможны различные изменения, очевидным или неочевидным образом содержащиеся в описании, такие как различия в структуре, размере и использовании материалов. Объем изобретения определен приведенной далее формулой изобретения.