3ds max sdk что это

3ds max sdk что это

Рассматривается технологическая цепочка создания плагина 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 следующих видов плагинов (в скобках указывается стандартное расширение):

После уяснения задачи написание 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.

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

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

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

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

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

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

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

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

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

и вставим их в 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

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

Файл resource.h

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

#define IDS_LIBDESCRIPTION

1

#define IDS_CATEGORY

2

#define IDS_CLASS_NAME

3

#define IDS_KBRD

4

#define IDS_PARAMS

5

#define IDS_CB_SIZE

6

#define IDD_PARAMS

101

#define IDD_KBRD

102

#define IDC_KBSZ

1001

#define IDC_KBSZSPIN

1002

#define IDC_KBSTATIC

1003

#define IDC_CREATE

1004

#define IDC_SZSTATIC

1005

#define IDC_SZ

1490

#define IDC_SZSPIN

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

IDS_LIBDESCRIPTION

«Cube»

IDS_CATEGORY

«SDK simple object»

IDS_CLASS_NAME

«Cube»

IDS_KBRD

«Keyboard Entry»

IDS_PARAMS

«Parameters»

IDS_CB_SIZE

«Size»

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

Файл cube.def

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

LIBRARY cube.dlo
EXPORTS

LibDescription

@1 PRIVATE

LibNumberClasses

@2 PRIVATE

LibClassDesc

@3 PRIVATE

LibVersion

@4 PRIVATE

LibInitialize

@6 PRIVATE

LibShutdown

@7 PRIVATE

SECTIONS
.data READ WRITE

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

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

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

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

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

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

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

На рис. 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).
Прочие пояснения см. в комментариях к приводимому ниже коду. При этом прежде следует комментарий, а затем комментируемый код.

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

Созданный плагин, файл 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.

Источник

What’s New: 3ds Max 2020 SDK

This topic describes new items and changes that affect the 3ds Max 2020 C++ SDK.

SDK Break

The 3ds Max 2020 SDK is not binary backward compatible with the 3ds Max 2019 SDK. This means that plugins will need to be re-compiled in order to work in 3ds Max 2020. See the SDK Requirements topic for more information on the platform requirements for building plugins in 3ds Max 2020.

Microsoft Visual Studio 2017

3ds Max 2020 is compiled with Microsoft Visual Studio 2017 version 15.8.3, Platform Toolset v141, and Windows Platform SDK version 10.0.17134.0. plugins need to be built using the same Platform Toolset version. Any version of Microsoft Visual Studio can be used as long as the Platform Toolset used is v141.

Note that installers for earlier versions of Microsoft Visual Studio 2017 are available here.

Switch from Fast to Precise Math Computation

3ds Max 2019 and many previous versions have been compiled using the «fast math» optimization of the Visual Studio C++ compiler (see /fp:fast VC++ compile option documentation).

In Visual Studio 2017 version 15.3 and 15.5, the code optimization for the /fp:fast option has been further modified to provide even faster code than in Visual Studio 2015.

Because the speed improvement comes with some loss in precision, after careful consideration of the impact on both 3ds Max and 3rd party plugins, we decided to switch from using the «fast math» optimization to building with the «precise math» compiler option (see ‘/fp:precise’ VC++ compile option documentation).

Based on our testing, switching to «precise math» does not impact 3ds Max’s performance in any significant way, and it has the following benefits:

Note that 3rd party code can continue to use «fast math» if needed; switching to «precise math» is not mandatory. However, be aware that there is a significant change in the way Sin() and Cos() are optimized when called side by side with the same argument when using «fast math» that reduces the accuracy of the result. The new behavior is documented here.

Qt Support for Parameter Blocks Based UI

Class ClassDesc2_Extension2017SP2 has been deprecated, and the method below has been moved to class ClassDesc2 :

Qt Support in the 3ds Max Plugin Wizard

The 3ds Max Plugin Wizard has been updated to support generating code for Qt-based user interfaces for Utility Object, Geometric Object and Modifier plugin types. See the Plugin Wizard readme and the Using Qt with 3ds Max Plug-ins topic for more information about using Qt for plug-in user interfaces.

MAXScript RolloutControl

Plugin Package Requirements

Since the technology used by the Autodesk Developer Network to generate installers for plugin packages relies on the UpgradeCode to remain unchanged when a package with an updated plugin is released, while the ProductCode needs to change every time the plugin (or application) version is updated, 3ds Max 2020’s plugin package discovery and loading mechanism has been updated.

The manifest of plugin packages need to adhere to the following requirements:

Note that the plugin package loading mechanism has been exposed to the SDK; see class PluginPackageManager in maxsdk\include\pluginpackagemanager\pluginpackagemanager.h

Note that the MAXScript exposure of the package loading mechanism has been changed:

The «ExchangeStorePackageManager» interface has been renamed to «PluginPackageManager», although the previous name will be aliased to the new one

The method pathConfig.GetExchangeStorePlugInInstallPath() has been removed. Please use instead GetDir #publicExchangeStoreInstallPath()

