19 августа 2011 г.

LemonCup: MakingOff

Для начала хотел бы отметить один важный момент. Это описание не является единственно правильным путём получения лучшего результата. Кто-то возможно найдёт его полезным но кое что обойдёт или дополнит, кто-то вообще может посчитать ошибочным в корне. Я же подчёркиваю, это просто моя серия решений поставленной задачи и возникших по ходу работы проблем. Вспоминая себя лет 5 назад, вглядываясь в чужие работы, я спрашивал себя - как проходит работа в целом, на сколько автор точно знает что у него должно быть в финале и как идёт к этому? Возможно кто-то из новичков задаётся тем же вопросом, вот ради этого я и опишу здесь не только положение финальной сцены, а и то как пришёл к ней.


Так же, в тексте в целях компактности упущены разные мелочи вроде смещения PivotPoint или объяснения принципов действия тех или иных модификаторов.




Логически всю работу можно разделить на три условных части:
1. Основа - моделируем собственно сам стакан, кусочки льда, лимоны. Настройка временных материалов, окружение. Тестовые рендеры.
2. Ковка композиции - компоновка системы освещения сцены, работа с массивами объектов VrayScatter. Первые рендеры с пост-обработкой.
3. Рендер & Пост-обработка - детализирование модели лимонов, настройка материалов и рендера для финальной версии. Пост-обработка во Fusion.

Часть 1. "Основа".
Для начала я на скорую руку, но довольно точно, передал основные элементы сцены по тому образу что был в голове и небольшом фото референсе. Первым был сам стакан.

Моделирование стакана.
Line контур + Lathe модификатор и небольшая доводка в Edit Poly. Всё просто и быстро, стакан нужен был самый простой. Line с вершинами Bezie и Corner Bezie имел 6 ступеней сглаживания, а модификатор Lathe задал 32-ух сегментное вращение.





Получилась сетка с довольно хорошим полигонажем, осталось только снять пару фасок на кромках и немного "уплотнить" сетку и чуть чуть скорректировать толщину стекла на донышке. MeshSmooth с 2 интерациями завершает стак модификаторов.



Моделирование льда.
Делать идеальные кубики подтаявшего льда я не захотел, нужно было что-то с формами по сложней. Метод моделирования подсмотрел в одном известном уроке моделирования скалы, напомню основные этапы.
Создаём несколько замкнутых рубленных Spline-форм с Corner вершинами, расставляем их примерно как на изображении и применяем Extrude.





В итоге мы должны добиться небольшого пересечения геометрий между собой. Конвертируем в Editable Mesh и аттачим друг к другу через один, чтобы получились два объекта. Это упростит операции с булином. Собственно теперь через простой Boolean в режиме Union "склеиваем" одну серию сплайнов с другой и сразу полученное конвертируем в Editable Mesh снова и накладываем модификатор Subdivide.





Далее добавим деталей дисплейсом. Накладываем модификатор UVW Mapping в режиме Box, и сверху кидаем модификатор Displace. В настройках последнего отмечаем галочкой Luminance Center, в слот Map поля Image мы кладём битмапу любого растрового изображения (ч/б) скалы, гранита, мрамора - можно экспериментировать, и что понравится то и оставлять. Силу дисплейса так же подбираем по своему усмотрению. Далее накладываем MeshSmooth, Noise - в моём случае было три пары этих модификаторов, создавая детали всё мельче и мельче.



В результате таким чудным методом родились два кусочка льда для стакана. В последствии добавилось ещё несколько кусочков по той же технологии.



Последним были дольки лимона. Первые версии были совсем простые, Sphere с слайсом на 14 градусов, развёрткой UVW Unwrap для корректного маппинга и две текстуры найденные без труда в интернете.





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




Жидкость.
Всё очень просто, выбираем стакан, выделяем в центре окружность полигонов на внутренней стороне донышка, и нажимая кнопки [Grow] и [Shrink] примерно подбираем уровень жидкости и делаем копию выделенных полигонов в отдельный объект. Последними штрихами был оператор [Cap] из Edit Poly чтобы создать поверхность жидкости и тут же через [Bevel] продавливаем немного поверхность имитируя эффект поверхностного натяжения воды. MeshSmooth второй интерации.





