3d coat gl или dx в чем разница
Сравнение OpenGL и Direct3D
Очень часто встречаются различные заблуждения по поводу этих двух API.
Я попытался изложить в этой статье основные факты, которые следует знать как разработчикам, так и конечным пользователям.
Так как тема очень холиварная, я старался придерживаться максимально нейтрального тона.
Взгляд с высоты птичьего полёта
Оба API предоставляют доступ к функциям аппаратного ускорения 3D-графики.
Direct3D — проприетарная разработка Microsoft, созданная специально для Windows. В настоящее время используется так же и на Microsoft Xbox. На других платформах недоступен (если не брать в учёт эмуляцию API, предоставляемую Wine, а также виртуализацию).
OpenGL — открытый стандарт, разрабатываемый некоммерческой организацией Khronos Group при участии сообщества. Все крупные производители GPU (nVidia, AMD, Intel), так или иначе, влияли на OpenGL. В отличие от Direct3D, доступен на очень большом количестве платформ. В частности, OpenGL является основным API для взаимодействия с GPU в Linux и Mac OS.
«Внешние» технические различия API
Direct3D основан на технологии COM. COM — это, по сути, стандарт бинарного представления компонентов. Как известно, классы на чистом C++ не могут быть использованы из других языков программирования, так как они не имеют стандартизованного бинарного представления. В частности, каждый компилятор использует свой собственный метод декорирования имён. COM же позволяет работать с объектно-ориентированной концепцией из любого языка, его поддерживающего. COM — это тоже Windows-specific технология (использует такие специфичные для Windows вещи, как реестр).
В приложении на Direct3D используются указатели на интерфейсы объектов. Работа с объектом осуществляется путём вызова методов его интерфейса. Например, интерфейс так называемого device-а (device в Direct3D — это контекст выполнения для конкретного окна), имеет название (примеры для Direct3D 9) IDirect3DDevice9, для объекта текстуры — IDirect3DTexture9, и т.д. Создание объектов происходит как вызовы методов интерфейса IDirect3DDevice9, например, для текстуры это будет IDirect3DDevice9::CreateTexture.
В Direct3D 10 произошло значительное количество изменений. Direct3D 10 не является обратно совместимым с Direct3D 9. Т.е. чтобы перенести программу на новый API потребуется переписать весь код, относящийся к рендерингу. Подробнее о Direct3D 10 ниже.
OpenGL использует обычные функции языка C. Для них существует стандартизированный ABI, а это значит, что OpenGL может быть использован из любого языка, который поддерживает вызов функций native библиотек (т.е., практически говоря, из любого вообще).
В OpenGL используется так называемая машина состояний (конечный автомат). Результат вызовов функций OpenGL зависит от внутреннего состояния, и может изменять его. В OpenGL, чтобы получить доступ к конкретному объекту (например, текстуре), нужно сначала выбрать его в качестве текущего функцией glBindTexture, а затем уже можно влиять на объект, например, задание содержимого текстуры осуществляется вызовом glTexImage2D.
Аналогом концепции device-а в Direct3D здесь является контекст. Контекст OpenGL привязан к конкретному окну, так же, как и device в Direct3D.
Общим для двух API является то, что обе не предоставляют чего либо за пределами работы с графикой. А именно, нет функций ни для создания окна, ни для работы с вводом с клавиатуры/мыши, ни для работы со звуком (здесь я не затрагиваю другие части DirectX, такие как DirectInput и DirectSound). Т.е. они не являются библиотеками высокого уровня.
В самой упрощённой форме можно сказать так: OpenGL и Direct3D позволяют рисовать треугольники. И всё. Суть в том, что треугольники можно рисовать очень по-разному (текстуры, освещение, преобразования, и т.д.).
Самое важное различие
Имя ему — расширения (extensions).
Direct3D по сути фиксирован в пределах одной мажорной версии. Какие-либо изменения/дополнения происходят только при выпуске следующей версии.
В OpenGL реально доступное API определяется производителем GPU. Реализация OpenGL позволяет определять расширения к основной спецификации. Приложение может получить список поддерживаемых расширений во время выполнения, и проверить на доступность те, которые оно желает использовать.
На самом деле практически весь функционал OpenGL — это расширения. Развитие OpenGL идёт так: появляется новая фишка, производитель реализовывает её в своём драйвере и документирует доступное расширение. Приложения могут использовать новые функции прямо сейчас, не дожидаясь включения в официальную спецификацию. Если это расширение специфично для конкретного производителя, то в названии оно несёт его имя (например, вот так: GL_NV_point_sprite, где NV — значит nVidia). Если расширение реализовано многими вендорами, то в названии используется EXT (например, GL_EXT_draw_range_elements).
Со временем, если расширение широко используется, оно стандартизируется в ARB, и после этого содержит в имени ARB (например, GL_ARB_vertex_buffer_object). Такое расширение имеет официальный статус.
Самые важные расширения со временем становятся частью основной спецификации. Каждая новая версия OpenGL — это по сути старая версия+несколько новых интегрированных расширений. При этом новые функции продолжают быть доступными как расширения. Т.е. на самом деле с точки зрения программы может быть вообще всё равно, какая версия OpenGL. Главное — какие доступны расширения. Версия OpenGL — это просто способ указать, какой набор расширений гарантированно поддерживается.
Что нового в Direct3D 10/11 и OpenGL 3.x
Microsoft сделали радикальную переработку API в Direct3D 10. Сейчас оно имеет более унифицированный и современный вид. Были выброшены некоторые устаревшие вещи, такие как fixed function rendering (без использования шейдеров). Ещё был выполнен переход к новой модели работы драйвера. В частности, реализация Direct3D теперь может иметь не только kernel-space часть, а и user-space. Это позволяет экономить время на переключения user-space/kernel-space. Однако, из-за новой модели драйвера, Direct3D 10 и выше недоступен на Windows XP. Учитывая всё ещё большую популярность Windows XP, это довольно грустно.
Реализация OpenGL изначально была разделена на user-space и kernel-space части, так что там такой проблемы и не было. Ещё различие в том, что до сих пор не вносилось изменений в OpenGL API, которые не были бы обратно совместимы. Каждое нововведение — это расширение.
Функционал, появившийся в Direct3D 10, например, геометрические шейдеры, доступен в OpenGL на любой платформе через расширение, или, начиная с OpenGL 3.2, как часть основной спецификации. Стоит особо подчеркнуть, это важно, функционал Direct3D 10/11 доступен в OpenGL на любой платформе, в том числе и Windows XP. Таким образом у многих сложилось впечатление, что Direct3D 10 не доступен на Windows XP исключительно по политическим причинам, а не из-за каких-то реальных технических проблем. Впрочем, я не могу судить здесь, сохраняя нейтральный тон, о том, были ли действительно такие проблемы при введении новой модели видео-драйверов.
Теперь о нововведениях в OpenGL 3.x. Начиная с OpenGL 3.0 появилась так называемая deprecation model. Часть старой функциональности, относящаяся к fixed function rendering, а также к рендерингу, основанному на glBegin/glEnd, и многие другие устаревшие и неактуальные вещи, были объявлены как deprecated, и были впоследствии удалены из основной спецификации OpenGL 3.1. Это позволяет сохранять основную спецификацию в актуальной и современной форме.
Казалось бы, это должно сломать совместимость со старыми программами. Ведь раньше, когда программа создавала контекст OpenGL, она просто получала контекст версии максимально доступной. Это было ОК, т.к. новые версии всегда являлись надстройками над предыдущими. Чтобы избежать нарушений совместимости, программы, которые хотят получить контект OpenGL 3.x должны использовать новый метод создания контекста, который позволяет указать, какую именно версию OpenGL нужно получить.
Но, как следует из того, что уже было написано раньше про расширения, и это важно, функционал OpenGL 3.x можно получить через расширения, не создавая контекст новым методом. Т.е. OpenGL 1.1 + расширения = OpenGL 3.2! Таким образом, сохраняется полная обратная совместимость. Например, геометрические шейдеры — это расширение GL_ARB_geometry_shader4.
Распространённые заблуждения
OpenGL отстаёт от Direct3D, и вообще, судя по таким вялым изменениям в спецификации, наверное уже совсем мёртв.
Собственно, причина такого заблуждения — это незнание о расширениях. Вообще говоря, OpenGL может и часто опережает (!) Direct3D в плане инноваций, т.к. производитель может добавить расширение к OpenGL, не дожидаясь никого, в то время как в Direct3D изменения может внести только Microsoft.
OpenGL — это для программ профессиональной графики, а Direct3D — это для игр.
Это заблуждение имеет историческую причину. OpenGL исходно разрабатывался как библиотека 3D графики, которая МОЖЕТ, но НЕ ОБЯЗАНА ускоряться аппаратно. Это также объясняет наличие некоторых функций, например рендеринг стерео-изображений, которые не нужны играм. Direct3D же разрабатывался гораздо позже, сразу с расчётом на ускорение на GPU. В момент появления многих пакетов профессиональной работы с графикой Direct3D просто не было.
Интересные нюансы
Microsoft поставляет вместе с Windows драйверы без поддержки OpenGL. OpenGL будет рендерить без ускорения, или эмулироваться через DirectX. Так что, если нужна поддержка OpenGL под Windows, нужно ставить драйвер с сайта производителя. Причины для такого неприятия OpenGL, скорее всего, опять чисто политические.
Так что же делать, как жить?
Примечание: А вот эта часть носит весьма субъективный характер.
Если Вы — разработчик, и решаете, какое API использовать, то задумайтесь над следующим:
За OpenGL — массовая кроссплатформенность, в частности, доступность всех новых функций и на Windows XP, где Direct3D 10/11 нет, и никогда не будет.
Против OpenGL — драйвера в Windows из коробки не имеют поддержки OpenGL, так что ставить их нужно с сайта производителя.
Если Вы — новичок в разработке 3D-приложений, и желаете освоить эту область, то я бы рекомендовал сделать так: сначала разобраться с Direct3D (причина тому проста — Microsoft предоставляет очень качественный SDK), а затем разобраться с OpenGL (это будет очень просто после Direct3D). К сожалению, такой вещи, как SDK, для OpenGL нет. Поэтому осваивать с нуля будет сложнее.
А в чём ты моделишь? Статья для новичков, которая может помочь определиться с софтом.
Компьютерная графика, то направление искусства, которому почти нигде не учат на территории стран СНГ, поэтому новичок, решивший овладеть навыком 3D моделирования, вынужден искать информацию из сети. Главной проблемой становится отсутствие структурированного материала на русском языке, а обширное количество программ только больше сбивают с толку.
Эта статья будет полезна только новичкам, в ней я хочу поделиться своим опытом использования программ 3D моделирования и поверхностно, но структурировано, рассказать о том, какие они бывают.
Часть 1. Поиск референсов (вспомогательное изображение: рисунок или фотография, которые художник или дизайнер изучает перед работой, чтобы точнее передать детали, получить дополнительную информацию, идеи.)
Любой пайплайн (конвейер разработки 3D модели) начинается с идеи и подбора референсов. Начиная свой путь моделирования, я часто пренебрегал их поиском или использовал недостаточное количество, что приводило к низкому качеству конечной работы.
Пожалуй, лучшей программой для хранения и быстрого доступа к своим изображениям будет бесплатная pureref. Данный софт позволяет загружать в него неограниченное количество изображений и иметь быстрый доступ к ним.
Часть 2. Софт для 3D моделирования
С референсами мы определились, но в чем же мы буде моделировать?
Программ для 3D моделирования большое количество но все их можно поделить на три условные группы:
1. Программы для полигонального моделирования
2. Программы CAD использующие нурбсовые математические формулы
3. Программы для скульптинга
Полигональное моделирование.
В полигональном моделировании объекты строятся при помощи полигонов, которые задаются несколькими вершинами.
Выделим несколько самых популярных программ:
1. Autodesk 3dsMax — профессиональное программное обеспечение для 3D-моделирования, анимации и визуализации при создании игр и проектировании.
В основном используют для визуализации интерьера и архитектуры
Как и большинство программ Autodesk является платной.
2. Autodesk Maya — редактор трёхмерной графики, обладает широкой функциональностью 3D-анимации,
моделирования и визуализации.
На данный момент является стандартом геймдева, большинство студий работает именно в ней. Как и 3D Max является платной
3. Cinema 4D является универсальной комплексной программой для создания и редактирования двух- и трехмерных эффектов и объектов.
4. Blender — профессиональное свободное и открытое программное обеспечение для создания трёхмерной компьютерной графики, включающее в себя средства моделирования, скульптинга, анимации, симуляции, рендеринга, постобработки и монтажа видео со звуком, компоновки с помощью «узлов», а также создания 2D-анимаций.
Программа, с которой и начался мой путь.
Довольно дружелюбный софт для новичка, обладающий высокой стабильностью и весьма широким функционалом
И самое вкусное то, что программа абсолютно бесплатная и доступна в Стиме.
Это самые распространённые, но далеко не все программы полигонального моделирования.
Какую же программу стоит выбрать?
Если ваша главная цель добиться успеха в геймдеве, то без сомнения ваш выбор это MAYA, главный котируемый пакет большинства студий.
Если вы не хотите платить за софт и быстро освоить моделирование то ваш выбор это Blender, к тому же, просматривая вакансии на территории России, многие студии всё чаще начинают работать с блендером.
CAD моделирование
CAD программы используют математические формулы для задания геометрии.
Их главным плюсом является отсутствие полигональной сетки, что даёт возможность не волноваться о топологии (это то, как полигоны формируют 3D модель) во время процесса моделирования.
Изначально эти программы предназначены для использования промышленными станками и 3D принтерами, но и в игровой индустрии им удалось обрести славу.
Выделим наиболее подходящие из них для наших задач.
1. Fusion 360
Это программа CAD моделирования от Autodesk.
Ее главными плюсами для меня стало:
-наличие слайдеров для выставления высот, фасок и т.п
-бесплатная версия для не коммерческого использования
-наличие истории проделанных операций.
Минусом является:
-не высокая стабильность работы
-высокое требование к железу компьютера.
2. MoI3D (Moment of Inspiration)
Программа, использующая нурбсовые математические формулы для задания форм и поверхностей.
Главными ее достоинствами является:
-высокая стабильность
-невысокие системные требования
-полная адаптация для графического планшета
-возможность экспорта high poly (модели с плотной высокополигональной сеткой) модели.
Недостатки:
-отсутствие слайдеров для регулирования фасок
-высокая стоимость софта
На данный момент я использую в качестве основного инструмента Fusion 360, но со временем планирую изучить и Moi3D
Для геймдева CAD программы используют относительно недавно, но тем неимение они являются очень полезным софтом для изготовления hard-surface (твердотельных, не органических) моделей и легки в освоении. За два часа вполне возможно выучить базовый функционал Fusion360 и сделать свою первую модель.
Скульптинг
Манипуляции с объектом осуществляются за счёт передвижения вершин, на высокополигональном меше (совокупность вершин, рёбер и полигонов, которые составляют один 3D объект), или вокселей (элемент объёмного изображения, содержащий значение элемента растра в трёхмерном пространстве).
Выделю три программы для скульптинга:
1. Blender
Да, в бесплатном блендере по мимо полигонального моделирования есть еще огромная гора всевозможного функционала, в его чилсе и скульптинг.
Плюсы:
— одна программа совмещает в себе большой функционал
-относительно интуитивный интерфейс
Минусы:
-Ограниченный набор инструментов
-Невысокая производительность ( в программах-конкурентах можно использовать мэши с намного более плотной полигональной сеткой)
Хоть блендер и не позиционирует себя как софт для профессионального скульптинга, но это не мешает людем делать в нем шедевры, как пример работа Pablo Dobarro.
2. Zbrush
Программа для 3D моделирования, созданная компанией Pixologic. Отличительной особенностью данного ПО является имитация процесса «лепки» трёхмерной скульптуры, усиленного движком трёхмерного рендеринга в реальном времени, что существенно упрощает процедуру создания требуемого трёхмерного объекта.
Мастодонт игровой индустрии. Именно «зеброй» пользуются почти все игровые девелоперы при создании персонажей или органических объектов.
Плюсы:
-Высокая производительность при скульптинге
-Наличие истории и возможность переключаться между ней
-Огромное количество кистей и их вариаций
-Наличие невероятно мощного функционала, позволяющего упростить моделирование high poly моделей. Например наличие функции polish, создающей фаски для запекания ( об этом дальше в статье). Возможность из high poly сделать хорошую low poly (низкополигональную) модель
-Наличие других встроенных плагинов.
Минусы:
-Тяжелая программа для освоения новичку.
-Не интуитивный интерфейс
-Высокая цена
3. 3D Coat
Коммерческая компьютерная программа для моделирования различных органических объектов и грубых низкополигональных 3D-моделей; предоставляет широкий набор инструментов, которые позволяют пользователям создавать скульптуры, добавляя топологию, создавать UV-карты, интерактивно текстурировать поверхность модели, производить визуализацию статичных сцен и круговую анимацию модели.
Во время скульптинга программа использует не полигоны, а воксели, что делает геометрию не полой внутри.
С 3D Coat я мало знаком, но некоторые его достоинства и недостатки выделить попытаюсь.
Плюсы:
-Программа подойдёт для быстрого создания концепта
-Дружелюбный к новичкам интерфейс
-Широкий функционал по мимо скульпта
-Наличие уникальных возможностей
-Неплохие возможности текстурирования
Минусы:
-Высокая цена
Если вы настроены всерьёз овладеть скульптингом, я бы посоветовал выучить ZBrush, все его недостатки полностью нивелируются огромным функционалом и вариативностью.
Часть 3. Развёртка и запекание
Правильно развернуть модель это целая наука, но об этом не в нашей статье.
Программы для полигонального моделирования обладают достаточно хорошим функционалом для разворачивания меший, но есть и отдельный софт для этого с более обширным функционалом.
Рассмотрим здесь программу rizomuv, специально разработанную для этих целей.
На ютуб канале videosmile есть неплохой мини курс по этой программе, советую к ознакомлению.
Самой главной и, пожалуй, решающей, для меня, функцией стала возможность удобной упаковки развёртки.
А минус в том, что она платная.
Мы развернули low poly, что теперь?
Теперь необходимо перепечь на него информацию с high poly меша, для создания карт нормалей.
Звучит странно, не так ли? Но обо всем по порядку.
Карты нормалей нужны для создания мнимой геометрии на низкополигональном объекте, а для их получения и производится запекание или по английские bake.
Карта нормалей — это такая текстура, которая позволяет за счет игры света эмулировать дополнительные (не существующие изначально) детали на 3d модели.
Ну как у UV развёртки, у карт normal map очень много подводных камней, которых касаться мы сейчас не будем.
На наглядном примере я вам покажу, как выглядят карты, и какой результат мы получаем.
И так на изображении мы видим три плоскости (на самом деле это кубы).
Две из них имеют одинаковые количества вершин и являются одинаковыми мешами. Какие именно?
Правильно, первый и третий! (Но стоп, как, ведь второй и третий одинаковые?!)
В этом и есть вся магия запекания карт нормалей. Мы взяли геометрию со второго высокополигонального куба и перенесли ее на первый, а результатом этой манипуляции стал наш третий объект.
А так это выглядит в режиме редактирования.
Хорошо, с теорией покончено, но где лучше запекать?
Канал Блендер Павлова очень хорошо ответил на этот вопрос.
Спойлер. В программе marmoset toolbag 4. В ней и я запекал карты для этого примера.
А вот так это выглядит наглядно
Вернёмся к тулбагу.
Плюсы:
-Настройка параметров карт нормалей.
-Печёт огромное количество разновидностей карт нормалей
-Возможность фикса багов запечки
-Программа подходит не только для запекания.
Из минусов только то, что она платная, а так прекрасный софт.
Глава 4. Текстурирование модели
В этой главе речь пойдёт о создании PBR текстур на модели.
PBR или Физически корректный рендеринг — метод компьютерной графики, который позволяет отображать объекты более достоверно, моделируя поток света в реальном мире.
Конечно затекстурить модель можно и в Blender и в Maya, но мы рассмотрим специализированный для этого софт.
Начнём мы с бесплатной программы от разработчиков Unreal Engine.
Quixel mixer. Эта программа работающая с библиотекой megascans ( отсканированными реальными материалами, перенесёнными в цифровой вид )
Плюсы:
-Работа с огромной библиотекой отсканированных материалов megascans
-Свободный доступ
Минусы:
-Не особо подходит для текстурирования моделей
Вы могли подумать что программа плохая, но это не так, в ней можно делать очень реалистичные тайловые (бесшовные ) текстуры.
Вот, например текстура, которую я сделал, для старой кирпичной стены.
Ну и перейдём к моему любимчику. Программа от легендарного Adobe, стандарт игровой индустрии substance painter.
Данный софт обладает огромными возможностями по текстурированию 3D моделей, но печёт он паршиво, именно им я пользуюсь на постоянной основе.
Разберём его достоинства и недостатки.
Плюсы:
-Большое количество встроенных генераторов
-Возможность использования умных материалов, созданных другими юзерами
-Большая гибкость в настройке генераторов и фильтров
-Возможность экспортировать большое количество различных карт нормалей.
-Банально, но невысокая стоимость стиме.
-Совместимость (мост) с фотошопом
-Ну и просто интуитивно понятная программа.
Минусы:
-Сабстенс требовательный, очень требовательный. Для работы с большим количеством текстурных сетов вам нужен не слабый такой компьютер, желательно с 32 гб ОЗУ и больше.
P.S. Пока открывал проект, чтобы сделать скриншот, эта зараза успела зависнуть три раза.
Глочёк для мастерской контры ( кстати, движок Source не работает с pbr текстурами, по крайней мере со скинами, и тут только карта нормали)
Ладно, победитель очевиден, Substance Painter лидирует по всем параметрам. Но главное при текстурировании уделять большое внимание референсам и помните: никогда не используйте бездумно генераторы, если вы сделали поцарапанный корпус того же пистолета, не ленитесь ручками почитсить места где царапин физически быть не может.
Теперь мы экспортируем текстурки и наша модель полностью готова. Поздравляю!
Не забудьте правильно презентовать свою работу. Хорошо отрендерите ее ( для презентации работы проще всего использовать Marmoset ) и довести до идеала в Photoshop.
Ну что ж, мой дорогой друг, спасибо за прочтение. Буду рад любому фитбеку и пожеланиям, так же жду конструктивной критики и советов.
От себя хочу добавить, что работа 3D художника это очень тяжкий и недооценённый, незнающими людьми, труд и мне хотелось бы, чтобы у тебя, читатель, все получилось в нашей нелёгкой деятельности.
3d coat или Zbrush
Решил все же спросить у профессионалов: что же выбрать? 3D coat или Zbrush? Особенно после последнего обновления первого.
Я слышал, что на 3d coat намного легче скульптить гладкие поверхности, чем на зебре. Это правда?
И можете перечислить плюсы и минусы этих двух программ? Если можно.
Если в серьезку хардсерф-то в кад программы и полигональное моделирование. Если ты про накидать концепт,определиться с формами и обьемами,то лучше разбирайся в Браше-для меня там ебанутый UI,но в плане лепки это уже устоявшийся стандарт-для работы в больший галерах Браш потребуется 100процентно. В защиту Коату скажу,что лепка в нем неплоха и есть некоторые свои эксклюзивные штуки+он интуитивней дружелюбней к освоению, так же ретоп в коате прям топовый,и если сильно хочется в коате можно сделать чуть ли не весь пайплайн-заскульптил,ретопнул,размапил,запек,затекстурил. В плане текстуринга если это хэндпейнтинг(стилизация) коату нет равных. Да и для пбр иногда пользуюсь коатом-рисование сплайнами,проекция видов через фотошоп и тд, но как в любом софте есть свои нюансы. Пока в индустрии не придумали тот Священный Грааль который будет повелевать всеми. Так что мысль осваивать оба верна! Удачи.
Кстати об текстуринге: в 3d coat инструменты текстуринга сильно отстают от инструментов substance painter?
В чем то он тотально отстает,в коате иной подход к текстурингу,нет привычных масок,якорей и тд. Ноесть инструментарий(уже лет 10) которого в пейнтере даже близко нет до сих пор
Давно напрашивается достойный конкурент сабстенсу в плане текстуринга. Он квиксель с своим Миксером зашевелился,А теперь Коат восстал из пепла)
Ну если хард сурфейс надо, то действительно неплохой выбор
Да, я эту программу использую, но хочется обновить инструменты скульптинга.
Зебраш это биоорганика. Корни, живые существа, все как в живой лепке.
Можно ли в нем делать технику? Вполне. Особенно «органический дизайн».
3д коат чаще используют в киноиндустрии, где нужно тяп ляп быстро создать модель, покрасить и поместить на задник. Или в рисовании, где тяп ляп, закинул в кейшот отрендерил и в фотошоп.