Войти
ПрограммированиеФорумГрафика

Не работает альфа в шейдере стекла

Страницы: 1 2 Следующая »
#0
11:33, 26 сен. 2018

Внутреннее стекло фары не рисуется снаружи:

Изображение

То что должно рисоваться:

Изображение

Внешнее и внутреннее стекло рисуется одним и тем же шейдером:

technique CarShader
{
    pass Pass0
    {
        AlphaBlendEnable = true; 
        VertexShader = compile vs_3_0 VertexShaderFunction();
        PixelShader = compile ps_3_0 PixelShaderFunctionGlass();
    }
}

Буду признателен за помощь!


#1
11:39, 26 сен. 2018

AfterAll14
Стёкла нужно рисовать от дальних к ближним, то есть упорядочивать по расстоянию от камеры. Для фар можно поступить проще - сначала рисовать внутренние, потом внешние.
Может помочь простое отключение записи в Z-буфер при рисовании стёкол, хотя это и не совсем корректно.

#2
11:41, 26 сен. 2018

Либо порядконезависимую прозрачность используй.

#3
11:50, 26 сен. 2018

Mikle
Спасибо. Помогло. А в чем заключается некорректность можете рассказать?

#4
11:51, 26 сен. 2018

vindast
Можно подробнее как это сделать?

#5
12:07, 26 сен. 2018

AfterAll14
> А в чем заключается некорректность можете рассказать?
Упрощённо - от порядка отрисовки стёкол с разным коэффициентом прозрачности зависит результат.

#6
12:10, 26 сен. 2018

AfterAll14
> А в чем заключается некорректность можете рассказать?
В не правильном порядке алфа-смешивания (в общем случае).

Статья на хабре, сам собираюсь по ней сделать, как время будет: https://habr.com/post/224003/

Лампику привет.
Твой? Или где-то скачал?

upd:
Mikle
> Упрощённо - от порядка отрисовки стёкол с разным коэффициентом прозрачности
> зависит результат.
Не увидел.

#7
12:18, 26 сен. 2018

Ламба из корсы.

#8
12:51, 26 сен. 2018

vindast
> Не увидел.
Это сильно упрощённо:

от порядка отрисовки стёкол с разным коэффициентом прозрачности зависит результат

Порядок не зависит только тогда, когда стекло - это некий цвет и коэффициент прозрачности, определяющий пропорцию между этим цветом и загораживаемым изображением.
Если цвет стёкол разный, если присутствет диффузная составляющая, спекуляр, преломляющий бамп  - это всё будет неверно отрисовано. Попробуй наложить на стёкла яркие блики - некорректность будет виднее, заднее стекло будет затенять блики на переднем.
#9
13:06, 26 сен. 2018

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

#10
14:39, 26 сен. 2018

MrOcelot
Само по себе это не проблема, это решается отключением записи в буфер глубины.

#11
14:43, 26 сен. 2018

Mikle
А еще это вроде бы ломает альфа блендинг, если не сортировать.

#12
15:15, 26 сен. 2018

MrOcelot
> А еще это вроде бы ломает альфа блендинг, если не сортировать.
К чему эта фраза? То, что мы обсуждаем - это и есть альфаблендинг.

#13
15:18, 26 сен. 2018

Mikle
К тому, что отключение теста глубины не лишает необходимости сортировки.

#14
0:01, 2 окт. 2018

AfterAll14
> vindast
> Можно подробнее как это сделать?
Depth peeling, Stencil Routed A-Buffer, OIT with Linked list. Эти техники позволяют реализовать честную прозрачность в реал тайме. Но в твоем случае проще сделать как Mikle предлагает.

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

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