Создание export плагина для 3d studio max


Содержание

Импорт и экспорт файлов 3ds Max

Редактор 3ds Max позволяет осуществлять Import (Импорт) и Export (Экспорт) файлов и объектов. Это дает возможность оениваться геометрическими формами с другими программами, такими как Adobe Photoshop, Adobe Illustrator, AutoCAD и т.д.

При экспортировании файлов программа преобразует сцены с расширением .max в универсальные форматы .3ds или .dwf. Так как данные форматы менее восприимчивы к преобразовию, то часть информации о сцене при преобразовании может измениться либо исчезнуть. Редактор 3ds Max 2013 предупреает об этом при преобразовании. Также он предлагает сохрить координаты текстур.

Для экспортирования файла необходимо выбрать команду Ap- plication button (Кнопка приложения) | Export (Экспорт) и в поившемся диалоговом окне Select File to Export (Выбрать экортируемый файл) выбрать директорию для сохранения, укать тип и имя файла (рис. 4.21).

Рис. 4.21. Экспортирование файла

Рис. 4.22. Импортирование файла

Для импортирования файла следует нажать кнопку приложия и выбрать команду Import (Импорт). В открывшемся диалоговом окне Select File to Import (Выбрать импортируемый файл) необходимо выбрать формат импортируемого файла и нужный файл, а затем открыть его (см. рис. 4.22). В зависимости от формата импортируемого файла 3ds Max может предложить различные варианты внесения компонентов.

В 3ds Max 2013 имеются широкие возможности импорта. Блодаря технологии Smart Data стал возможен перенос моделей из редактора Autodesk Inventor. При импорте файлов с расширении .iam и .ipt можно выбирать способ импорта (тело или сетоый объект), переносить материалы и источники света, что пволяет получать высококачественные модели без дополнителых манипуляций (рис. 4.23).

Рис. 4.23. Модель крана из Autodesk Inventor

Важной особенностью функций импорта является поддержка 3D-моделей сервиса Google SketchUp (рис. 4.24). Этот сервис пволяет бесплатно скачивать модели реальных архитектурных зданий, интерьеров помещений и отдельных предметов. Диалогое окно импорта позволяет переносить в сцену не только саму модель, но и сопутствующие текстуры (с поддержкой преобразания внешних/внутренних текстур в двухсторонние материалы 3ds Max), камеры и системы освещения (рис. 4.25).

Рис. 4.24. Страница сервиса Google SketchUp

Рис. 4.25. Модель церкви Santa Maria del Pulg в 3ds Max 2013

Еще одной важной особенностью 3ds Max является поддержка функций сохранения в формате предыдущих версии 3ds Max без потери данных сцены. Благодаря этому стал доступен поступа-

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

Источник: Харьковский, Александр Викторович, 3ds Max 2013. Лучший самоучитель / А.В. Харьковский. — изд. 4-е, доп. и перераб. — Москва: Астрель, 2013. — 480 с. — (Учебный курс).

Создание export плагина для 3d studio max

Рассматривается технологическая цепочка создания плагина 3ds Max в среде Microsoft Visual Studio с употреблением 3ds Max SDK и языка программирования C++. Также реализуется MAXScript-версия плагина. Предоставляемый материал – это лишь начальная точка на пути освоения техники разработки 3ds Max SDK-плагинов.
Плагин – это программный модуль, подключаемый к основной программе и либо реализующий часть функционала основной программы, либо расширяющий ее возможности.
Так, в 3ds Max к первой группе плагинов относятся стандартные плагины, хранящиеся в папке stdplugs и загружаемые при запуске приложения. Их список отображается в приведенном на рис. 1 диалоге Plug-in Manager (меню Customize – Plug-in Manager).

Рис. 1. Plug-in Manager

Эти плагины, их около 350, реализуют значительную часть функционала 3ds Max. Например, плагин prim.dlo обеспечивает создание стандартных примитивов, сплайнов и стандартных источников света.
Прочие, нестандартные плагины предпочтительнее размещать в других папках и загружать по мере необходимости.
3ds Max SDK (Solution Development Kit, инструментарий разработчика) имеется в профессиональной версии 3ds Max и содержит заголовочные и библиотечные файлы, обеспечивающие доступ к классам и другим данным 3ds Max. Кроме того, в поставке имеется помощник и большое число примеров.
Плагин 3ds Max может быть написан на языке MAXScript и на языке C++ с употреблением 3ds Max SDK.
В первом случае плагин создается в среде 3ds Max, а во втором – в среде Microsoft Visual Studio.
Во многих случаях MAXScript может обеспечить такой же функционал, как и SDK. Однако скорость SDK-плагинов выше.
SDK-плагин – это откомпилированный и собранный dll-файл C++ (DLL, Dynamic Linked Library, динамически подключаемая библиотека). Рекомендованное расширение файла зависит от назначения плагина. В стандартной поставке 3ds Max плагины, оперирующие материалами и их картами, имеют расширение DLT, а плагинам, создающим объекты, дается расширение DLO, плагины-модификаторы выделяются расширением DLM и так далее.
Поставка 3ds Max SDK включает помощник создания плагинов Plug-in Wizard. Он поддерживает (или планирует поддерживать) создание около 40 следующих видов плагинов (в скобках указывается стандартное расширение):

  • Anti-Aliasing Filters – фильтры, сглаживающие изображение (DLK);
  • Atmospheric – атмосферные эффекты (DLV);
  • Cameras – камеры (DLO);
  • Color Selector – выбор цвета (DLU);
  • Construction Grid Objects – создание сеточных объектов (DLO);
  • Controllers – контроллеры (управляющие элементы, DLC);
  • File Export, File Import и File List – экспорт, импорт и список файлов (DLE, DLI);
  • Global Utility Plug-Ins – глобальные утилиты (GUP);
  • Helper Objects – помощники (DLO);
  • IK Solvers – решатели инверсной кинематики (DLC);
  • Image Filter / Compositor – фильтры (редакторы) образов (FLT);
  • Image Loader / Saver – загрузка и сохранение образов (BMI);
  • Image Viewer – просмотр образов (DLF);
  • Lights – источники света (DLO);
  • Manipulators – манипуляторы (DLO);
  • Materials – материалы (DLT);
  • Modifiers – модификаторы (DLM);
  • NURBS Objects – неоднородные рациональные сплайны Безье (DLO);
  • Particle Systems / Effects – системы частиц и эффекты на основе частиц (DLO);
  • Patch Objects – патчи (кусочные объекты, DLO);
  • Procedural Objects – процедурные объекты, например стандартные примитивы (DLO);
  • Renderer – воспроизведение изображения (DLR);
  • Rendering Effects – эффекты при воспроизведении изображения (DLV);
  • Samplers – образцы (DLH);
  • Shaders – шейдеры (определяют цветовые характеристики объекта, DLB);
  • Shadow Generator – генераторы теней (DLO);
  • Skin Deformer Gizmo – контейнеры модификаторов кожи (DLM);
  • Sound Plug-ins – звуки (DLO);
  • Space Warps – пространственные деформации (DLM);
  • Textures 2D, Textures 3D – двумерные и трехмерные текстуры (DLT);
  • Track View Utility – утилиты обозревателя дорожек (DLU);
  • Utility – утилиты (DLU).

После уяснения задачи написание SDK-плагина, как правило, предполагает создание надлежащего интерфейса пользователя и реализацию намеченных процедур. Например, плагин gSphere.dlo обеспечивает приведенный на рис. 2 интерфейс и программно поддерживает соответствующую реакцию приложения на предусмотренные интерфейсом действия.

Рис. 2. Пользовательский интерфейс плагина gSphere.dlo

При разработке SDK-плагинов каждая версия 3ds Max предполагает использование соответствующей версии Microsoft Visual Studio, что отражено в следующей таблице:

Версия
3ds Max
Операционная система
(32 и 64 бит)
Совместимые версии
3ds Max SDK
Microsoft Visual C++ версия компилятора
2011 Windows 7
Windows Vista
Windows XP Pro SP2
2011, 2010 Visual C++ 9.0 (Visual Studio 2008) Service Pack 1
с установленным от 28 июля 2009 security patch
2010 Windows Vista
Windows XP Pro SP2
2010 Visual C++ 9.0 (Visual Studio 2008) Service Pack 1
2009 Windows Vista
Windows XP Pro SP2
2009 Visual C++ 8.0 (Visual Studio 2005) Service Pack 1

Постановка задачи