Отмечу один нюанс о жидкости и стакане. Жидкость наша должна немного заходить под поверхность стекла исключая "воздушную прослойку" между моделью стекла и жидкости. Так как жидкость создавалась на основе сетки стекла, т.е. вершины стенок стакана совпадают с вершинами сетки жидкости, нам достаточно на объект "жидкость" наложить Shell с совсем маленьким влиянием и отмеченной галочкой "Straighten Corners". Цель - в одном из боковых окон проекции, увидеть что объект жидкость начала "экспансию" под поверхность внутренних стенок модели стакана.



Затем накладываем Edit Poly модификатор и в режиме редактирования Element выделяем "внутренний контур" образовавшийся после модификатора Shell, и удаляем его, оставив только контур который входит под поверхность стенок модели стакана. Проверяем ориентацию полигонов модели жидкости, после всех изменений и по необходимости пользуемся модификатором Normal либо кнопкой [Flip] при Edit Poly.



И так, на данном этапе у нас уже есть стакан, внутри него уложены модели льдинок и лимона, а так же залита жидкость. Сама сцена для первых тестов очень простая - плейн размерами чтоб покрывал вид из камеры и один VrayLight светящий на стакан из-за "спины" камеры, собственно сама камера - VRayPhysicalCamera.
В качестве заполнения вакуума окружающей среды я воспользовался, довольно цветастой с тёмными почти чёрными пятнами, ХДРкой. Как ни странно, это карта метро, ничего похожего на клуб или бар найти не получилось.



Её я прогрузил в слоты GI Enviroment (skylight) override и Reflection/refraction override с Multiplier по 30.
Для GI связка Brute+Brute (люблю его за простоту настроек и лёгкость контроля качества), Антиалиазинг отключен, Image Sampler переключен на DMC.

Материалы объектов на первых порах так же совсем простые и ничего особенного. Плейн подложка стандартный серый виреймат c картой царапин в канал Bump, стакан VrayMtl белого цвета, практически белый колорбоксы для Reflect и Refract, glossiness в обоих полях 1.0, для рефлекшн отмечена галочка Fresnel и значения на первых тестах варьировались от 1.8 до 4. IOR (он же "индекс преломления") для поля refraction я взял табличный для стекла - 1,51714. Галочка Affect shadows так же была отмечена. Материал для лимонов VrayMtl, в Maps дифьюз текстура среза лимона, Opacity такая же текстура черно-белого цвета. Для корочки лимонов материал VrayMtl, и только растровое изображение в Diffuse. Материал жидкости схожий с материалом стекла, отличия только в немного меньшей силе отражений а IOR я взял так же табличный для жидкости 1,333.
Материал льда стал моим первым камнем преткновения в работе. В начале первые тесты я пытался его настроить методом тыка и тестов на рендере. Что из этого вышло видно на последующих картинках, в последствии я скачал один из понравившихся мне готовых материалов льда на сайте vray-materials.de и лишь немного его адаптировал под мою сцену.
Скриншоты не привожу, всё на самом деле очень примитивно, всё ради скорости рендера и наглядности.

Вот несколько из первых тест-рендеров, которые конечно сейчас выглядят полнейшим ужасом но тогда они довольно неплохо вдохновили на дальнейшую работу над сценой.
По сюжету сцены на картинке должен преобладать сильнейший DOF с фокусом на толщи жидкости в стакане. Так для рендеров с начала я подключил и настроил в черновом качестве "живой" DOF от VRayPhysicalCamera, т.е. просчёт глубины резкости самой камерой во время рендера.



На этом тест-проходе, я решил уже добавить мокрый след от стакана на поверхности столешницы. На деле это совсем немного изменённый в Edit Poly объект Tube не замкнутый с слайсом на 250 градусов и очень малой высотой. Так же добавил ещё один источник света под 45 градусов к первому стоящему за камерой. И решил немного усложнить модельку лимона добавив заусеницу на срезе.



Тёмное пятно выше и слева от стакана, это стоящий за гранью ГРИП ещё один стакан:) не придумал ничего лучше как разнообразить пустой хоть и размытый задний план.

Где-то после этой стадии, что называется "Остапа понесло...".


Часть 2. "Ковка композиции".
Следующая часть проведённой работы не поддаётся никакому анализу и систематизации, т.к. велась абсолютно бесконтрольно, на волне удовольствия получаемого от расцветающей на глазах сцены.

Свет.
Первое и пожалуй определяющее для этой работы, что было сделано - так это постановка сложной системы освещения. В финальной сцене присутствует 13 источников света различных типов, цветов, светосилы, назначений и зон влияния.





Группа основных, задающих тон всей сцене, состоит из 5 VrayLight сферической формы и насыщенными цветами, два левых холодных синих тонов, три справа различных градаций красного.



