Заливка невозможна из-за недостаточного количества непрозрачных исходных пикселей

Обновлено: 03.07.2024

Выберите «Правка» > «Заливка» и в появившемся диалоговом окне выберите «С учетом содержимого» в меню «Содержание». Когда вы нажимаете «ОК», Photoshop заполняет выделение окружающими пикселями и смешивает их вместе. Колдовство, используемое для заполнения вашего выбора, является случайным и меняется каждый раз, когда вы используете команду.

Почему я не могу заполнить с учетом содержания?

Если у вас нет возможности использовать заливку с учетом содержимого, проверьте слой, над которым вы работаете. Убедитесь, что слой не заблокирован и не является корректирующим слоем или смарт-объектом. Также убедитесь, что у вас есть активный выбор, к которому можно применить заливку с учетом содержимого.

Как использовать заливку с учетом содержимого в Photoshop 2020?

Чтобы использовать новые параметры заливки с учетом содержимого, выберите инструмент выделения и используйте его, чтобы выделить область вокруг всего, что вы хотите удалить на фотографии. Когда выделение активно, перейдите в меню «Правка» и выберите «Заливка с учетом содержимого».

Как вы делаете масштабирование с учетом содержания?

Сохранение визуального содержимого при масштабировании изображений (необязательно). Выберите «Выделение» > «Все», если вы масштабируете фоновый слой. Выберите «Правка» > «Масштаб с учетом содержимого». Укажите любой из следующих параметров на панели параметров: Перетащите маркер на ограничительной рамке, чтобы масштабировать изображение. Нажмите «Отменить преобразование» или «Подтвердить преобразование» .

Почему заполнение неактивно?

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

Как показать заливку с учетом содержимого в Photoshop?

Чтобы открыть рабочее пространство «Заливка с учетом содержимого», сначала выделите объект вокруг объекта. Затем выберите «Правка»> «Заливка с учетом содержимого». Если параметр «Заливка с учетом содержимого» неактивен, используйте инструмент выделения, например лассо (сочетание клавиш «L»), чтобы выделить содержимое. Это должно активировать команду.

Где заливка с учетом содержимого в Photoshop?

Щелкните правой кнопкой мыши в выделенном фрагменте и выберите «Заливка с учетом содержимого»… Выберите «Правка» > «Заливка с учетом содержимого».

Есть ли в iPad Photoshop заливка с учетом содержимого?

Adobe Photoshop исполняется 30 лет и представляет улучшенные инструменты заливки и размытия с учетом содержимого. Сегодня исполняется 30 лет со дня рождения Photoshop, и, чтобы отпраздновать это, Adobe обновила два инструмента в настольной версии и добавила инструменты выделения, а также настройки текста в Photoshop на iPad.

Можно ли сделать заливку с учетом содержимого на iPad Photoshop?

Плюс обновления рабочего стола для заливки с учетом содержимого и размытия объектива.

Какой набор инструментов имеет режим с учетом содержимого?

Функция Content-Aware в инструменте «Заплатка» синтезирует ближайший контент для плавного смешивания с окружающим контентом. Устаревшие версии: сведения об использовании инструмента «Заплатка» в более ранних версиях, чем Photoshop CS6, см. в разделе «Заплатка области». На панели инструментов нажмите и удерживайте инструмент "Точечная восстанавливающая кисть" и выберите инструмент "Заплатка" .

Почему мой инструмент заливки не работает в Photoshop?

Попробуйте сбросить настройки инструмента Paint Bucket. После того, как вы выберете ведро с краской, на панели параметров слева (слева от заливки:) появится маленький значок ведра. Нажмите на него, и это даст вам возможность сбросить инструмент. И еще немного информации: вы можете заполнить цвета переднего плана и фона с помощью сочетаний клавиш.

Не удалось заполнить из-за недостаточного количества пикселей?

Здравствуйте, похоже, вы выбрали «Контентно-зависимый» в параметрах заливки. если у вас есть выделение, а ваш активный слой пуст, Content Aware выдаст вам эту ошибку. Поскольку для работы ему нужны «непрозрачные исходные пиксели (в вашем текущем слое)». Для сплошных цветов переключитесь с Content Aware на один из других режимов.

