Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> MAXScript: Плагиностроение, В помощь контентщику
Ice Blade
сообщение Oct 8 2006, 16:05
Сообщение #1


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



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

В обшем идеей написания специализированных скриптов для МАХ-а - я обзавёлся довольно давно, правда получаться что-то стало только недавно (IMG:style_emoticons/kolobok_light/smile.gif) И всё же хотелось бы распросить 3Д-шный народ о том какие задачи разработки контента хотелось бы больше всего упростить или ускорить ? - это в принципе может быть что угодно: от "Выбрать боковые грани полигона", до кнопки "Сделать Красива!!!"

Жду мыслей, по этому поводу.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
rdx
сообщение Oct 8 2006, 16:53
Сообщение #2


Level 5
Иконки Групп

Класс: Клерик
Характер: Lawful Good
Раса: Человек
NWN: Контент



Как раз в тему.. Только тема очень обширна, ведь уже есть куча плагинов просто для макса и специализированные - nwmax, veltools, tsc. Помогли бы:
1. Небольшой ликбез или faq по написанию собственных, начиная от создания кнопок и кончая работой с геометрией, преобразованиями и проч.
2. Общие библиотеки функций типа "найти следующую вершину с края объекта", "найти объекты с краевыми вершинами около данной точки", "выбрать найденное", "найти вершину с такими uvw", "найти объект по признакам (число вершин +- х, похожесть геометрии - как объекта х)", "экспорт в mdb" и т.д.
3. Проверки правильности структуры mdl и mdb, их параметров. Хотя это не особо нужно - такая прога для mdl уже есть и наверно появится на ваулте, версия ее для mdb не заставит себя ждать.

Из того, что хотелось бы сейчас:
1. Что-нибудь для массового разрезания моделей с автоматическим добавлением плоскостей в место разреза.
2. Уменьшение числа полигонов на плоскости или на нескольких пересекающихся плоскостях, если это возможно. В расчет берется uvw карта, id материала, сглаживание.
3. Пододвигание вершин на определенных краях модели по маске или по эталону с другой модели.
4. Обычное максовское текстурирование, только с сохранением существующих uvw на выбранных вершинах.
5. Конвертор nwn моделей в nwn2. Все равно, сначала народ именно этим и будет заниматься.

Все это, конечно, бесполезно, пока народ не разберется в структуре моделей и пока не появится плагин импорта/экспорта.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 8 2006, 18:53
Сообщение #3


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



Я знаю что тема общирна, и всё таки давайте чуть-чуть поконкретней.

Ладно попорядку:
QUOTE(rdx @ Oct 8 2006, 19:53) [snapback]94058[/snapback]
1. Небольшой ликбез или faq по написанию собственных, начиная от создания кнопок и кончая работой с геометрией, преобразованиями и проч.

Есть такая замечательная вещь как MAXScript Reference, которая как правило идёт вместе с мах-ом и представляет собой тоже самое что и былой Lexicon для НВН, куча примеров, ещё больше описаний и функций - короче говоря библия MS. Кто захочет тот поймёт, на крайний случай спросит что не понял.
По этому сразу определимся - учить кого-то занятие бесполезное,- увы я уже это проходил ещё на первом НВН. Подсказать что-то - это святое дело, а вот учить никого небуду - хватит с меня академий и прочего бесполезного времяпровождения.

Что до:
QUOTE
1. Что-нибудь для массового разрезания моделей с автоматическим добавлением плоскостей в место разреза.

Кое-что несложное попробую завтра набросать, должно получиться.

QUOTE(rdx @ Oct 8 2006, 19:53) [snapback]94058[/snapback]
2. Уменьшение числа полигонов на плоскости или на нескольких пересекающихся плоскостях, если это возможно. В расчет берется uvw карта, id материала, сглаживание.

Ничего непонял, - т.е нужно что-то типа Optimize + Safe UVW ?, - т.к всё остальное неизвестно откуда брать: сглаживание (т.е группы глаживания) это свойство каждого конкретного полигона и если их до оптимизации было несколько - то какую использовать после ? - тех полигонов что рядом или среднюю от старых ? - то же касается и id материала. Поподробней пожалуйста в формате примера: что есть ? - и что хотим из этого получить ?

QUOTE(rdx @ Oct 8 2006, 19:53) [snapback]94058[/snapback]
3. Пододвигание вершин на определенных краях модели по маске или по эталону с другой модели.

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

QUOTE(rdx @ Oct 8 2006, 19:53) [snapback]94058[/snapback]
4. Обычное максовское текстурирование, только с сохранением существующих uvw на выбранных вершинах.

Тут так вооще что-то неясное, разве Unwrap UVW - этого непозволяет ? Или на крайний случай Mesh Select в стеке перед UVW Map - этого не даёт ? Поподробней короче говоря - а то я кажется неправильно понял.