Больший из вирейлайтов пришлось исключить из списка влияний на модель стакана, т.к. давал очень большой и некрасивый резкий блик. Однако чтобы гамма стакана не выбивалась из общего ритма, недостаток света после исключения вирейлайта был компенсирован простым TargetSpot того же цвета и примерно равной силы с зоной влияния [только стакан]. В целом многие источники света приходилось исключать из влияний на определённые части сцены и заменять альтернативными.

Массивы моделей каплей и пузырьков газа.
Следующий шаг в работе над композицией был решением дополнить окружение каплями жидкости на столешнице и на поверхности сухой части стенок стакана. Так же решил добавить подтёк жидкости в области соприкосновения столешницы и донышка стакана.
Первое было решено осуществлять посредством плагина VrayScatter. Для этого я подготовил две модели каплей, одна чуть чуть вытянутая, для размещения на стакане, и одна в форме сплюснутой сферы для столешницы. Самые обыкновенные Sphere на 18 сегментов, слегка помятые через FFD и немного Noise - по вкусу.



Основные настройки скаттера для капель на столешницу - максимальное число 20`000, распространение через маску по карте Noise (Fractal, Size:10, Hi 0.835, Lo 0.355, Lvls 10), радиус для коллизий 1см, обе галочки о получении и генерации коллизий отмечены, рандомизированное вращение на 360' по оси Z, разница в скалировании от 6 до 30 по карте аналогичной распространению.
Для капель на стакан всё аналогично за исключением максимального числа в 1500 и скалирования от 13 до 24%.
Материал для капель, VrayMtl с чёрным дифьюзом, практически белым цветом в колорбоксе рефлекта и рефракта, глоссинесс по 1.0, IOR 1,6 и отражения френелевские. Галочка Affect Shadows так же отмечена.



После этого тест-прогона рендером я решил добавить ещё и ровные сферки пузыриков газа на "мокрую" поверхность стенок стакана имитируя оседающий СО2 газ.
Настройки VrayScatter для них схожи с двумя предыдущими за исключением максимального кол-ва к которому я пришёл после нескольких пре-тестов - 9`000 и скалирование от 5,2 до 7% и радиус к столкновению в 0,5.
Забегая на перёд, на предпоследних стадиях доводки сцены, практически когда работа уже велась только над пост-обработкой, я решил добавить ещё и четвёртый VrayScatter который бы имитировал скопление выдавленных большего размера пузырьков газа со стенок к поверхности. (красного цвета на изображении ниже)



Настройки практически идентичные настройкам для пузырьков газа на стенках сосуда (3ий вирейСкаттер) с одним важным отличием. В слот Mask поля Scale я загрузил карту Gradient Ramp с простым и стандартным чёрно-белым переходом вертикально ориентированным (белый сверх). Это дало возможность настроить размеры пузырьков газа по мере их приближения к поверхности. Более крупные пузырьки воздуха сильней выталкивает к поверхности.



Вообще конечно газ должен оседать не только на стенках сосуда но и на помещённых в жидкость предметах, например ложка или как в моём случае льдинки и лимоны, но мне показалось что это сильно перегрузит сцену, и зона фокуса будет сильно пестрить.

В качестве объектов-баз или "эмиттеров" я использовал копии объектов на поверхности которых нужно было создавать массивы VrayScatter, с удалёнными частями полигональной сетки где распространение массива нужно не было. Так например для создания наружных капель на стакане, я скопировал стакан и удалил полностью внутреннюю поверхность, полностью донышко и верхнюю кромку. В качестве эмитера пузырьков газа использовал опять же копию стакана но из сетки от него осталась лишь часть внутренней поверхности которая сопоставима с уровнем жидкости в стакане. Для пузырьков газа около поверхности, я использовал совсем тоненький ободок сетки внутренней поверхности стакана. На изображении ниже, Emitter 1, 2 и 3 соответственно.



Сразу после работы над скаттерами я пришёл к мысли сделать ещё одно небольшое улучшение моей "гидро системы" и добавить мокрое соприкосновение кусочков льда со стеклом выше уровня жидкости. Тут всё просто, по сути это большая вытянутая капля.



