3DCenter.ru

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

4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Макскрипт - это боль
AndreyRT
сообщение 30/11/2013, 17:35
Сообщение #1


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 60
Регистрация: 22/07/2013
Пользователь №: 92 904



Назрела у меня такая исповедь - предупреждение молодым поколениям. Общий смысл такой - не связывайтесь с макскриптом если можно не связываться. Потому что дьявол обещает золотые горы а платит (как известно) разбитыми черепками.
А теперь подробно. Я в максе работаю уже 14 лет и в целом его люблю, и претензий нему не имею. Ну разве что хотелось бы выпилить из него старый шлак типа нурбсов, патчей, эдит мешей и прочий хлам из прошлого века. А так же прекратить навешивать каждый год всякие сопелки и свистелки типа шедеров для вьюпорта. Починить все баги, заморозить макс в нынешнем состоянии под названием 3ds max Final Edition и не трогать больше никогда. Оставить все as is. Короче , как говорится про макс "Я не вредный, я старый" по этому макс нужно понять, простить и заморозить. Лучше ему уже не станет, хуже - да.

А теперь про нашь любимый интерпретируемый скриптовый язык maxscript. Я по нарастающей использовал его последние лет 5. Все это время я закрывал глаза на то какой это ад и содом, и списывал на собственную криворукость. Делал всекие небольшие экспортеры, макросы и скрипт контроллеры, с трудом но делал, все работало.
Пока в большем проекте не сделал на него ставку. Проект был про сложную анимацию, если что. Ведь почему бы не замутить все на макскрипте? Открываем мануал , читаем. Все можно! Скорость, конечно печалит, но у меня ж не рантайм, только предпросчет.
Кошмар начался, когда я понял что за 4 года работы с ms я так и не выучил его синтаксис.
глядя на вот это:
Код

fn a b = (
b-10
)
if a(8)==0 do ()

вызывает лишь один вопрос:
За что? За что создатели максрипта так нас ненавидят?

Вдобавок с ide не далеко ушедшей от блокнота каждая написанная строчка причиняла боль, чуть ли не физическую. К этим круглым скобкам не возможно привыкнуть. к этим аргументам написаным тупо в ряд без разделителей невозможно привыкнуть. Вот этот оператор do - это вообще это просто веселый смайлик на дубине которой тебя бьет максрипт по башке. Они типа старались придумать интуитивный язык, очень похожий на человеческий. Даже true/false у них может быть on/off . Какая трогательная забота о пользователе, мля. Типа мы вам скрасим отстутствие автозаполнения и подсветки синтаксиса теплыми человеческими словами . Походу, все силы разработчиков отдела 3д макса брошены на шейдер акварели для вьюпорта вместо того что бы вкрутить в ide два метода showProperties() и showInterfaces() вызываемых после того как ты пишешь точку в скрипте. Равноценная замена, че.

Казалось бы, тут нам должен прийти на помощь хелп. Не может же все быть плохо? Но нет! Хелп по макскипту это такая же боль как и сам макскрипт. Шутка ли, страница с методами полигонального обьекта в длину почти тысячу строк? методы, примеры, описание - все это тупо на одной огромной странице. Пока пролистаешь уже забудешь что искал. К тому не факт, что все что касается editpoly находится на одной этой странице. Почему то есть editpoly а есть отдельно методы работы с ним. ПОЧЕМУ? Это как так получилось?

Ну ладно, это все как бы вопросы удобства. Вкусовщина, можно сказать.
Убило меня то, что с мистической регулярностью натыкаешся на баги, отсутствие нужных методов и переменных. Я сказал "нужных"? Не, правильнее будет говорить НЕОБХОДИМЕЙШИХ методов и переменных. Среди тонн какого то непонятно гавна в максрипте нет того что реально must have.
Вот самое ярко запомнившееся мне. Например:


Не, ну в фотошопе через скритп тоже нельзя тупо спросить GetPixel() и нарисовать GetPixel(). Но там , это как то в общей логике - скрипт умеет только то, что умеет пользователь, по этому (внимание, лол) берем скриптом пипетку и тыкаем в нужные координаты вместо GetPixel() . Но в максрипте же ТОННЫ каких то левых методов а необходимого при этом нет. Народ что бы выкрутиться пишет какие то функции которые ищут принадлежащие к точке полигоны, сдеди этих полигонов находят сходящиеся в одной точке эдже и оттуда достают оттуда UV координаты точки. Жесть короче.

Далее

ну, тут коментировать нечего. Только вдобавок скажу что с 2013 макса и этот список имен возвращается неправильный. Там все тупо перепутано рандомно. То есть скриптом получить какие кости влияют на точку невозможно. Причем непонятно - модификатор skin не менялся, но баг в нем появился. Как такое возможно?

Ну и третий фатальный баг который поставил крест на моем макскриптовом проекте это то, что невозможно получить матрицу трансформаций гизмо модификатора. getModContextTM () возвращает всегда какое то левое и неизменяющееся значение. По этому , например невозможно написать simpleMod потому что нет ни одного шанса узнать координаты точек в мировых координатах. Деформровать сетку можно, а относительно чего - непонятно. Причем этому багу уже лет 5 точно. с 9 макса и по нынешний день.

Вот такая грустная история об убитом времени. По этому сто раз подумайте прежде чем расчитывать на макскрипт. Я лично для себя решил что ничего сложнее скриптовых контроллеров там писать не стоит. Надеюсь кому нибудь моя история поможет сэкономить время.




Go to the top of the page
 
+Quote Post
SIL
сообщение 30/11/2013, 17:59
Сообщение #2


Master
Иконка группы

Группа: Участник
Сообщений: 3 036
Регистрация: 11/06/2003
Пользователь №: 2 458



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

Например ИДЕ - я давно работаю в кастомном редакторе аля саблим и с автокомплитом(хотя он не полноценный и подглючивает) и сокращенями для больших конструкций(не помню как это называется). Как-то пробовал расширения для макса, написанное одним талантливым программистом, которое позволяло встроить в окно вьюпорта хоть что - скайп, браузер или стандартные окна макса в том числе его-же расширеный максскрипт едитор аля вижуалстудио/монодевелопер. Глючное конечно, но он показал, что все возможно, только автодески этого не хотят видимо.

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

Сообщение отредактировал SIL - 30/11/2013, 17:59
Go to the top of the page
 
+Quote Post
AndreyRT
сообщение 30/11/2013, 18:18
Сообщение #3


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 60
Регистрация: 22/07/2013
Пользователь №: 92 904



Цитата(SIL @ 30/11/2013, 18:59) *
Но в целом да соглашусь - в макскрипте много дыр. Например нет метода сохранения костей в файл, зато это можно сделать через юиаксессор smile.gif


ну я в случае с uv вообще поступил хардкорно - сохранил обьет в obj , написал парсер на c# который прочел данные о uv оттуда. И данные о костях можно тоже прочесть из fbx .
Go to the top of the page
 
+Quote Post
Shiva
сообщение 30/11/2013, 19:07
Сообщение #4


Красив как Бог, умен как Дъявол
Иконка группы

Группа: Хранители порядка
Сообщений: 4 478
Регистрация: 16/06/2002
Из: Одесса
Пользователь №: 8



Не, я тоже как бы не первый год в максскрипте и с полной увереностью говорю Maxscript - это ебаный пиздец товарищи. как по синтаксису так и по корявости.
Go to the top of the page
 
+Quote Post
AndreyRT
сообщение 30/11/2013, 19:39
Сообщение #5


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 60
Регистрация: 22/07/2013
Пользователь №: 92 904



Цитата(Shiva @ 30/11/2013, 20:07) *
Не, я тоже как бы не первый год в максскрипте и с полной увереностью говорю Maxscript - это ебаный пиздец товарищи. как по синтаксису так и по корявости.


