Как пользоваться RenderDoc: инструкция для разработчика

Алексей Яременко

Мы в компании Stan’s Assets from KAPPS запускаем серию видео HOW TO, где будем объяснять и показывать, как пошагово решать задачи, когда рука тянется загуглить «как делать …?». В первом эпизоде я хочу познакомить вас с инструментом RenderDoc, и рассказать, как его используют Unity-разработчики. Публикуем текстовую версию! 

RenderDoc

Если кто-то из вас еще не знаком с тулзой RenderDoc – она распространяется по MIT-лицензии. Это значит, что мы можем использовать ее как в некоммерческих так, и в коммерческих проектах абсолютно бесплатно. Чтобы установить ее, просто выбираем операционную систему, на которой мы работаем, и далее следуем инструкции установщика.

Для начала пройдемся по объектам нашей демо-сцены, чтобы разобраться в специфике их шейдинга.

Обзор сцены

Объект №1 рендерится с помощью Textures Blend Shader. То есть у нас есть две альбедо-текстурыТекстуры, содержащие независимую информацию о цвете и маска. Используя Blend Value Slider, мы можем повлиять на то, каким образом блендятсяОт англ. to blend — смешивать наши альбедо-текстуры, учитывая, конечно же, бленд-маску.


Объект №2 рендерится с помощью дефолтного Unity Surface Shader. Тут есть альбедо-текстура с тайлинг- и офсет-параметрами. Также есть Smoothness Metallic Property. Специфика этого объекта в том, что на него влияет освещение в сцене. Это значит, что остальные объекты не кастятОт англ. to cast — отбрасывать тени, а на объект №2 влияют любые источники света, которые могут быть в сцене.

Рассмотрим объект №3. Его специфика в том, что он рендерится с помощью Multi-Pass Shader.

Pass №1 выглядит достаточно просто. Он выводит всего лишь Back Color, который мы укажем в Property шейдера. Также есть Pass №2, который порендерит часть геометрии, учитывая dissolve-текстуру, и main-текстуру. 

Логика работы Multiple-Pass Shader: есть наша main-текстура, есть dissolve-маска. Используя Mask Strength Slider мы видим, как розовый цвет или любой, который я выберу как Back Color, рендерится в Pass №1 и в Pass №2, выводится наша альбедо-текстура, учитывая dissolve-маску, которую мы указали. Эти три объекта — это opaqueнепрозрачная-геометрия нашей сцены.

Объект №4 рендерится с помощью Vert-Distortion Shader. Он использует преобразование вершин геометрии объекта, которого он рендерит. Также одна из его особенностей — то, что он рендерится в очереди прозрачных объектов. Это значит, что Unity порендерит сразу всю opaque (то есть непрозрачную геометрию), а потом порендерится вся коллекция объектов, которые имеют в своем материале шейдеры, отмеченные как transparent.

Как подключить RenderDoc к Unity?

Сейчас мы подключим RenderDoc к моему Unity-редактору и посмотрим, чем же занимался GPUОт англ. graphics processing unit — графический процессор в процессе рендера нашего кадра. Я нажимаю правой кнопкой мыши на GameView Title и потом выбираю Load RenderDoc. 

Он очень быстро зааттачился, и мы видим дополнительную кнопку, которая говорит, что при нажатии будет захвачен текущий кадр Game View (Capture the current view and open in RenderDoc). 

Как выглядит отрисованный кадр в RenderDoc?

Я нажимаю кнопку Capture один раз и мы видим, как открывается RenderDoc — и сразу показано отрендеренное окно GameView вместе с его тайтлом окна Unity. Мы кликаем два раза на это окно и видим список всех ивентов, которые происходили в процессе рендера всего кадра. Нам не очень интересны все вызовы рендера GUI, которые в верхней панели окна. Нам интересен вызов Camera.Render.

Если перейти на ивент Drawing, то мы видим, что Unity рендерит сразу opaque-геометрию, а потом transparent-геометрию. Как просмотреть прохождение всего цикла Render Pipeline? У нас есть несколько табов в RenderDoc.

Начнем с рассмотрения Pipeline State. Тут мы можем пройтись по всем этапам пайплайна и посмотреть, какие графические буферы какими данными были заполнены в процессе рендера нашего кадра (Vertex Shader, Pixel Shader, Rasterizer и остальные).

Самый интересный таб — это Texture Viewer. Мы видим, что в ивенте Render.OpaqueGeometry у нас отрендерена вся opaque (то есть непрозрачная геометрия). В ивенте Render.TransparentGeometry добавился наш четвертый объект, который является прозрачной геометрией.

Теперь мы разворачиваем Opaque Geometry Render и смотрим RenderLoopJob. Тут мы видим, что самым первым отрабатывает Pass №1 шейдера, с которым рендерится куб (у которого Multiple-Pass Shader).

Дальше мы видим рендер нашего робота и входные данные, которые были переданы Unity на GPU (текстура, карта теней — потому что на этот объект влияет свет и он кастит тень). Также передаются остальные текстуры, которые сопутствуют при рендере объекта в Unity.

Дальше рендерится наш робот №2. Тут нет никак дополнительных текстур, кроме тех, которые мы с вами обсудили, потому что на него не влияет свет и он не кастит тени. И последним выводом геометрии является Pass №2 шейдера куба. При рендере transparent-геометрии мы видим нашу маску (flag mask) и main-текстуру.

Вкладка MeshViewer

Что еще интересного мы можем увидеть в RenderDoc? Если посмотреть в Mesh Viewer, мы увидим геометрию, которая была использована при рендере объекта. Если выбрать что-то из других объектов, мы увидим полный Mesh нашего робота, точно такой же, как будто мы видели его тут в Shaded Wireframe режиме отображения сцены в Scene View Unity.

Помимо этого, мы увидим все вершины, которые фактически присутствуют в этом Mesh. Другие свойства мы можем посмотреть в Pipeline State, как и любые другие Command Buffers, которые были переданы на GPU с Unity.

Итоги

Если вы хотите более детально разобраться в специфике работы RenderDoc, вы можете обратится к официальной документации. Также делимся ссылкой на архив с этим демо-проектом. Дерзайте!

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Останні статті

Токсичные коллеги. Как не стать одним из них и прекратить ныть

В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…

07.12.2023

Делать что-то впервые всегда очень трудно. Две истории о начале карьеры PM

Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…

04.12.2023

«Тыжпрограммист». Как люди не из ІТ-отрасли обесценивают профессию

«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…

15.11.2023

Почему чат GitHub Copilot лучше для разработчиков, чем ChatGPT

Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…

13.11.2023

Как мы используем ИИ и Low-Code технологии для разработки IT-продукта

Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…

07.11.2023

Университет или курсы. Что лучше для получения IT-образования

Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…

19.10.2023