Как заполнить пробелы в Photoshop?

Начните с выбора области, которую нужно заполнить (например, промежутки, которые появились, когда я создавал эту панораму. Я просто щелкнул их с помощью инструмента быстрого выделения [W], чтобы легко выделить их), затем перейдите под меню Правка и выберите Заливка.

Что такое инструмент "Ластик"?

Инструмент "Ластик" изменяет пиксели на фоновый или прозрачный. Если вы работаете с фоном или слоем с заблокированной прозрачностью, пиксели изменятся на цвет фона; в противном случае пиксели стираются до прозрачности.

Что такое инструмент «Штамп компьютера»?

В программном обеспечении для компьютерной графики, в частности в Adobe Photoshop, инструмент «Штамп» выбирает и сэмплирует область вашего изображения, а затем использует эти пиксели для закрашивания любых меток. Инструмент «Штамп» действует как кисть, поэтому вы можете изменять размер, позволяя клонировать от одного пикселя до сотен.

Как работает штамп клонирования?

Инструмент «Штамп» наносит одну часть изображения на другую часть того же изображения или на другую часть любого открытого документа с тем же цветовым режимом. Вы также можете нарисовать часть одного слоя поверх другого слоя.Инструмент "Штамп" полезен для дублирования объектов или удаления дефектов изображения.

Сколько времени занимает заполнение с учетом содержания?

Иногда менее 60 секунд. Иногда рендеринг может занять пару минут. По завершении рендеринга After Effects создаст дополнительный слой на панели слоев (рис. F), который будет размещен над слоем видеоряда. Это заполнит недостающие пиксели, созданные вашей маской.

Как вы растушевываете заливку с учетом содержания?

Вот краткое руководство по использованию инструмента заливки с учетом содержимого: Сделайте выделение (L) Растушуйте, если хотите (Shift+F6) Заливка (Shift + Backspace) С учетом содержимого. Адаптация цвета (при градиенте) Клонирование/восстановление для уточнения.

Как использовать заливку с учетом содержимого в Illustrator?

Выберите «Правка» > «Заливка», выберите «С учетом содержимого» в меню «Использовать» и нажмите «ОК». Выберите «Выделение» > «Отменить выбор» или нажмите Ctrl + D. И вуаля! 10 августа 2010 г.

Procreate лучше, чем Photoshop?

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

Лучше ли Affinity, чем Photoshop?

Несмотря на то, что и в Affinity Photo, и в Adobe Photoshop имеется огромное количество инструментов для редактирования, каждая программа показывает свои лучшие качества, когда вы научитесь использовать эти инструменты для выполнения своей работы с минимальными усилиями. Здесь у Photoshop есть преимущество, если вы хотите внести сложные и глубокие изменения, но Affinity Photo тоже не промах.

Имеет ли родственная фотография заливку с учетом содержания?

В версии Affinity Photo функция «заливка с учетом содержимого» называется «закрашивание». Существует инструмент «Кисть для рисования» (в той же группе панели инструментов, что и инструмент «Восстанавливающая кисть»), а также параметр для команды «Правка > Заливка».

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

  • Главная
  • Экосистема Photoshop
  • Обсуждения
  • "Не удалось заполнить, так как не хватает непрозрачности.

/t5/photoshop-ecosystem-discussions/quot-не удалось-заполнить-потому что-недостаточно-непрозрачных-исходных-пикселей-quot-не-решил-кто-либо-другой/td- p/5275357 05 июля 2013 г. 05 июля 2013 г.

Скопировать ссылку в буфер обмена

Я получаю сообщение об ошибке в заголовке этой темы, и я понятия не имею, почему. Я работаю с изображением, которое НЕ прозрачно. Все со 100% непрозрачностью. На самом деле, неважно, с чем я работаю, каждый раз, когда я пытаюсь заполнить любое выделение на любом слое в любом документе, я получаю эту ошибку. Идеи. Спасибо

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

1 правильный ответ

Здравствуйте, похоже, вы выбрали "Content Aware" в параметрах заполнения. если у вас есть выделение, а ваш активный слой пуст, Content Aware выдаст вам эту ошибку. Поскольку для работы ему нужны «непрозрачные исходные пиксели (в вашем текущем слое)». Для однотонных цветов переключитесь с Content Aware на один из других режимов. Отправьте сообщение, если это не поможет вам.

