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

G-Buffer

Страницы: 1 2 37 8 Следующая »
#0
10:52, 17 июля 2018

У меня возник такой вопрос: а для чего вообще всё рендерится в разные фреймбуферы = альбедо, нормали и всё-всё-всё?
Я до этого ещё не дошёл и не знаю = что даёт сложение всего этого в общий кадр после рендеринга 3D-сцены, а не во время его?


#1
10:56, 17 июля 2018

Daniil Petrov
Представь, что у тебя есть лампочка, которая на экране освещает только 100 пикселей из одно миллиона. Вот чтобы освещение от этой лампочки считать только для этих 100 пикселей - можно сначала нарисовать всю сцену в G-Buffer.

#2
11:09, 17 июля 2018

MrShoor
Я как раз просчёт освещения и предполагал, но как оно считается отдельно?
И второй вопрос: для такого варианта сглаживание должно идти уже постпроцессом или не обязательно?

#3
11:15, 17 июля 2018

Daniil Petrov
> но как оно считается отдельно?
Гугл не помогает?

#4
11:23, 17 июля 2018

MrShoor
> Гугл не помогает?
Меня там забанили )))

#5
11:54, 17 июля 2018

G-Buffer и сглаживание дружат плохо. либо это MSAA, где в каждом пикселе хранится ещё N субпикселей и поэтому освещение по факту в N раз дороже, либо это постпроцессовое баловство. основное преимущество отложенного освещения в том, что вместо того чтобы считать тяжёлый шейдер освещения для каждого фрагмента каждого объекта, для всех объектов считается предельно лёгкий шейдер построения g-buffer'а, а потом ты считаешь освещение только для тех экранных пикселей, которые уже гарантированно ничем не перекрыты, которые гарантированно покрываются твоим источником освещения и так далее. в итоге максимальная цена рендеринга сложной сцены сильно уменьшается, потому что первая часть становится гораздо дешевле, а цена рендеринга самой простой сцены увеличивается, потому что освещение всё равно нужно считать для всего g-buffer'а, даже если он пустой.

#6
12:02, 17 июля 2018

Suslik
> основное преимущество отложенного освещения в том, что вместо того чтобы
> считать тяжёлый шейдер освещения для каждого фрагмента каждого объекта, для
> всех объектов считается предельно лёгкий шейдер построения g-buffer'а, а потом
> ты считаешь освещение только для тех экранных пикселей, которые уже
> гарантированно ничем не перекрыты, которые гарантированно покрываются твоим
> источником освещения и так далее
Это же достигается предварительным рендером сцены предельно простым шейдером (например, заливка чёрным цветом) с целью заполнения Z-буфера, а потом повторным рендером сцены уже с нужными тяжёлыми шейдерами с D3DRS_ZFUNC = D3DCMP_EQUAL (для DirectX).

#7
12:11, 17 июля 2018

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

#8
12:14, 17 июля 2018

Suslik
> и поэтому освещение по факту в N раз дороже

это не совсем так

#9
12:19, 17 июля 2018

Mikle
> Это же достигается предварительным рендером сцены предельно простым шейдером
> (например, заливка чёрным цветом) с целью заполнения Z-буфера, а потом
> повторным рендером сцены уже с нужными тяжёлыми шейдерами с D3DRS_ZFUNC
это называется early z. никак не отменяет того факта, что для каждого пикселя придётся считать освещение от всех источников света. поэтому g-buffer включает в себя преимущества early z, плюс позволяет оптимизировать дальнейший расчёт освещения.

#10
12:20, 17 июля 2018

На примере Deus Ex: Human Revolution - link.

#11
12:30, 17 июля 2018

Suslik
> это называется early z
Это все таки называется depth prepass, а early z это немного другое.

#12
12:47, 17 июля 2018

Вообще мне грустно от того, как сложно сделать все и сразу.
MSAA все таки — самое приличное сглаживание, а с A2C еще и всякую листву можно красиво делать.
С другой стороны, GBuffer для постпроцесса нужен, да и всякие Realtime GI наверное сложнее для Forward рендерера делать.
Не говоря уже про возможные эффекты, связанные с большим количеством маленьких источников света.

#13
13:53, 17 июля 2018

Eugene
> MSAA все таки — самое приличное сглаживание

шумный спекуляр не убирает

#14
14:07, 17 июля 2018

innuendo
> шумный спекуляр не убирает
Нехрен спекуляром шуметь. Но проблема бесячая, да.
Гасить спекуляр на расстоянии целиком, утрамбовывать далекие лоды нормалмапы или лоды в геометрию добавить. Выборочно, индивидуально для каждого случая.

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