Имитация цветного карандаша

Здравствуйте!

В этом уроке мы создадим материал, имитирующий карандашный рисунок с помощью стандартных средств 3dsmax и Mental Ray. По ряду причин мы НЕ будем использовать Ink’ n’ Paint-шэйдер (этот момент я проясню в ходе урока). В первой части урока мы создадим материал для модели, во второй – для поверхности, на которую наша модель будет отбрасывать тень.

В итоге получатся довольно мудреные материалы, поэтому, читайте внимательно, что бы ничего не упустить. Кроме того, я не буду объяснять элементарные операции (иначе и так не маленький урок станет ну совсем неприлично большим), полагая, что читатель владеет хотя бы начальными знания 3dsmax и его интерфейса.

Часть первая.

Итак – поехали.

Загрузите прилагаемую сцену. Она содержит модель девушки, источник света и плоскость.

Сцена создана в 8-м 3dsmax, так что, если у вас версия ниже – ничего не поделаешь - Сreate -> Standard Primitives -> Teapot. Радиус – 20. Осветите его одним спотом (измените у него параметры – см. рис.). И создайте Plane произвольного размера.

ОБЯЗАТЕЛЬНО проверьте цвет фона – он должен быть белым (Rendering -> Environment -> Background Color). Это важно.

Открываем Material Editor. Сейчас всем объектам назначен материал - Default Grey. Выделите объект “model” и назначьте ему новый материал. Назовите его Cartoon.

Прежде чем приступить непосредственно к работе в редакторе материалов, нам необходимо создать текстуру штриха. Для этого воспользуемся Photoshop-ом.

Итак, в PS создадим новый файл размером 600х600 пикселей (цвет фона - белый). Последовательно применим к слою Noise, Gaussian Blur и Motion Blur.



Немного подкорректируем результат.

Имеем примерно такое

По краям, штрихи выпадают из общего ряда. Нужно от них избавиться и сделать нашу текстуру бесшовной. Для этого рисуем квадратное выделение (его края показаны на рис.) и делаем Crop. После этого применяем эффект Offset (Filters -> Other -> Offset)


Теперь с помощью инструмента Stamp избавляемся от швов. В конце процесса, для проверки результата, повторяем Offset. Если вы вновь видите швы – повторяете клонирование штампом и снова - Offset. В итоге имеем бесшовную текстуру штриха.

Сохраните ее в каталоге со сценой под именем “Pencil_texture”. Готовая текстура лежит тут. Photoshop нам больше не понадобиться.

Возвращаемся в редактор материалов 3dsmax. В Material Editor-e выбираем наш материал (“Cartoon”). Поставим галку рядом с 2-sided, а параметр Self Illumination накрутим до 100.

Для Diffuse-канала выбираем карту Gradient Ramp, переименовываем ее в “b/w colors” и настраиваем по рисунку.

Цвета градиента – серые. Тип спада – Lighting - работает, так же как и карта Falloff в режиме Shadow/Light. Но тут мы можем настраивать цвета и их количество намного проще. Отрендерим.

Мы создали мягкий переход между тремя градациями серого.

Теперь преобразуем наш градиент в карту RGB-Tint (саму карту “b/w colors”, естественно оставим (Keep Old Map as Sub-Map)). Переименовываем полученное в “Tint b/w colors”

R-цвет подберите под цвет кожи, остальные – черный. Теперь, чтобы поменять общий тон карты, нам не нужно мучиться с персональной настройкой каждого из цветов градиента.

Далее преобразовываем “Tint b/w colors” в Falloff-карту и переименовываем в “Color Tones”. Настраиваем


Белый цвет меняем на тот же, что и в карте RGB-Tint.

Примечание. Сейчас белый цвет влияет на общую гамму. Это влияние можно исключить. Для этого нужно лишь опустить вторую справа точку кривой до предела вниз. Но тогда будет немного сложно настраивать белый блик, т.к. чтобы он не был слишком крупным, придется сдвинуть все средние точки кривой вправо, почти до конца.