После этих всех дополнений я решил первый раз в этой работе сделать пробный пост. Пост-обработка выполнялась в пакете Eyeon Fusion 6, и сводилась к работе с цветностью и уровнями контраста, в конце дополнялось уже постовым DOF`ом. К описанию процесса пост-обработки я далее вернусь более подробно.
Вышло что-то примерно такое.



Когда сошёл восторг и эйфория, я пришёл к мысли что это полнейший ужас и настоящая работа над "продуктом" только начинается.


Часть 3. "Рендер & Пост-обработка".
Подготовка к финальному рендеру оказалась не такой уж и быстрой, было около 16 "финальных" версий пока я не пришёл к искомому.
Начать я решил с доработки лимонов. Для начала я изменил сами модели лимонов, добавив проработку геометрией через Editable Poly а так же серией модификаторов такими как Twist, FFD и Noise.



Так как я был крайне не доволен материалом лимона на рендере я решил попробовать VrayFastSSS2 материал вместо простого VrayMtl. Кстати это стало толчком перейти с VRay 1.5sp2 на sp5 версию :)
Практически ничего не зная об этом материале и с нулевым опытом работы в нём, я почитав немного официальный мануал, смог накрутить довольно неплохой эффект на рендере. Во всяком случае куда лучше чем предыдущий материал.




Дополнил ещё несколькими кусочками льда композицию и доработал материал льда.





Материал стакана



Жидкость



Столешница



Рендеринг финальной версии шёл в TGA формат с глубиной в 32 бита из Render Elements понадобился только пасс zDepth. Собственно сами настройки рендера таковы, ничего особенного...



Пост-обработка.
Как я уже отмечал, пост-обработка изображения проводилась в Fusion 6.14.
Разбирать RGB пасс на составляющие я посчитал лишним, не интерьер всё таки постим, по этому треад компоуза начинается сразу с цельной картинки из рендера.



Дабы не рассусоливать каждый оператор компоуза и не просвещать в возможно свои же ошибки я пройдусь кратко по основному что стоит внимания.



Первым оператором я подчистил изображение - sharp, силу выставил совсем незначительную, т.к. сам очень не люблю "перешарп" :(
BrightnessConstrast - поднимаю до 1,1 параметры Gain и Gamma
ColorCurves - работая с каналом Red я слегка поднимаю кривую синего цвета, добавляя "холода" в сцену. Влияние оператора я сделал избирательным, исключив маской область с льдом, лимонами и до самого донышка.
ColorCorrect - слегка затеняю зону с лимонами опуская brightness, gamma и gain параметры а так же поднимаю Saturation
Brightness - высветляю правый верхний угол с красноватым свечением
Depth of Field (frischluft) - работая по каналу zDepth выбираю в зону фокуса область в которую попадает толща жидкости в стакане, по вкусу настраиваю боккэ. Тут пожалуй я дольше всего игрался с настройками, хотя это возможно просто потому что из тут полно и мне хотелось всё покрутить.
WarpChroma (sapphire) - тут всё просто, это абберации.
Дальше всё ещё проще, Glow придать блума изображению, ColorCorrect с маской для имитации виньетирования, фларик на край стакана, ещё один CC с повышением сатурейшн (основное подкрашивание картинки) до 1,4 и немного + контраста и всё это с исключением маской стакана по всей высоте. Ещё один CC для усиления виньетирования с чуть другими параметрами маски. Gain работающий по zDepth`у шумящий только вне зоны ГРИП и последний CC подкрашивающий лимончики.




В заключение расскажу об одном казусе случившемся на самых последних уже минутах работы над изображением, когда выдержка уже совсем сдавала и хотелось по скорей закончить всё. Загружая loader`ом в фьюжен начальное изображение, я совсем забыл заглянуть в закладку Import и проверить в какой битности программа предлагает работать по умолчанию. Т.к. рендерилось всё в широком спектре на 32 бита, имело бы смысл использовать на посте все эти возможности, но я об этом всём забыл и программа по дефалту "подрезала" всё под 8 бит.
По ходу работы над постом я наблюдал как растёт "лестничный" эффект на градиентах и ничего не мог с этим поделать. Когда всё таки исправил эту досадную ошибку, из-за которой пришлось отзывать свою работу с галерей куда уже было загружено изображение, я был очень удивлён увидев на своём примере как сильно влияет на качество работы 8ми битный спектр. Сравнительное изображение ниже





Надеюсь кому-то эта куча текста помогла разобраться дав ответы на некоторые вопросы :)




2 комментария:

NikkoN комментирует...

Интересный материал. Для себя нашел несколько интересных моментов. Думаю применю их на практике в ближайшее время.

Shumer комментирует...

Хорошее подробное описание, хоть подобным и не занимаюсь, но было интересно, даже захотелось пересоздать. Спасибо