Порядок разработки плагина рассмотрим на следующем примере: создать плагин, формирующий примитив куб (Cube).
Такой простой объект отвечает цели работы, заключающейся в демонстрации технологической цепочки разработки SDK-плагинов.
Примитив имеет один параметр Size, для управления которым используется редактируемое поле со счетчиком (рис. 3).

Рис. 3. Интерфейс плагина Cube

Как и другие примитивы, куб вводится в сцену мышкой с прижатой левой кнопкой.

MAXScript реализация плагина


Одну и ту же задачу можно решить средствами 3ds Max SDK и MAXScript. Для иллюстрации этого положения реализуем прежде плагин создания куба на MAXScript, дав плагину имя CubeMS.

plugin simpleObject CubeMS name:»CubeMS» classID:#(145340, 543210) category:»Scripted Primitives» (
parameters main rollout:params (
size type:#worldUnits ui:size default:0
)
rollout params «Cube Size» (
spinner size «Size: » type:#worldunits range:[0, 100, 0] scale:1
)
on buildMesh do (
h = 0.5 * size
arrVrts = #([-h, -h, -h], [h, -h, -h], [-h, h, -h], [h, h, -h], \
[-h, -h, h], [h, -h, h], [-h, h, h], [h, h, h])
arrFcs = #([1, 3, 4], [4, 2, 1], [5, 6, 8], [8, 7, 5], \
[1, 2, 6], [6, 5, 1], [2, 4, 8], [8, 6, 2], \
[4, 3, 7], [7, 8, 4], [3, 1, 5], [5, 7, 3])
setMesh mesh verts:arrVrts faces:arrFcs
setFaceSmoothGroup mesh 1 2; setFaceNormal mesh 1 [0, 0, -1]
setFaceSmoothGroup mesh 2 2; setFaceNormal mesh 2 [0, 0, -1]
setFaceSmoothGroup mesh 3 4; setFaceNormal mesh 3 [0, 0, 1]
setFaceSmoothGroup mesh 4 4; setFaceNormal mesh 4 [0, 0, 1]
setFaceSmoothGroup mesh 5 8; setFaceNormal mesh 5 [0, -1, 0]
setFaceSmoothGroup mesh 6 8; setFaceNormal mesh 6 [0, -1, 0]
setFaceSmoothGroup mesh 7 16; setFaceNormal mesh 7 [1, 0, 0]
setFaceSmoothGroup mesh 8 16; setFaceNormal mesh 8 [1, 0, 0]
setFaceSmoothGroup mesh 9 32; setFaceNormal mesh 9 [0, 1, 0]
setFaceSmoothGroup mesh 10 32; setFaceNormal mesh 10 [0, 1, 0]
setFaceSmoothGroup mesh 11 64; setFaceNormal mesh 11 [-1, 0, 0]
setFaceSmoothGroup mesh 12 64; setFaceNormal mesh 12 [-1, 0, 0]
for k = 1 to 12 do setEdgeVis mesh k 3 false
)
tool create (
on mousePoint click do
case click of (
1: nodeTM.Translation = gridPoint
3: #stop
)
on mouseMove click do
case click of (
2: size = amax gridDist.X gridDist.Y
3: size = gridDist.Z
)
)
)

Программа содержит секцию (Rollout) params, обеспечивающую задание размера куба (счетчик Size). Значение счетчика связано с одноименным параметром, заданным в блоке Parameters.
Инструмент создания куба (мышка) задается блоком Tool Create. После выбора позиции (событие mousePoint с параметром click = 1) определяется часть Translation (перемещение) матрицы аффинных преобразований куба (nodeTM.Translation = gridPoint). Далее при нажатой левой кнопке мыши фиксируется ее перемещение в видовом порте; величина перемещения определяет размер куба.
После освобождения мыши сцена может принять очередной куб.
Родительским классом куба является класс SimpleObject. Класс куба имеет имя CubeMS.
Для получения идентификатора класса classID следует употребить имеющуюся в папке ..\Autodesk\3ds Max 20хх SDK\maxsdk\help программу gencid.exe (рис. 4).

Рис. 4. Генератор идентификатора класса плагина

Параметризованный куб создается обработчиком buildMesh в результате применения метода SetMesh, получающего массив arrVrts с координатами вершин примитива и массив его граней arrFcs. Размер куба определяется значением параметра Size. Сглаживающие группы и нормали куба заданы по аналогии с примитивом Box.
После копирования и запуска кода в MAXScript Editor, плагин будет доступен на вкладке Create – Geometry – Scripted Primitives (рис. 5).

Рис. 5. Вызов плагина CubeMS

Категория (Scripted Primitives) и положение элемента в командном окне определяются параметрами выражения Plugin. Так, класс SimpleObject указывает на принадлежность примитива к геометрическим объектам, понятно и назначение свойства Category.
После загрузки плагина кубом можно оперировать средствами языка MAXScript, например:

delete $*
cb = cubeMS size:40
animate on at time 100 (
cb.Size = 60
rotate cb 360 [0, 0, 1]
)
playAnimation()

Заметим, что созданный объект не имеет текстурных координат, поэтому при употреблении материала следует позаботиться о создании таких координат, например при помощи модификатора UVWmap:

delete $*
cb = cubeMS size:50
addModifier cb (UVWmap maptype:4 ui:on)
chk = checker()
chk.Coordinates.U_Tiling = chk.Coordinates.V_Tiling = 2
std = standard diffuseMap:chk showInViewport:true diffuseMapEnable:true
cb.Material = std

Настройка помощника Plug-in Wizard

Необходимые для использования помощника файлы расположены в папке MAXSDK\Howto\3DSMaxPluginWizard.
Откроем в текстовом редакторе имеющийся в этой папке файл 3dsmaxPluginWizard.vsz и определим в нем следующее значение параметра:

Param=»ABSOLUTE_PATH = C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\howto\3dsmaxPluginWizard»

То есть укажем полный путь к папке с файлами помощника. Сохраним изменения и закроем файл.
Оставаясь в этой папке, скопируем три следующие файла:

  • 3dsmaxPluginWizard.ico;
  • 3dsmaxPluginWizard.vsdir;
  • 3dsmaxPluginWizard.vsz

и вставим их в VC/vcprojects директорию установки Microsoft Visual Studio (это может быть C:\Program Files\Microsoft Visual Studio 5\VC\vcprojects).
Этого достаточно, чтобы 3ds Max Plug-in Wizard оказался доступным как шаблон в Microsoft Visual Studio.
Проверим это, запустив Visual Studio и выбрав File > New:Projects > Visual C++ > 3ds Max Plug-in Wizard (рис. 6).

Рис. 6. Создание проекта Visual C++ с помощью 3ds Max Plug-in Wizard

Порядок создания 3ds Max SDK-плагина

После разработки проекта плагина и оформления проекта, например, в виде технического задания запускается Microsoft Visual Studio, где и выполняются все последующие действия.
В проекте SDK-плагина полезно указать следующие характеристики:

Характеристика утилиты Пример значения
Имя файла cube.dlo
Идентификатор класса утилиты Class_ID(0xd667c5aa, 0xb65e9ddb)
Описание IDS_LIBDESCRIPTION «Cube»
Категория IDS_CATEGORY «SDK simple object»
Имя класса IDS_CLASS_NAME «Cube»

Интерфейс пользователя, предоставляемый плагином, сформируем в соответствии с рис. 7, добавив возможность ручного ввода (Keyboard Entry) примитива Cube.

Рис. 7. Уточненный пользовательский интерфейс плагина

При вводе посредством нажатия на кнопку Create центр куба будет размещен в начале мировой системы координат.
Создадим теперь в Microsoft Visual Studio проект C++ Win32, компиляция и сборка которого (Compile and Link) обеспечат создание запрошенного плагина.
Проект создается как многониточная библиотека (Multy-threaded DLL). Используется гибридная (Hybrid) конфигурация, пригодная и для отладки (Debugging), и для построения готового решения (Solution).

Создание нового проекта

Запустим Visual Studio и используем для создания проекта помощник 3ds Max Plug-in Wizard (см. рис. 6). В поле Name введем имя Cube, а в поле Location укажем, например, имя папки C:\sdk. Снимем флажок Create directory for solution. Нажмем на ОК и в открывшемся диалоге выберем Procedural Objects (процедурные объекты, рис. 8).

Рис. 8. Выбор вида плагина

Нажмем на Next и введем в появившемся диалоге указанные на рис. 9 значения.

Рис. 9. Детализация описания плагина Cube. В качестве базового выбран класс SimpleObject2

Нажмем на Next и в появившемся диалоге проверим наличие указанных на рис. 10 значений.


Рис. 10. Некоторые детали проекта