Modifier Plugin Class Changes to Support Pb1 to Pb2 Migration

Impact on plugins that derive from class SimpleMod:
The only impact on 3rd party plugins that derive from class SimpleMod is a small non-mandatory change in their Clone method: remove the call that clones their PB1 since SimpleMod::SimpleModClone() now takes care of it.

In the following sample, the code that needs to be removed from current implementations of ReferenceTarget::Clone() overrides is commented out.

Impact on code that accesses SimpleMod ‘s parameter block:
Code that needs access to the PB1 held by a SimpleMod instance needs to use the IParamArray* BaseObject::GetParamBlock() accessor method. One can then use the IParamBlock* IParamArray::GetParamBlock() method to get to the PB1.

Impact on code that accesses SimpleMod2 ‘s parameter block:
Code that needs access to the PB2 held by an Animatable instance needs to use one of the following two methods:

Modeling

Triangulation Algorithms

Furthermore, the old DiagSort() function has been renamed to SortPolygonDiagonals() and moved next to the new functions.

API to Calculate Intersection of 3D Lines

The following function was added to the SDK to compute the point of intersection, or a least squares approximation to it, for an arbitrary number N of lines in three dimensions. See maxsdk\include\gutil.h.

Find Node From Modifier APIs

Two new functions have been introduced in the Modifier class to help find the node an object space modifier is modifying. Often these modifiers need context information available through the node object, such as transform or material related information. These functions neatly encapsulate the not so trivial logic of walking the modifier stack to find the node a given modifier application modifies. For more in depth information, please see the documentation for the following two methods:

Rendering

ActiveShade in the Viewports

The IActiveShadeFragmentManager class is for those developers who would like to control the ActiveShade in the viewport layer, or the ActiveShade fragment. This is a layer that is mixed into the viewport representation of the scene. The user can edit the scene while ActiveShade is running and see the results updated in real time in the viewport.

Preview Rendering

Interface::CreatePreview() now takes two additional optional parameters: a filename string to override the filename specified on the Preview Rendering dialog, and a snippet string that can contain MAXScript code to execute on each frame of the render. The return value from the MAXScript code snippet is displayed in the Preview output.

3ds Max OSL related APIs

For more information, see the MaxOSLInterface.h header file in the 3ds Max SDK.

Render Element Visibility Opt-in

Before 3ds Max 2020, render elements were visible to the scanline renderer by default.

In 3ds Max 2020, render elements need to explicitly declare themselves visible to the scanline renderer by implementing (overwriting) the following method to return TRUE :

Miscellaneous

ParamBlock2 id to index mapping

The performance of looking up a parameter index based on its id has been improved. This should impact positively those parameter blocks whose descriptor contains many parameters, such as the parameter block descriptors powering OSL shaders with many parameters.

User Locale Access

To ensure that the same decimal separator is used everywhere in the 3ds Max user interface, we exposed the following function which allows access to a cached value of the user locale 3ds Max acquired from Windows.

Please note that when exporting numeric values to various data files, it is a best practice to always use «.» as the decimal separator.

Archiving

Archiving a scene file has been exposed to the SDK, through the following API:

Compression

Setting and getting the scene file compression on save flag has been exposed to the SDK through the following APIs:

Tablet Support

The TabletManager class centralizes support for using pressure sensitive devices with 3ds Max.

Notifications

The following new notifications have been added:

Temporary Object Passing to Non-Const Parameters

In order to make our APIs comply with newer versions of the compiler, we have started to eliminate default parameters of non-trivial types passed by non-const reference.

One example of such an API is:

virtual float CameraObject::GetFOV(TimeValue t, Interval& valid = Interval(0,0))

This API has been changed to

virtual float CameraObject::GetFOV(TimeValue t, Interval& valid)

In order to minimize changes to client code, we also defined the following overload, which will be called any time the first API listed above was called with the default value for its «valid» parameter.

Note that this change should not require code changes in clients of the affected APIs.

New Application Folder Definitions

New application folder for user defined tools, such as MCG graphs or Scene Converter add-ins:

New application folder for fluid simulations:

New application folder where user settings files will be placed:

Binary Module Version Access

Getting the version of a binary module is now possible by calling the following API:

3ds Max Build Number Access

The following API returns the 3ds Max build number as a string of the form «#.#.#.#», where the numbers are the major version, the update version, the hot fix number, and the build number.

Floating Point / String Conversion

Transforming between floating point values and strings taking into account the current locale is allowed by these APIs:

CoreExport float GetFloatFromText(const TCHAR* buf, BOOL *valid);

CoreExport TSTR GetTextFromFloat(float f, int precision = 3);

G-buffer ID Change Message

New reference message sent when a node’s user defined properties of G-buffer id changed:

Deprecated APIs

PARTICLE_SYS_CLASS_ID has been deprecated. Please use virtual BOOL Object::IsParticleSystem() to determine if an object is a particle system.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *