четверг, 26 июля 2012 г.

3d Art от Mellon3d

Я просматривал gamedev.ru и нашел интересную тему, автор — Mellon3d
Одна из работ мне особенно понравилась пост-напоминание как нужно делать елки :)

Общий вид:

Ветки вблизи:


Сетка очень познавательна.

Данная модель была сделана запеканием normalmap, alpha с hipoly. Отсюда хорошее качество.

вторник, 17 июля 2012 г.

Количество полигонов в моделях разных игр

Gears of War, Xbox 360, 2006
Wretch - 10,000 polygons with diffuse, specular and normal maps
Boomer - 11,000 polygons with diffuse, specular and normal maps
Marcus - 15,000 polygons with diffuse, specular and normal maps

GTA San Andreas, PS2, 2004
Characters - 2,000 polygons with 1 256×256 8bit texture
NPCs - 1,200 polygons with 1 256×128 8bit texture
Gant bridge - 16,000 polygons, includes LOD

Halflife 2, PC, 2004
Alyx Vance - 8323 polygons
Barney - 5922 polygons
Combine Soldier - 4682 polygons
Classic Headcrab - 1690 polygons
SMG - 2854 polygons (with arms)
Pistol - 2268 polygons (with arms)

Halo, Xbox, 2001
Masterchief - 2,000 polygons