В поле MAXSDK path указан путь

C:\Program Files\Autodesk\3ds Max 9 SDK\maxsdk

а в поле 3dsmax.exe path указан путь

C:\Program Files\Autodesk\3ds Max 2009

Ваши значения могут быть иными.
Нажмем на кнопку Finish.

Свойства (Properties) проекта Cube

Практически все свойства проекта Cube будут установлены помощником. Наша задача просмотреть эти свойства и внести незначительные коррективы.
На вкладке Solution Explorer расположится дерево решения (рис. 11).

Рис. 11. Дерево решения Cube

Первый заголовочный файл 3dsmaxsdk_preinclude.h удален, а файл cube.h приведен к следующему виду:

#include «Max.h»
#include «resource.h»
#include «istdplug.h»
#include «iparamb2.h»
#include «iparamm2.h»
#include «Simpobj.h»
extern TCHAR *GetString(int id);
extern HINSTANCE hInstance;

Удаление файла 3dsmaxsdk_preinclude.h потребует изъятия всех #pragma message из файла cube.cpp. Такие куски кода появятся в файле, если в качестве базового класса выбрать GeomObject.
Добавим теперь в проект конфигурацию Hybrid.
Выберем в дереве проекта вершину cube (см. рис. 11), нажмем на правую кнопку мыши и в появившемся меню выберем Properties.
В открывшемся окне нажмем на кнопку Configuration Manager и в списке Active Solution Configuration добавим новый вид конфигурации Hybrid; этот же вид выберем и в нижерасположенной таблице диалога (рис. 12).

Рис. 12. Добавление конфигурации Hybrid

Далее все настройки будут выполнены для этой конфигурации.
Ветвь Configuration Properties – General после внесенных изменений будет содержать следующие сведения (рис. 13):

Рис. 13. Ветвь Configuration Properties – General

Переместимся в ветвь C++ – General. В поле Additional Include Directories проверим путь к include-директории 3ds Max SDK:

«C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\include»

В вашем случае путь может быть иным. Если путь содержит пробелы, то его нужно заключить в кавычки.
Прочие поля диалога оставим без изменений. Нажмем на кнопку Применить.
В ветви C++ – Command Line поле Additional options (дополнительные опции) вставим следующие значения:

/GR /we4706 /we4390 /we4557 /we4546 /we4545 /we4295 /we4310 /we4130 /we4611 /we4213 /we4121 /w34701 /wd4244 /wd4018

Они взяты из файла AdditionalCompilerOptions.txt, имеющегося в поставке 3ds Max SDK. Применить.
Имя выходного файла (создаваемого плагина) найдем в ветви Linker – General – Output File. В рассматриваемом примере помощник указал имя C:\sdk\cube.dlo.
Проверим путь к SDK библиотекам (Additional Library Directories):

«C:\Program Files\Autodesk\3ds Max 2009 SDK\maxsdk\lib»

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

Файл ресурсов cube.rc

В этом файле создадим указанные на вышеприведенном рис. 7 диалоги Keyboard Entry и Parameters. Также отредактируем таблицу символов (String Table) с идентификаторами ресурса.
Перейдем в Visual Studio на вкладку Resource View. Откроем созданную помощником заготовку диалога IDD_PANEL, выберем форму диалога, в окне свойств изменим его идентификатор (свойство ID) на IDD_KBRD, а саму форму диалога приведем к следующему виду (рис. 14):

Рис. 14. Форма диалога IDD_KBRD

Этот диалог будет употреблен для ручного ввода примитива. Его размер 108*63 единицы (пикселя).
Свойства (ID и Caption) существующих в заготовке элементов (текст, поле ввода и счетчик) установим в соответствии с рис 15.

Рис. 15. Свойства элементов диалога IDD_KBRD

Ниже этих полей добавим кнопку класса CustButton (пользовательский класс). Это можно сделать, употребив инструмент Custom Control и приведя свойства (Caption, Class, ID и Style) добавленного элемента в соответствие с рис. 16.

Рис. 16. Добавление и настройка кнопки Create

Выделим теперь в дереве файла cube.rc ветвь IDD_KBRD, выполним ее копирование и вставку. Изменим идентификатор добавленного диалога на IDD_PARAMS (рис. 17), а его форму и свойства его элементов установим в соответствии с рис. 18.


Рис. 17. Добавлен диалог IDD_PARAMS

Рис. 18. Свойства элементов диалога IDD_PARAMS

Диалог IDD_PARAMS отражает текущее значение параметра Size и может быть, в частности, употреблен для изменения размера куба на вкладке Modify.
Откроем теперь таблицу символов ресурса и приведем ее в соответствие с рис. 19.

Рис. 19. Таблица символов ресурса cube.rc

Таблица символов содержит используемые плагином свойства ресурса (детали см. ниже).
В диалогах ресурса использованы следующие пользовательские элементы управления:

  • Custom Edit control класса CustEdit;
  • Custom Spinner Control класса SpinnerControl;
  • Custom Button control класса CustButton.

Файл resource.h

Сохраним все изменения и убедимся, что этот файл содержит, кроме прочих, следующие данные (значения идентификаторов могут быть иными):

#define > 1
#define > 2
#define > 3
#define > 4
#define > 5
#define > 6
#define > 101
#define > 102
#define > 1001
#define > 1002
#define > 1003
#define > 1004
#define > 1005
#define > 1490
#define > 1496

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

Код файла cube.rc

Перейдем на вкладку Solution Explorer и просмотрим код файла cube.rc (выбрать имя cube.rc – правая кнопка мыши – View Code). Код должен, помимо прочих, содержать следующие определения:

// Dialog
//
IDD_KBRD DIALOGEX 0, 0, 108, 63
STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE
FONT 8, «MS Sans Serif», 0, 0, 0x0
BEGIN

CONTROL «»,IDC_KBSZ,»CustEdit»,WS_TABSTOP,43,17,35,10
CONTROL «»,IDC_KBSZSPIN,»SpinnerControl»,0x0,79,17,7,10
LTEXT «Size»,IDC_KBSTATIC,21,18,14,8
CONTROL «Create»,IDC_CREATE,»CustButton»,WS_TABSTOP,31,36,44,12

IDD_PARAMS DIALOGEX 0, 0, 108, 48
STYLE DS_SETFONT | WS_CHILD | WS_VISIBLE
FONT 8, «MS Sans Serif», 0, 0, 0x0
BEGIN

CONTROL «»,IDC_SZ,»CustEdit»,WS_TABSTOP,43,17,35,10
CONTROL «»,IDC_SZSPIN,»SpinnerControl»,0x0,79,17,7,10
LTEXT «Size»,IDC_SZSTATIC,21,18,14,8


// String Table
//
STRINGTABLE
BEGIN

> «Cube»
> «SDK simple object»
> «Cube»
> «Keyboard Entry»
> «Parameters»
> «Size»

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

Файл cube.def

Файл cube.def генерируется помощником. Он содержит имя dll-файла и используемые плагином виды определений (описание библиотеки, число классов, описание классов, версия библиотеки, инициализация и закрытие библиотеки):

LIBRARY cube.dlo
EXPORTS

LibDescription @1 PRIVATE
LibNumber > @2 PRIVATE
Lib > @3 PRIVATE
LibVersion @4 PRIVATE
LibInitialize @6 PRIVATE
LibShutdown @7 PRIVATE

SECTIONS
.data READ WRITE

При изменении в свойствах проекта имени библиотеки соответствующую правку нужно выполнить и в def-файле.

Основные характеристики примитива

Создаваемый куб имеет следующие особенности:

  • имя класса в 3ds Max – Cube;
  • число вершин – 8;
  • число треугольных граней – 12;
  • имеет невидимые диагональные ребра (если взять сторону куба);
  • базовая точка расположена в центре куба;
  • группы сглаживания сформированы по аналогии с примитивом Box;
  • индекс материала всех граней равен 1;
  • имеет UVW-координаты;
  • может быть преобразован в Editable Mesh, Editable Poly или Editable Patch;
  • может быть тиражирован всеми доступными способами (Copy, Instance или Reference);
  • объект можно анимировать по его размеру (по параметру Size).


Код плагина cube.dlo

С позиции пользователя код, в частности, должен решать две следующие задачи:

  • создавать куб заданного размера после нажатия на кнопку Create;
  • обеспечивать ввод в сцену куба посредством мыши.

Сгенерированное помощником решение включает два cpp-файла с исходным кодом – это DllEntry.cpp и cube.cpp. Первый файл содержит код, обслуживающий dll-библиотеку. Это файл в нашем случае практически не требует изменений:

#include «cube.h»
extern ClassDesc2 *GetCubeDesc();
HINSTANCE hInstance;
// Функция DllMain вызывается Windows при загрузке DLL
// Также функция может вызываться во время таких операций,
// как воспроизведение изображения (Rendering)
BOOL WINAPI DllMain(HINSTANCE hinstDLL, ULONG fdwReason, LPVOID) <
if (fdwReason == DLL_PROCESS_ATTACH) <
hInstance = hinstDLL;
DisableThreadLibraryCalls(hInstance);
>
return TRUE;
>
// Возвращает строку с описанием DLL
__declspec( dllexport ) const TCHAR* LibDescription()
// Возвращает число классов плагина
// В нашем случае DLL позволяет оперировать одним классом Cube
__declspec( dllexport ) int LibNumberClasses()
// Возвращает описание i-го класса плагина
__declspec( dllexport ) ClassDesc *LibClassDesc(int i) <
switch(i) <
case 0: return GetCubeDesc();
default: return 0;
>
>
__declspec( dllexport ) ULONG LibVersion()
// Вызывается один раз при загрузке плагина в 3ds Max
// Если в качестве результата указать FALSE, то система не будет загружать плагин,
// а DLL будет интерпретироваться как свободная библиотека
__declspec( dllexport ) int LibInitialize(void)
// Вызывается один раз при выгрузке плагина из 3ds Max
// Возвращаемый результат приложением не используется
__declspec( dllexport ) int LibShutdown(void)
//
// Возвращает строку таблицы символов ресурса
TCHAR *GetString(int id) <
static TCHAR buf[256];
if (hInstance)
return LoadString(hInstance, id, buf, sizeof(buf)) ? buf : NULL;
return NULL;
>

Главная функция формирует DllMain hInstance – дескриптор экземпляра плагина, передаваемый файлу cube.cpp посредством заголовочного файла cube.h.
Имена declspec-функций файла отвечают имеющимся в def-файле определениям.
Функция GetString получает значение (Value) идентификатора ресурса и возвращает значение поля Caption таблицы символов (String Table) ресурса cube.rc проекта.
Код, обеспечивающий функционал плагина, размещен в файле cube.cpp.
Код перимущественно сформирован помощником и включает набор классов и функций (методов), необходимых для создания и управления процедурными объектами. При необходимости разработчик может добавить свои классы и методы, а также внести отвечающие цели проекта изменения в предоставленный помощником код.
Поскольку удален заголовочный файл 3dsmaxsdk_preinclude.h, то в файле cube.cpp не должны присутствовать #pragma message.
Код содержит определения следующих четырех классов:

  • cube;
  • cubeClassDesc;
  • cubeKBDlgProc;
  • cubeCreateCallBack.

На рис. 20 и 21 показаны иерархии классов, лежащих в основе классов cube и cubeClassDesc.

Рис. 20. Класс cube: иерархия родительских классов

Рис. 21. Класс cubeClassDesc: иерархия родительских классов

Класс cube обеспечивает создание и управление примитивом.
Класс cubeClassDesc обеспечивает регистрацию объекта в 3ds Max.
Класс cubeKBDlgProc отвечает за связь плагина с диалогом ручного создания куба: его функция DlgProc регистрирует нажатие на кнопку Create (IDC_CREATE) диалога и обеспечивает создание куба заданного размера с центром в начале мировой системы координат.
Класс cubeCreateCallBack отвечает за ввод в сцену примитива посредством мыши: его функция proc получает информацию о мышиных событиях – это сообщения 3ds Max с именами MOUSE_POINT, MOUSE_MOVE и MOUSE_ABORT и соответствующим образом реагирует на эти события. Метод SetObj класса ассоциирует созданную меш с кубом.
Обе функции (DlgProc и proc) употребляют метод BuildMesh класса cube, используя соответственно методы NonMouseCreate (класс IObjParam) и InvalidateUI (класс ParamBlockDesc2).
Прочие пояснения см. в комментариях к приводимому ниже коду. При этом прежде следует комментарий, а затем комментируемый код.

#include «cube.h»
#define cube_CLASS_ID Class_ID(0xd667c5aa, 0xb65e9ddb)
#define PBLOCK_REF 0
class cube : public SimpleObject2 <
public:
// Ссылка на интерфейс
static IObjParam *ip;
// Флаг ручного (по кнопке Create) ввода примитива
static BOOL kbrdCreate;
// Из класса BaseObject
CreateMouseCallBack *GetCreateMouseCallBack();
// Из класса Object
BOOL HasUVW();
void SetGenUVW(BOOL sw);
int CanConvertToType(Class_ID obtype);
Object *ConvertToType(TimeValue t, Class_ID obtype);
void GetCollapseTypes(Tab &clist,Tab &nlist);
// Из класса GeomObject
int IntersectRay(TimeValue t, Ray &ray, float &at, Point3 &norm);
// Возвращает структуру ObjectState
ObjectState Eval(TimeValue t) ;
// Из класса Animatable
void BeginEditParams(IObjParam *ip, ULONG flags, Animatable *prev);
void EndEditParams(IObjParam *ip, ULONG flags, Animatable *next);
// Из класса SimpleObject
// Строит меш
void BuildMesh(TimeValue t);
// Проверяет корректность задания параметров объекта
BOOL OKtoDisplay(TimeValue t);
// Обновляет пользовательский интерфейс
void InvalidateUI();
// Загрузка и сохранение данных плагина
IOResult Load(ILoad *iload);
IOResult Save(ISave *isave);
// Из класса Animatable
Class_ID ClassID()
SClass_ID SuperClassID()
vo > void DeleteThis()
//
RefTargetHandle Clone(RemapDir &remap);
//
// Получает из таблицы символов имя класса
TCHAR *GetObjectName()
// Число блоков параметров
int NumParamBlocks()
// Возвращает блок параметров по его номеру
IParamBlock2 *GetParamBlock(int i)
// Возвращает блок параметров по его идентификатору
IParamBlock2 *GetParamBlockByID(BlockID id) > // Конструктор / Деструктор
cube();

cube() < >
IOResult cube::Load(ILoad *iload)
IOResult cube::Save(ISave *isave)
class cubeKBDlgProc : public ParamMap2UserDlgProc <
public:
cube *ob;
cubeKBDlgProc(cube *cb)
INT_PTR DlgProc(TimeValue t, IParamMap2 *map, HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
void DeleteThis()
>;
// Обеспечивает создание куба после нажатия на кнопку Create диалога IDD_KBRD
INT_PTR cubeKBDlgProc::DlgProc(TimeValue t, IParamMap2 *map, HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) <
if (msg != WM_COMMAND) return FALSE;
if (LOWORD(wParam) != IDC_CREATE) return FALSE;
float cbSize = cube_kbrd_blk.GetFloat(cube_kb_size);
if (cbSize == 0.0) return TRUE;
// Устанавливаем > if (ob->TestAFlag(A_OBJ_CREATING)) ob->pblock2->SetValue(cube_size, 0, cbSize);
// Флаг ручного ввода
ob->kbrdCreate = TRUE;
// Формируем единичную матрицу
Matrix3 tm(1);
// Устанавливаем в матрице порцию Translate (перемещение) аффинных преобразований
tm.SetTrans(Point3(0, 0, 0));
ob->suspendSnap = FALSE;
// Формируем куб
ob->ip->NonMouseCreate(tm);
return TRUE;
>
// Вызывается при создании очередного экземпляра куба (из класса Animatable)
void cube::BeginEditParams(IObjParam *ip,ULONG flags, Animatable *prev) <
SimpleObject::BeginEditParams(ip, flags, prev);
this->ip = ip;
if (kbrdCreate) <
// Если ранее был выполнен ручной ввод, то устанавливаем > pblock2->SetValue(cube_size, 0, cube_kbrd_blk.GetFloat(cube_kb_size));
kbrdCreate = FALSE;
>
cubeDesc.BeginEditParams(ip, this, flags, prev);
// Фиксируем пользовательскую процедуру,
// ассоциированную с блоком параметров cube_kbrd_blk
cube_kbrd_blk.SetUserDlgProc(new cubeKBDlgProc(this));
>
void cube::EndEditParams(IObjParam *ip, ULONG flags, Animatable *next) <
SimpleObject::EndEditParams(ip, flags, next);
cubeDesc.EndEditParams(ip, this, flags, next);
// Плагин должен вызывать методы интерфейса ip только
// между BeginEditParams и EndEditParams
this->ip = NULL;
>
// Из класса Object
// Вернуть флаг наличия у объекта UVW-координат
BOOL cube::HasUVW()
// Можно модифицировать, исходя из целей проекта
vo > // Класс обработки мышиных событий
class cubeCreateCallBack : public CreateMouseCallBack <
cube *ob; // Указатель на объект
Point3 p0; // Первая точка в мировой системе координат
Point3 p1; // Вторая точка в мировой системе координат
public:
int proc(ViewExp *vpt, int msg, int point, int flags, IPoint2 m, Matrix3 &mat);
vo > >;
int cubeCreateCallBack::proc(ViewExp *vpt, int msg, int point, int flags, IPoint2 m, Matrix3 &mat) <
if (msg == MOUSE_POINT || msg == MOUSE_MOVE) <
switch(point) <
case 0:
ob->suspendSnap = TRUE;
// m — позиция мыши в оконных координатах
// p0 — позиция мыши в мировых координатах
p0 = vpt->SnapPoint(m, m, NULL, SNAP_IN_PLANE);
// Порция Translate (перемещение) аффинных преобразований позиции
mat.SetTrans(p0);
// Изменяем значение параметра cube_size диалога IDD_PARAMS
ob->pblock2->SetValue(cube_size, ob->ip->GetTime(), 0.0f);
break;
case 1: <
ob->suspendSnap = TRUE;
// p1 — новая позиция мыши в мировых координатах
p1 = vpt->SnapPoint(m, m, NULL, SNAP_IN_PLANE);
// Управляем размером куба в зависимости от положения мыши
ob->pblock2->SetValue(cube_size, ob->ip->GetTime(), 0.5f * Length(p1 — p0));
// Создаем и отображаем меш в видовом порте
cube_param_blk.InvalidateUI();
break;
>
case 2:
return CREATE_STOP;
>
>
else
if (msg == MOUSE_ABORT) return CREATE_ABORT;
return TRUE;
>
static cubeCreateCallBack cubeCreateCB;
CreateMouseCallBack *cube::GetCreateMouseCallBack() <
cubeCreateCB.SetObj(this);
return &cubeCreateCB;
>
// Получает размер куба, строит его меш и формирует группы сглаживания
void cube::BuildMesh(TimeValue t) <
float size, h;
ival > pblock2->GetValue(cube_size, t, size, ivalid);
h = 0.5 * size;
// Число вершин и граней в меш
mesh.setNumVerts(8);
mesh.setNumFaces(12);
// Координаты вершин
mesh.setVert(0, Point3(-h, -h, -h));
mesh.setVert(1, Point3(h, -h, -h));
mesh.setVert(2, Point3(-h, h, -h));
mesh.setVert(3, Point3(h, h, -h));
mesh.setVert(4, Point3(-h, -h, h));
mesh.setVert(5, Point3(h, -h, h));
mesh.setVert(6, Point3(-h, h, h));
mesh.setVert(7, Point3(h, h, h));
// Состав граней
mesh.faces[0].setVerts(0, 2, 3);
mesh.faces[1].setVerts(3, 1, 0);
mesh.faces[2].setVerts(4, 5, 7);
mesh.faces[3].setVerts(7, 6, 4);
mesh.faces[4].setVerts(0, 1, 5);
mesh.faces[5].setVerts(5, 4, 0);
mesh.faces[6].setVerts(1, 3, 7);
mesh.faces[7].setVerts(7, 5, 1);
mesh.faces[8].setVerts(3, 2, 6);
mesh.faces[9].setVerts(6, 7, 3);
mesh.faces[10].setVerts(2, 0, 4);
mesh.faces[11].setVerts(4, 6, 2);
// Группы сглаживания
mesh.faces[0].setSmGroup(2);
mesh.faces[1].setSmGroup(2);
mesh.faces[2].setSmGroup(4);
mesh.faces[3].setSmGroup(4);
mesh.faces[4].setSmGroup(8);
mesh.faces[5].setSmGroup(8);
mesh.faces[6].setSmGroup(16);
mesh.faces[7].setSmGroup(16);
mesh.faces[8].setSmGroup(32);
mesh.faces[9].setSmGroup(32);
mesh.faces[10].setSmGroup(64);
mesh.faces[11].setSmGroup(64);
// Устанавливаем видимость внешних ребер граней (диагональные ребра не видны)
for (int k = 0; k GetValue(cube_size, t, size, FOREVER);
return (size LastNotifyParamID());>
// Находит точку пересечения луча ray с поверхностью (см. класс Ray)
// и нормаль к поверхности в этой точке
int cube::IntersectRay(TimeValue t, Ray &ray, float &at, Point3 &norm) <
return SimpleObject::IntersectRay(t, ray, at, norm);
>
// Методы, обеспечивающие преобразование и копирование объекта
Object* cube::ConvertToType(TimeValue t, Class_ID obtype) <
return SimpleObject::ConvertToType(t, obtype);
>
int cube::CanConvertToType(Class_ID obtype) <
if (obtype == defObject > return 1;
else
return SimpleObject::CanConvertToType(obtype);
>
void cube::GetCollapseTypes(Tab &clist, Tab &nlist) <
Object::GetCollapseTypes(clist, nlist);
>
RefTargetHandle cube::Clone(RemapDir &remap) <
cube *newob = new cube();
newob->ReplaceReference(0, remap.CloneRef(pblock2));
newob->ivalid.SetEmpty();
BaseClone(this, newob, remap);
return newob;
>

Приведенный код можно скопировать в созданный помощником проект Visual Studio. При этом следует копировать коды обоих файлов – и DllEntry.cpp, и cube.cpp.
Построение DLL осуществляется после нажатия на F7 (меню Build — Build Solution).

Загрузка и вызов плагина

Созданный плагин, файл cube.dlo следует загружать в начале сеанса работы с 3ds Max, открыв меню Customize – Plug-in Manager – табличная часть диалога – правая кнопка мыши – Load New Plug-in – найти загружаемый файл.
Загруженный плагин доступен в командном окне: вкладка Create – Geometry – SDK simple object (рис. 22).

Рис. 22. Вызов плагина Cube

Если загружать плагин не вначале сеанса, а позже, то может возникнуть указанная на рис. 23 ошибка.

Рис. 23. Ошибка инициализации плагина

Заключение

Создание дополнительного инструмента 3ds Max – это достаточно трудоемкая работа. Поэтому должна быть серьезная мотивация для ее выполнения. Например, наличие идеи расширения функционала 3ds Max, интересной широкому кругу пользователей приложения. Удачное расширение может быть либо направлено Autodesk и затем включено в состав его стандартной поставки, либо тиражироваться как самостоятельное решение на условиях, приемлемых и для разработчика, и для потребителя.
При реализации расширения у разработчика имеется выбор между MAXScript и 3ds Max SDK.

Создание export плагина для 3d studio max

Обсудим интересные, а иногда очень необходимые в работе каждого моделера/визуализатора/аниматора (необходимое подчеркнуть), плагины для любимой программы 3D Max. Это краткий обзор, более подробно будем рассматривать некоторые, наиболее интересные для Вас плагины и скрипты.

Моделирование

Loop Regularizer и Create Holes – плагины для быстрого создания круглых отверстий.

Wire Mesh Generator – плагин для лёгкой и быстрой генерации сетки.

Clone Modifer – плагин для создания копий объектов. С его помощью можно легко создать цепь или сложную лестницу, забор по заданному маршруту и т.д.

Glue Utility – плагин, который легко помогает расположить объект по любой поверхности, например, создать стену или забор на неровном ландшафте.


Sweep Profile – плагин, позволяющий быстро создать профиль, выбрав из готовой базы или применять разработанные самостоятельно.

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

FloorGenerator – плагин быстро создаёт различные объекты пола (плитка, паркет и т.д.), которые потом можно легко затекстурировать.

Quad Cap Pro – очень удобный, а иногда просто незаменимый плагин. Позволяет закрыть отверстие, только в отличии от стандартного модификатора Cap Holes, делает это с построением сетки (а не одним полигоном).

Экстерьер

Greeble – простой и удобный плагин для быстрой детализации объекта. Разбивает полигоны и выдавливает, таким образом можно легко создать целый мегаполис или абстрактный рисунок из «детского конструктора». Простота работы с плагином и Ваша фантазия = прекрасный результат!

Building Generator – плагин для создания любых зданий. Программа позволяет задать этажность, форму, размер здания, а также есть возможность настраивать двери, окна, добавлять/убирать карнизы, жалюзи, балконы, колонны и другие элементы и материалы по каждому созданному зданию. Кроме того, есть возможность интеграции своих моделей.

StonePlacementTools – плагин для создания каменных стен, заборов, имитации различных узоров из камней. Плагин автоматически выпекает карты нормалей, неровностей и т.д. Настройки регулируют размеры, неровности, расположение камней.

Ivy Generator – плагин для генерации вьющихся растений (плющ, виноград). Растения генерируются («растут») по выбранному объекту. Материал настроен автоматически, с возможностью редактирования. С помощью простых настроек можно задать возраст растения, толщину веток, количество листьев и т.д.

Forest Pack – плагин, предназначенный для «заселения» растениями, зданиями, камнями и т.д. больших поверхностей. Принцип работы плагина в построении двух пересекаемых перпендикулярных плоскостей, на которые накладывается текстура с использованием карты прозрачности. Таким образом ресурсы компьютера экономятся, а рендер происходит быстрее. Необходимо помнить, что в таком случае камера должна быть неподвижна.

Multiscatter – плагин для создания различных массивов. С его помощью можно создавать множество различных объектов, настройки позволяют задать алгоритм распространения объектов по заданному пространству, рэндомность. Кроме того, плагин поддерживает анимированные объекты.

SplineLand – плагин для создания ландшафтов любой сложности из сплайнов. С помощью данного плагина можно легко задавать различные впадины и высоты, изменять наклоны дорог и т.д.

Populate Terrain – плагин также предназначен для быстрого создания ландшафта.

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

ATiles – плагин позволяет создавать различные повторяющиеся объекты. С его помощью можно легко расположить плитку, черепицу и т.п.

GrowFX – плагин, позволяющий создавать различные объекты, в основном растения, которые получаются достаточно реалистичными.

Симуляторы

NextLimit RealFlow – симулятор всевозможных жидкостей, газов и твёрдых тел. Плагин очень ресурсоёмкий, но при этом даёт реалистичные результаты, очень простой в освоении.

RayFire Tool – симулятор различных разрушений, стрельбы, взрывов и прочих пиротехнических чудес. Плагин достаточно требователен к объёму оперативной памяти, но даже при минимальных настройках даёт хорошие результаты.

FumeFX – плагин, предназначенный для создания реалистичного огня, дыма, облаков и т.д. Данные спец эффекты создаются физически корректно, с учётом гравитации, температуры, давления и других факторов. Плагин имеет достаточно гибкие настройки для создания правдоподобных эффектов.

Phoenix FD – плагин, способный создать различные эффекты: дым, огонь, брызги воды, различные взрывы и т.д.

ParticleFlow – система генерации частиц, плагин создаёт практически любые эффекты с частицами. Как правило, с его помощью создают снег, брызги воды, искры, разбиение объекта на части и т.д. С помощью простых настроек можно задавать различные параметры такие, как скорость и направление движения частиц, размер, вращение и т.д.

Pull Down It! – симулятор разрушений твёрдых тел. Плагин легко, просто и реалистично создаёт осколки и разломы массивных твёрдых тел. Хотите разрушить «вековую» колонну или массивный мост (созданные Вами днём ранее)? Нет ничего проще с помощью данного симулятора.

Анимация

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

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

Не могу экспортировать из Max в 3D studio(3DS)

naty2009, вопрос про архикад вобще не стоит.

LSTAS, зачем ты это делаешь? Смысл экспортить в 3дс, чтобы оптом там же в максе открывать этот 3дс?


Нормально экспортиться будет геометрия, на счет остального не уверен ни капли.
Если прям надо экспортить и импортить (например чтобы из более нового макса перекинуть в старый) то лучше поставить последний плагин Autodesk FBX и все. Стандартные камеры, свет, материалы и геометрию кидает без проблем, настройки простые и понятные.

naty2009, вопрос про архикад вобще не стоит.

LSTAS, зачем ты это делаешь? Смысл экспортить в 3дс, чтобы оптом там же в максе открывать этот 3дс?

Привет! Данный проект помещения я создал в дом.условиях в Max9 (в формате max), а знакомый попрасил перевести этот прект в формат 3DS, я так думаю, что в этом формате удобнее просматривать данное помещение.

интересно, в чём это 3ds удобнее смотреть? Ладно ещё объём вроде автомобиля повертеть в чём-нибудь типа Альтерос, но интерьер вряд ли.

а вообще 3ds формат старый, с ограничением на кол-во полигонов. попробуй .obj

и лучше покажи свои страшные квадраты или сцену выложи (в 3ds)

интересно, в чём это 3ds удобнее смотреть? Ладно ещё объём вроде автомобиля повертеть в чём-нибудь типа Альтерос, но интерьер вряд ли.

а вообще 3ds формат старый, с ограничением на кол-во полигонов. попробуй .obj

и лучше покажи свои страшные квадраты или сцену выложи (в 3ds)

Создание export плагина для 3d studio max

Кандидат Игровых Наук

Репутация: 693
Группа: Забанен
Сообщений: 3415
Награды: 4
Регистрация: 05.02.2007

А чем он лучше декомпилятора kasper’а?

Добавлено через 6 минут 6 секунд:

Не буду говорить про компилятор Nео][, т.к. не пробовал его юзать, а вот про Касперовский скажу — декомпиллит реально неплохо, с помощью него за последние месяцы мы (в лице нашего моделлера Haron-а) извлекли следующие объекты:
-> набор домов, колодцев и т.п. для села (ещё не публик.).
-> шары а-ля система Теслы с ЧАЭС.
-> набор домов из Припяти.
-> несколько ландшафтов.
Список неполный.
Половина из этого лежит на _http://www.lproject.3dn.ru/ .
Вопрос к Neo][: будет ли версия для 7, 8 версий Максов?

Сообщение отредактировал [empr] — 24.01.2008, 17:49

Репутация: 744
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005

[empr], либо я что-то пропустил, либо ещё что, а у кого до этого был декомпилятор? Либо я старался зря, тогда в который раз убедимся ещё раз, что информация в наше время важнее всего
А так, более оптимальная на мой взгляд работа с памятью, возможность задания автоназначения smooth групп и ещё немного по мелочи.

Добавлено через 2 минут 6 секунд:

[empr], предстоит достать только СДК от 7-й версии макса и тогда, вполне

Сообщение отредактировал Neo][ — 24.01.2008, 17:54

Кандидат Игровых Наук

Репутация: 693
Группа: Забанен
Сообщений: 3415
Награды: 4
Регистрация: 05.02.2007

Репутация: 58
Группа: Участник
Сообщений: 228
Награды: 1
Регистрация: 06.01.2008

— это полезная фича.

— это — зря. СДК и X-Ray не поддерживает МАХсовские группы сглаживания. Движок X-Ray автоматом ставит свои.

Сообщение отредактировал . HaroN. — 24.01.2008, 20:44

Репутация: 744
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005

[empr], не мог бы ты дать ссылку на тему/сайт etc. Так как интересно, какой ресурс я не охватываю при слежении за новостями модмейкерства


. HaroN. сейчас уже и не вспомню(полгода прошло уже), а экспериментировать лень, но насколько мне помнится всё же это не так.
Update:
. HaroN. ты прав, движок автоматически смуфит фейсы с углом между нормалями 75*+. Поэтому можно включить данную опцию угол установить в 75* и после завершения импорта посмотреть, как примерно объект будет выглядеть в движке(пример конечно наигранный, но всё же )

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

Импортирование объектов из 3D Studio Max

Если вы создаёте свои 3D объекты в 3dsMax, вы можете сохранять .max файлы прямо в ваш проект или экспортировать их в Unity с помощью Autodesk .FBX или других универсальных форматов. Unity импортирует меши из 3ds Max. И сохранение в Max файл и экспорт в универсальный формат — оба варианта имеют как преимущества, так и недостатки, см. раздел класса Mesh.

  1. Все узлы с положением, вращением и масштабом. Центры вращения и имена тоже импортируются.
  2. Меши с вершинными цветами, нормалями и одной или двумя UV развёртками (см. ниже).
  3. Материалы с diffuse цветом и текстурой, множественные материалы для одного меша.
  4. Анимации.
  5. Анимации, основанные на костях (Bone-based, см. ниже).

Чтобы вручную экспортировать FBX из 3DS Max

  1. Скачайте последнюю версию fbx экспортера с веб-страницы Autodesk и установите его.
  2. Экспортируйте вашу сцену или выбранные объекты ( File->Export или File->Export Selected ) в формат .fbx. Можно использовать настройки экспорта по-умолчанию.
  3. Копируйте экспортированный fbx файл в папку вашего Unity проекта.
  4. После того, как вы переключитесь обратно в Unity, .fbx файл импортируется автоматически.
  5. Перетащите файл из окна Project в окно Scene .

Опции экспортера

Используя настройки FBX экспортера по-умолчанию (которые позволяют экспортировать всё, что есть), вы можете выбрать:

Embed textures — хранит карты изображений в файле, полезно для портативности, но не хорошо для размера файла

Настройки FBX экспортера по-умолчанию (для fbx плагина версии 2013.3)

Экспортирование Bone-based анимаций

Существует процедура, которой вы должны следовать, если желаете экспортировать bone-based анимации:

  1. Настройте структуру костей как вам угодно.
  2. Создайте нужные вам анимации используя FK и/или IK.
  3. Выделите все кости и/или IK солверы.
  4. Перейдите в Motion->Trajectories and pressи нажмите Collapse . Unity создаёт фильтр ключевых кадров, так что их количество при экспорте не важно.
  5. “Export” или “Export selected” в качестве нового FBX формата.
  6. Перетащите FBX файл в Assets , как обычно.
  7. В Unity вы должны переназначить текстуру в материале корневой кости.

При экспортировании костной иерархии с мешем и анимациями из 3d Max в Unity, иерархия GameObject’ов генерируется в соответствии с иерархией, которую вы видите в “Schematic view” в 3ds Max. Одно отличие в том, что Unity поместит GameObject в качестве нового корня, содержащего анимации, и разместит информацию о меше и материале в корневой кости.

Если вы предпочитаете иметь анимацию и информацию о меше в одном Unity GameObject’е, перейдите в окно Hierarchy в 3ds Max и назначьте узел меша родителем для кости в костной иерархии.

Экспортирование morph targets (blend shapes) из Max

  1. Убедитесь, что у вас применён Morpher Modifier к экспортируемому мешу с подходящими morph targets, настроенными в Channel List
  2. Анимируйте ключевые кадры на экспортируемом меше / модификторе, только если вам требуется анимация
  3. Отметьте Animation > Deformations, Skins если требуется и затем Morphs в диалоге экспорта FBX


Экспортирование двух наборов UV для лайтмаппинга

Функционал 3ds Max’а Render To Texture и автоматической развёртки может использоваться для создания карт освещения. Заметьте, что в Unity есть встроенный механизм создания карт освещения, но вы можете пожелать использовать 3dsmax, если он больше подходит в вашем рабочем процессе. Обычно для главной текстуры и / или карт нормалей используется один набор UV, а для текстуры карты освещения — другой набор UV. Чтобы правильно перенести оба набора UV, материал в 3ds Max должен быть Standard и как Diffuse (для главной текстуры), так и Self-Illumination (для карты освещения) слоты карты должны быть настроены:

Настройка материала для лайтмаппинга в 3ds Max с использованием self-illumination карты

Учтите: если объект использует тип материала Shell, тогда текущий Autodesk FBX экспортер не сможет корректно экспортировать UV.

В качестве альтернативы, вы можете использовать Multi/Sub Object тип материала и настроить два sub-material’а, используя основную текстуру и карту освещения в их diffuse map слотах, как показано ниже. Однако, если полигоны в вашей модели используют другие sub-material ID, это приведёт к импорту множества материалов, что не оптимально для производительности.

Альтернативная настройка материала для лайтмаппинга в 3ds Max с помощью multi/sub object материала

Решение проблем

Если у вас возникли какие-либо проблемы с импортом моделей: убедитесь, что у вас установлена последняя версия FBX плагина с веб-страницы Autodesk или откатитесь к FBX 2012.

Обзор 3ds Max — программа для создания 3D-моделей и визуализации

Итак, Вы решили с головой окунуться в этот удивительный по своим возможностям мир 3D-графики. Следующим Вашим шагом на этом увлекательном пути должен стать выбор программы. Самым популярным на сегодняшний день является программный продукт американской компании Autodesk — 3D Studio Max.

Сразу отметим, что идеальной программы по 3D-моделированию, анимации, рендерингу (визуализации) нет и не может быть; каждое приложение имеет свои сильные и слабые стороны, не говоря уже о субъективном восприятии того или иного приложения. Тем не менее, программа 3ds Max имеет ряд объективных преимуществ перед подобными продуктами, скажем, Autodesk Maya. Если последняя программа сильна в основном в анимации, то приложение 3D Studio Max с легкостью справляется и с тем, и с другим, и с третьим, то есть оно практически может все.

Популярность программы 3ds Max далеко не случайна

Наверное, поэтому 3ds Max Autodesk так любят дизайнеры, архитекторы, специалисты, занятые в игровой индустрии, телевизионщики, кинематографисты и даже непрофессионалы, стремящиеся, как и Вы, для начала лишь прикоснуться к этой волшебной сказке — 3D-графике.

Новичков в этой программе привлекает еще и то, что она весьма широко распространена и, несмотря на кажущуюся сложность, легко изучается. Этому способствует, конечно же, огромное количество обучающего материала по 3д Максу, в частности, вы можете посмотреть бесплатные видеоуроки по 3ds Max на нашем сайте videosmile.ru и скачать мини-курс по 3Д Макс от Романа Байрамова. Это и понятно, ведь 3ds Max является «пионером» 3D-моделирования, анимации и рендеринга.

Еще одной причиной популярности данного приложения является его огромный инструментарий, а нехватка какого-то специфического, но необходимого Вам инструмента легко компенсируется широчайшей базой плагинов — этих замечательных дополнений, которые могут расширять стандартные возможности Autodesk 3ds Max безгранично много.

К примеру, модуль Afterburn позволяет создавать реалистичные взрывы, а установив Dreamscape, Вы без труда сможете моделировать прекрасные природные ландшафты, в частности водоемы. Вооружившись же дополнительными движками по визуализации, скажем, Maxwellrender, V-ray или Finalrender, программа 3д Макс вполне способна посоревноваться с той же Autodesk Maya, считающейся более продвинутой в возможностях анимации.

В 3D Studio Max легко управлять частицами, что позволяет создавать поразительные эффекты, например, имитацию каких-либо природных явлений: дым от костра, водяные брызги, капельки росы, скатывающиеся с листьев, и так далее. А модуль HairandFur настолько «гениален» в создании волос, что его уже окрестили онлайн-цирюльником: с помощью этого плагина можно не только создавать виртуальные волосы, но также их укладывать, подрезать и делать любую модную прическу.

В чем программа 3D Studio Max наиболее сильна

Безусловно, при выборе программы для 3D-графики нужно исходить из собственных задач: что Вы собираетесь делать с ее помощью, как использовать? Например, для рендеринга приложение имеет вполне мощный движок Mental Ray, который встроен и в ту же Autodesk Maya, то есть по сути их возможности в плане визуализации одинаковы.

Майя считается удобнее и сильнее в анимации, поскольку обладает большим числом качественных инструментов для нее. Однако последняя версия Autodesk 3D Studio Max обзавелась прекрасными инструментами скиннинга Heatmap и Geodesic Voxel, контроллерами анимации в среде создания графов, более тонким инструментом для работы с текстами, отчего ее производительность и возможности в создании анимации повысились.

Зато в моделировании 3д Максу нет равных. Огромный набор инструментов, плагинов позволяет с помощью этого приложения легко моделировать и визуализировать любые интерьеры и самые сложные архитектурные построения. Не случайно 3ds Max Design является любимой программой дизайнеров и архитекторов (она даже интегрирована с AutoCAD), а обозреватели приложений по 3D графике отмечают, что она рассчитана в первую очередь на «технарей». Наверное, поэтому данную программу предпочитают и разработчики всевозможных игр…

И, наконец, рассмотрев, как это и положено в обзоре, все достоинства и недостатки Тридэмакса, отметим, что, в отличие от многих подобных программ, данный программный комплекс рассчитан только на операционные системы Windows. Если Вы привыкли работать на платформах Linux либо Mac, Вам придется поискать другое приложение. Впрочем, в русскоязычном сегменте наиболее распространенной операционной системой была и пока остается Windows. К тому же любителям Linux всегда можно посоветовать использовать две платформы на своем компьютере: одну – «для души», а другую – для 3D Studio Max.

Ниже вы можете посмотреть видеоурок от одного из авторов нашего сайта, в котором показано: «Как бесплатно получить лицензионную версию программы 3ds Max»:

Honest Group : 3Ds Max 2013 Export plugin — Форум

  • Страница 1 из 5
  • 1
  • 2
  • 3
  • 4
  • 5
  • »
Модератор форума: Влесам, Врыл, Detect_Life, Монгольчик
Форум » Форум Honest’ов » Проклятые Земли » 3Ds Max 2013 Export plugin (Плагин для экспорта моделей из 3Ds Max)

3Ds Max 2013 Export plugin

Bargest Дата: Суббота, 2014.01.11, 01:35 | Сообщение # 1
Вчера ночью быстренько склепал плагин.
->СКАЧАТЬ \plugins.
* Для установки 64-битной версии (для 3dMax x64) скопировать файл EIExporter64.dle и EIImporter64.dli. Обе версии сразу устанавливать нельзя!
* Для установки в Max2010 взять файлы из папки Max10.

Использование:
— Импорт —
* Нажать File->Import (или левый верхний угол->Import)
* Выбрать файл (должен иметь расширение .fig или .lnk)
* При выборе .lnk рядом с ним (в той же папке) обязательно должны лежать все файлы модели fig и bon, при этом fig может не иметь расширения.
— Экспорт —
* Создать 3Д-модель
* Применить текстуру
* Нажать File->Export (или левый верхний угол->Export)
* В списке «Save as type» выбрать «EI Exporter (*.FIG, *.LNK)»
* Ввести имя файла и нажать Save. При экспорте в LNK в результирующей папке появится набор файлов FIG, BON и файл LNK, также будут экспортированы все текстуры как BMP.


Ограничения:
* Это альфа-версия. Написано ночью за 6 часов с помощью пары бутылок лимонада. Поэтому может содержать баги, о которых желательно отписываться здесь.
* Нет анимации.
* После импорта желательно перетащить на объект какую-нибудь картинку, иначе при сохранении сцены могут потеряться текстурные координаты.

Подробнее об LNK
При импорте LNK плагин перебирает все файлы модели и загружает их, ставя на правильные места в пространстве. При отсутствии файла будет ошибка.
При экспорте LNK модель делится на FIG-и по общим текстурам. Все объекты без текстур экспортируются в один FIG с индексом текстуры 0. Остальные группируются по общей текстуре и экспортируются в FIG-и с индексами 1, 2 и т.д. Имена файлов в результате — 0.FIG (без текстур), 1.FIG, 2.FIG и так далее. К каждому файлу прилагается .BON, состоящий из нулей (т.к. анимации нет, опорная точка находится в нуле у всех объектов) и текстура (1.BMP, 2.BMP. )

Создание export плагина для 3d studio max

8 800 550 40 45

Напишите Ваш вопрос или оставьте телефон и мы обязательно ответим:

3D-моделирование для 3D-печати в 3D Studio Max

Представляем вам руководство по основам 3D-моделирования и применению исходных файлов формата STL для 3D-печати. В этой статье мы рассмотрим моделирование с использованием программы 3ds Max.

3ds Max — это специальный пакет программ, разработанный Autodesk Media and Entertainment по 3D-моделированию, анимации и рендерингу. Он обладает возможностями пространственного моделирования, расширяемой архитектурой и может использоваться на платформе Microsoft Windows.

В этом руководстве мы поэтапно рассмотрим создание простого брелока для ключей. Если вы прежде использовали эту программу, то вам должно быть всё понятно. В случае, если вы ни разу не применяли софт для 3D-моделирования, то эта инструкция поможет вам получить определённое представление о сути работы.

Данная пошаговая инструкция была создана на основе программы 3ds Max 2010. Для вашего удобства некоторые большие картинки кликабельны.

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

Шаг 0

Первое, что нам необходимо сделать — установить единицы измерения. Это необходимо для того, что бы предметы, которые мы создаем, измерялись в привычных нам миллиметрах. Перейдите в меню Customize -> Units Setup.

Выберите Generic Units, как показано на картинке.

Проверьте и, если необходимо, измените единицы измерения системы. Кликните на кнопку System Unit Setup. Удостоверьтесь, что в открывшемся окне выбраны миллиметры. Нажмите ОК.

Теперь вы можете быть уверены, в том, что если вы построили куб с гранью 10 см, то 3D-принтер создаст его именно такого размера.

Шаг 1

На верхней панели инструментов нажмите кнопку Create> Shapes> Text. (Если вы используете правостороннюю панель, то выбирать нужно Create> Shapes > Splines> Text).

Шаг 2

В диалоговом окне справа во вкладке «Parameters» вы можете установить шрифт, размер текста и ввести сам текст. Я выбрал шрифт Arial, установив для него кегль 10 и ввёл can-touch.ru в текстовом поле диалогового окна.

Шаг 3
Далее нам нужно 2D сплайн(ы) превратить в 3D-объект, воспользовавшись командой Extrude. Для этого откройте Modifiers > Mesh Editing > Extrude.

Шаг 4

На этом этапе мы будем корректировать параметры «Экструзии», пользуясь боковой панелью инструментов с правой стороны. Там мы устанавливаем значение Amount — 2. Я, к примеру, произвольно установил значение Segments — 3. Особенно важны параметры Cap Start и Cap End, которые необходимо включить, чтобы гарантировать вашим объектам герметичность.

Шаг 5

Далее нам нужно создать поле для того, чтобы объединить все буквы. Для этого выберите вкладку Create>Standard Primitive>Box. Параметры поля мы можем изменить всё той же боковой панелью инструментов. Делаем это для того, чтобы наше поле соответствовало параметрам букв. Установив длину – 10.0, ширину – 60.0, высоту -3.0, мы получим поле размером 10x60x3 мм, после того как напечатаем его 3D-принтером.

Так как сейчас поле может занимать не совсем правильную позицию, вы можете легко переместить его, кликнув правой кнопкой мышки по полю и выбрав Transform>Move. Таким образом у вас получится поместить поле ровно за текстом. Вам нужно будет убедиться в том, что они совпадают, чтобы перейти к следующему шагу – объединению.

Шаг 6

Для того, чтобы соединить вместе все компоненты, выберете вкладку Create>Compound>Boolean, при этом вы должны будете выделить один из объектов. В панели инструментов справа доступны опции, позволяющие выбрать какой тип переменной использовать. В данном случае вам нужно выбрать Pick Operand B и Operation Union, затем выделите и второй объект.

Шаг 7

Принцип работы субтрактивной булевской переменной можно увидеть на примере создания отверстия для нашего брелока. Для начала создадим цилиндр — Create>Standard Primitive>Cylinder с радиусом 3 и высотой – 10. Далее воспользуйтесь функцией перемещение и поместите цилиндр в конец объекта, где должно находиться отверстие. Затем выбираете Create>Compound>Boolean, выделив при этом цилиндр. Вы снова выбираете Operand B, но на этот раз функцию Subtraction (B-A) , далее выделяете объединённое поле с текстом.

3ds Max Exporter

The 3ds Max exporter lets you publish 3D models straight from 3ds Max to Sketchfab. It also includes lighting and texture baking features as well as Draft Mode and Animation options.

How to install

If you already have the plugin installed, it will check for updates and download them automatically. Otherwise you can download and install the plugin from the links above.

  1. Download the MZP file.
  2. In 3ds Max, go to MAXScript → Run script and navigate to the MZP file.
    Or, Drag the MZP file into your 3ds Max viewport.
  3. Click install and confirm any dialog boxes that appear.
  4. Go to Customize → Customize User Interface → Toolbars.
  5. In Category, select Klaas Tools.
  6. Drag the Sketchfab icon to a toolbar.
  7. The exporter is now available from this toolbar.

How to use

  1. Open your model and run the script.
  2. Enter a title at the top of the exporter panel and mark the model as Private, Draft, and/or Animation if necessary.
  3. In the Light, bake, uvw panel, you can enable light baking and choose Auto unwrap objects if you haven’t unwrapped the model yourself.
  4. You can adjust Texture sizes with the Density parameter. If you select your objects and click Calculate sizes, you can see how many and what size textures your model will use. The maximum texture size is 2048×2048, so if you need more, it will create multiple 2048 textures.
  5. Under Lighting type you can choose between Automatic (a generic soft light) and Manual (lighting in the scene). It supports Scanline, V-Ray, and Mental Ray. In all cases, it will use other render settings from the scene, such as sampling.
  6. Fill in the Tags and Description.
  7. Authorize the script to use your Sketchfab account.
  8. Select your model, save it, and click Send selected objects to Sketchfab!

If you chose to Auto unwrap objects, you will see 3ds Max render the unwrapped textures. Then it will package the model and send it to your account. When the upload is complete, you can view your model on Sketchfab (click Open model Name), adjust rendering settings, and save the default view.

For more detailed tutorials, including guides to lightbaking, textures, and shading, see the full documentation, visit the blog, or watch the video above.

Илон Маск рекомендует:  Афинное текстурирование
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL