Что такое блендинг в гд
Словарь игроков
Очень часто в игре можно встретить не всем понятные слова. Объяснение многих из них есть в данном словаре.
абуз (англ. abuse — злоупотребление) ситуация в игре, при которой игроки используют баги игры и другие недочёты для своей выгоды [1] аккаунт, акк (англ. account, acc) любой зарегистрированный в игре персонаж (см. Аккаунты) андеррейт (англ. under rate) заниженная оценка уровня. Пример — Fire Aura асимметрики (англ. asymmetrics) сокращённое название асимметричных раздвоений в уровнях АФК, афк (англ. AFK, afk, полн. ф. away from keyboard — рус. вдали от клавиатуры) используется как предупреждение перед тем, как покинуть своё место, уйти куда-либо, быть недоступным [2]
верификатор, верифер (англ. verifier) игрок, проверяющий уровень видеогайд гайд в виде видеозаписи [3] (см. гайд)
джиттерклик (англ. jitterclick) этапы в уровне, требующие использования быстрых и множественных нажатий. Дискорд, Диск (англ. Discord, Disc) популярный среди геймеров мессенджер. Часто используется игроками Geometry Dash для переписки или отправки уровней модераторам дроп (англ. drop) очень частая смена форм персонажа на высокой скорости, где часто присутствуют голубые батуты гравитации дуал (англ. dual) общее название всех раздвоений персонажа в игре
ИМХО (англ. IMHO, полн. ф. in my humble opinion — рус. по моему скромному мнению) сокращение, используемое игроками при высказывании своего мнения по какому-либо вопросу [6]
кансер, кансерный (англ. cancer) неприятный, не доставляющий удовольствия в прохождении геймплей. Пример кансера — Speed of Light Каппа, каппа (англ. Kappa, kappa) популярный смайл на Twitch, лицом которого является один из его разработчиков. Так как в Geometry Dash нет такого смайла, то игроки пишут его в виде слова «kappa» капс (англ. caps, полн. ф. Caps Lock) слово или фраза, написанное заглавными (прописными) буквами, в интернет-общении обозначает повышение голоса, крик [7] клавиша «Caps Lock» на клавиатуре компьютера, включающая заглавные буквы как основные [7] кликсинк (англ. click sync) синхронизация каждого нажатия в уровне с каким-либо элементом саундтрека. квадриквел сиквел триквела, или же четвёртая часть чего-либо Кноб, Кноббель игрок Knobbelboy. Очень известный строитель, также прославившийся длительной проверкой Bloodlust коллаб (англ. collab) уровень, созданный двумя и более игроками (см. Коллаб) копипаста, копипаст, копипастинг (англ. copypast, copy paste, copypasting) использование скопированных из других уровней элементов геймплея или декораций. Чаще всего вызывает негативную реакцию. Обычно это слово ассоциируется с игроком Viprin множественное повторение одних и тех же элементов геймплея/декораций на протяжении уровня. Вызывает негативную реакцию.
левел, лвл (англ. level, lvl) уровень в Geometry Dash лейаут, лайаут (англ. layout) заготовка геймплея для уровня Лит, лит (англ. Leet, leet) 1337 — leet — elite — «элитный» представляет собой распространённую в интернете интерпретацию английского языка. Он используется для замены латинских букв на цифровые символы [8] ЛМАО, лмао (англ. LMAO, lmao, полн. ф. laughing my ass off) вариация LOL, которая означает «надорваться от смеха» ЛОЛ, лол (англ. LOL, lol, полн. ф. laughing out loud) выражение, означающее громкий смех
мб (англ. mb, полн. ф. maybe) может быть мемори (англ. memory) Части уровня, требующие запоминания местонахождения игровых элементов и пути их преодоления. Мичиган, Мичи игрок Michigun. Долгое время располагался на 1 месте в таблице лидеров. мод* (англ. mod, полн. ф. moderator — рус. модератор) специальный режим, дающий определённому игроку возможность присылать уровни RobTop’у для их возможной оценки (см. Режим модератора) мув, мов (англ. Move — двигать) название триггера, передвигающего объекты определённой группы (см. Триггеры) мут (англ. mute — заглушить) состояние игрока, при котором он не может общаться в чате с другими игроками по запрету администратора [9]
нерф (англ. nerf) облегчение уровня нуб (англ. noob, полн. ф. newbie — рус. новичок) обычно не несёт негативной оценки, а лишь указывает на малый опыт игрока в какой-то области знаний, либо в целом в игре. Любой игрок, начиная играть в какую-либо игру, является в ней нубом до того момента, пока не разберётся в ней [10]
овердекор (от англ. overdecorated — вычурно декорированный) уровень, который «забит» декорациями. Обычно так называют уровни в стиле Core оверрейт (англ. over rate) завышенная оценка уровня. Пример — Chaotic Hell офк (англ. ofc, полн. ф. of course) конечно
приквел (англ. prequel) уровень, являющейся началом какой-либо серии уровней пруф (англ. proof) доказательство к чему-либо
рега (от англ. registration) регистрация на сайте, форуме, в чате, блоге, компьютерной игре и т. п. [11] региться, регаться (зарегиться, зарегаться) (англ. register) регистрироваться на форуме, блоге, каком-либо другом сайте [12] рек, реквы, реквест, реквестить (англ. request, level request, req) просьба пройти какой-нибудь уровень другому игроку
хак (англ. hack) действие, направленное на получение пароля от чужого аккаунта в плохих целях (см. Хаки и модификации) хейтер (англ. hater) тот, кто испытывает ненависть к какому-либо человеку [17] хэндкам (англ. hand cam) камера, направленная на руку и отображающая клики игрока для доказательства его честности
чат (англ. chat) вид группового интернет-общения в реальном времени [18] чит (англ. cheat) специальное программное обеспечение, дающее преимущество при прохождении уровня читер игрок, нарушающий правила, используя запрещённое программное обеспечение или чит-коды (читы), которые дают ему преимущество перед другими игроками [19] ЧСВ, чсв распространённый интернет-мем, который используется в качестве характеристики людей, чрезмерно преувеличивающих и демонстрирующих окружающим свою значимость и важность собственной персоны в глазах сообщества [20]
шта (англ. wat) популярный мем, обозначающий вопрос «что?»
экспозинг (англ. exposing) разоблачение игрока в использовании читов или других грязных делах в игре эпик (англ. epic) сокращённое название пользовательских уровней, имеющих оценку Epic.
ЮК, юк (англ. user coins) пользовательские монеты. Серебряные монеты, которые собираются в пользовательских уровнях и могут быть двух типов (см. Пользовательские монеты)
Блендинг и Unity Terrain: как избавиться от пересечений и перестать делать глазам больно
Для того, чтобы получить реалистичный мир внутри игры, необходимо учитывать взаимодействие различных форм рельефа между собой и с другими моделями. И если видимые линии пересечения между 3D-моделями портят органичность изображения, стоит задуматься над тем, как их устранить. Самый распространенный случай таких линий, который может быть знаком многим, — пересечение билбордов частиц с непрозрачной геометрией.
Другой пример — нарушающие естественность композиции пересечения скал и растительности с поверхностью ландшафта в сценах «на открытом воздухе».
Помимо разнообразных методов сглаживания (SSAA, MSAA, CSAA, FXAA, NFAA, CMAA, DLAA, TAA и др.), которые пусть и смягчают вызывающий внешний вид таких линий пересечений, но не исправляют ситуацию в полной мере, существуют и более действенные приемы. Их мы и рассмотрим.
Блендинг по глубине
В Unity существует встроенное решение для устранения видимых пересечений между прозрачными частицами и непрозрачной геометрией, которое называется soft particles. Шейдеры, которые поддерживают этот эффект, дополнительно усиливают прозрачность частиц в зависимости от того, насколько мала разница между глубиной фрагмента частицы и глубиной непрозрачной геометрии.
Принцип работы soft particles
Очевидно, для корректной работы soft particles необходим буфер глубины. В случае deferred shading буфер глубины формируется на этапе рендеринга полноэкранных буферов, и с учетом MRT (Multiple Render Targets, а не Magnetic Resonance Tomography) его наличие не выражается в дополнительных вычислительных затратах.
Теперь же можно реализовать собственный вариант Scriptable Render Pipeline с forward shading, которая при помощи MRT одновременно сможет отрендерить и буфер глубины, и буфер цвета.
Устранение линий пересечения в шейдерах, поддерживающих soft particles
В целом нет технических препятствий для того, чтобы использовать метод блендинга по глубине для устранения видимых пересечений 3D-моделей с ландшафтом:
Однако этот подход имеет несколько недостатков.
Это наименее прогрессивная часть любого аппаратного пайплайна в том смысле, что она работает точно так же, как ее предшественница работала еще двадцать лет тому назад. GPU читает значение из памяти, смешивает его со значением фрагментного шейдера и записывает обратно в память.
Также существует разница в том, использовать ли блендинг по глубине для полностью прозрачных или частично прозрачных 3D-моделей. Прозрачные ― например, билборды частиц ― даже без блендинга по глубине целиком рендерятся прозрачными. В случае же с непрозрачными 3D-моделями реальной, ощутимой, видимой прозрачностью при блендинге по глубине будет наделено лишь очень небольшое число фрагментов, подавляющая же их часть так и останется непрозрачными. Но последнее вовсе не означает, что для их отрисовки не будет использован блендинг ― просто он будет работать вхолостую.
Латеральный параллакс при смещении камеры: фрагменты 3D-модели смещаются на большее расстояние по сравнению с фрагментами ландшафта
Латеральный параллакс при смещении камеры: при фиксации камеры на фрагменте ландшафта становится заметно, как быстро смещаются фрагменты модели
При вращении камеры параллакс наблюдается сразу по двум осям экранных координат. Впрочем, в динамике это меньше бросается в глаза, чем латеральный параллакс.
Азимутальный параллакс при смещении камеры: здесь мозгу сложнее распознать паттерн параллакса при смещении фрагментов по двум осям
Но ощутимее всего внешний вид блендинга по глубине меняется в зависимости от угла, под которым наблюдатель смотрит на поверхность ландшафта. Зона блендинга становится практически незаметной, когда направление взгляда перпендикулярно нормали поверхности ландшафта, но размер этой зоны быстро увеличивается, если наклонить камеру вниз.
Изменение ширины зоны блендинга при наклоне камеры
Блендинг по глубине мог бы оказаться неплохим вариантом для устранения линий пересечения 3D-моделей с ландшафтом, если бы не обилие артефактов, которые его сопровождают. Этот метод больше подходит для эффектов частиц, которые не статичны и, как правило, не содержат высокодетализированных текстур, поэтому эффекты параллакса в их случае не наблюдаются.
Блендинг с картой высот
Зная позицию объекта Terrain и размеры ландшафта, указанные в TerrainData, и имея «на руках» карту высот, можно вычислить высоту ландшафта в любой точке, заданной в мировых координатах.
Параметры ландшафта, необходимые для сэмплирования карты высот
Ну а теперь, после вычисления высоты ландшафта, можно вычислить в шейдере и uv-координаты для сэмплирования карты высот ландшафта по мировым координатам.
Для того, чтобы была возможность использовать один и тот же код во фрагментных и вертексных шейдерах, при сэмплировании используется функция tex2Dlod. Кроме того, карта высот не имеет мип-уровней, поэтому сэмплить ее функцией tex2D, которая автоматически вычисляет мип-уровень, в принципе бессмысленно.
Можно попытаться воспроизвести устранение пересечений через прозрачность без использования буфера глубины. Это не решает других проблем, связанных с этим методом, но дает возможность убедиться в работоспособности блендинга с помощью карты высот.
Блендинг по глубине и блендинг с картой высот. Ширина зоны блендинга отличается при одинаковых параметрах шейдера
На иллюстрациях используются идентичные параметры блендинга для обоих методов. Ширина зон блендинга визуально отличается, поскольку блендинг с картой высот не зависит от угла между направлением взгляда наблюдателя и нормалью ландшафта.
Блендинг с картой высот как минимум в одном отношении лучше блендинга по глубине: он исправляет видимую невооруженным глазом зависимость блендинга от угла, под которым камера смотрит на ландшафт. К сожалению, эффект параллакса при этом все так же будет наблюдаться.
Блендинг с реконструкцией фрагментов ландшафта
Чтобы избавиться от параллакса, необходимо смешивать фрагмент 3D-модели с фрагментом ландшафта, который находится вертикально под ним (выборка цвета для смешивания в этом случае не зависит от позиции и ориентации камеры).
Как исправить параллакс: выбор фрагмента ландшафта для блендинга
Реконструкция фрагмента ландшафта
Так, блендинг с реконструкцией фрагментов ландшафта исправляет все проблемы, характерные для блендинга по глубине и блендинга с картой высот, включая параллакс.
Блендинг с реконструкцией фрагментов ландшафта
Производительность реконструкции фрагментов ландшафта
В этом месте самое время задаться вопросом, чего же стоит подобного рода компромисс? На первый взгляд, ресурсоёмкость реконструкции фрагментов ландшафта значительно превосходит ресурсоёмкость альфа-блендинга. Для реконструкции необходимо выполнить с дюжину дополнительных операций чтения из памяти. Для альфа-блендинга же нужна всего одна операция чтения из памяти и одна операция записи в память.
В реальности всё будет зависеть от особенностей аппаратной платформы. В пользу реконструкции фрагментов выступает текстурная компрессия, мип-мэппинг, вычислительная мощность ядер GPU и специфические оптимизации аппаратного пайплайна (early depth rejection). А против альфа-блендинга сыграет уже упомянутый выше факт о том, что это наименее прогрессивная часть любого GPU.
Тем не менее, место для оптимизации всегда найдется. Например, в случае с реконструкцией цвета ландшафта необходимость в этой реконструкции есть лишь для узкой полосы фрагментов 3D-модели, расположенных не выше определенной высоты над поверхностью ландшафта.
Динамическое ветвление в шейдерах может давать слабо предсказуемые результаты по производительности, но есть два момента, которые стоит принять во внимание:
В случае с реконструкцией фрагментов учитываются оба этих момента: условие ветвления в большей части случаев позволит отсечь выполнение ресурсоемких операций по реконструкции цвета ландшафта, и это условие когерентно, за исключением очень небольшого числа фрагментов (на иллюстрации это те фрагменты, что лежат на границе между «красной» и «зеленой» зонами).
Когерентность реконструкции фрагментов ландшафта
Осталось добавить несколько замечаний, касающихся этого метода блендинга:
Снэппинг с картой высот
При проектировании 3D-моделей невозможно учесть разнообразие рельефов ландшафта, совместно с которым эти модели предполагается использовать. Часто 3D-модели приходится достаточно глубоко «утапливать» в ландшафте или поворачивать для того, чтобы скрыть выступающие части, или наоборот ― показать скрытые, которые должны быть видимыми. «Утапливание» моделей ограничивает их применимость, а в случае, если 3D-модели рендерятся раньше ландшафта, еще и приводит к эффекту overdraw. Поворот же, в свою очередь, тоже подходит далеко не для всех 3D-моделей (например, не для домов и деревьев).
Чтобы скрыть выступающие элементы 3D-модели, ее необходимо «утопить» в ландшафте
Снэппинг ― термин, хорошо знакомый пользователям графических редакторов. Это функция, которая позволяет контрольным точкам «прилипать» к узлам пространственной сетки, а в 3D-редакторах ― к граням и поверхностям других объектов. Снэппинг к карте высот ландшафта в вертексном шейдере способен значительно упростить проектирование сцен.
3D-модель без снэппинга. 3D-модель с повертексным снэппингом. 3D-модель с повертексным снэппингом и блендингом. 3D-модель с повертексным снэппингом, блендингом и статическим освещением
Основная сложность в реализации снэппинга состоит в том, что необходимо разобраться, какие вертексы 3D-модели нужно снэппить к карте высот, а какие не стоит. Вертексы содержат лишь информацию о локальном характере поверхности (которой недостаточно) и не содержат никакой информации о ее топологии (которая необходима).
Как и в других прикладных случаях, эту проблему проще всего решить на этапе моделирования, напрямую внедрив необходимые параметры в вертексы. В качестве такого параметра стоит выбрать интуитивно понятный атрибут ― например, весовой коэффициент для снэппинга (а не дистанцию до границы незамкнутой поверхности, как хотелось бы для гибкости).
Кодирование весовых коэффициентов для снэппинга
Применимость повертексного снэппинга ограничена общим соответствием поверхности ландшафта и поверхности 3D-модели. Чтобы компенсировать значительные их расхождения, необходимо применять другие, более ресурсоемкие методы ― например, использовать 3D-модели со скиннингом.
Заключение
Главная мысль, которую следует вынести из статьи: любому достаточно сложному и потенциально масштабируемому шейдеру необходимы исходные данные. И задача разработчика состоит в том, чтобы понять, каким образом можно эксплуатировать графическую систему: какие данные она предоставляет, как их можно комбинировать друг с другом и каким образом использовать в шейдерах.
В общем же случае можно сделать вывод, что единственный вариант преодолеть те рамки, которыми ограничены возможности графических эффектов, ― комбинировать результаты работы различных шейдеров.
blending
добавление присадок
(напр. в топливо)
[А.С.Гольдберг. Англо-русский энергетический словарь. 2006 г.]
Тематики
плавное сопряжение
—
[Л.Г.Суменко. Англо-русский словарь по информационным технологиям. М.: ГП ЦНИИС, 2003.]
Тематики
смешение неформованного огнеупора
Равномерное распределение компонентов неформованного огнеупора в заданном соотношении между собой.
[ГОСТ Р 52918-2008]
Тематики
Смотреть что такое «blending» в других словарях:
Blending — [dt. »(Ver )Mischen«], bei Computergrafiken das Übereinanderlegen von zwei oder mehreren Bildern. Dieser Effekt wird erreicht, indem die Farbwerte der Pixel miteinander vermischt werden. Eine Sonderform des Blendings ist das Vertex Blending,… … Universal-Lexikon
Blending — Blend ing, n. 1. The act of mingling. [1913 Webster] 2. (Paint.) The method of laying on different tints so that they may mingle together while wet, and shade into each other insensibly. Weale. [1913 Webster] … The Collaborative International Dictionary of English
blending — index coherence, concordant, concrescence, integration (amalgamation) Burton s Legal Thesaurus. William C. Burton. 2006 … Law dictionary
Blending — Das Wort Blending bezeichnet in der Computergrafik die Überlagerung halbtransparenter Schichten, siehe Blending (Grafik) in der Linguistik die Neologismenbildung durch Zusammensetzung anderer Wörter, siehe Kofferwort in der… … Deutsch Wikipedia
Blending — Blend Blend (bl[e^]nd), v. t. [imp. & p. p.
blending — ▪ yarn manufacturing in yarn production, process of combining fibres of different origins, length, thickness, or colour to make yarn. Blending is accomplished before spinning and is performed to impart such desirable characteristics as… … Universalium
blending — kompaundavimas statusas T sritis chemija apibrėžtis Kelių skirtingų rūšių kuro arba tepalų maišymas. atitikmenys: angl. blending; compounding rus. компаундирование … Chemijos terminų aiškinamasis žodynas
blending — kupažas statusas T sritis chemija apibrėžtis Įvairių rūšių to paties maisto produkto maišymas norint pašalinti kurios nors rūšies trūkumus. atitikmenys: angl. blending rus. купаж … Chemijos terminų aiškinamasis žodynas
blending — noun 1. the act of blending components together thoroughly (Freq. 1) • Syn: ↑blend • Derivationally related forms: ↑blend (for: ↑blend) • Hypernyms: ↑ … Useful english dictionary
blending — См. contaminazione … Пятиязычный словарь лингвистических терминов
Отложенный Alpha blending
В этой статье я хочу поговорить о методах смешивания растеризуемой геометрии. Классические модели смешивания полупрозрачных объектов — Alpha, Additive, Multiplicative — объединяет один и тот же принцип отрисовки: последовательно рисуем один примитив за другим, смешивая получаемые на выходе фрагментного шейдера пиксели с тем, что находится в текущем буфере. Каждый новый примитив обновляет область буфера, в которую рисуется; в случае с альфа-смешиванием объекты, которые находятся выше, заслоняют ранее отрисованные. Но что если хочется что-то сделать с группой объектов, рисуемых поверх сцены, — например, обрезать их по маске или подсветить? Тут сразу в голову приходят два решения: или внести изменения в их материал (т.е. изменить шейдер, расширить набор текстур), к примеру, добавив проекцию еще одной текстуры, которая будет отвечать за маску прозрачности. Однако если у нас много разношерстных объектов, менять каждый уникальный материал неудобно и чревато ошибками. Второй вариант — нарисовать все интересующие нас объекты в отдельный полноэкранный таргет и рисовать уже его на финальную сцену. Тут мы можем сделать с его содержимым все, что захотим, но это требует выделения лишней памяти и, что самое неприятное, — переключения рендер таргетов. Это не самая «дешевая» операция на мобильных устройствах, которую будет необходимо выполнить дважды. А если захочется вот так работать с несколькими слоями?
Есть и другой, более простой и элегантный, способ решить эти проблемы. Мы можем рисовать сцену в обратном порядке!
При отрисовке на экран чего-либо через Alpha Blending мы смешиваем пиксель, который хотим нарисовать, и пиксель того, что там уже было нарисовано до нас. При этом у нас есть 4 канала RGBA, где RGB — цвет и A(Alpha) — прозрачность (другие форматы нас в данный момент не интересуют). Функция смешивания работает отдельно для трёх цветовых каналов и отдельно для канала прозрачности. Для цвета она выглядит так:
Здесь ColorSrc — RGB цвет, который мы хотим нарисовать (наша изначальная текстура, результат работы пиксельного шейдера), ColorDst — цвет пикселя в буфере, куда мы рисуем, Color_Result — то, что получилось при смешивании, и то, что будет записано в буфер. Что же такое Variable1 и Variable2, на которые мы умножаем рисуемый цвет и цвет в буфере? Это настраиваемые переменные, динамическая часть формулы (знак плюс тоже можно изменить, но сейчас нам это не нужно). Их значением может быть то, что нам уже известно на данный момент: цвета и прозрачность двух пикселей, заранее заданные константы.
Классическое смешивание полупрозрачных объектов выглядит так:
Где AlphaSrc — альфа-канал рисуемого пикселя (прозрачность), OneMinusAlphaSrc, как нетрудно догадаться, значит 1.0 — AlphaSrc. Формула аналогична такой записи: С1 * а + С2 * (1 — а). В итоге у нас получается линейная интерполяция между двумя цветами через alpha (прозрачность). То есть если альфа = 1, мы перезапишем значение в буфере, а если альфа = 0, старое значение останется неизменным. Подробнее ознакомиться с таблицей возможных значений в OpenGL можно тут.
Эта таблица справедлива и для OpenGL ES 2.0 включительно — за последние пару десятков лет тут принципиально ничего не изменилось.
Как происходит формирование изображения по шагам: сначала мы рисуем фон, дальше отрисовываем все объекты по слоям друг за другом. То, что отрисовывается последним, перезаписывает предыдущие пиксели:
В чём же фокус?
Суть технологии обратной отрисовки или, как её можно ещё назвать, отложенного смешивания заключается в следующем. Мы рисуем сцену задом наперёд, используя другую формулу смешивания. Притом итоговое изображение останется точно таким же, как и при классическом подходе.
Как это работает?
Выше был описан метод смешивания через канал прозрачности изображения, которое рисуем. Теперь мы это повернём наоборот: будем использовать прозрачность уже нарисованных пикселей (а точнее, смешивание рисуемой прозрачности с уже отрисованной). То есть вместо AlphaSrc мы будем использовать AlphaSaturate, а вместо OneMinusAlphaSrc — One. Получается, если в буфере уже лежит что-то с прозрачностью = 1, то вклад будет нулевой, и цвет такого пикселя не изменится. Если там была нулевая прозрачность — сложим оба цвета вместе (для этого нам нужно будет очищать буфер кадра нулями или чёрным цветом с нулевой прозрачностью). При таком сложении результирующий цвет будет равен рисуемому. Итоговая формула выглядит так:
(прим. AlphaSaturate = min(AlphaSrc, 1 — AlphaDst) )
Значения прозрачности требуется складывать: она должна накапливаться слой за слоем, то есть у нас будет One и One в переменных смешивания для альфа-канала. Почему мы не модифицируем ColorDst и очищаем буфер нулями? Это нужно для Additive-смешивания, AdditiveBlending при этом будет отличаться только тем, что в AlphaSrc переменной у него будет находиться Zero. Он не должен модифицировать прозрачность, только цвет.
Для наглядности, схема обратной отрисовки выглядит так:
Сперва мы очистим буфер кадра. Затем выставим приведнёную выше функцию смешивания и начнём отрисовку с самых верхних объектов (в классическом подходе они бы рисовались последними), спускаясь к самым нижним. Последним будет нарисовано фоновое изображение.
Как это можно использовать?
Я опишу несколько задач, решаемых этим методом, на примере нашего проекта:
После отрисовки игрового поля достаточно очистить прозрачность в тех местах изображения, которые мы хотим спрятать. Это делается с помощью формулы смешивания, при которой отрисовываемый объект-маска перезаписывает цвет и прозрачность обратно пропорционально своей собственной прозрачности, а степень очистки можно плавно регулировать. В данном случае для отсечения используется такая геометрия:
Она меняет свою форму по мере движения камеры между комнатами. Формула смешивания для очистки следующая:
Можно использовать любую геометрию с любыми текстурами, начиная очистку с того слоя, с которого потребуется:
Нам требовалось, чтобы тень рисовалась только на поле с фишками и на некоторых элементах UI, но не на фоне. После отрисовки объектов, «принимающих» тени, рисуем спрайты теней, которые «затемняют цвета», не внося вклада в прозрачность. Таким образом, сразу два зайца убиты: фон без теней, а тень не меняет уровень прозрачности объекта. Блендинг тени такой:
Не всё так просто
Есть и обратная сторона, а точнее ограничения: не все блендинги можно повторить для такой техники. Alpha-смешивание и additive — точно можно, а вот собственные специальные блендинги придётся или адаптировать или не использовать. Но есть выход: можно разделить этапы отрисовки сцены. Часть выполнить обратным методом, часть — обычным, у нас так и сделано для спецэффектов поверх поля и постпроцесса.
Важный момент с Additive-ом и смешанной техникой отрисовки: если он будет рисоваться ДО прохода с обратной отрисовкой и если в текстуре отсутствует информация о прозрачности (текстура вида «белое пятно на черном фоне»), то такой объект перезапишет прозрачность. В «обратном» проходе будет потеряна информация об этом участке, а визуально это будет выглядеть как «темный квадрат» или черная окантовка вокруг светлого аддитивного пятна:
Это можно побороть, модифицировав аддитивный блендинг в части смешения альфа-канала:
Но не для всех видов смешивания это подойдёт, и надёжнее будет модифицировать саму текстуру. Что имеется в виду:
Если есть текстуры вида:
То из них нужно сделать такие:
То есть яркость цветовых каналов нужно конвертировать в прозрачность и вытянуть цвета обратно пропорционально прозрачности. Получившаяся и старая текстуры должны одинаково выглядеть на черном фоне. Вручную такое реализовать вряд ли получится, имеет смысл сделать автоматический конвертер. В таком случае псевдокод преобразования каналов будет выглядеть следующим образом: