[Из песочницы] Image Processing изображений из космоса для CG

Приветствую! Меня зовут Тим, я CG артист, режиссёр и автор научно-популярного проекта SGR A. В этой статье я хотел бы рассказать как создаю текстуры космических тел как для своих проектов, так и для кино, используя реальные снимки космических аппаратов.

image
Большое красное пятно сделано симуляцией дыма и частиц на основе оригинального изображения* (C4D+Octane+x-particles)
Сразу хочу предупредить что статья не является рекламой. Я лишь хочу поделиться результатами своей работы.

Некоторое время назад я увлёкся обработкой изображений с различных космических аппаратов. Довольно занятная штука. Всё началось с того что мне понадобились текстуры планет в очень высоком разрешении. Но их почти нигде не оказалось. И тогда я решил сделать свой собственный сборник текстур Солнечной Системы в 16к. Это оказалось совсем не так просто, как кажется…

Дело в том что нельзя просто скачать обработанные картинки с сайта НАСА и использовать их в своих целях, особенно если речь идёт о коммерческом использовании. Потому что каждый обработанный исходник изображения из космоса имеет авторские права человека, который совершил эту обработку. Прошерстив кучу официальных и неофициальных форумов по этой теме, я понял что самым активным и уважаемым в этом деле считается некий Bjorn Jonsson.

Предположительно он работает в НАСА и ему принадлежит большинство обработанных изображений и составленных карт различных планет и спутников. Именно поэтому мной было принято волевое решение делать практически всё с нуля и использовать сырые исходники, на которые никакие авторские права не распространяются (т.к. изображения сделаны в космосе).

Планеты пришлось собирать буквально по кусочкам, используя изображения на подобии таких:

image
Кусок поверхности Европы

Изображения с разных космических аппаратов в основном очень низкого качества и чёрно-белые. В идеале должно быть три чб снимка одной области для красного, зелёного и синего каналов, но к сожалению их очень непросто найти и над цветом приходится работать отдельно.

Поиск изображений на сайте OPUS выглядит примерно так:

image
:)

Проблему с низким качеством изображений мне помогают решать нейросети. В частности используется софт от Topaz Labs. Каждый исходник чистится от шума, апскейлится в несколько раз и приобретает резкость с помощью трёх разных нейросетей и фотошопа.

Ниже представлен процесс на примере одного изображения части поверхности Ио:

image
Поверхность Ио до обработки нейронными сетями (800×800)

image
Поверхность Ио после обработки нейронными сетями (4800×4800)

image
На основе обработанного изображения создаются каналы Color, Roughness, Normal и Displacement

image
Финальный результат (C4D+Octane)

Но это только часть космического тела. А нам нужны полноценные текстуры. Поэтому после обработки исходников нейронками, мы начинаем их склеивать в мозаику…

Тут возникает один болезненный момент — полюса планет. Так как для текстуры на шар нам требуется сферическая проекция, то создание полюсов приходится совершать в несколько этапов.

Первым этапом склеиваем полюса во фронтальной проекции с альфа-каналом:

image
Один из полюсов Юпитера

Далее переходим в 3д редактор и натягиваем их на сферу:

image

Создаём сферическую камеру и рендерим картинку 360 с пропорциями 2 к 1:

image

Теперь остаётся только совместить изображения центральной области и полюсов:

image
Финальный результат текстуры Юпитера

После завершения создания основной карты Color, приступаем к созданию каналов Normal, Roughness, Specular и Displacement.

В этом нам помогает Photoshop. На выходе получаем пять таких вот текстур:

image
По порядку: Color, Normal, Roughness, Specular и Displacement

Таким образом я сделал коллекцию семи планет Солнечной системы, одного Плутона и шести различных лун в 16к.

image

Теперь нам остаётся только создать шейдер нашей планеты в любом 3д редакторе и наслаждаться красотой космоса. Тут уже всё зависит от вашего воображения:

image
Юпитер (C4D+Octane)

image
Ио (C4D+Octane)

Так-же производились тесты в Unreal Engine 4, предварительно уменьшив размер текстур до 8к. Результат очень порадовал:

image

Один из примеров использования текстур созданных таким способом можно увидеть в моём короткометражном фильме о космических путешествиях или в тестовом шоте с пролётом мимо Европы

P.S. На самом деле нюансов в разы больше. Например Displacement map, в идеале должна быть 32 битной EXR. Недавно я придумал способ создавать такие карты. Но об этом напишу если только эта тема в принципе кому-то зайдёт.

Спасибо за внимание! Надеюсь что было интересно.

© Habrahabr.ru