Альфа включена против смешивания включена - PullRequest
1 голос
/ 18 июля 2011

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

В чем разница между "Альфа включен" и "Смешивание включено"?

Ответы [ 4 ]

4 голосов
/ 18 июля 2011

В чем разница между "Альфа включен" и "Смешивание включено"?

Вопрос предполагает, что эти термины имеют уникальное соглашение об именах.Я, например, никогда не слышал о термине «включена альфа», и я работаю с графикой и OpenGL уже более 10 лет.Где вы нашли этот термин?

OpenGL действительно определяет термин "смешивание".

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

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

Теперь, возможно, «альфа-включение» означает альфа-тестирование.Это более ранняя функциональность ( устарела в GL 3.0 и удалена в GL 3.1 . Вы можете использовать контекст совместимости , чтобы получить его, хотя), где цвет записывается фрагментным шейдеромили конвейер с фиксированной функцией имел альфа-тестирование с заданным значением.Если проверка не удалась, то фрагмент был отбракован: не записан в кадровый буфер.Общий тест был «фрагмент альфа> 0,5»;поэтому для цветов с низким значением альфа фрагменты вообще не будут записываться.

Альфа-тест был удален из GL 3.1 и выше, потому что вы можете получить тот же эффект с помощью логики шейдера:

if(myOutputColor.a < 0.5) discard;

Тот же эффект;Вы даже можете сделать «0,5» унифицированным значением, передаваемым пользователем шейдера.И у вас есть реальный способ определить, как альфа-тест взаимодействует с несколькими выходами фрагментного шейдера.

3 голосов
/ 18 июля 2011

Справочные страницы OpenGL - отличный ресурс.Страница для glEnable гласит:

Альфа-тестирование: если включено, выполните альфа-тестирование.См. glAlphaFunc .

Смешивание: если включено, смешайте вычисленные значения цвета фрагмента со значениями в цветовых буферах.См. glBlendFunc .

2 голосов
/ 18 июля 2011

Я не могу быть очень конкретным без дополнительного контекста, но я попробую.

Альфа означает прозрачность / непрозрачность, как правило, в контексте текстуры / цвета (альфа-канал).Смешивание означает, что вы комбинируете несколько источников цвета тем или иным способом.

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

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

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

1 голос
/ 18 июля 2011

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

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

15.010 В чем разница между прозрачными, полупрозрачными и смешанными примитивами?

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

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

Прозрачный и полупрозрачный часто используются как синонимы. Материалы, которые не являются ни прозрачными, ни полупрозрачными, непрозрачны.

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

...