3D-сканер чужими руками, или лень - двигатель прогресса
3D-сканер чужими руками, или лень - двигатель прогресса
Дизайнер должен быть ленив, что бы достигать максимального результата минимальными средствами.
Виктор Плышевский
Для начала хочу выразить благодарность и уважение Fiend3d за замечательный урок, который вдохновил меня на эту статью. Я всегда испытывал зависть пополам с восторгом, наблюдая как физический мир превращается в сознании математика в набор уравнений.
Хочу так же предостеречь от попыток принять мои упражнения за готовую технологию. Это всего лишь забавный эксперимент. Если кто-то найдет его полезным - я не виноват :)
Итак, к делу! Рассуждая о том, как из плоской картинки сделать объемный предмет я вспомнил о канале глубины (Z-буфер). Все, что нам требуется - это получить фотографию объекта с равномерно ослабевающим в глубину освещением. И желательно без переспективных искажений. Такой фотоаппарат стоит у большинства из нас на рабочем столе (ну или по крайней мере, на соседнем столе). Это обычный планшетный сканер.
Но разумеется, не все так просто.
Проблема №1: объекты имеют собственную окраску. И темные пятна мало отличаются от теней. Эту проблему я решил просто. Взял объект сделанный из гипса :) Вот он:
Между прочим - мне пришлось его слегка помыть :) Разумеется, если Вам захочется взять что-то не из гипса - всегда есть баллончик с краской :) Я сканировал с небольшим разрешением, но 16 бит на канал, что бы сохранить нюансы в тенях и светах. Кстати, имейте ввиду: расположение теней зависит от направления движения каретки сканера.
Дальше немножко фотошопа. Я взял красный канал (channels/split channels) и записал его как отдельный файл (это лучше простого "обесцвечивания" - desaturate). Да, чуть не забыл: стоит "обтравить" объект и залить фон черным. И неплохо дополнительно высветлить наиболее выступающие места (не ворчите, на все ушло не больше 15 минут):
Осталась ерунда. Объяснить 3DS Max'у что с этим делать. Проницательный читатель уже кричит: "Дисплэйс! Дисплэйс!" - И он прав! :) Вот только использовать дисплэйс-карту при рендеринге не хочется, все-таки удобнее работать с геометрией. Значит - модификатор Displace, который я применил к обычному объекту Plane. Что бы не мучиться с подгонкой карта была приведена к пропорциям объекта 3х4 (1500х2000px):
У-упс! Как-то по-другому я это себе представлял... Итак проблема №2: регулярная сетка разбивает объект на квадратики, как-бы "пикселы". Если увеличивать ее частоту - мы быстро вылетаем за разумное количество полигонов. Кроме того, картинка слегка "шумит". Очевидно, необходимо сглаживание. Микрошумы удаляем прямо в Displace (Image/blur), макро-неровности при помощи модификатора Relax:
"Позвольте!" - скажет возмущенный читатель, - "А где же мелкие детали? За что боролись-то??"
Да, и это проблема №3. Решается она сравнительно просто. Из той же картинки мы делаем карту бампинга, конечно же normal bump. (я использовал маленькую бесплатную прогу Сrazybump )
Теперь неплохо бы еще удалить все лишнее. И что это за мерзкие разводы по контуру?
А это проблема №4. Используя только один вид невозможно получить полную информацию о форме объекта. За угол сканер заглянуть не может, и там где заканчивается сканированная карта начинается лажа. Значит просто отрезаем эти части совсем. Не надо мучиться и прицеливаться. Используем карту прозрачности (opacity map). Помните, я попросил вначале "обтравить" картинку? У Вас должен был сохраниться альфа-канал!
Говорите, не слишком-то похоже на гипс? Ну что ж, пора включать глобал иллюминэйшн:
И наконец в движении
Вот финальные раскладки по настройкам модификаторов и материала:
Исполнено на 2x1800/ATLON64/2Gb, Win2000SP4, Autodesk 3DSMax 9sp1, V-Ray 1.53RC1
Надеюсь, что мне удалось немного развлечь публику :) спасибо за Ваше время!
Михаил Наумов a.k.a. Mic Nau