<p class="story-block story-block_type_text">Всем привет, В данном посте хочу поделиться всякой информацией касательно работы графики в PUBG и некоторыми найденными косяками. Этакий познавательно детективный пост.</p>
<h2>Видео</h2>
<p><amp-youtube data-videoid="oup3dSeGAhM" layout="responsive" width="1000" height="563"></amp-youtube></p>
<h2 class="title style-scope ytd-video-primary-info-renderer">Отрисовка кадра игры PlayerUnknown&#8217;s Battlegrounds</h2>
<p><amp-youtube data-videoid="QRrztpb24ag" layout="responsive" width="1000" height="563"></amp-youtube></p>
<h2 class="story-block story-block_type_text">Процесс построения кадра в PUBG</h2>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs9.pikabu.ru/post_img/2018/01/22/6/1516609457134224134.jpg" data-large-image="https://cs9.pikabu.ru/post_img/big/2018/01/22/6/1516609457134224134.jpg" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_text">
<p>1. Этап. Непрозрачные статические объекты в поле зрения камеры рендерятся в буффер глубины. Рендерятся без текстур. Поэтому процесс довольно шустрый.</p>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs10.pikabu.ru/post_img/2018/01/22/6/1516609623124986461.jpg" data-large-image="https://cs10.pikabu.ru/post_img/big/2018/01/22/6/1516609623124986461.jpg" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_text">
<p>Эта карта глубины нужна движку в последующем для различных целей. Например отсечение лишней геометрии. Тех объектов которые перекрыты другими. Плюс для рисования декалей, для эффекта глубины резкости (DoF), объемного тумана и тд.</p>
<p>Этот этап требует синхронизации с процессором, а значит, пока не построим карту глубины, дальше ничего не рендерится.</p>
<p>И вот тут мы приходим к фейлу №1. В пубжике объектов очень много и карта 8кв км. Дальность камеры конская. Поэтому движку очень часто приходится работать с огромным количеством геометрии в кадре. Тут есть переиспользование данных из предыдущих кадров (для скорости), но когда ты крутишь камерой, то эти данные типа устаревают и нужно начинать все сначала.</p>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs8.pikabu.ru/post_img/2018/01/22/6/1516610103118561981.jpg" data-large-image="https://cs8.pikabu.ru/post_img/big/2018/01/22/6/1516610103118561981.jpg" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_text">
<p>На графике количества отрисовок (Draw Call) мы видим пики. На эти пики садится твой ЦП и себе на колени усаживает видюху.</p>
<p>От этого время кадра гуляет, регулярно фризы и прочие неприятности. Кстати, в зависимости от происходящего, перед этим этапом может быть этап симуляции частичек, если у нас есть какие-то взрывы, огонь и прочее.</p>
<p>Идем дальше по построению кадра.</p>
<p>Этап 2.</p>
<p>Рисуем объекты сразу в несколько буфферов: GBufferC дифьюз , GBufferA &#8212; нормали, SceneColorDeferred &#8212; непрямого освещения, Distortion -отражаемости, матовости и тд.</p>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs10.pikabu.ru/post_img/2018/01/22/6/1516610851170454620.jpg" data-large-image="https://cs10.pikabu.ru/post_img/big/2018/01/22/6/1516610851170454620.jpg" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs9.pikabu.ru/post_img/2018/01/22/6/151661085416419100.jpg" data-large-image="https://cs9.pikabu.ru/post_img/big/2018/01/22/6/151661085416419100.jpg" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs10.pikabu.ru/post_img/2018/01/22/6/1516610848149870365.jpg" data-large-image="https://cs10.pikabu.ru/post_img/big/2018/01/22/6/1516610848149870365.jpg" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_text">
<p>Потом рендерим HBAO+, каскады теней и прозрачные объекты.</p>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs9.pikabu.ru/post_img/2018/01/22/6/1516611091144050627.png" data-large-image="https://cs9.pikabu.ru/post_img/big/2018/01/22/6/1516611091144050627.png" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs10.pikabu.ru/post_img/2018/01/22/6/1516611094162693118.png" data-large-image="https://cs10.pikabu.ru/post_img/big/2018/01/22/6/1516611094162693118.png" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs9.pikabu.ru/post_img/2018/01/22/6/1516611110152578602.png" data-large-image="https://cs9.pikabu.ru/post_img/big/2018/01/22/6/1516611110152578602.png" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_text">
<p>Далее идут всякие эффекты, пост эффекты и кадр готов.</p>
<p>В принципе, ничего особенного. Но разрабам надо разобраться с кулингом. Т.к. стандартное отсечение геометрии работает хреново от слова совсем. Куча геометрии остается не выброшеной из кадра. Как например весь интерьер каньона. Смотрим положение камеры на первом скриншоте. Смотрим на каньон.</p>
</div>
<div class="story-block story-block_type_image">
<figure class="story-image">
<div class="story-image__content"><img src="https://cs9.pikabu.ru/post_img/2018/01/22/6/151661135616845765.jpg" data-large-image="https://cs9.pikabu.ru/post_img/big/2018/01/22/6/151661135616845765.jpg" data-viewable="true" /></div>
</figure>
</div>
<div class="story-block story-block_type_text">
<p>В пубже нет предзапеченной инфы по отсечению геометрии, как например это делает UMBRA. И это по-моему единственное спасение. Но зачем оптимизировать, если лучше запилить никому не нужную пустынную карту, на которой багов еще больше чем на старой.</p>
</div>
<div class = "evc-social-likes" data-url="https://pubg1337.ru/news/kak-rabotaet-grafika-pubg-gde-optimizacija/"data-title="Как работает графика PUBG. Где оптимизация?" data-media = "https://pubg1337.ru/wp-content/uploads/2019/01/1516611356168457651.jpg"><div class="social-likes "><div class="facebook" title="Поделиться ссылкой на Фейсбуке">Facebook</div><div class="twitter" title="Поделиться ссылкой в Твиттере">Twitter</div><div class="vkontakte" title="Поделиться ссылкой во Вконтакте">Вконтакте</div><div class="plusone" title="Поделиться ссылкой в Гугл-плюсе">Google+</div></div></div><div class="expert-review-likes expert-review-likes--style-button-1-color expert-review-likes--size-m js-expert-review-likes-button-container" data-post_id="2580"><button class="expert-review-likes__button expert-review-likes__button--like js-expert-review-likes-button" data-type="like"><span class="expert-review-likes__icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M103.6 202.7h-37c-9.2 0-16.6 7.4-16.6 16.6v240.1c0 9.2 7.4 16.6 16.6 16.6h36.9c9.2 0 16.6-7.4 16.6-16.6V219.3c.1-9.2-7.3-16.6-16.5-16.6zM425 202.7H290.2c-33.3 0 7.4-131.1 7.4-131.1 1.8-14.8 1.8-29.5-16.6-29.5h-16.6c-12.9 0-22.2 9.2-25.9 18.5 0 0-79.4 131.7-87.9 151.3-1.6 2.8-2.6 5.9-2.6 9.4v236.4c0 10.2 8.3 18.5 18.5 18.5H364c48-1.8 79.4-29.5 85-73.9l14.8-157c1.9-22.3-9.2-42.6-38.8-42.6z"/></svg></span><span class="expert-review-likes__label">Мне нравится</span><span class="expert-review-likes__count js-expert-review-likes-count" data-count="0"></span></button><button class="expert-review-likes__button expert-review-likes__button--dislike js-expert-review-likes-button" data-type="dislike"><span class="expert-review-likes__icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M103.6 318.3h-37c-9.2 0-16.6-7.4-16.6-16.6V61.6C50 52.4 57.4 45 66.6 45h36.9c9.2 0 16.6 7.4 16.6 16.6v240.1c.1 9.2-7.3 16.6-16.5 16.6zM425 318.3H290.2c-33.3 0 7.4 131.1 7.4 131.1 1.8 14.8 1.8 29.5-16.6 29.5h-16.6c-12.9 0-22.2-9.2-25.9-18.5 0 0-79.4-131.7-87.9-151.3-1.6-2.8-2.6-5.9-2.6-9.4V63.5c0-10.2 8.3-18.5 18.5-18.5H364c48 1.8 79.4 29.5 85 73.9l14.8 157c1.9 22.1-9.2 42.4-38.8 42.4z"/></svg></span><span class="expert-review-likes__label">Не нравится</span><span class="expert-review-likes__count js-expert-review-dislikes-count" data-count="0"></span></button></div>