QUOTE
5. Конвертор nwn моделей в nwn2. Все равно, сначала народ именно этим и будет заниматься.

Вот эта штука по моему бессмысленная, - т.к даже если это кому-то понадобиться, что мешает пользоваться стандарными процедурами импорта/экспорта ? - или нужно перегнать весь тайлсет(персы, плейсиблы) за раз что-ли ?

QUOTE(rdx @ Oct 8 2006, 19:53) [snapback]94058[/snapback]
Все это, конечно, бесполезно, пока народ не разберется в структуре моделей и пока не появится плагин импорта/экспорта.

Ну.... если смотрел соседнюю тему то с импортом проблемм пока не так много (IMG:style_emoticons/kolobok_light/smile.gif) , - как только полностью вскроют бинарик MDB, то и с экспортом нестанет (IMG:style_emoticons/kolobok_light/biggrin.gif)

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
rdx
сообщение Oct 9 2006, 00:40
Сообщение #4


Level 5
Иконки Групп

Класс: Клерик
Характер: Lawful Good
Раса: Человек
NWN: Контент



QUOTE(Ice Blade @ Oct 8 2006, 18:53) [snapback]94071[/snapback]

Я знаю что тема общирна, и всё таки давайте чуть-чуть поконкретней.

Ладно попорядку:

Есть такая замечательная вещь как MAXScript Reference, которая как правило идёт вместе с мах-ом и представляет собой тоже самое что и былой Lexicon для НВН, куча примеров, ещё больше описаний и функций - короче говоря библия MS. Кто захочет тот поймёт, на крайний случай спросит что не понял.
По этому сразу определимся - учить кого-то занятие бесполезное,- увы я уже это проходил ещё на первом НВН. Подсказать что-то - это святое дело, а вот учить никого небуду - хватит с меня академий и прочего бесполезного времяпровождения.

Пожалуй да, хватит упоминания Macro Recorder, Visual MaxScript и этого Reference, эт я так, на всякий случай (IMG:style_emoticons/kolobok_light/smile.gif)

Насчет 1, такой скрипт нужен чтобы в тайлсетах фэйд нормальный делать. На данный момент (в буквальном смысле) он может пригодиться для обработки CTP Dwarfen Halls, хотя часть тайлов уже была сделана за выходные.

Остальные плагины особой ценности прямо сейчас не представляют, но могут пригодиться потом. Все они расчитаны на массовую работу с многими моделями.

QUOTE
Ничего непонял, - т.е нужно что-то типа Optimize + Safe UVW ?, - т.к всё остальное неизвестно откуда брать: сглаживание (т.е группы глаживания) это свойство каждого конкретного полигона и если их до оптимизации было несколько - то какую использовать после ? - тех полигонов что рядом или среднюю от старых ? - то же касается и id материала. Поподробней пожалуйста в формате примера: что есть ? - и что хотим из этого получить ?

Именно, Optimize + Safe UVW, только чуток более умный. Пример в архиве. Конечно, для простой модели проще карту наложить снова, ну а если модель большая?

3 - Я думал сделать такой плагин как добавку к tsc. Загружено два тайла, по информации из tsc в местах их контакта описания terrain совпадают. У одного вертексы стены слева на краю не 5.00, а 5.01, а также на полу справа один сдвинут на пару см. Надо взять одну модель за образец, а у объектов другой пододвинуть точки. Это, понятное дело, нужно для избавления от промежутков между тайлами.

4 - Тут сложнее объяснить. Скажем, есть яйцо, обрезанное снизу и сверху, с окнами - домик такой. Хочется заново оттекстурировать это яйцо, но нужно сохранить UVW на вертексах внизу, сверху и на окнах, чтобы там не проступили границы. Непрерывной карты текстурирования для такого случая не подберешь (эллипс не катит). Если оттекстурировать заново только часть полигонов, которые с этими точками не соприкасаются, то тогда текстура прервется по границе между этой частью и оставшимися.. Вообщем, это скорее из области фантастики, это та самая кнопка "сделать красива", т.к. такие вещи получаются лишь на простых объектах - стена, полусфера. Приходится делать UVW Unwarp и долго двигать одни верты, сохраняя при этом положения других.

QUOTE
Вот эта штука по моему бессмысленная, - т.к даже если это кому-то понадобиться, что мешает пользоваться стандарными процедурами импорта/экспорта ? - или нужно перегнать весь тайлсет(персы, плейсиблы) за раз что-ли ?

5 - Да, именно за раз, хотя тут лучше без макса обойтись.
Прикрепленные файлы
Прикрепленный файл  ttf01_sometile.7z ( 2.46 килобайт ) Кол-во скачиваний: 14
 
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 9 2006, 07:00
Сообщение #5


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