Metal Gear Solid 3: Snake Eater, Gamecube, 2005 (Small mistake here, it's not on GC but PS2)
Snake - 4,000 polygons

Resident Evil 4, Gamecube, 2005
Leon - 10,000 polygons

Jak & Daxter, PS2, 2001
Jak - 4000 polygons

Jak II, PS2, 2003
Jak - 10,000 polygons*

Lost planet, X360/PC, 2007
Wayne - 12392 polygons (but finally 17765 polygons for compatibility with motion blur effect)
VS robot - 30-40,000 polygons
Background - ~500,000 polygons
Peak number of polygons per frame - ~ 3 million**

Dead Rising, X360, 2006
Peak number of polygons per frame - ~ 4 million**

The Legend of Zelda: The Wind Waker, GC, 2002
Link - 2800 polygons

The Legend of Zelda: Twilight Princess, GC/Wii, 2006
Link - 6900 polygons

Super Mario Sunshine, GC, 2002
Mario - 1500 polygons
Levels - ~ 60,000 polygons

Dead or Alive series, Xbox, 2001-2004
Character - ~10,000-15,000

Vitua Fighter 5, Arcade/PS3/X360, 2006
Character - ~40,000 with diffuse, specular and normal maps
Background - 100,000 - 300,000 polygons

Medal of Honour: Allied Assault, PC, 2002
Character - 4096 polygons

Project Gotham Racing 3, X360, 2005
Cars - 80,000-100,000 polygons (interior + exterior), damages add between 10,000 and 20,000 more polygons per car
Brooklyn Bridge - 600,000 polygons (LOD might be included)
Manhattan Bridge - 1 million polygons (LOD might be included)

Gran Turismo 5: Prologue, PS3, 2007
Cars - 200,000 polygons (probably interior + exterior)

Midnight Club, Xbox360/PS3, 2007
Cars - 100,000 polygons

Gran Turismo 3, PS2, 2001
Cars - ~2,000-4,000 polygons

Gran Turismo 4, PS2, 2004
Cars - ~2,000-5,000 polygons

Lair, PS3, 2007
Main dragon plus its rider - 150,000 polygons
16x16KM scene - 134M polygons (streamed into memory, not loaded at run time)

Deathrow, Xbox, 2002
Characters - up to 7,000 polygons - 55 bones - 1024x1024 textures on the bodies and 512x512 on the faces

Mortal Kombat Deadly Alliance, PS2/Xbox/GC, 2002
Characters - ~7,000-10,000

Mortal Kombat 4, Zeus Arcade Board, 1997
Peak number of polygons per second - 1.2 million quad patches**

Mass Effect, X360, 2007
Sheppard + armor + weapons - ~20,000-25,000 polygons

Virtua Fighter 4, Naomi 2, 2001
Jacky - 14,000 polygons

Virtua Fighter 4, PS2, 2002
Jacky - 7,000 polygons

V-Rally 3, PS2, 2002
Vehicles - 15,000-16,000 polygons (Might count multi-passes)
Stages - 500,000 polygons

Kingdom Under Fire : The Crusaders, Xbox, 2004
Main characters - 10,000 polygons
Characters - 3,000–4,000 polygons

Axel Impact/DTRacer, PS2, 2003/2005
Cars - Base mesh ~12,000 polygons (max LOD)
Volume Shadow mesh - 4,000-5,000 Vert (dynamic shadows are not stored as actual polygons, hence vertex count)
Stages - ~200k polygons

Canned Boss Game Studios game, Xbox, 2002
Cars - 25000 polygons (highest LOD) - 4 textures/poly, Base texture, Reflection map, a texture used to compute a fresnel term, Shadow map, Specular highlight (encoded in the alpha channel of the reflection map)
Backgrounds - 2 or in some cases 3 textures/poly
Peak number of polygons per second - 30M polygons**

Half-Life, PC, 1998
Zombie - 844 polygons
High Definition pack Zombie- 1700 polygons

Half-Life, Dreamcast, 2000-2001 (Canned)
Zombie - 1649 polygons

Half-Life, PS2, 2001
Zombie - 2822 (Highest LOD)

Uncharted: Drake's Fortune, PS3, 2007
Main characters - ~20,000-30,000 polygons
Drake - ~30,000 polygons
Pirates - ~12,000-15,000 polygons

Crysis, PC, 2007
Nano-suit character - 67,000 polygons (uncertain whether it's an in-game model or not)*
Characters' heads - ~2500-3000 polygons
Characters' bodies - ~5000 polygons

*Might be a cut-scene model
**No precisions whether it's actual rendered polygons or just the number of polygons sent to transform, pre Z-pass and culling.

пятница, 21 августа 2009 г.

Масштабирование персонажа вместе с бипедом.

Дано:
Персонаж ростом 0,001 метра
Бипед и скин и идеально подогнаны и настроены.

Надо:
Привести персонаж не поломав скининг и бипед к росту 1,7 метра.

Как это сделать.
Думать надо вначале, и смотреть на "юниты" ;-)

1. Выделить все сетки персонажа.
2. Сохранить таблицу весов у модификатора "Скин" в файл *.env.
3. Выключить модификтор скин. (не удалить а выключить, лампочку нажать наверху стека)
4-А. Будет совсем хорошо если pivot всех частей персонажа в одной координатной точке по всем осям = 0 0 0. Если у каждой детали pivot свой то создайте любой объект в точке 0 0 0 (pivot этого объекта должен быть в координате 0 0 0 по всем осям) и прилинкуйте к нему все детали. Далее выделите этот объект и масштабируйте его, детали будут масштабироваться вслед за ним. Потом удалите временный объект к которомц мы все это прилинковывали. (Масштабирование делайте в режиме Use pivot Point center)
4-Б. Если pivot-ы всех деталей в нулях то выделите все части сетки персонажа и масштабируйте ее до нужного размера. Поставьте рядом бокс ростом 170 см и ориентируйтесь по нему. (Масштабирование делайте в режиме Use pivot Point center)
5. Выделите все отмасштабированные детали. В понели Hierarchy сделайте Reset Scale.
6. Выделите бипед.
7. В режиме Figure Mode сделайте ему рост точно подходящий под фигуру персонажа.
8. Немного подкоректируйте положение персонажа по оси X Y если что-то не совпадает с частями скелета.
9. Выделите персонаж.
10. В модификатре "Скин" сбросьте галочку Always Deform в свитке Advance Parameters.
11. Включите модификатор "скин".
12. Загрузите сохраненную в п.2. таблицу весов.
13. Активируйте (поставьте) галочку Always Deform в свитке Advance Parameters модификтора "скин".


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

Надеюсь этот микроурок будет вам полезен.
e.ov. 3.04.2008
http://www.keyframe.ru/forum/index.php?showtopic=74

Skin vs Physique

В программе существует 2 вида скининга – physique и skin. Напомню скинингом (skinning) называется привязка тела персонажа к костной системе (biped или bones).

Я работал и с тем и с другим инструментом и хочу поделиться мнением.

Physique был разработан специально для работы с системой Biped. Это крайне капризный и весьма не удобный, в работе модификатор. Сомневаюсь, что люди которые его писали работали в индустрии анимации или имели значительный опыт работы. Основные его минусы заключаются в отсутствии удобного и продвинутого инструментария, так как этот модуль практически не изменялся со дня своего создания (ему уже больше семи лет). Для работы в нем желательно знать наизусть все имена костей в скелете вашего персонажа, поскольку иначе работа в редакторе весов (Type-In Weights) превратится в кошмар (она и без того кошмар). Еще одним жирным минусом является то, что распределять веса вертексов возможно только среди «залоченных» (Lock) вершин. Это невероятная глупость и большое неудобство. То есть если вы хотите распределить веса группы вершин между костями А, Б и С, то вам необходимо перед тем как выбрать эти вершины нажать кнопку Select, потом обозначить какие именно вершины вы будете выбирать в свитке Vertex Type, и только теперь вы можете покликать по вершинам. Вершины выбрали, теперь надо выбрать кости А, Б и С что бы указать вершинам к чему они должны быть привязаны. Для этого надо нажать кнопку Assign to link, выбрать в раскрывающемся свитке Blending Between Links, выбрать количество Линков между которыми вы будете делать блендинг, и только теперь вы можете последовательными кликами указать эти кости. Затем надо нажать кнопку Lock Assigment ( группа назначаемых вертексов должна быть выделена), после нажатия вокруг вертексов появятся квадратики. И только теперь (!!!) можно нажать Type-In Weights и выбирая в списке кости, указывать их влияние на выбранные вершины.

Оценили программерскую смекалу? Я тоже. Сколько надо всего нажать что бы сделать одно единственное простое действие.
Посчитайте по секундам сколько времени у вас займет это кликанье?! А теперь представьте себе это занятие в рамках персонажа на 1000 вершин. А если персонаж на 10000 вершин? А если этих персонажей 50 или 100? В общем, удовольствие не для слабонервных. А тоже самое в модификаторе Skin занимает 0,5 секунды.

Энвелопы. (Envelope)
Еще одна из не очень удобно реализованных функций – это энвелопы, для редактирования группы вертексов вокруг одной или нескольких костей. Размер окружности можно регулировать только из меню. То есть приходится отрывать взгляд от модели, искать мышкой этот пункт меню в котором регулировать, таскать в нем счетчик (коих три штуки, для трех состояний энвелопов (итого 9 регуляторов) и смотреть за радиусом влияния на модели. В то время как в скине мы просто кликаем по нужному вертексу энвелопа и тащим его мышкой куда надо. В добавок ко всему в Skin энвелопы можно перетаскивать, поворачивать и придавать им практически любую форму. В physique можно только менять форму.

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

Название функции: Наличие в Skin / Наличие в Physique
Mirror Envelope (bone) Да / Да (не удобно)
Mirror Vertex Да / Нет
Mirror Selection Vertex Да / Нет
Shrink Grow Ring Loop Да / Нет
Select Element Да / Нет
Env. Radius Да / Да (не удобно)
Weights Presets Да / Нет
Paint Weigts Да / Нет
Weights Table Да / Да (не удобно)
Plend Paint Weights Да / Нет
Display options Да / Нет
Save / Load Да / Да (коряво)
Remove Zero Weights Да / Нет
Reset deform Да / Нет
Bone Affect Limit Да / Нет
Full Gizmo Edit Да / Нет
Copy / Paste weights Да / Нет

Думаю комментарии излишни.

По поводу Save / Load.
Да, и там и там можно сохранять и загружать таблицы весов. Но в Physique эта функция черевычайно капризна к обстаятельствам. В Skin все работает если не идеально то близко к этому. Кроме того опций и нстроек в Skin заметно больше.

Мышцы.
Вздутие бицепсов в Physique – штатно. В Skin это делается с помощью Skin Morph.

Есть еще небольшое удобство в Skin. Если вы работаете с персонажем на котором есть несколько вариантов одежды и все они в одном сабмеше, то схайдив одну часть геометрии (на уровне сабмеша) ее ветексы так же хайдятся (hide) и не отображаются, в то время как в Physique у спрятанной геометрии вертексы видны, и мешают работать.

Вот примерно такая разница между наиболее часто используемыми функциями в модификаторах Skin и Physique. Резюме такое: если есть много свободного времени и жажда экстрима или есть к тому жесткие требования игрового движка то используйте Physique. Во всех остальных случаях я бы советовал использовать Skin.

Источник: http://www.keyframe.ru/forum/index.php?showtopic=79

среда, 29 апреля 2009 г.

Дисплейсмент в ZBrush

Дисплейсмент - зачем это нужно?
Такие карты выводят bump mapping на новый уровень. Проблема bump mapping заключается в том, что он создает неровности только по отношению к камере. В результате, профиль объекта не изменится (т.е. будет плоским). Применение карты Displacement позволяет изменять геометрию модели и получить более реалистичный эффект. К тому же, при анимации модели в других графических пакетах сложно работать с большим количеством полигонов которое является нормой для ZBrush. Карты Displacement - это ключ к решению данной проблемы. Вы анимируете низкополигональную версию модели. Во время рендера применяется карта displacement map и финальная сцена выглядит также как и при анимации высокополигональной модели. Вобщем, карты displacement позволяют работать с довольно сложными сценами и значительно увеличить эффект реалистичности с минимальной загрузкой системных ресурсов.
Как создать и применить дисплейсмент?
Разберем порядок действий на примере взаимодействия с 3DS Max+Vray. Итак, ты сделал высокодетализированную модель. При переносе ее в другой пакет (например 3DS MAX) появятся большие тормоза. Это можно решить с помощью создания карты Displacement'a. Вот порядок действий: 1. Переходим на более низкий уровень subdivision (находится в Tool-Geometry), например 3й. В меню Tool-Displacement включаем параметр adaptive & smooth UV (необязательно), но разрешение можно и увеличить (2048 или 4096). Жмем кнопку Create DispMap. 2. Сгенерированная карта переместилась в меню Alpha. Находим ее там, делаем активной (жмем на нее мышкой чтобы появился оранжевый уголок), там же жмем Export и сохраняем нашу карту. Формат для сохранения выбираем TIFF. 3. Теперь импортируем модель в 3DS Max - ставим галку single и все другие (normal я не ативизировал) и vertex scale можно 10. Конвертируем получившийся Editable mesh в Editable Poly, там в Subdivision Surface включаем Use NURMS..., количество интераций - 2 или 3 (можно на render, а не на display). 4. Применяем модификатор VrayDisplacementMod, ложим в него нашу карту, настраиваем значения Amount и Shift. Начнем с числа Alpha Depth - оно показывается в браше при выборе соотв. альфа-карты (которая и есть наша дисплейс-карта, помнишь?). Всегда надо помнить, что значение Shift в -2 раза меньше чем значение Amount (пример - Amount=5, Shift= -2.5) Рендерим, все должно получиться. Если не получается - увеличиваем значение Amount и соответственно меняем значение Shift. ИНОГДА сбрасывается МИНУС 1 в tiling по V оси ---> нужно проверить - из окна модифера тащим карту в мат едитор инстансом, если нет минуса - вбиваем его, тогда всё будет ок.
* Маленький совет: В ZB дисплейсмент делается с нулем (там где нет изменений) в сером цвете спектра, черный цвет - это вдавленная поверхность, белый - выдавленная. В Максе же за ноль берется черный цвет, а остальное - выдавливаеться, поэтому все "разбухает". Для того что бы дисплейсмент работал как следует, нужно Alpha Offset(RGB Offset) текстуры сделать отрицательным на половину Alpha Gain(RGB Level), то есть сместить ноль с черного на серый. В Максе в закладке output надо поставить, например, RGB Offset -0,5, amount 0,15.. (LeXuSMalus)
Генерация карты происходит быстрее при отключенном режиме "adaptive mode" и зависит только от степени детализации конечной модели. Более подробно здесь - http://www.pixolator.com/zbc-bin/ultimatebb.cgi?ubb=get_topic&f=4&t=001732

В чем разница ADAPTIVE и DPSUBPIX?
Режим adaptive используется при применении непропорциональных изменений геометрии модели (например при использовании кисти Pinch). Но обычно можно быстрее достичь результата с отключенным режимом adaptive. К тому же, появится возможность использовать опцию DPSubPix для виртуального увеличения количества полигонов (даже если в обычной ситуации ваша система уже не справляется с ними). Каждый уровень DPSubPix увеличивает виртуальное разрешение в 4 раза. 
Например - у нас есть модель на 1 миллион полигонов с установленным на 1 режимом DPSubPix - результат будет тот же если бы наша модель состояла из 4 миллионов полигонов, при введении значения 2 количество полигонов увеличится до 16 миллионов, при 3х - до 64 миллионов.

В другом пакете все рендерится "ступеньками".
ZBrush использует 16-битные карты, которые экспортируются из Alpha-палитры в формат TIFF. Другие форматы являются 8-битными и не имеют достаточного цветового объема для создания displacement'a высокого качества. Убедись, что твой софт поддерживает 16-битные форматы.
Как происходит процесс текстурирования в ZBrush?
Модель раскрашивается при включенном режиме RGB или более тщательно с помощью Projeсtion Master'a - кнопка "G"

воскресенье, 22 февраля 2009 г.

Укрощение строптивого рендера

Все началось оттого, что вчера я приобрел еще два гига памяти и добавил к существующим, получив в итоге четыре гигабайта оперативной памяти. Сегодня я перекапывал винт и нашел настроенную сцену от Evermotion, которую решил отрендерить. Запустив макс я загрузил сценку и начал рендер. Макс аварийно завершился (далее упал). Я взглянул на настройки VRay. Использовалась связка Light Cache + Quasi-Monte Carlo. Количество сабдивов в Light Cache - 800. Просмотрел свиток System, установил тип памяти Dynamic и лимит в 3000 Мб. Стоял Statick. Также уменьшил Max. tree depth установив значение с 60 в 24. Запустил рендер. Он упал при расчете Light Cache и при загрузке памяти ~ 1500 Мб. Я смог просчитать Light Cache только снизив сабдивы до 400.

Тогда я вспомнил про boot.ini. Дело в том что:
В 32-bit Windows:
Объем виртуального адресного пространства 4Гб, распределено:
2Гб - user mode (пользовательский режим), 2Гб
- kernel mode (режим ядра).
Т.е. приложению (процессу) доступно примерно 2ГБ виртуального адресного пространства в независимости от количества установленной физической памяти. Размер виртуальной памяти в режиме пользователя можно увеличить до 3Гб используя ключи в boot.ini.

Чем я и воспользовался, правда ключ /userva= я не использовал, у меня и так все получилось, как я и хотел. Более точное предназначение этих ключей можно узнать в гугле, я же хочу рассказать что же происходило дальше.

Подправив boot.ini таким образом что он выглядел так:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional RU" /noexecute=optin /fastdetect /usepmtime/3GB


я перезагрузился. После этого я начал рендерить и сделал несколько скриншотов. Вкратце скажу, что все получилось, я прошел этот порог в 1500 Мб на приложение и отрендерил ту картинку. Самый затратный по памяти процесс в данном случае был рассчет Light Cache.
При 800 сабдивах требовалось выделить около 1600 Мб.

На этом скриншоте идет рендер с настройками в 1500 сабдивов Light Cache (помните, даже 800 была проблема!) Обратите внимание, сколько на данном этапе потребляется памяти!


Опаньки, что творится! Достигнув определенного предела отображения в максе (см. строчку Memory Used: ) я с удивлением заметил, что там память показывается отрицательным числом, причем она увеличивается (близиться к нулю) В менеджере задач все отображается верно и на этом этапе рендера макс потребляет 2,22 Гб оперативки 


Расчет Light Cache почти закончен, но макс падает, видно окошко дебаггера за диспетчером задач. Память достигла 2,43 Гб, а виртуальная - 2,748 Гб. В принципе, виртуальное адресное простанство закончилось (не забываем про другие приложения), поэтому макс упал. Но это уже слишком загнанные настройки, я специально хотел завалить макс. Memory Used: показывает -1720 Мб. Это просто какой-то прикол =)


Кстати, вот конфигурация машины:
Intel Q6600 4x2.4 Ghz 1066 Mhz
Asus P5K-PRO p35
Kingston 2x2 Gb
Ge-Force 8600 GT

суббота, 14 февраля 2009 г.

Всем кто делает экстерьеры, посвящается

Ну немного об экстах.

Крутые настройки в экстерьерах ни к чему не приводят, кроме долгого рендера, посему больше 1000 subdivs в light cache не стоит ставить, в irradians map -4 -1 самый оптимальный вариант, настройки выше задирать довольно глупая затея, разницы не заметно.
А вот с материалами есть свои нюансы, чтоб не зернилось в матах можно и побольше subdivs воткнуть ну к примеру 25. И никогда не включайте use interpolation, рендер будет очень долгим, галку с multipass стоит тоже снять, сократите время.

Есть и еще несколько нюансов которые помогут достичь хороших результатов.

Заметил что когда в сцене много стекла, его лучше исключать из GI, что это дает??? Во первых несколько быстрее рендер, во вторых светлее интерьеры, смотрится реалистичнее немного. То есть, выбираем наше стеклышко, нажимаем правую кнопочку и в object properties выключаем cast shadows, а в vray properties выключаем visible to GI, стекло есть, отражения имеются, глюков нет, и рендерится несколько быстрее, особенно если у нас интерьеры забиты мебелью и освещены.

Освещение экстерьеров. это отдельная тема, все что вне домов, придется освещать источниками виреевскими, но все что в домах, можно для сокращения времени рендера осветить и VrayLightMTL, например залить этим материалом или пол или потолок, смотря что не видно в кадре, на время рендера, такое освещение практически не влияет, только один нюанс, при низкой irradians map, настроить его нормально не получится, может показать засвет, а через пару минут помещение будет темным, глючит при низкой irradians map, этот материал по черному.

Оригинал тут