не, ну не весь. Скрипт контроллеры это благо. Я, например, с помощью СК сделал замену ужасному Reaction Controller и получилось удобнее и в три строчки. Удобно.
А вот что то большое на максрипте может плохо закончиться.
Как то залез в Macro_BakeTextures.ms что бы вписать в интерфейс рендера в текстуру большие разрешения и испытал шок. Это окно реализованно с помощью (внимание) 7000 строк. Семь тысяч, из них ну пускай 1000 строк коментарии и пустые но это все равно 6000 строк чтобы написать одно окно - это приговор этому языку, по моему. Новые разрешения я нашел и вписал, потом попытался разобраться и повырезать всякий трэш типа автомаппинга поскольку не пользуюсь им. Через час чтения я закрыл этот файл и захотелось встать под горячий душ и плакать смывая с себя этот ужас.
Go to the top of the page
 
+Quote Post
ECXIMER
сообщение 30/11/2013, 19:49
Сообщение #6


пишу на С++ за еду
Иконка группы

Группа: Пользователи
Сообщений: 7 292
Регистрация: 08/12/2003
Из: компилятора
Пользователь №: 3 739



Ребзя, я в целом согласен, но вы СДК давно листали? smile.gif Вот где ё*аный пи*дец в квадрате!

Сообщение отредактировал ECXIMER - 30/11/2013, 19:50
Go to the top of the page
 
+Quote Post
Zanozza
сообщение 30/11/2013, 19:49
Сообщение #7


ЦеГеЦиник
Иконка группы

Группа: Участник
Сообщений: 1 416
Регистрация: 21/04/2003
Из: Пацанглия, London
Пользователь №: 1 977



QUOTE (AndreyRT @ 30/11/2013, 15:35) *
Не, ну в фотошопе через скритп тоже нельзя тупо спросить GetPixel() и нарисовать GetPixel().

Тогда уж SetPixel(), если на то пошло. cool.gif

За такую окостенелость скажите спасибо манагерам Автостола, держащих девелоперов в строжайшей узде "бизнес-решений" и не позволяющих им взять и переписать АПИ с нуля, базируясь на современных наработках, ибо такое будет стоить "непозволительно больших расходов и содержать слишком высокие риски".

Короче, плачем но продолжаем жрать кактус.
Go to the top of the page
 
+Quote Post
AndreyRT
сообщение 30/11/2013, 20:33
Сообщение #8


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 60
Регистрация: 22/07/2013
Пользователь №: 92 904



Цитата(Zanozza @ 30/11/2013, 20:49) *
Тогда уж SetPixel(), если на то пошло. cool.gif


да, я опечатался , но суть в том что в фотошопе этого нет . Самый короткий анекдот получился - в фотошопе не SetPixel и GetPixel biggrin.gif

Цитата
За такую окостенелость скажите спасибо манагерам Автостола, держащих девелоперов в строжайшей узде "бизнес-решений" и не позволяющих им взять и переписать АПИ с нуля, базируясь на современных наработках, ибо такое будет стоить "непозволительно больших расходов и содержать слишком высокие риски".
Короче, плачем но продолжаем жрать кактус.


