Войти
ПрограммированиеПодсказкиГрафикаГрафика

Прозрачность при суммирующем смешивании.

Автор:

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

Одним из решений этой проблемы является сортировка полигонов «back-to-front» (от дальних к ближним) от позиции камеры. При этом сначала отрисовываются дальние полигоны, а потом уже те, которые находятся перед ними — в результате имеем красивую правильную картинку.

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

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

Этот метод всегда работает правильно, если тип блендинга (прозрачности) задан как суммирование (Direct3D - D3DBLEND_ONE, D3DBLEND_ONE; OpenGL - GL_ONE, GL_ONE) так как от перемены мест слагаемых, сумма не меняется 8).

При использовании некоторых других типов прозрачности, могут возникать артефакты.

#Direct3D, #прозрачность

24 марта 2006

Комментарии [25]

Страницы: 1 2 Следующая »
#1
8:25, 13 сен. 2009

Точнее говоря, этот метод всегда работает одинаково (т.е. не зависит от порядка отображения), но всегда неправильно.

#2
8:08, 14 сен. 2009

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

#3
8:47, 14 сен. 2009

сортировка спасет мир

#4
9:09, 14 сен. 2009

main
> Статья о том, что если уж понадобилось где-то именно суммирующее смешивание, то
> его легко без сортировки можно сделать так как он описал.
и что нового ты узнал? что Transparent нужно рисовать после всех Opaque объектов?
или то что сумма не зависит от порядка сложения ?
непонятно для чего подсказка была опубликована...
XaeroX
> сортировка спасет мир
+ 1000

сколько уже тусую на геймдев.ру, до сих пор не пойму по какому принципу отбираются подсказки :(
#5
11:18, 14 сен. 2009

main
В названии темы есть лишнее слово - "прозрачность". Т.е. все, что говорится, относится лишь к суммирующему смешиванию и лишь к нему, но не имеет ничего общего с прозрачностью.
Другими словами, название вводит в заблуждение. Именно это я и хотел подчеркнуть.

#6
12:11, 14 сен. 2009

Етить, только ещё одного спора про прозрачности тут не хватало.

#7
15:01, 14 сен. 2009

>>и без тяжелой сортировки
radix sort в руки, если всё-таки придётся туалетить

#8
15:33, 14 сен. 2009

main
Еще раз: прозрачность и суммирующее смешивание - вещи взаимоисключающие, т.к. считаются по разным формулам.
НИ ПРИ КАКОМ значении alpha  (Y1*alpha + Y2*(1-alpha)) не будет равно (Y1 + Y2).
Поэтому никакой "прозрачности при суммирующем смешиван" быть не может в принципе.

>Можно ведь придумать ситуации когда применяется суммирующее смешивание,
>но при этом, можно не париться и прозрачность не учитывать.
Естественно, можно.
Но это будут именно КОНКРЕТНЫЕ ситуации, но ни в коем случае не прозрачность (которую в данных случаях, как ты совершенно справедливо заметил, учитывать не нужно).

>Например, наложение какого-нибудь отличительного знака расы поверх доспехов ( по цвету ).
А ну-ка наложи мне черный крест на белый доспех.
Это я не придираюсь, это я лишь иллюстрирую тот факт, что подобная техника применима лишь в некоторых ЧАСТНЫХ случаях и, таким образом, от описания явления прозрачности она отличается не только математическим выражением, но и уровнем общности: прозрачность явление достаточно общее, а суммирующее смешивание - явление частное.
А тем временем из статьи можно сделать (совершенно неверный) вывод, что прозрачность может быть описана посредством суммирующего смешивания. Это примерно то же самое, что утверждать, что употребление в пищу картофеля способно заменить употребление любых овощей и фруктов.

#9
23:02, 13 окт. 2009

andriano
А мне что-то подсказывает, что прозрачность - это эффект при котором один объект просвечивает через другой, и как-то не важно, какой формулой эта прозрачность задаётся ^_^

#10
9:25, 14 окт. 2009

All_Creater
Это все равно, чтобы ты сказал: "Мне нужна кинетическая энергия, и мне все равно, по какой формуле она считается, mv^2/2 или mv".
mv - это импульс, и никогда его недопустимо называть кинетической энергией, а кинетическая энергия может быть рассчитана ТОЛЬКО по формуле mv^2/2, и ни по какой другой.
Прозрачность - физическое явление. У этого физического явления есть математическое описание. И это физическое явление может быть описано ТОЛЬКО так, и никак иначе. То, что описывается другой формулой, прозрачностью не является.
Более того, эффект суммирующего смешивания НИКОГДА не реализуется в физическом мире для объектов (он может реализоваться, скажем, для двух пучков света, например, двуг кинопроекторов на одном экране).
То есть основная идея такова:
- на первом месте - существующий физический мир,
- навтором месте - его математическое описание (физико-математическая модель),
- и только на третьем наши попытки создать виртуальный мир.
Причем сущности из какого-либо уровня НИКАК не могут влиять на сущности из более высокого уровня.
Так вот, прозрачность - 1, ее математическое описание - 2, а суммирующее смешивание - 3.
Поэтому - да, "прозрачность - это эффект при котором один объект просвечивает через другой", но объект НЕ МОЖЕТ просвечивать через другой так, чтобы это могло быть описано суммирующим смешиванием.

#11
11:15, 14 окт. 2009

andriano такой пердеж, а смысла ноль =)

#12
11:18, 14 окт. 2009

andriano
Лол.. Ещё один Иннуендо.
Прозрачность - это когда ты сквозь что-то видишь что-то :) И не надо мозги пудрить.

#13
11:27, 14 окт. 2009

BUzer
> Лол.. Ещё один Иннуендо.

знаешь,  я на тебя не наезжал.

если у Nintendo или как-то там одни правила, то у NVIDIA и ATI другие.
я тебе жить не мешаю, вот и ты не мешай другим

#14
11:29, 14 окт. 2009

кстати, есть полезные демки из NV SDK - с драконами

и ещё http://www.gamedev.ru/flame/forum/?id=123030

Страницы: 1 2 Следующая »
ПрограммированиеПодсказкиГрафикаГрафика

Тема в архиве.