Зачем все это? Объясню. RGB-Tint “оттеняет” наш градиент в заданный нами цвет, но если нам вдруг понадобится чисто белый блик на поверхности – мы не сможем его получить. Даже если у градиента самый правый цвет будет белым, RGB-Tint затенит его. Falloff-карта решает эту проблему. Если нужен белый блик – делаем второй цвет белым, если нет – любым другим (как мы и поступили).

Все, карта цвета готова. Добавим штрихи.

Преобразуем нашу Falloff-карту в Mix. Переименуем в “Base Shd”. Mix Amount установим пока в 100. Для второго цвета выбираем Bitmap и там – наш файл со штриховкой (“pencil_texture”). Переименовываем – “strokes /”. Настраиваем



Преобразуем “strokes /” в Composite. Копируем битмап с первого слота на второй (вариант - Copy). Переименовываем в

“strokes \”. Изменяем угол W и еще некоторые настройки


Получилась перекрестная штриховка.

Теперь создадим для “strokes \” маску, что бы обратная штриховка проступала не везде, а выборочно. Преобразовываем ее в Mask. В качестве маски выбираем Gradient Ramp. Переименовываем в “\ mask” и настраиваем



Штриховка готова. Теперь нужно ее совместить с нашей картой цвета. Выбираемся наверх, на уровень Mix-карты “Base Shd” и щелкаем на пустом слоте рядом с Mix Amount. Выбираем Gradient Ramp. Переименовываем – “Main Mask”. Настраиваем так

Такие настройки создают “вытянутый” шум в области тени (там будет проявляться наша штриховка). Кроме того, угол этого шума совпадает с углом падения основных штрихов. Два правых цвета градиента – черный. Два левых (выделенных красным) – наша текстура штриховки.

Щелкаете ПКМ на маркере крайнего левого цвета, выбираете Edit Properties и там – Texture – Bitmap… и наш файл с текстурой. Переименуем битмап в “lines output” и настроим

Благодаря этой карте, маска приобретет еще большую хаотичность.

Скопируйте ее в любой свободный слот и затем скопируйте ее в качестве Instance на ВТОРОЙ справа маркер градиента.

Рендерим

Теперь добавим внутренних контуров.

Преобразуем Mix-карту (“Base Shd”) в Composite и переименуем результат в “ colors & strokes ”. Для второй карты выберем Gradient Map, который переименуем в “inner outline” и настроим



Обязательно нужно установить галку “Alpha from RGB Intensity” иначе результат наложения двух карт будет некорректным.

Эта карта создает два контура. Регулируя положение шести внутренних маркеров, мы можем “двигать” эти контуры по модели.

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

Преобразуйте “inner outline” в Mask-карту и скопируйте ее в слот Mask. Переименуйте в “inner mask” и настройте



Действие маски хорошо видно на рисунке. Внутренний контур теперь не однороден.

Теперь нужно сделать контур темным. Для этого преобразуем полученный результат в карту RGB-Multiply и поменяем всего одну настройку – второй цвет. С белого на черный.

Мы проделали больше половины работы. Надеюсь, вы еще не устали? J

Продолжим.

Полученная Composite-карта, это наш основной материал. Добавим еще один штрих – легкие контуры на краях модели. Для этого преобразуем нашу “colors & strokes” в еще одну Mix-карту. Установим Mix Amount в 100. Для второй карты выбираем Gradient Ramp и переименовываем в “outline (contour)”. Настраиваем


Тут все просто. Тип спада – Normal, создает черный цвет на краях (т.е. тот же Falloff в режиме Fresnel или Perpendicular/Parallel). Теперь нам нужно смешать основной цвет с этим. Для этого подымаемся на уровень выше (наша Mix-карта) и копируем “outline (contour)” на слот маски. Выбираем способ Instance. Теперь очень легко контролировать и положение, и прозрачность контура (поскольку и сам контур и маска – одна карта). Но если сейчас просчитать картинку результат будет некорректным

Нам необходимо инвертировать маску, но если сделать это непосредственно в градиент-карте маски, то соответственно, инвертируется и сам контур (карта-то, одна). Поэтому применим маленькую хитрость. Преобразовываем маску в

Output–карту и настраиваем

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

Примечание. Это очень удобно – советую принять этот простой прием на вооружение, т.к. порой он может очень сильно упростить работу и облегчить контроль над материалами.

Да, Output Amount увеличена до 2-х, дабы контуры не были слишком темными.

Что ж, поздравляю! Основной цвет создан.

Но это далеко не все J . Наберитесь терпения – впереди еще много интересного.

Я хочу добавить в материал фактический контур, т.к. тот, что мы создали только что – немного не то. Он будет хорошим дополнением к контуру, но заменить его не способен. Если вы покрутите модель и просчитаете несколько видов – вы увидите, о чем я говорю.

Передо мной стоял выбор – Ink’n’Paint или Mental Ray. После ряда экспериментов я остановился на первом. НО. Скоро я натолкнулся на пару подводных камней. Первый – размер контура. При удалении камеры от модели, Ink’n’Paint outline не меняет размера => для крупных планов необходимо настраивать одну ширину контура, для общих – другую.

Контуры чайника имеют одинаковые параметры и слева и справа. Но правый отрендерен с далекой точки – и вот результат. Может быть, и есть способ заставить контуры вести себя адекватно – я не стал разбираться, потому что натолкнулся на второй подводный камень, связанный с тенью на поверхности Plane-а, о чем мы поговорим ниже.

В общем, выбор был сделан – Mental Ray Contour. Займемся.

Устанавливаем в качестве основного рендера – MR. Включаем контуры (Renderer -> Camera Effects -> Contours). Переносим оттуда в редактор материалов карту Contour Contrast Function Levels (вариант - Instance). Меняем одну настройку

Грубо говоря, она отвечает за “кол-во контуров” на объекте. Проиллюстрирую

Слева, Angle Step Threshold - 20, справа – 10. Я хотел добиться бОльшего кол-ва контуров, потому уменьшил этот параметр. А вообще, многое зависит от конкретной геометрии. Поэтому в случае другой модели, этот параметр, возможно, придется установить другим.

Но, к делу. Создадим контур. Выделите свой материал, спуститесь в свиток mental ray Connection и щелкните на слоте Contour. Выберите Depth Fade, переименуйте в “mr_contour” и настройте примерно так

Цвета сделайте одинаковыми и установите значение value ~0,2-0,3. Проверяем

Вблизи контур имеет ширину 0,13. При удалении камеры от объекта, контур стремится к величине 0,01. Степень уменьшения ширины зависит от параметра Far Z. При достижении камерой порогового значения (500), контур просто перестает рисоваться (можете проверить – удалите камеру ооочень далеко и просчитайте картинку).

Примечание. Можете уменьшить этот параметр, если вас не устраивает прорисовка контура издали. Так же можете обнулить параметр Far Width. Откровенно говоря, на дальних планах контур смотрится не очень красиво.

Все. Наш материал готов. Для хорошего качества контура устанавливайте параметры Min и Max (вкладка Sampling Quality в настройках рендера) в 4 и 16, соответственно. В качестве “домашнего” задания предлагаю вам самостоятельно раскрасить остальные части модели (майка, пояс, шорты и т.д.).

Мои варианты на скорую руку

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

Часть вторая.

А именно – создание штрихованной тени на плоскости, которую (тень) будет отбрасывать наша модель. Сразу извиняюсь – подробно расписывать не буду - все действия будут аналогичны предыдущим.

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

Итак, если ваш Plane скрыт – верните его в сцену. У источника света в параметрах тени устанавливаем bias – 0.01 (если он еще не установлен).

В свободном слоте редактора материалов создайте Blend-материал. Первый слот назовите – “shadow”, второй – “color”. Сразу настроим материал “color” и забудем про него.

Установите его цвет в чистый белый, самосветимость – 100. Это все.

Первый материал (“shadow”) сделайте пока что серым и так же установите самосветимость – 100.

Теперь финт ушами. Щелкаем по слоту Mask и выбираем… Material to Shader (доступен, только когда в качестве рендера стоит MR). Щелкаем по слоту NONE и выбираем… Matte/Shadow.