Скопировать ссылку в буфер обмена

Возможно, было бы полезно увидеть скриншот фотошопа с открытой панелью слоев.

На данный момент единственное предположение, которое я могу сделать, это то, что выбран неправильный слой, но как только я увижу экран, у меня или у кого-либо еще, читающего эту ветку, может появиться что-то еще.

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

похоже, вы выбрали "Content Aware" в параметрах заливки. если у вас есть выделение, а ваш активный слой пуст, Content Aware выдаст вам эту ошибку. Поскольку для работы ему нужны «непрозрачные исходные пиксели (в вашем текущем слое)». Для сплошных цветов переключитесь с Content Aware на один из других режимов.

отправьте сообщение, если это не поможет вам.

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Вы попробовали предложение Каджиали? Похоже, вы пытались заполнить с учетом содержимого.

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Каджиали был совершенно прав, я выбрал контент с учетом параметров заполнения. Большое спасибо.

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

У меня была та же проблема, но я пытаюсь просто использовать средство для удаления пятен. Я пытался в течение последних полутора часов заставить его, наконец, позволить мне использовать Content-Aware только для того, чтобы я мог удалить пятна, и как только он, наконец, позволил мне использовать его, он дал мне «Не удалось заполнить, потому что есть недостаточно непрозрачных исходных пикселей".

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Заливка с учетом содержимого также выдавала сообщение "Не удалось заполнить, поскольку недостаточно непрозрачных исходных пикселей". Пробовал CMYK и RGB, проверял активный слой и т. д. Активный слой не имел прозрачности. Мне удалось заставить работать заливку с учетом содержимого с помощью «Свести изображение». Из любопытства я также проверил слияние затронутого слоя со сплошным белым слоем. Это также решило проблему.

[edit] Кажется, что если весь целевой слой немного прозрачен (даже не виден глазу), заливка с учетом содержимого не работает.

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Возможно ли, что слой является смарт-объектом?

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

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Я все еще не понимаю, не могли бы вы объяснить это проще или показать мне, как это сделать?

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Мне бы тоже не помешала помощь. Я пытаюсь удалить объект с помощью инструмента Laso, но при заполнении получаю тот же комментарий об ошибке.

Я использую "с учетом содержимого" в параметрах заливки, потому что хочу удалить объект. Могу ли я получить помощь?

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

Привет, у меня была такая же проблема, и я забыл сделать копию фонового слоя, после чего он работает как раньше

перетащите слой, чтобы создать новый слой

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Скопировать ссылку в буфер обмена

У меня та же проблема, но она возникает периодически, и приведенные выше ответы не помогли. Прикреплен скриншот активного слоя и диалогового окна Птица выбрана

Будьте добры и уважительны, отдавайте должное оригинальному источнику контента и ищите дубликаты перед публикацией. Узнать больше

Я получаю сообщение об ошибке в заголовке темы, не знаю почему. рабочий образ непрозрачный. 100% непрозрачность. на самом деле, не имеет значения, с чем работать, каждый раз, когда пытаешься заполнить выделение на слое в документе, возникает ошибка. идеи. спасибо

вероятно, см. снимок экрана с открытой панелью слоев Photoshop.

в какой-то момент предположение может привести к тому, что будет выбран неправильный слой, когда вы увидите экран, в противном случае может выскочить @me или прочитать цепочку.


Дополнительные обсуждения Photoshop для начинающих

  • Получить ссылку
  • Фейсбук
  • Твиттер
  • Pinterest
  • Электронная почта
  • Другие приложения

Комментарии

Оставить комментарий

Популярные записи из этого блога

Ошибка библиотеки шифрования — код ошибки 0x2726

