Мы в компании Stan’s Assets from KAPPS запускаем серию видео HOW TO, где будем объяснять и показывать, как пошагово решать задачи, когда рука тянется загуглить «как делать …?». В первом эпизоде я хочу познакомить вас с инструментом RenderDoc, и рассказать, как его используют Unity-разработчики. Публикуем текстовую версию!
Если кто-то из вас еще не знаком с тулзой RenderDoc – она распространяется по MIT-лицензии. Это значит, что мы можем использовать ее как в некоммерческих так, и в коммерческих проектах абсолютно бесплатно. Чтобы установить ее, просто выбираем операционную систему, на которой мы работаем, и далее следуем инструкции установщика.
Для начала пройдемся по объектам нашей демо-сцены, чтобы разобраться в специфике их шейдинга.
Объект №1 рендерится с помощью Textures Blend Shader. То есть у нас есть две альбедо-текстуры
Объект №2 рендерится с помощью дефолтного Unity Surface Shader. Тут есть альбедо-текстура с тайлинг- и офсет-параметрами. Также есть Smoothness Metallic Property. Специфика этого объекта в том, что на него влияет освещение в сцене. Это значит, что остальные объекты не кастят
Рассмотрим объект №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-редактору и посмотрим, чем же занимался GPU
Он очень быстро зааттачился, и мы видим дополнительную кнопку, которая говорит, что при нажатии будет захвачен текущий кадр Game View (Capture the current view and open in 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-текстуру.
Что еще интересного мы можем увидеть в RenderDoc? Если посмотреть в Mesh Viewer, мы увидим геометрию, которая была использована при рендере объекта. Если выбрать что-то из других объектов, мы увидим полный Mesh нашего робота, точно такой же, как будто мы видели его тут в Shaded Wireframe режиме отображения сцены в Scene View Unity.
Помимо этого, мы увидим все вершины, которые фактически присутствуют в этом Mesh. Другие свойства мы можем посмотреть в Pipeline State, как и любые другие Command Buffers, которые были переданы на GPU с Unity.
Если вы хотите более детально разобраться в специфике работы RenderDoc, вы можете обратится к официальной документации. Также делимся ссылкой на архив с этим демо-проектом. Дерзайте!
В благословенные офисные времена, когда не было большой войны и коронавируса, люди гораздо больше общались…
Вот две истории из собственного опыта, с тех пор, когда только начинал делать свою карьеру…
«Ты же программист». За свою жизнь я много раз слышал эту фразу. От всех. Кто…
Отличные новости! Если вы пропустили, GitHub Copilot — это уже не отдельный продукт, а набор…
Несколько месяцев назад мы с командой Promodo (агентство инвестировало в продукт более $100 000) запустили…
Пару дней назад прочитал сообщение о том, что хорошие курсы могут стать альтернативой классическому образованию.…