Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Для чего нужны фреймбуферы?

#opengl #графика #webgl #opengles


Для чего нужны фреймбуферы в opengl? Я может не точно задаю вопрос, но я и не понимаю
как его задать. Я читаю книгу по opengl es 3. Там описано какие есть функции, но для
чего использовать или когда использовать я не пойму. Также есть что-то типа рендерить
фреймбуфер в текстуру.
    


Ответы

Ответ 1



Что такое фреймбуфер (OpenGL FrameBuffer, WebGL FrameBuffer)? Когда Вы вызываете методы отрисовки, в соответствии с текущими настройками графического конвейера заполняется несколько буферов размером с область отрисовки (буфер цвета, опционально буфер глубины, буфер трафарета). Такая группа буферов и называется фреймбуфером. Базовый фреймбуфер создается и настраивается в момент создания окна приложения. Базовый фреймбуфер привязывается по умолчанию. У Вас есть возможность создавать и привязывать дополнительные фреймбуферы. Создавая собственный фреймбуфер Вы получаете дополнительное пространство куда можно направить ортрисовку. Привязывая не базовый фреймбуфер Вы говорите таким образом конвейеру, что хотите чтобы все последующие вызовы отрисовки происходили в него. Фреймбуфер, сам по себе это только точка привязки, к нему привязываются так называемые рендер-тектуры. Рендер текстуры уже будут хранить непосредственно цветовую информацию. После наполнения фрейм буфера(ов) Вы привязываете базовй фреймбуфер и рисуете уже на экране, используя при отрисовке информацию из фреймбуфера(ов). Для чего это можно и нужно использовать? Самое очевидное - программная генерация текстур. Deferred Shading - Отложенное освещение и затенение. Это такая техника, при которой финальный цвет фрагмента определяется при отрисовке одного прямоугольника, закрывающего всю область экрана. При этом во фрагментном шейдере берутся значения из рендер текстур и из этих значений вычисляется финальный цвет. Тут есть важный момент что в этом случае скорость выполнения второго этапа не зависит от сложности сцены, а зависит от размера кадра. G-Buffer (Geometry Buffer) - специальное название для группы текстур при отложенном рендеринге: Результат (много источников света): Depth of Field или DoF - глубина резкости, пожалуй самый простой для понимания эффект - он применяет blur помноженный на значение из текстуры глубины. High Dynamic Range Compression или HDR - технология расширения диапазона яркости кадра подробнее тут (тут) Bloom - своеобразный эффект свечения, заключается в размытии границ ярких объектов. Screen Space Ambient Occlusion (SSAO), обманка с самозатенением - про я недавно писал ответ на вопрос тут. Screen Space Reflections (SSR) - Алгоритм который позволяет получить отражения для плоских поверхностей. При этом отразится может лишь то, что попало в кадр - подходит для горизонтальных поверхностей вроде луж на земле. Screen Space Subsurface Scattering (SSSS) - Подповерхностное рассеивание описывает механизм распространения света, при котором свет, проникая внутрь полупрозрачного тела через его поверхность, рассеивается внутри самого тела, многократно отражаясь от частиц тела в случайном направлении и на нерегулярные углы. В итоге свет выходит из объекта в выходной точке, отличной от точки вхождения в объект Screen-Space Percentage-Closer Soft Shadows

Комментариев нет:

Отправить комментарий