Я применил цифровой сертификат электронной подписи в формате pdf, подписание выполнено. проблема: когда щелкаешь изображение подписи, появляется всплывающее окно с информацией об ошибке. пишет, что при проверке подписи произошла ошибка. ошибка произошла во время проверки пароля (имеется в виду «шифрование»). код ошибки внутренней библиотеки шифрования: 0x2726 .. сообщение выше переведено на английский язык мной с помощью корейского Adobe Reader .. может быть проблема с идеей, как ее решить? Я не уверен, что это проблема с сертификатом или с настройкой программы чтения обители. ошибка относится к «недопустимому аргументу». недействительным аргумент. передан неверный аргумент (например, указана неверная функция setsockopt уровня). в некоторых случаях ссылается на текущее состояние сокета — например, вызов accept для сокета, который не прослушивается. на "компьютерном языке". означает, что у Windows есть проблема с аутентификацией в цифровой подписи через безопасное многоуровневое соединение сокетов (ssl) или шифрование. либо проблемный файл цифровой подписи

Ошибка After Effects: (-1610153453)

я сделал интро пользователя на youtube, иди рендер интро, это: после эффектов: ошибка рендеринга при записи файла (-1610153453) параметры рендеринга: 1280 x 720 h.264 аудиовыход: 48.000 кГц битрейт видео: 120 уровень: 5 .1 ------------ версия after Effects: cs6 ----------- я переустановил quicktime, , я переделал настройки, рендеринг в диске c:/, один я столкнулся с ошибкой 5 раз, это начинает очень раздражать. Пожалуйста, ответьте, спасибо! ~ muffinsss попробуйте использовать adobe media encoder render ae comp, используя 1 из пресетов youtube. если не работает подскажите пожалуйста машина, версия ae использующая, комп нравится. Сообщения о сбоях не дают достаточно, продолжайте догадываться о решении проблемы. Больше обсуждений в Adobe After Effects

Смешивание в OpenGL широко известно как метод реализации прозрачности внутри объектов. Прозрачность — это объекты (или их части), не имеющие сплошного цвета, а имеющие комбинацию цветов самого объекта и любого другого объекта за ним с различной интенсивностью. Окно из цветного стекла — это прозрачный объект; стекло имеет свой собственный цвет, но результирующий цвет также содержит цвета всех объектов за стеклом. Отсюда и название «смешивание», поскольку мы смешиваем несколько цветов пикселей (от разных объектов) в один цвет. Таким образом, прозрачность позволяет нам видеть сквозь объекты.

Изображение полностью прозрачного и частично прозрачного окна

Прозрачные объекты могут быть полностью прозрачными (пропускать все цвета) или частично прозрачными (пропускать цвета, но также и некоторые свои цвета). Степень прозрачности объекта определяется альфа-значением его цвета. Альфа-значение цвета — это 4-й компонент цветового вектора, который вы, вероятно, видели довольно часто. Вплоть до этой главы мы всегда сохраняли значение этого четвертого компонента равным 1,0, что придавало объекту прозрачность 0,0. Альфа-значение 0,0 приведет к полной прозрачности объекта. Альфа-значение 0,5 говорит нам, что цвет объекта состоит на 50 % из его собственного цвета и на 50 % из цветов позади объекта.

Текстуры, которые мы использовали до сих пор, состояли из трех цветовых компонентов: красного, зеленого и синего, но некоторые текстуры также имеют встроенный альфа-канал, который содержит альфа-значение для каждого текселя. Это альфа-значение говорит нам, какие именно части текстуры имеют прозрачность и насколько. Например, следующая текстура окна имеет альфа-значение 0,25 в стеклянной части и альфа-значение 0,0 в углах. Стеклянная часть обычно была бы полностью красной, но поскольку она имеет прозрачность 75%, через нее в значительной степени виден фон страницы, благодаря чему она кажется намного менее красной:

Изображение текстуры окна с прозрачностью

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

Отбрасывание фрагментов

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

Следующая текстура представляет собой в точности такую ​​текстуру, где она либо полностью непрозрачна (значение альфа-канала 1,0), либо полностью прозрачна (значение альфа-канала 0,0) и ничего между ними. Вы можете видеть, что там, где нет травы, на изображении отображается цвет фона страницы, а не его собственный цвет.

Изображение текстуры травы с прозрачностью

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

Также убедитесь, что вы извлекаете все 4 цветовых компонента текстуры во фрагментном шейдере, а не только компоненты RGB:

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