QUOTE(rdx @ Oct 9 2006, 03:40) [snapback]94110[/snapback]
Пожалуй да, хватит упоминания Macro Recorder, Visual MaxScript и этого Reference, эт я так, на всякий случай

Да в общем тут-то и упоминать-то особо нечего:
Macro Recorder - пишет в команды всё что ты делаешь ( на практике, пользуешься им только по началу, потом почитав Reference - понимаешь что штука не больно то нужная - ибо есть куча функций и проще, и короче, а главное быстрее тех что предлагает Recorder)

Visual MaxScript - тоже штука сомнительной необходимости, единственное зачем нужна - это сделать наглядную заготовку интерфейса, конечно якобы есть возможности писать код прям в "кнопку" - но толку от них немного т.к как правило в кнопку ставишь уже конечную команду, а кучу основных функций прогоняешь где-то в другом месте.

QUOTE(rdx @ Oct 9 2006, 03:40) [snapback]94110[/snapback]
Именно, Optimize + Safe UVW, только чуток более умный. Пример в архиве. Конечно, для простой модели проще карту наложить снова, ну а если модель большая?

Гляну, попозже скажу что и как.

QUOTE(rdx @ Oct 9 2006, 03:40) [snapback]94110[/snapback]
3 - Я думал сделать такой плагин как добавку к tsc. Загружено два тайла, по информации из tsc в местах их контакта описания terrain совпадают. У одного вертексы стены слева на краю не 5.00, а 5.01, а также на полу справа один сдвинут на пару см. Надо взять одну модель за образец, а у объектов другой пододвинуть точки. Это, понятное дело, нужно для избавления от промежутков между тайлами.

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

QUOTE(rdx @ Oct 9 2006, 03:40) [snapback]94110[/snapback]
5 - Да, именно за раз, хотя тут лучше без макса обойтись.

Сочуствую, во первых гемороя с этим больше чем нужно, а во вторых есть сомнения ибо много чего изменилось в моделях MDB и порой будет проще заново перерисовать, чем експортнуть старое (IMG:style_emoticons/kolobok_light/sad.gif) - увы.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 11 2006, 13:03
Сообщение #6


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



-----------------------------
Вот и первенец: -=TileSlicer=-

Скриптик для разрезания объекта, ну или группы объектов.
Запуск (если кто не знает MAXScript-> Run Script -> имя скрипта)

SlicePanelX, SlicePanelY - создаёт заданное количество плоскостей реза.
offset - растояние между плоскостями.

Slice Threshold - компенсация на смещение вертекса после реза см. ниже.

Slice - собственно рез.

Как работает:
- Выделяем объект или несколько объектов
- Изменяем значение SlicePanelX, SlicePanelY, offset - по вкусу
- Если что поправляем Slice Threshold
- Ну и жмём на Slice

Проблеммы и Slice Threshold:
В общем как выяснилось порезать объект - не проблема, проблема потом нужное отделить. Ввиду известной вещи с точностью - сравнение float 0.000001 == float 0.000001 - довольно часто выдаёт false (IMG:style_emoticons/kolobok_light/crazy.gif) , потому что храниться одно число, показывается другое, а считается вообще третье - я не программер и решить такой вопросс пока немогу.
Да и ещё как выяснилось сам механизм slice тоже размещает вершины с некоторой ошибкой в реальных координатах - причину понять тоже пока немогу но идеи как исправить есть, знаю ещё только что это сам мах глючит, а точнее его преобразования в системмах координат.
В общем ввиду вышесказанного, я решил сделать "ход конём" ввидя параметр Slice Threshold он добавляет маленько смещения к выборке вершин при резе, и избавляеет то некоторых глюков.

Если у кого-то есть время, просьба опробовать эту штуковину - и отписаться о глюках и пожеланиях.


-------
Ах да чуть не забыл, пока окно Slicer-а открыто и созданны Slice Plane-ы, теоретически их можно двигать как захочется - правда незнаю как проглючит, если один передвинуть за другой.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
rdx
сообщение Oct 12 2006, 01:00
Сообщение #7


Level 5
Иконки Групп

Класс: Клерик
Характер: Lawful Good
Раса: Человек
NWN: Контент



Гхм, эта вещь 100% полезна, спасибо! Но это немного не там, где надо..
По порядку. Макс 7, скрипт при первом запуске и выставлении кол-ва плоскостей в 1 дал ошибку, дальше никак не работал. Перезапуск скрипта пошел на пользу, выбрал 2 плоскости, расстояние, нажал слайс - все получилось, UVW сохранены, но объекты преобразованы, а модификатор "trimesh" куда-то делся. Неплохо бы еще и имена объектов дописывать, а не заменять на новые. В принципе, напоминает аналогичные утилиты, только удобнее.

