1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Объединение всех объектов сцены в один.

Тема в разделе "MAXScript", создана пользователем ARTIS, 15 ноя 2013.

Модераторы: Savin Denis
  1. ARTIS

    ARTIS Активный участник

    С нами с:
    08.02.2006
    Сообщения:
    82
    Симпатии:
    0
    Баллы:
    5
    Привет. Задача, казалось бы, тривиальная, но что-то не могу решить. Нужно из множества отдельных объектов в сцене получить один объект типа меш.
    Наверное, идеальным был бы вариант сколлапсить всё это дело, но в скриптах ничего похожего не нашёл.
    Второй вариант - аттачить поочереди каждый объект к какому-то одному объекту. Возможно, есть ещё какие-то варианты.
    Помогите, пожалуйста, переварить выше изложенные мысли в код :)
     
  2. Андрей Бельский

    Андрей Бельский Активный участник

    С нами с:
    20.12.2001
    Сообщения:
    404
    Симпатии:
    22
    Баллы:
    18
    в эдит поли есть кнопка аттач и там можно выбрать список.
     
  3. ARTIS

    ARTIS Активный участник

    С нами с:
    08.02.2006
    Сообщения:
    82
    Симпатии:
    0
    Баллы:
    5
    Спасибо за ответ! но ничего, что пост в теме MAXScript? :)
    И, кстати. вот ещё:
     
  4. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Пример. В новой сцене создаем 3 чайника Teapot. Запускаем скрипт:
    Код:
    g=$geometry as array; convertToMesh g
    for i=2 to g.count do meshop.attach g[1] g[i]
     
  5. ARTIS

    ARTIS Активный участник

    С нами с:
    08.02.2006
    Сообщения:
    82
    Симпатии:
    0
    Баллы:
    5

    Это то, что нужно! Спасибо огромное. Пытался делать по такому же принципу, но немного напутал с синтаксисом. Ваш вариант отлично работает!
     
  6. Фигли

    Фигли Пользователь сайта

    С нами с:
    20.01.2012
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Если неважно, что все текстуры на объектах, если они есть, перепутаются при аттач, тогда да, вариант то что надо.
    Не знаю, что у вас за задача, но может просто собрать все объекты в группу?
     
  7. Фигли

    Фигли Пользователь сайта

    С нами с:
    20.01.2012
    Сообщения:
    23
    Симпатии:
    0
    Баллы:
    2
    Или:
    g=$geometry as array; convertToMesh g
    for i=2 to g.count do meshop.attach g[1] g attachMat:#IDToMat condenseMat:true deleteSourceNode:true
     
  8. ARTIS

    ARTIS Активный участник

    С нами с:
    08.02.2006
    Сообщения:
    82
    Симпатии:
    0
    Баллы:
    5
    В данном случае, действительно, материалы не важны, т.к. потом в скрипте я назначаю этому новоиспечённому объекту совершенно новый мат. Но Ваш вариант тоже ценен, занесу его в свою библиотечку (наверняка ещё пригодится)
     
  9. CRYSIS_CHINGIS

    CRYSIS_CHINGIS Пользователь сайта

    С нами с:
    29.11.2013
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    2
    А можно скрипт, который будет присваивать ВСЕМ подматериалам объекта в разделе Shader basic parameters - Crytek Shader и в разделе Crytek Shader Basic Parameters ставить галочку Physicalize. Очень надо автоматизировать процесс.
     

    Вложения:

    • 3245590.jpg
      3245590.jpg
      Размер файла:
      362,4 КБ
      Просмотров:
      115
  10. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    У меня нет такого типа Shader-а и не знаю команды для него.
    MacroRecorder записывает команды, когда вы вручную меняете тип shader-a на Cryteck и когда вы меняете значение для галочки Physicalize?

    Чтобы записать команды, нужно:
    В меню MaxScript включаем MacroRecorder.
    В меню MaxScript выбираем MaxScript Listener, чтобы открыть окно.
    Изменяем вручную тип shader-a на Cryteck и меняем значение для галочки Physicalize.
    Если в окне MaxScript Listener появляются команды, тогда предоставляем их на форум.
     
  11. CRYSIS_CHINGIS

    CRYSIS_CHINGIS Пользователь сайта

    С нами с:
    29.11.2013
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    2
    Вот, я два материала сделал вручную
     

    Вложения:

    • 3245660.jpg
      3245660.jpg
      Размер файла:
      173,4 КБ
      Просмотров:
      99
  12. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Выделяем объект и запускаем скрипт:
    Код:
    for obj in selection where obj.material!=undefined do
    (ms=getclassinstances standardMaterial target:obj.material
    for m in ms do (m.shaderType=2;m.physicalizeMaterial=on))
     
  13. CRYSIS_CHINGIS

    CRYSIS_CHINGIS Пользователь сайта

    С нами с:
    29.11.2013
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    2
    Спасибо Огромное - Работает !!!
     
  14. CRYSIS_CHINGIS

    CRYSIS_CHINGIS Пользователь сайта

    С нами с:
    29.11.2013
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    2
    Можно добавить строчку в скрипт, чтобы объект увеличился до 9000
     
  15. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Да, можно. Также можно переместить объект до 8000 и вращать объект до 7000.
     
  16. CRYSIS_CHINGIS

    CRYSIS_CHINGIS Пользователь сайта

    С нами с:
    29.11.2013
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    2
    а строчку можно ? Увеличение объекта до 9000
     
  17. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Как вы вручную увеличиваете объект до 9000?
    Какие команды MacroRecorder записывает?
     
  18. CRYSIS_CHINGIS

    CRYSIS_CHINGIS Пользователь сайта

    С нами с:
    29.11.2013
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    2
    1. Имеется сцена и на сцене много объектов (9000 объектов)
    2. Нужно автоматически объединить эти объекты в один, сгруппировывая по 300 объектов (больше нельзя - вылетает макс с ошибкой
    переполнения памяти). То есть получается - на сцене уже не 9000, а 30 объектов
    (командой Match Material to Material IDs). Имена объектов можно давать нумерацией.
     
  19. CRYSIS_CHINGIS

    CRYSIS_CHINGIS Пользователь сайта

    С нами с:
    29.11.2013
    Сообщения:
    13
    Симпатии:
    0
    Баллы:
    2
    scale $ [90.00000,90.00000,90.00000]
     
  20. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Код:
    for obj in selection where obj.material!=undefined do 
    (
    obj.scale=[90,90,90]
    ms=getclassinstances standardMaterial target:obj.material 
    for m in ms do (m.shaderType=2;m.physicalizeMaterial=on)
    ); redrawViews()
     
Модераторы: Savin Denis

Поделиться этой страницей