Примечание. Мы только что создали крайне любопытный материал. Как вы понимаете, стандартно в 3dsmax такое невозможно, т.к. в качестве маски для Blend-материала может выступать только карта, но не материал. А среди карт нет ничего подходящего. Эксперименты с картами Falloff и Gradient Map давали похожий результат (однажды даже удалось создать такую “адскую” смесь, которая делала тоже, что и Matte/Shadow – т.е. делала альфа-канал в области тени). Но результат сильно зависел от положения камеры и ИС, давал артефакты, и в итоге эта схема была отвергнута.

Теперь мы можем делать с нашей тенью все что угодно. Например, закрасить штриховкой.

Заходим в материал “shadow”, меняем его цвет на чистый белый. Щелкаем по Diffuse, выбираем наш файл со штриховкой. Меняем тип проецирования на Screen,Tiling – 4x4. Настраиваем Mix Curve

Преобразуем битмап в карту Mask. Маской выступит Gradient Ramp. Настраиваем: проецирование – Screen, Tiling – 6x0.2, Angle W -30 (минус).

В свитке Output жмем – Invert.

Подымаемся на один уровень вверх. Переименовываем все это (карту Mask) в “STR /” и преобразовываем в Composite-карту.

Копируем “STR /” во второй слот (COPY). Переименовываем в “STR \”. Изменяем настройки битмапа

Подымаемся на один уровень вверх. Изменяем настройки маски: Tiling – 1x1, Angle W – 0. Остальное на рисунке

В свитке Output жмем – Invert.

Преобразовываем этот градиент в карту Mask. Копируем его же на слот маски. Изменяем параметры маски: Tiling – 6x0.2 , Angle W – 30 (плюс).

Invert оставляем Вкл.

Тестовый просчет

Полдела сделано.

Подымаемся на самый верх. Переименовываем нашу Composite-карту в “strokes / & \” и преобразуем ее в… Composite-карту J . Ее назовем “strokes”. Щелкаем по второму слоту, выбираем Gradient Ramp, переименовываем в “contour”, настраиваем

Преобразуем эту карту в Mask, переименовываем ее в “shadow contour”. Копируем “contour” из первого слота в слот маски. Переименовываем в “mask (clamp)”. Изменяем только то, что на рисунке

В свитке Output снимаем флажок Alpha from RGB Intensity.

Сейчас контур нашей тени белый. Нужно сделать его черным. Но в данном случае вариант с картой Output, описанный выше не подойдет, поэтому я поступил по другому. Преобразуем “shadow contour” в карту RGB-Multiply и изменим второй цвет на черный.

Просчет

Как видите, на нашей тени появился контур.

Теперь чисто опциональная процедура для упрощения последующего контроля цвета. Сейчас тень черно-белая. Если же мы захотим ее подкрасить в будущем, не лишним будет сделать следующее. Преобразуем нашу Composite-карту (“strokes”) в RGB-Tint. R: белый, G и B – черный.

И финальный штрих – все это добро преобразуем в карту Output, чтобы иметь возможность в случае чего быстро, из одного места, регулировать яркость, контраст и т.п.

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

Все. С тенью закончили. Вот мой результат (я добавил немного объектов)

Сверим карты.

В ходе урока мы создали два материала. На рисунках приведены их структуры.

(некоторые названия могут не совпадать; главное, чтобы совпадали структуры)

На этом урок завершается. Описанные в нем настройки по большей части индивидуальны. И от модели к модели они могут незначительно различаться. Лучше всего такой материал смотрится на сглаженных, искривленных поверхностях (из которых, по большей части и состоит наш повседневный мир). Поэтому экспериментируйте. Готовая сцена лежит тут . Отдельно библиотека с двумя нашими материалами - тут.

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

Василий Боднарь (Ven).

e-mail: fx_box@mail.ru