Но скрипт не делает той важной вещи, ради которой я и написал в тему (IMG:style_emoticons/kolobok_light/sad.gif) . Это моя вина, что забыл сразу нормально объяснить. Я хотел что-то для разрезания объектов тайлов на исчезающие (fadeable) и остающиеся, на определенной высоте Z. После самого разрезания нужно достроить по получившимся на высоте Z точкам черные плоскости, не выходящие за рамки тайла (-500..500 по x,y). Например, разрезал колонну, а в место разреза вставил черную плоскость, построенную по точками, оставшимся после разрезания. Естественно, плоскость строится внутри колонны (ее полигоны противолежат нормалям полигонов колонны в месте разреза).
Вот это последнее и вызывает наибольшие проблемы. Есть какие-нибудь идеи?
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 12 2006, 07:46
Сообщение #8


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



QUOTE(rdx @ Oct 12 2006, 04:00) [snapback]94465[/snapback]
По порядку. Макс 7, скрипт при первом запуске и выставлении кол-ва плоскостей в 1 дал ошибку, дальше никак не работал. Перезапуск скрипта пошел на пользу, выбрал 2 плоскости, расстояние, нажал слайс - все получилось, UVW сохранены, но объекты преобразованы, а модификатор "trimesh" куда-то делся. Неплохо бы еще и имена объектов дописывать, а не заменять на новые. В принципе, напоминает аналогичные утилиты, только удобнее.


- В данном скрипте команды универсальные потому от версии (от 6-ки) зависить недолжны, но опять же - кто его знает, - сам я писал на 8-ке.
- Насчёт модификаторов и прочего, я их неучитывал ибо пока понятия неимею что будет на НВН2, а целится на НВН1 уже и смысла то много нет. Потому стоит простая проверска класса объекта если он не editable poly зачит конвертиться в такой, но само собой всякого рода хелперы и прочие не геометрические объекты в EPoly не переконвертишь - постараюсь учесть это в будующем.
- Что за ошибку, точнее что написал (если кракозябры - просьба написать какие), разберусь ибо у меня всплывало что-то подобное, но я думал что исправил ошибку.

- Что до имён то хотел спросить, а как их называть ? - объктов то становиться больше, да и до реза их может быть несколько. Куда и что дописывать, в имени каждого нового объекта ???

----------------------

QUOTE(rdx @ Oct 12 2006, 04:00) [snapback]94465[/snapback]
Но скрипт не делает той важной вещи, ради которой я и написал в тему . Это моя вина, что забыл сразу нормально объяснить. Я хотел что-то для разрезания объектов тайлов на исчезающие (fadeable) и остающиеся, на определенной высоте Z. После самого разрезания нужно достроить по получившимся на высоте Z точкам черные плоскости, не выходящие за рамки тайла (-500..500 по x,y). Например, разрезал колонну, а в место разреза вставил черную плоскость, построенную по точками, оставшимся после разрезания. Естественно, плоскость строится внутри колонны (ее полигоны противолежат нормалям полигонов колонны в месте разреза).


Так значит, в крацах - примерный механизм:
- по Z (будем считать Z в мировых координатах - т.е высота), проводить будем один рез.

- за основу реза возьмём свободную плоскость, вот тут вопросы:
- как это обыграть в интерфейсе, чтоб было наглядней, - основные варианты:
1. Фиксированная плоскость, наклон и положение регулируется через значения в интерфейсе
( скажем настройки такие Plane: rotation X, rotation Y, rotation Z, Position Z, кнопка Slice) всё остальное
считает скрипт. Возможна легко реализуемая массовая обработка, - т.е для каждого объекта в
отдельности (или в массе) по заданным параметрам создаться плоскость реза, которая потом будет
служить основой для Slice функции. ( ну примерно как сейчас в TileSlicer-e).

2. Свободная плоскость реза, выберается по кнопке Pick Plane ( или что-то вроде неё). Сложность сдесь в
том что нужно будет соблюдать определённые правила при расстановке плоскости, иначе будет сбоить
(ну или если учту многие проверки, то просто откажется работать (IMG:style_emoticons/kolobok_light/smile.gif) ) Но интерфейс прост до безобразия
две кнопки Pick Plane и Slice.

- Далее на основе новых "резных" вершин создаётся заплатка, тут тоже есть вопросы:
- Заплатка должна быть отдельной, или являться частью отделяемого объекта ?
- Что делать с UVW этой заплатки, текстурить как-то по умолчанию - или оставить как есть, - т.к всё равно
практически в 90% случаев прийдётся натягивать свой UVW.
- Что делать с материалом, назначить по умолчанию, либо предложить к обязательному выбору в интерфейсе ?

И как и выше, спрашиваю: как это всё потом именовать ?


PS
Спасибо, за баг - посмотрю может и у меня получиться его вызвать - тогда хоть исправлю.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
rdx
сообщение Oct 12 2006, 12:19
Сообщение #9


Level 5
Иконки Групп