Мы создаем небольшой векторный массив, в который добавляем несколько векторов glm::vec3 для представления расположения листьев травы:

Каждый из объектов травы визуализируется как отдельный четырехугольник с прикрепленной к нему текстурой травы. Это не идеальное 3D-представление травы, но оно намного эффективнее, чем загрузка и рендеринг большого количества сложных моделей. С помощью нескольких приемов, таких как добавление случайных вращений и масштабов, вы можете получить довольно убедительные результаты с квадроциклами.

Поскольку текстура травы будет отображаться на квадратном объекте, нам потребуется снова создать еще один VAO, заполнить VBO и установить соответствующие указатели атрибутов вершин. Затем, после того как мы визуализировали пол и два куба, мы собираемся визуализировать листья травы:

Запуск приложения теперь будет выглядеть примерно так:

Неотбрасывание прозрачных частей текстуры приводит к странным артефактам в OpenGL< бр />

Это происходит потому, что OpenGL по умолчанию не знает, что делать с альфа-значениями и когда их отбрасывать. Мы должны вручную сделать это сами. К счастью, это довольно просто благодаря использованию шейдеров. GLSL дает нам команду discard, которая (после вызова) гарантирует, что фрагмент не будет обрабатываться дальше и, таким образом, не попадет в цветовой буфер. Благодаря этой команде мы можем проверить, имеет ли фрагмент альфа-значение ниже определенного порога, и если да, то отбросить фрагмент, как будто он никогда не обрабатывался:

Здесь мы проверяем, содержит ли выбранный цвет текстуры альфа-значение ниже порогового значения 0,1, и если да, то отбрасываем фрагмент. Этот фрагментный шейдер гарантирует, что он отображает только те фрагменты, которые не (почти) полностью прозрачны. Теперь это будет выглядеть так, как должно:

Изображение листьев травы, обработанное с отбрасыванием фрагментов в OpenGL

Обратите внимание, что при сэмплировании текстур на их границах OpenGL интерполирует значения границ со следующим повторяющимся значением текстуры (поскольку по умолчанию мы устанавливаем для ее параметров переноса значение GL_REPEAT). Обычно это нормально, но поскольку мы используем значения прозрачности, верхняя часть изображения текстуры получает значение прозрачности, интерполируемое со значением сплошного цвета нижней границы. В результате получается слегка полупрозрачная цветная рамка, обернутая вокруг текстурированного четырехугольника. Чтобы предотвратить это, устанавливайте метод переноса текстуры на GL_CLAMP_TO_EDGE каждый раз, когда вы используете альфа-текстуры, которые не хотите повторять:

Вы можете найти исходный код здесь.

Смешивание

Несмотря на то, что отбрасывать фрагменты — это здорово, это не дает нам гибкости для рендеринга полупрозрачных изображений; мы либо рендерим фрагмент, либо полностью отбрасываем его. Чтобы отображать изображения с разными уровнями прозрачности, мы должны включить смешивание. Как и большинство функций OpenGL, мы можем включить смешивание, включив GL_BLEND :

Теперь, когда мы включили смешивание, нам нужно указать OpenGL, как оно должно на самом деле смешиваться.

Смешивание в OpenGL происходит по следующему уравнению:

  • \(\barC>_\): вектор исходного цвета. Это цвет, выводимый фрагментным шейдером.
  • \(\barC>_\): целевой вектор цвета. Это вектор цвета, который в данный момент хранится в цветовом буфере.
  • \(\colorF_\): исходное значение коэффициента. Задает влияние альфа-значения на исходный цвет.
  • \(\colorF_\): значение коэффициента назначения. Устанавливает влияние альфа-значения на целевой цвет.

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

Два квадрата, один из которых имеет альфа-значение меньше 1

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

Тогда возникает вопрос: на что мы устанавливаем значения фактора? Ну, мы, по крайней мере, хотим умножить зеленый квадрат на его альфа-значение, поэтому мы хотим установить \(F_\) равным альфа-значению вектора исходного цвета, которое равно 0,6. Тогда имеет смысл позволить целевому квадрату иметь вклад, равный остатку альфа-значения. Если зеленый квадрат вносит 60% в окончательный цвет, мы хотим, чтобы красный квадрат вносил 40% в окончательный цвет, например. 1,0 - 0,6 . Поэтому мы устанавливаем \(F_\) равным единице минус альфа-значение вектора исходного цвета. Таким образом, уравнение принимает следующий вид:

В результате объединенные квадратные фрагменты содержат 60 % зеленого и 40 % красного цвета:

Два контейнера, у одного из которых альфа-значение меньше 1

Полученный цвет затем сохраняется в цветовом буфере, заменяя предыдущий цвет.

Итак, это здорово и все такое, но как на самом деле заставить OpenGL использовать такие факторы? Так получилось, что для этого есть функция glBlendFunc .

Функция glBlendFunc (GLenum sfactor, GLenum dfactor) принимает два параметра, которые задают параметры исходного и целевого факторов . OpenGL определил для нас довольно много параметров, из которых мы перечислим наиболее распространенные ниже. Обратите внимание, что вектор постоянного цвета \(\barC>_\) можно задать отдельно с помощью функции glBlendColor.

Option Value
GL_ZERO Коэффициент равен \(0 \).
GL_ONE Коэффициент равен \(1\).
GL_SRC_COLOR Коэффициент равен вектору исходного цвета \(\barC>_\).
GL_ONE_MINUS_SRC_COLOR Коэффициент равен \(1\) минус вектор исходного цвета: \(1 - \barC>_\).
GL_DST_COLOR Коэффициент равен целевому вектор цвета \(\barC>_\)
GL_ONE_MINUS_DST_COLOR Коэффициент равен \(1\) минус целевой вектор цвета: \(1 - \barC>_\).
GL_SRC_ALPHA Коэффициент равен компоненте \(альфа\) вектора исходного цвета \(\barC >_\).
GL_ONE_MINUS_SRC_ALPHA Коэффициент равен \(1 - alpha\) вектора исходного цвета \(\barC>_\ ).
GL_DST_ALPHA Коэффициент равен \(альфа\) компоненту целевого цветового вектора \(\barC>_\) .
GL_ONE_MINUS_DST_ALPHA Коэффициент равен \(1 - альфа\) вектора целевого цвета \(\barC>_\).
GL_CONSTANT_COLOR Коэффициент равен постоянному цветовому вектору \(\barC>_\).
GL_ONE_MINUS_CONSTANT_COLOR Коэффициент равен \(1\) - вектору постоянного цвета \(\barC>_\).
GL_CONSTANT_ALPHA Коэффициент равен компоненте \(альфа\) постоянного цветового вектора \(\barC>_\).
GL_ONE_MINUS_CONSTANT_ALPHA Коэффициент равен \(1 - альфа\) вектора постоянного цвета \(\barC>_\).

Чтобы получить результат смешивания нашего маленького примера с двумя квадратами, мы хотим взять \(альфа\) вектора исходного цвета в качестве исходного фактора и \(1 - альфа\) того же вектора цвета в качестве целевого. фактор. Это переводится в glBlendFunc следующим образом:

Также можно установить различные параметры для RGB и альфа-канала по отдельности, используя функцию glBlendFunc. Разделить:

Эта функция устанавливает компоненты RGB так же, как мы установили их ранее, но позволяет только исходному альфа-значению влиять на результирующий альфа-компонент.

OpenGL дает нам еще большую гибкость, позволяя менять оператор между исходной и конечной частями уравнения. Прямо сейчас компоненты источника и назначения складываются вместе, но мы также можем вычесть их, если захотим. glBlendEquation (режим GLenum) позволяет нам установить эту операцию и имеет 5 возможных вариантов:

  • GL_FUNC_ADD : по умолчанию добавляет оба цвета друг к другу: \(\bar_ = \color+ \color\).
  • GL_FUNC_SUBTRACT : вычитает оба цвета друг из друга: \(\bar_ = \color- \color\).
  • GL_FUNC_REVERSE_SUBTRACT : вычитает оба цвета, но в обратном порядке: \(\bar_ = \color- \color\).
  • GL_MIN : принимает покомпонентный минимум обоих цветов: \(\bar_ = min(\color, \color)\).
  • GL_MAX : принимает максимальное значение обоих цветов по компонентам: \(\bar_ = max(\color, \color)\).

Обычно мы можем просто опустить вызов glBlendEquation, потому что GL_FUNC_ADD является предпочтительным уравнением смешивания для большинства операций, но если вы действительно изо всех сил пытаетесь сломать основную схему, вам могут подойти любые другие уравнения.

Отрисовка полупрозрачных текстур

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

Во-первых, во время инициализации мы включаем смешивание и устанавливаем соответствующую функцию смешивания:

Поскольку мы включили смешивание, нет необходимости отбрасывать фрагменты, поэтому мы сбросим шейдер фрагментов до исходной версии:

На этот раз (каждый раз, когда OpenGL визуализирует фрагмент) он комбинирует цвет текущего фрагмента с цветом фрагмента, находящимся в настоящее время в цветовом буфере, на основе альфа-значения FragColor . Поскольку стеклянная часть текстуры окна полупрозрачна, мы должны видеть остальную часть сцены, глядя через это окно.

Смешанная сцена в OpenGL с неправильным порядком.

Однако если вы присмотритесь, то заметите, что что-то не так. Прозрачные части переднего окна загораживают окна на заднем плане. Почему это происходит?

Причина этого в том, что тестирование глубины работает немного сложнее в сочетании со смешиванием. При записи в буфер глубины тесту глубины все равно, имеет фрагмент прозрачность или нет, поэтому прозрачные части записываются в буфер глубины как любое другое значение. В результате фоновые окна проверяются на глубину, как и любой другой непрозрачный объект, игнорируя прозрачность. Несмотря на то, что прозрачная часть должна показывать окна позади нее, тест глубины отбрасывает их.

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

Обратите внимание, что с полностью прозрачными объектами, такими как листья травы, у нас есть возможность отбросить прозрачные фрагменты вместо их смешивания, что избавляет нас от некоторых головных болей (нет проблем с глубиной).

Не нарушайте порядок

Чтобы смешивание работало для нескольких объектов, мы должны сначала нарисовать самый удаленный объект, а самый близкий — последним. Обычные несмешанные объекты по-прежнему можно рисовать как обычно, используя буфер глубины, поэтому их не нужно сортировать. Мы должны убедиться, что они нарисованы первыми, прежде чем рисовать (отсортированные) прозрачные объекты. При рисовании сцены с непрозрачными и прозрачными объектами общий контур обычно выглядит следующим образом:

  1. Сначала нарисуйте все непрозрачные объекты.
  2. Отсортировать все прозрачные объекты.
  3. Нарисуйте все прозрачные объекты в отсортированном порядке.

Один из способов сортировки прозрачных объектов – получить расстояние до объекта с точки зрения зрителя. Этого можно достичь, взяв расстояние между вектором положения камеры и вектором положения объекта. Затем мы сохраняем это расстояние вместе с соответствующим вектором положения в структуре данных карты из библиотеки STL. Карта автоматически сортирует свои значения на основе своих ключей, поэтому, как только мы добавили все позиции с их расстоянием в качестве ключа, они автоматически сортируются по значению их расстояния:

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

Затем, на этот раз при рендеринге, мы берем каждое из значений карты в обратном порядке (от самого дальнего к ближайшему), а затем рисуем соответствующие окна в правильном порядке:

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

Изображение сцены OpenGL с включенным смешиванием, объекты отсортированы от дальнего к ближнему

Вы можете найти полный исходный код с сортировкой здесь.

Хотя этот подход к сортировке объектов по их расстоянию хорошо работает для этого конкретного сценария, он не принимает во внимание повороты, масштабирование или любое другое преобразование, а объектам странной формы требуется другая метрика, чем просто вектор положения.

Сортировка объектов в вашей сцене — сложная задача, которая во многом зависит от типа вашей сцены, не говоря уже о дополнительной вычислительной мощности. Полностью визуализировать сцену со сплошными и прозрачными объектами не так-то просто. Существуют более продвинутые методы, такие как независимая от порядка прозрачность, но они выходят за рамки этой главы. На данный момент вам придется жить с обычным смешиванием ваших объектов, но если вы будете осторожны и знаете ограничения, вы можете получить довольно приличные реализации смешивания.

Читайте также: