Шакоретка

Шакоретка 

Crazy mad man driven by pie and coffee 🥧☕️

3subscribers

13posts

Showcase and bundles

1
A bundle is a collection, compilation, playlist, or catalog of posts that saves you from searching through the blog and lets you buy the entire content series in a single click.
goals1
0 of 500 paid subscribers
Ухожу из найма, посвящаю себя активности в сети, качество и количество контента увеличивается.

Forward rendering

Адаптированный под работу с шейдерами, программируемый GPU пайплайн, пользующийся популярностью по сей день.
Его название в полной мере отображает принцип действия.

Как же это работает?

Представим пустой холст, он же FrameBuffer, в него будет записываться итоговый цвет, так же вспомогательные холсты DepthBuffer(глубина) и StencilBuffer(маска).
Перед отрисовкой кадра FrameBuffer очищается/заполняется фоновым цветом, Depth заполняется максимальным значением, а Stencil обнуляется.
На готовый конвейер поочередно выставляются фигуры/меши с сопровождающими их инструкциями(Shader) и вспомогательными данными(Текстуры, аргументы...), начиная от ближайших к камере или в установленном вручную порядке.
Отрисовщик берет данные меша о положения и проверяет его значение для DepthBuffer и StencilBuffer в качестве значения "маски" . Они могут быть записаны отдельно используя только данные о геометрии, перед отрисовкой освещения, они же Prepass, для чего это нужно будет понятно позже.
Допустим Prepass мы не используем, согласно полученным инструкциям, видеокарта запишет освещенный объект во FrameBuffer, а также данные в Stencil и DepthBuffer.
Следующий объект будет сравниваться с текущими Stencil и DepthBuffer, если глубина будет больше или значение стенсила не пройдет проверку, то эта часть не будет просчитываться тяжеловесными функциями шейдинга, Prepass в этом случае экономит время, обрабатывая только пиксели прошедшие проверку.
И так от ближайших, до самых дальних непрозрачных объектов. Дело в том, что прозрачные объекты не пишут в глубину, если не заставить их делать это напрямую, т.к. в противном случае они перекроют все, что находится за ними. Поэтому прозрачные объекты отрисовываются в обратном порядке, после непрозрачных перезаписывая данные FrameBuffer применяя смешивание.

В чем подвох?

Несмотря на понятный, гибкий пайплайн он не лишен множества проблем и со временем трансформируют, добавляя новые возможности.
Например, в связи с тем, что каждый объект рисуется отдельно, мы не можем получить данные об отражении сразу, напрямую, для этих целей используются такие техники как:
SSR(ScreenSpaceReflection), который пересчитывает отражения дополнительно, в конце отрисовки кадра, однако, требует использования дополнительного NormalPass и DepthBuffer в пределах области отрисовки.
ReflectionProbe, заранее запеченные данные об окружении в сферические/кубические текстуры, на которые можно ссылаться на этапе шейдинга фигуры, однако, они заминают очень много места и пересчитывать их в рантайме очень дорого.
Так же RayTracing и PlanarReflection, но это оставим на потом.
Ну и самая большая проблема Forward рендеринга это количество источников света, каждый источник света воздействующий на фигуру будет рассчитан отдельно, поэтому Forward плохо скалируется с увеличением источников света, на текущий момент эта проблема частично решаема с использованием продвинутой версии Forward+, но запечка освещения все еще является более оптимальным вариантом, и именно на основе этой проблемы появился его основной конкурент DeferredRendering.
а впрочем, это уже совсем другая история...
Subscription levels1

Flower

$3.3 per month
• Доступ к статьям на Boosty.
• Доступ к закрытому Telegram каналу.
• Большинство статей в Telegram канале те же, что и на Boosty.
• Доступ к Telegram каналу остается у вас навсегда.
Go up