Класс: Клерик
Характер: Lawful Good
Раса: Человек
NWN: Контент



QUOTE(Ice Blade @ Oct 12 2006, 07:46) [snapback]94475[/snapback]

- В данном скрипте команды универсальные потому от версии (от 6-ки) зависить недолжны, но опять же - кто его знает, - сам я писал на 8-ке.
- Насчёт модификаторов и прочего, я их неучитывал ибо пока понятия неимею что будет на НВН2, а целится на НВН1 уже и смысла то много нет. Потому стоит простая проверска класса объекта если он не editable poly зачит конвертиться в такой, но само собой всякого рода хелперы и прочие не геометрические объекты в EPoly не переконвертишь - постараюсь учесть это в будующем.
- Что за ошибку, точнее что написал (если кракозябры - просьба написать какие), разберусь ибо у меня всплывало что-то подобное, но я думал что исправил ошибку.

- Что до имён то хотел спросить, а как их называть ? - объктов то становиться больше, да и до реза их может быть несколько. Куда и что дописывать, в имени каждого нового объекта ???

А рез нельзя сделать без конвертации? Потом, в нвн2 наверняка будут похожие модификаторы, только имена поменяются. А пока этот скрипт пригодится для нвн1, в него еще годик поиграют.

Насчет ошибки см. прикрепленный файл. Вызывается так - запуск макса, вместе с ним nwmax и veltools, затем загрузка модели, затем открываю скрипт и поднимаю slicepanelY до 1. Лечится ресетом.


С именами можно поступить так - к существующим добавить с01, с02, ..

QUOTE

Так значит, в крацах - примерный механизм:
- по Z (будем считать Z в мировых координатах - т.е высота), проводить будем один рез.

- за основу реза возьмём свободную плоскость, вот тут вопросы:
- как это обыграть в интерфейсе, чтоб было наглядней, - основные варианты:
1. Фиксированная плоскость, наклон и положение регулируется через значения в интерфейсе
( скажем настройки такие Plane: rotation X, rotation Y, rotation Z, Position Z, кнопка Slice) всё остальное
считает скрипт. Возможна легко реализуемая массовая обработка, - т.е для каждого объекта в
отдельности (или в массе) по заданным параметрам создаться плоскость реза, которая потом будет
служить основой для Slice функции. ( ну примерно как сейчас в TileSlicer-e).

2. Свободная плоскость реза, выберается по кнопке Pick Plane ( или что-то вроде неё). Сложность сдесь в
том что нужно будет соблюдать определённые правила при расстановке плоскости, иначе будет сбоить
(ну или если учту многие проверки, то просто откажется работать (IMG:style_emoticons/kolobok_light/smile.gif) ) Но интерфейс прост до безобразия
две кнопки Pick Plane и Slice.

- Далее на основе новых "резных" вершин создаётся заплатка, тут тоже есть вопросы:
- Заплатка должна быть отдельной, или являться частью отделяемого объекта ?
- Что делать с UVW этой заплатки, текстурить как-то по умолчанию - или оставить как есть, - т.к всё равно
практически в 90% случаев прийдётся натягивать свой UVW.
- Что делать с материалом, назначить по умолчанию, либо предложить к обязательному выбору в интерфейсе ?

И как и выше, спрашиваю: как это всё потом именовать ?


Пункт 2 наиболее прост, однако лучше сделать 1+2, т.е. дать возможность генерировать одну (только одну) горизонтальную плоскость на высоте Z, причем сразу на всю сцену (на несколько тайлов). Наклоны и все прочее можно оставить для отдельно создаваемых плоскостей.

Заплатку создавать без текстурирования, отдельным объектом c именем, например, slplane01, нормали полигонов вверх (случаи, когда кому-нить потребуется вниз, редки, инвертировать можно быстро). Материал можно любой, легко переназначить потом. Заплатки почти наверняка нужно создавать отдельные для каждого порезанного объекта.

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

Выглядит это так:

(*) Выполнить на высоте Z () Выбрать плоскость
(*) для выбранных объектов () Для всех объектов сцены
Порезать!
Прикрепленные файлы
Прикрепленный файл  tileslicererror.jpg ( 48.7 килобайт ) Кол-во скачиваний: 32
 
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 12 2006, 14:38
Сообщение #10


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



QUOTE(rdx @ Oct 12 2006, 15:19) [snapback]94545[/snapback]
Насчет ошибки см. прикрепленный файл. Вызывается так - запуск макса, вместе с ним nwmax и veltools, затем загрузка модели, затем открываю скрипт и поднимаю slicepanelY до 1. Лечится ресетом.

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

QUOTE(rdx @ Oct 12 2006, 15:19) [snapback]94545[/snapback]
А рез нельзя сделать без конвертации? Потом, в нвн2 наверняка будут похожие модификаторы, только имена поменяются. А пока этот скрипт пригодится для нвн1, в него еще годик поиграют.

Объясняю почему нет:
Короче - slice свойство Editable Poly, следовательно вызывается соответствующим модификатором либо инструментом (типа polyop.*), если в стеке висит модификатор то после Slice-а или отделения объекта - информация о вершинах и прочем меняется, потому если модификатор использует свои методы хранения информации ( например полигон № 15 считать видимый), то после отделения инфа меняется и что к чему модификатор уже непонимает. Решить проблемму можно либо умным написанием самого модификатора ( что маловероятно), либо считыванием инфы с текущего, преобразования и назначения на новый объект такого-же но немного подправленного модификатора - что не так просто учивыя что есть несколько видов плагинов и каждый работает по своему. Вывод - это можно сделать, но геморно и требует знаний (инфы о том в каких переменных и "что" он хранит) конкретного плагина.

QUOTE(rdx @ Oct 12 2006, 15:19) [snapback]94545[/snapback]
С именами можно поступить так - к существующим добавить с01, с02, ..

И какая разница ? что SliceObj01 что С01 ?

QUOTE(rdx @ Oct 12 2006, 15:19) [snapback]94545[/snapback]
Пункт 2 наиболее прост, однако лучше сделать 1+2, т.е. дать возможность генерировать одну (только одну) горизонтальную плоскость на высоте Z, причем сразу на всю сцену (на несколько тайлов). Наклоны и все прочее можно оставить для отдельно создаваемых плоскостей.

Первый способ - сам по себе это учитывает, - т.к 100 плоскостей в тех же координатах - это и есть по сути одна и та же плоскость. Указал координаты - он их сгенерил на одной и той же высоте, нужные если надо подправил отдельно, ну и нажал Slice. Разница здесь лишь в интерфейсе задания, возможности в принцепе одинаковые. Что до всей сцены, то нужно сделать просто Select All фильтр на не геометрию я прикручу.

QUOTE(rdx @ Oct 12 2006, 15:19) [snapback]94545[/snapback]
Заплатку создавать без текстурирования, отдельным объектом c именем, например, slplane01, нормали полигонов вверх (случаи, когда кому-нить потребуется вниз, редки, инвертировать можно быстро). Материал можно любой, легко переназначить потом. Заплатки почти наверняка нужно создавать отдельные для каждого порезанного объекта.

Ясно, так и поступим.

QUOTE(rdx @ Oct 12 2006, 15:19) [snapback]94545[/snapback]
Неясно только что делать в случае, если у разрезаемого объекта стенки открытые (угол дома, например).. Но это уже вручную можно.

А зачем фейд на углу дома ? (IMG:style_emoticons/kolobok_light/smile.gif) или я чего-то непонял. Ну а вообще полигоны будут создаваться по вертексам оставшимся от реза с нормалью уверх ( в смысле по мировой Z). Так что если что-то прийдётся обрезать эти правила будут везде.

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
rdx
сообщение Oct 12 2006, 23:39
Сообщение #11


Level 5
Иконки Групп

Класс: Клерик
Характер: Lawful Good
Раса: Человек
NWN: Контент



QUOTE
.. либо считыванием инфы с текущего, преобразования и назначения на новый объект такого-же но немного подправленного модификатора - что не так просто учивыя что есть несколько видов плагинов и каждый работает по своему. Вывод - это можно сделать, но геморно и требует знаний (инфы о том в каких переменных и "что" он хранит) конкретного плагина.

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

QUOTE
И какая разница ? что SliceObj01 что С01 ?

Есть объект AMBA. Нужно, чтобы после скрипта его имя было AMBAxxx, где xxx = SliceObj01, c01, что угодно, а не просто SliceObj01. Зачем? Это отдельная песня (IMG:style_emoticons/kolobok_light/smile.gif) Трудно ли добавлять к имени, а не переписывать его? Впрочем, и так как есть сойдет.

QUOTE
А зачем фейд на углу дома ? или я чего-то непонял. Ну а вообще полигоны будут создаваться по вертексам оставшимся от реза с нормалью уверх ( в смысле по мировой Z). Так что если что-то прийдётся обрезать эти правила будут везде.

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

Вот, например, часть тайла из dwarfen halls:
есть -

нужно -

Что если сделать такую опцию - сначала добавлять 4 точки(500,500 -500,500 -500,-500 500,-500) на высоте реза, а затем их учитывать при создании заплатки? Как считаешь, реализуемо?
Прикрепленные файлы
Прикрепленный файл  nujno.jpg ( 36.63 килобайт ) Кол-во скачиваний: 32
Прикрепленный файл  est.jpg ( 31.92 килобайт ) Кол-во скачиваний: 30
 
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 13 2006, 06:49
Сообщение #12


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



QUOTE(rdx @ Oct 13 2006, 02:39) [snapback]94640[/snapback]
Ну, для макса я знаю только два плагина, причем один из них настолько устарел.. :o Обычно так и делают, я даже припоминаю кусок кода из veltools для одной из таких операций. Если захочешь включить эту опцию в скрипт - я найду и напишу кусок кода здесь.

NWmax, Mdl Plug-in Suite, Bioware Export Scripts и прочие, каждый использует свои обозначения - да и как я уже говорил - смысла нет разрабатывать инструментарий под НВН1, - т.к к моменту его более-менее готовности уже вовсю будет ходить НВН2, под который толковый инструментарий будет куда более востребован. Потому я стараюсь пока делать "универсальные" вещи, которые не привязанны к плагинам.

QUOTE(rdx @ Oct 13 2006, 02:39) [snapback]94640[/snapback]
Есть объект AMBA. Нужно, чтобы после скрипта его имя было AMBAxxx, где xxx = SliceObj01, c01, что угодно, а не просто SliceObj01. Зачем? Это отдельная песня Трудно ли добавлять к имени, а не переписывать его? Впрочем, и так как есть сойдет.

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

QUOTE(rdx @ Oct 13 2006, 02:39) [snapback]94640[/snapback]
Что если сделать такую опцию - сначала добавлять 4 точки(500,500 -500,500 -500,-500 500,-500) на высоте реза, а затем их учитывать при создании заплатки? Как считаешь, реализуемо?

Отдельным кодом да, общим нет - причина, центр объкта далеко не всегда в центре (IMG:style_emoticons/kolobok_light/smile.gif) , потому в общем скрипте я хочу обойтись без вычисления координат. И ещё одно но, рез будет делаться локально для одного объекта, а значит у каждого объекта будет своя заплатка в отдельности, иначе я повешусь с последующей теселяцией плоскости между несколькими объектами, - впрочем посмотрим может что-то ещё придумаю, идеи уже появляются.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Leon PRO
сообщение Oct 15 2006, 16:19
Сообщение #13


Ушедший на войну
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Контент



1. По 1 нажатию выделять самого первого родителя в цепочке привязки объектов.
2. По 1 нажатию выделять всех детей в цепочке привязки объектов.
3. Импорт "группы тайлов" с сохранением комплексного вида группы как в тулсете. Т.е. тайлы надо будет правильно расставить.
4. Составление импорт/экспорт ландшафтного меша НВН2 в макс и обратно (IMG:style_emoticons/kolobok_light/biggrin.gif)
5. На 1 кнопку экспортировать модель под определенным именем (не знаю как это будет в НВН2, если также привязано к Аурабэйз, то под именем этого Аурабэйз) и запускать тулсет. (IMG:style_emoticons/kolobok_light/biggrin.gif) Причем какой бы не была сцена - сохраняется модель ОДНОГО тайла, если какая либо из его частей выделена, или опционально просто экспортировать модель без запуска тулсета.
6. Если в тайлсетах индора позиция двери будет определяться координатой в центре нижней части косяка, то, нужна кнопка сохранения в текстовик рядом с моделью файла всех dummy (имен и коорданат), которые будут выставлены и развернуты заранее в максе в тех точках, координаты которых надо экспортировать.

Есть несклько предложений, но из за того, что неизвестно будут ли эти траблы в НВН2 писат о них нет смысла.

Сообщение отредактировал Leon PRO - Oct 15 2006, 16:41
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 15 2006, 17:29
Сообщение #14


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



QUOTE

1. По 1 нажатию выделять родителя в цепочке привязки объектов.
2. По 1 нажатию выделять всех детей в цепочке привязки объектов.

page Up - выбор потомка
page Down - выбор предка
ctrl + page Up - выбор всех потомков (то же самое двойной клик лкм на объекте )

Выбрать же главного предка, действительно нельзя, но можно зажать page Down до предела (IMG:style_emoticons/kolobok_light/smile.gif) , - дальше начала не спрыгнет. Ну если так остро надо, то я могу чего нить написать.


QUOTE

3. Импорт "группы тайлов" с сохранением комплексного вида группы как в тулсете. Т.е. тайлы надо будет правильно расставить.


С этим интерестней, т.к помнищь модель что дал мне ? - выяснилось (см. MDB или как его там) что группа теперь держиться в одном файле (IMG:style_emoticons/kolobok_light/smile.gif) , так что походу разделение на тайлы нужно лишь для каких-то иных нужд тулсета вроде поиска пути или чего-то подобного.

QUOTE

4. Составление импорт/экспорт ландшафтного меша НВН2 в макс и обратно

Есть плагин к НВН что позволяет импортить Height map, а у МАХ-а - есть модификатор displace что позволяет строить этот самый ландшафт по мапе - в общем они созданны друг для друга (IMG:style_emoticons/kolobok_light/smile.gif) , если удасться вытянуть из НВН кое какие данные, то за МАХ-ом и соответствующим скриптом дело не встанет. - всё упирается в этот самый Height map, хотя возможно есть способ зятянуть не только геометрию но и сами текстуры, но это уже нужно взглянуть на внутренности тулсета и модуля.