Да не нужно его переписывать , нужно полностью с нуля создавать новый highend пакет с новым подходом к api и программированию плагинов (я конечно имею ввиду c#, а не новый интерпретируемый гавноскрипт). Сразу вставлять туда новые индустриальные стандарты типа OpenSubdiv, fbx, HumanIK, рендер какой нибудь адекватный, инструменты для скульптинга и т.п. Но это вопервых сложно, а во вторых не избавит от необходимости поддерживать старых динозавров. Потому куча слоупочных студий сидят на кси, максах, майках и переходить на новое они не будут ближайшие 10 лет. Ты посмотри на ситуацию с windows XP. Экспи-юзеров проще в биореактор отправить, чем пересадить на 7ку хотя бы. Зато они по прежнему хотят новых драйверов, dx11 и прочих плюшек. Короче с одной стороны менеджеры автостола это офисный мох которому перемены не к чему, с другой стороны конформисты пользователи которых по моим наблюдениями до 50%. Устойчивая такая ситуация - автодеску выгодно новую свистелку-перделку вставить по очереди в кси, макс, майку, мудбокс и моушен билдер и продать 10 раз по кругу, а пользователь хоть и по ноет, но купит каждый год все заново. Все щасливы.

Сообщение отредактировал AndreyRT - 30/11/2013, 20:42
Go to the top of the page
 
+Quote Post
AndreyRT
сообщение 30/11/2013, 20:39
Сообщение #9


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 60
Регистрация: 22/07/2013
Пользователь №: 92 904



Цитата(ECXIMER @ 30/11/2013, 20:49) *
Ребзя, я в целом согласен, но вы СДК давно листали? smile.gif Вот где ё*аный пи*дец в квадрате!


да было желание специально ради sdk выучить c++, но вовремя остановился. А че там, тоже весело?
Go to the top of the page
 
+Quote Post
noclue
сообщение 30/11/2013, 22:09
Сообщение #10


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 222
Регистрация: 15/01/2005
Пользователь №: 9 514



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

у него офигенный хелп, в который например можно вбить texture coordinates и прочитать в разделе Understanding Texture Coordinates and Vertex Colors, как для точки найти uv координату, и как ее не надо искать.

Сообщение отредактировал noclue - 30/11/2013, 22:31
Go to the top of the page
 
+Quote Post
AndreyRT
сообщение 30/11/2013, 23:01
Сообщение #11


Продвинутый ученик
Иконка группы

Группа: Пользователи
Сообщений: 60
Регистрация: 22/07/2013
Пользователь №: 92 904



Цитата(noclue @ 30/11/2013, 23:09) *
чето 3дцентр последнее время полон нервных людей с ненавистью по несуществующим поводам.
я вообще не понимаю батхерта топикстартера. какие-то картинки и жалобы на жизнь.
макскрипт офигенен, легко читается, уж полегче питона, и тем более js, короткий, легко дебажится и удивительно, что автодеск его не замордовали так, как они это делают с нативным сдк.

у него офигенный хелп, в котором можно вбить texture coordinates, и прочитать в разделе Understanding Texture Coordinates and Vertex Colors, как для точки найти uv координату, и как ее не надо искать.


питон и js это стандарты, ты их учишь и потом пишешь на нем везде в отличии от гавноязыка который есть только в максе. К тому же maxscript - это интерпретируемый язык, он может мимикрировать под что угодно, хоть под brainfuck. Так почему же за основу не был взят си-подобный синтаксис, а был придуман свой велосипед с этими do и круглыми скобочками?

Ну был я на этой странице хелпа , (хотя я прекрастно понимаю что такое текстурные координаты и читать это не должен был). Но куда денешся, какой язык такой и хелп, все обвешенно прикрутками. Да, там есть о..енный совет как получить UV :
Цитата
Take the index of the mesh vertex.
Find out which faces reference the index of the face.
Note the number of the vertex (1 st , 2 nd or 3 rd - .x, .y or .z) inside each face.
For each face referencing the vertex, get the texture face with the same index.
Get the index of the respective texture vertex from the face - 1 st , 2 nd or 3 rd / .x, .y or .z
The vertex you got corresonds to the mesh vertex we started with.
Repeat steps 3 to 6 for all faces found.


Ты считаешь это нормальным способом? Ты считаешь вот эти итеративные манипуляции нужно делать на максскрипте? А может все же автодесковцам нужно тупо взять и запилить GetVertexUVCoords() ?
Или ты считаешь нормальным чтобы найти ноду кости из Skin-а нужно перебрать все обьекты в сцене по имени? Неужели в недрах skin-а нет тупого массива костей которые в нем используются? А если есть, почему не бы дать к нему доступ?
Я в доволен жизнью и максом, я тут просто пишу о том что maxscript - это тайм-киллер. Можно десятки часов еб..ся с какой нибудь матрицой трансформаций гизмо, а потом обнаружить что она тупо бажная. Не просто эксепшены сыпет, а возвращает , но какую то левую херню. Это же так офигенно - тратить свою жизнь в поисках какой именно из 10 использованых тобой методов глючит.

Сообщение отредактировал AndreyRT - 30/11/2013, 23:25
Go to the top of the page
 
+Quote Post
3D_Anima
сообщение 30/11/2013, 23:17
Сообщение #12


Наш человек
Иконка группы

Группа: Пользователи
Сообщений: 475
Регистрация: 28/12/2004
Пользователь №: 9 168



QUOTE
Через час чтения я закрыл этот файл и захотелось встать под горячий душ и плакать смывая с себя этот ужас.

biggrin.gif
Go to the top of the page
 
+Quote Post
Track
сообщение 30/11/2013, 23:24
Сообщение #13


Русскоговорящий жидо-бандеровец
Иконка группы

Группа: Пользователи
Сообщений: 1 336
Регистрация: 16/07/2004
Из: Украина-Одесса
Пользователь №: 6 600



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

Надо быть готовым к тому, что придется подключать сишника или самому изучить с++.
Потому всегда в договора добавляю строки вроде того, что в случае невозможности написать что-то на скрипте, я не виноват - будьте готовы пригласить на проект программиста, владеющего плюсами.

Да редактор невыносимо туп.
Да - то и дело сталкиваюсь с тем, что описанные в хелпе функции не работают.
В частности вот с несколькими неработающими методами столкнулся при работе с UV маппингом.
Абсолютно непонятно почему должен быть важен порядок расположения функций.
Но в большинстве случаев получается обойти все это.
Go to the top of the page
 
+Quote Post
noclue
сообщение 30/11/2013, 23:27
Сообщение #14


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 222
Регистрация: 15/01/2005
Пользователь №: 9 514



питон и js это стандарты, ты их учишь и потом пишешь на нем везде в отличии от гавноязыка который есть только в максе. К тому же maxscript - это интерпретируемый язык, он может мимикрировать под что угодно, хоть под brainfuck. Так почему же за основу не был взят си-подобный синтаксис, а был придуман свой велосипед с этими do и круглыми скобочками?

хаха я сейчас прикинул что было в то время - если бы авторы думали как ты, и пытались встраивать что-то интерпретируемое и популярное на тот момент, а не что-то удобочитаемое, то на тот момент это кмк был бы perl =))))))