353 0 850 26
23
2006-09-20
Очень необычно, проголосовал почти по высшей
2006-09-21
Вот это направление в 3Д к рукотворности наиболее ценнО..... но Эх!.. всё-таки мёртвовато это выглядит, особенно если девушка начнёт двигатся и светотень заиграет вся 3dешность станет явной. Но так для широких мас не знакомых ещё с 3д - уже неплохо. Но до "ДЕВОЧКИ с ДЕЛЬФИНОМ" ещё далеко. А урок понравился, Дякую!
2006-09-21
Интересный и хороший урок,но не уверен,что буду им пользоваться.
2006-09-21
Для статики есть фотошоп, а так для общего развития урок неплохой.
2006-09-21
интересный урок.
2006-09-21
блин, длинный урок :)
2006-09-21
Хороший урок, честно говоря давно искал способ перевода 3Д в карандаш.
2006-09-21
А зачем? Урок конечно интересный,но.... зачем использовать трёхмерный пакет, для двадешной графики? Помоему в Фотошопе,Пейнте и иже с ними быстрее наривсовать,да и качество получше.... Если честно никогда не понимал почему люди используют 3Д софт,для того что бы в финале работа выглядела не 3Д,а полная ИМИТАЦИЯ 2Д... Еинственное что приходит на ум,так это то, что времени на создание 3д мультфильма уходит меньше,а затем его переводят в рисованный вариант.... и единственное обьяснение-экономия времени...но для статики это абсурдно....ИМХО :)
2006-09-22
Хороший урок, для анимации, особенно хороший!!!
2006-09-22
2 мульт: при желании - все возможно 2 sprite: ну, прости... :) 2 nimaz: в общем, ты сам и ответил на свой вопрос :) А если серьезно - 3d ведь нам дано не только для того, что бы бесконечные фотореалистичные чайники (машинки, паровозики, личики и т.д.) рендерить. Тем более, что у большинства выходит скорее Пласт. Массы. Мне нравится мультипликация, но рученками я рисовать не умею, к сжл. Те toon render-ы, которые я видел меня чем-либо обязательно не устраивали. А увидев 7-ю Майю стало так завидно, что решил во что бы то ни стало попробовать реализовать нечто пожее в 3dsmax (так сказать - проверка на прочность - не меня :)). Что вышло - судить тебе, читатель.
2006-09-22
Имхо, в афтерэфексе и ещё некоторых прогах это делается очень быстро, просто и самое главное качество такое, что кажется будьто по настоящему карандашом рисовали. Плагин Tinderbox например :)
2006-09-23
Daemon ты не прав. Поверь. С AE я работаю уже 6 лет. И конечно же знаю про TinderBox. Одним эффектом ты ничего не добьешься - только комбинацией. И результат все равно тебя вряд ли устроит. Тем не менее, если у тебя есть удачные примеры использования компоузеров в этой области (твои примеры) - яви народу и мы их с радостью оценим.
2006-09-25
Здарова ты не пробывал вот этот NPR1Reyes рендер ? http://www.digimation.com/software/images/npr101a_web.jpg
2006-09-25
2 Necro: "В этом уроке мы создадим материал, имитирующий карандашный рисунок с помощью стандартных средств 3dsmax и Mental Ray." А вообще, Illustrate старых версий меня не особо впечатлял. В новой, судя по твоей ссылке, понакрутили всего. И это радует :)
2006-09-25
стиль дико похож на Мангу) Колись!!! Наверно увлекаешся карандашиком в живую? ^_~
2006-09-26
вот это заморочка))))) много полезного вынес из урока, хотя сама идея провал, лучше постобработки в фотошопе ничего не придумать
2006-09-27
2 Bellord: Передо мной лежал рисунок к игре Fable. Пытался повторить стилистику именно "закрашивания". 2 jamstyle: "много полезного вынес из урока". Вива? :)
2006-09-29
Супер. Давно интересовался этим вопросом
2006-10-08
Проголосовал высшими оценками, потому что считаю эту тему сейчас очень актуальной. Даже игры сейчас пытаються сделать подобным образом, взять тот же Dragon Quest VIII для PS2. А если учесть еще растущую популярность аниме... Если бы я себе на память делал рендеры своих персонажей, я бы их делал прмерно такими!
2006-10-18
все делал как написан, но при MR контура нету, вообще ерунда получается
2006-11-13
ОБОЛДЕТЬ!!! Спосики ОГРОМНОЕ!!! Класс!!!
2007-02-18
Урок интересный... но если делать анимацию, создается ощущение изображения по д штрихованным стеклом.
2007-02-19
Для анимации наверное все же нужно сначала проанимировать текстуру штриха (сделать в шопе 3-5 вариантов и загрузить секвенцией в макс с галкой loop).
RENDER.RU