QUOTE

5. На 1 кнопку экспортировать модель под определенным именем (не знаю как это будет в НВН2, если также привязано к Аурабэйз, то под именем этого Аурабэйз) и запускать тулсет. Причем какой бы не была сцена - сохраняется модель ОДНОГО тайла, если какая либо из его частей выделена, или опционально просто экспортировать модель без запуска тулсета.

Дождёмся НВН и посмотрим что можно сделать, в данном случае.

QUOTE

6. Если в тайлсетах индора позиция двери будет определяться координатой в центре нижней части косяка, то, нужна кнопка сохранения в текстовик рядом с моделью файла всех dummy (имен и коорданат), которые будут выставлены и развернуты заранее в максе в тех точках, координаты которых надо экспортировать.

Ни чего непонял, можно понятней - если нужно даже с картинками плиз (IMG:style_emoticons/kolobok_light/smile.gif) .


PS
Щас как только разберусь с девяткой и доделаю резак, всё таки если прикинуть штука ценная.
Кстати для справки плагины под 8-ку и ниже, девяткой не поддерживаются - скрипты частично тоже. Так что имеем ввиду.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Leon PRO
сообщение Oct 15 2006, 17:49
Сообщение #15


Ушедший на войну
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Контент



QUOTE
Ни чего непонял, можно понятней - если нужно даже с картинками плиз

Короче, если я понаставлю по всей сцене Dummy с именами Door_XXXX то чтобы по нажатию кнопки, в текстовый файл рядом с моделью сохранялись в столбик "имя думмми, координаты думми, угол поворота думми"

ВотЪ
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 15 2006, 18:35
Сообщение #16


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



QUOTE(Leon PRO @ Oct 15 2006, 20:49) [snapback]94870[/snapback]
в текстовый файл рядом с моделью сохранялись в столбик "имя думмми, координаты думми, угол поворота думми"


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

- координаты и угол поворота относительно чего ? - мира, локально кокого-то объекта. - если объекта то какого ?
А вообще могу сбросить любую инфу, о гизме.
ах да ещё плиз опиши формат текстовика, т.е к примеру:
имя позиция угол_поворота_по_Y - что выдаст примерно:
Dummy [0.0,10.0,5.0] 90.0

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Leon PRO
сообщение Oct 15 2006, 19:02
Сообщение #17


Ушедший на войну
Иконки Групп

Класс: Маг
Характер: Chaotic Good
Раса: Человек
NWN: Контент



Айс... просто держи в уме, точно все скажу когда сделаю первый импорт-экспорт (IMG:style_emoticons/kolobok_light/smile.gif)
Главное, что можешь сбросить в текстовик инфу.

Сообщение отредактировал Leon PRO - Oct 15 2006, 19:03
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
Ice Blade
сообщение Oct 16 2006, 17:52
Сообщение #18


Трехмерный Маньяк
Иконки Групп

Класс: Мастер Оружия
Характер: Lawful Neutral
Раса: Нежить
NWN: Контент
Проклятие Левора



Мда... необходимость в резаке с заплаткой отпала сама по себе, т.к - в девятку встроен Boolean Pro - что по сути лишает смысла данного скрипта... (IMG:style_emoticons/kolobok_light/sad.gif) , ибо делает тоже самое только лучше и быстерее (IMG:style_emoticons/kolobok_light/smile.gif)

Потому бросаю и выкладываю то что пока прикинул:
CODE

----------------------
-- in parametrs

obj = $    -- object to Slice
oSlicePlane = $Plane01 -- Slice Plane


----------------------
-- Cut and Datach

polyop.setvertselection obj #()
in coordsys obj (obj.slice oSlicePlane.dir oSlicePlane.Pos)

oVerts = polyop.getvertselection obj  

OtherVerts = for i = 1 to obj.verts.count where (in coordsys oSlicePlane (obj.verts[i].pos.z  > 0.0)  )  collect i
oDetachingVerts = (otherVerts as bitarray) - overts

polyop.setvertselection obj overts
polyOp.detachVerts obj  oDetachingVerts delete:true asNode:true name:"SlicedObject01"

----------------------
-- Cap Verts

polyOp.capHolesByVert obj (polyop.getvertselection obj)
obj.EditablePoly.ConvertSelectionToBorder #Vertex #Face

polyOp.detachFaces obj  (polyop.getfaceselection obj) delete:true asNode:true name:"CapObject01"

--------------------
-- Asign and Clearing Plane

$SlicedObject*.xray = true
$CapObject*.wirecolor = (color 0 0 0)
delete oSliceplane
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 20th July 2024 - 00:45