QUOTE
Ну был я на этой странице хелпа , (хотя я прекрастно понимаю что такое текстурные координаты и читать это не должен был). Но куда денешся, какой язык такой и хелп, все обвешенно прикрутками. Да, там есть о..енный совет как получить UV :
Take the index of the mesh vertex.
Find out which faces reference the index of the face.
Note the number of the vertex (1 st , 2 nd or 3 rd - .x, .y or .z) inside each face.
For each face referencing the vertex, get the texture face with the same index.
Get the index of the respective texture vertex from the face - 1 st , 2 nd or 3 rd / .x, .y or .z
The vertex you got corresonds to the mesh vertex we started with.
Repeat steps 3 to 6 for all faces found.

Ты считаешь это нормальным способом? Ты считаешь вот эти итеративные манипуляции нужно делать на максскрипте? А может все же на низком уровне лучше, взять кусок кода который отвечает за выделение точек в UnwrapUVW и запилить на его основе метод GetVertexUVCoords() ?


ну ты читал предшествующий этому абзацу текст? =) понял, зачем так? и что у одного вертекса в edit poly может быть очень много uvcoords?
Go to the top of the page
 
+Quote Post
ECXIMER
сообщение 30/11/2013, 23:28
Сообщение #15


пишу на С++ за еду
Иконка группы

Группа: Пользователи
Сообщений: 7 292
Регистрация: 08/12/2003
Из: компилятора
Пользователь №: 3 739



Максскрипт разрабатывался исключительно для самого не подготовленного юзера, то бишь не програмера вообще ни разу, а для художника, который в состоянии написать цикл автоматизирующий его примитивные действия. потом МС оброс доволи таки нормальным набором методов, которые позволяют уже делать более серьёзные задачи, нежели просто цикл, но простота его осталась доступна всем.
Кому мало - милости просим в сдк: повторюсь, нужно окунуться в него, чтобы понять, что максскрип просто лапочка smile.gif
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






4 страниц V   1 2 3 > » 
Reply to this topicStart new topic

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

 



RSS Текстовая версия Сейчас: 26/04/2024 - 02:14