3DCenter.ru

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

 
Reply to this topicStart new topic
> Объекты из "ниоткуда" и независимый диффузный цвет
Shurik
сообщение 28/03/2015, 01:36
Сообщение #1


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

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



Доброго времени суток, всем гуру и любителям Макс-скрипта!

Заранее прошу прощения, если моя тема уже затрагивалась ранее в этом форуме, я здесь не был уже очень давно.

В настоящий момент пишу скрипт (для своих сугубо-конкретных целей) который строит матрицу из пронумерованных боксов и затем всячески "издевается" над ними.
Поясню: при нажатии на кнопку "создать матрицу" - скрипт строит ... ну скажем матрицу 4х4 из боксов, прилегающих друг к другу, тоесть получаем 16 кубиков выстроенных квадратом (при виде сверху). Матрица создаётся из текстового файла, где заложена нумерация этих кубиков. Например: первая строка текстового файла "1, 14, 12, 16" означает, что 4 кубика первого ряда будут содержать в своих именах соответствующие числовые обозначения, ну и так далее вниз по строкам. После построения матрицы, нажатием другой кнопки, мне нужно начать цикл (например из 100 повторов) в каждом шаге которого будут выбираться (случайно или по алгоритму) 10 базовых кубиков, затем они будут дублироваться (или как-то иначе клонироваться) и перемещаться вверх по оси Z на заданное расстояние, затем второй шаг цикла и так далее. В конце-концов, у меня должно получиться следующее: внизу лежит матрица из базовых кубиков, а вверх от неё столбом идут врассыпную кубики (потомки кубиков из матрицы). Зачем мне нужна матрица? Она задаёт форму "столба" (матрица может быть линейной, радиусной и какой угодно) и местонахождение каждого номера в границах этой матрицы. Все клоны содержат в своём имени номер предка. Цвет клонов будет опционально меняться (рандомный, цвет предка, общий цвет у 10 кубиков каждого цикла и т.п.) Затем мне нужна анимация, где каждый шаг цикла = 1 кадр. Тоесть в финальной анимации (например из фронтального вида) я должен увидеть лежащую внизу матрицу и, с каждым кадром, появляющиеся (как бы из неоткуда) всё новые и новые ряды кубиков, уходящие вверх по оси Z. Уффф ... уж не знаю, понятно ли объяснил ...

А вопрос мой состоит из трёх пунктов:

1) Какими средствами лучше всего делать эти кубики-клоны, чтобы в анимации они появлялись как-бы из неоткуда (каждый кадр = новый ряд). Пробовал скриптом дублировать и ставить ключи анимации в нужных кадрах и вроде бы на первый взгляд работает, но при этом Макс сначало делает весь массив дубликатов (несколько тысяч кубиков) а потом уже начинает двигать их вверх и ставить ключи. Ну тоесть дубликация не анимируется, что собственно естественно. А мне бы хотелось, чтобы этого "месива" из дубликатов, полностью заваливающих матрицу на первых кадрах, не было. Быть может есть какой-то красивый ход или метод? Анимирование видимости какими-то способами? Быть может ещё что-то?

2) Каждый кубик у меня будет пронумерован, но не только по имени, но и физически. Тоесть на всех шести грянях кубика будет стоять его номер (например с помощью карты VectorMap, BitMap или как-то иначе) чёрного цвета. Вначале хотел "клеить" к каждому из них номер с помощью объекта Text, но так как кубиков будет несколько десятков, а может и сотен тысяч, то чую комп мой взлетит от работы своих вентиляторов smile.gif Поэтому, видимо, только с помощью карт. НО! Но тогда как мне менять (средствами скрипта) базовые цвета этих кубиков? Ведь один и тот-же номер дублируется многократно и на каждом из этих дубликатов один и тот-же номер, но базовый цвет может быть разным. Если создать, ну например, SubMaterial с 16-ю элементами (для каждого номера) и программно присваивать каждому номеру свой подматериал, то вроде бы всё прекрасно, но как мне при этом произвольно менять базовый цвет? Тоесть если я программно меняю в карте базовый цвет (Diffuse например), то все кубики с одним номером станут этим цветом, а мне нужно как-то отделить номер от цвета. Изначально мне прекрасно хватало WireColor-а безо всяких материалов и карт, но понадобилось цеплять номера, а это уже карта и проецирование и материал и WireColor убит. Как это решить красиво?

3) Хммм ... пока писал два первых пункта, забыл что хотел написать в этом smile.gif Вспомню, по ходу обсуждения напишу.

Заранее, всем откликнувшимся ОГРОМНОЕ СПАСИБО за помощь, советы и подсказки!
Go to the top of the page
 
+Quote Post
1асс
сообщение 28/03/2015, 10:39
Сообщение #2


Рыцарь форума
Иконка группы

Группа: Пользователи
Сообщений: 1 956
Регистрация: 08/01/2005
Из: Нижний Новгород
Пользователь №: 9 336



1) Есть св-во visibility, его можно анимировать, но красивее эффект получится от анимированного скейла - с нуля и до нужного размера.
2) По-моему лучше клеить через текст, бояться тормозов не нужно, если сделать через инстансы, к тому же наверное необязательно цеплять номер на каждую грань, ведь не все грани видимы. Решение с картами приведет к появлению тонны новых матов, хотя мб и можно выкрутиться, если инстансить только карту с номером, присобаченную к карте цвета через композит или микс или что там есть еще для смешивания, но этот вариант будет посложнее. Я бы сначала делал через геометрию и посмотрел что выйдет.
Go to the top of the page
 
+Quote Post
Shurik
сообщение 28/03/2015, 18:51
Сообщение #3


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

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



to 1асс:

Спасибо тебе за ответ, дружище!
А ты не подскажешь, где и как ковырять это свойство visibility? Это я так понимаю не относится к картам, тоесть это не опасити, да? Вероятнее всего, это в свойствах объекта?

Вот попробовал:

b = box()
b.visibility = 0

бокс создался и стал невидимым.

затем:

b.visibility = 1

но бокс почему-то так и остался невидимкой ... всё работает, только если это делаешь вручную, через св-ва объекта. Может с Максом что не то ...? Макс 2015.

На счёт анимации масштабирования объекта - идея не плохая. Тоесть, если я правильно понял, создаю боксы с нулевым размером, а в нужных кадрах размер ставлю ну например 10х10х10?
Или ты имел ввиду с помощью какой-то команды скалирования? Если такая есть, то я ей ещё не пользовался ... нужно поковырять.

На счёт текста и материалов - ну мне бы конечно хотелось, чтобы цифры были на всех гранях, так как анимашка будет с разных видов. С текстом попробую конешно, но боюсь это не самый лучший способ. Судя по опыту работы в максе, а это долгие годы, инстансы в больших количествах всё-равно тормозят комп. Я, если честно, не очень понимаю, почему инстансы не должны грузить комп. Они же всё-равно процессором и картой обрабатываются, потому как мы их видим в окнах проекций. Или я что-то недопетриваю? smile.gif В голову пришла мысль, создавать друг в друге два бокса - один с материалом опасити и видимыми цифрами, а второй чуть меньше, но уже несущий цвет. Но вот беда в том, что количество кубиков станет в два раза больше, а это не гуд.

На счёт карт (микс, композит) - тоже над этим думал, но ведь тогда всё-равно получается, что у каждого кубика будет свой миксовый материал, или я что-то не очень понимаю до конца. Ведь если в слоте у нас две карты (одна для номеров, вторая дающая цвет) то микс этих карт конечно получится: в карте номеров (VectorMap) я указываю номер страницы pdf-файла (в нём 16 страниц с номерами) а в карте цвета - числовые значения цвета и всё это миксую и назначаю кубику. Но! Для следующего кубика я не могу уже использовать этот микс-материал и мне нужно создавать новый, да и базовые карты я тоже не могу инстансить, так как после этого все изменения в них затронут все ранее созданные материалы на их основе. Короче я уже запутался smile.gif

Было бы здорово, если бы можно было как-то оставить wirecolor объекта, но при этом налепить сверху маску-карту с цифрами. Тогда бы не нужно было бы мудрить с этим диффузным цветом и цвет каждого кубика был бы независим. Но думаю это сделать нереально ...
Go to the top of the page
 
+Quote Post
Shurik
сообщение 28/03/2015, 19:14
Сообщение #4


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

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



На счёт visibility попробовал в 12-м максе - такая-же петрушка. Тоесть обнулять видимость получается, причём даже значение 1 его прячет почему-то, а вот вернуть видимость обратно не выходит ... Наверное я что-то неправильно делаю или недопонимаю максскрипт, что неудивительно, потому как опыта у меня с ним не так много.
Go to the top of the page
 
+Quote Post
Shurik
сообщение 28/03/2015, 21:41
Сообщение #5


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

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



Хм ... visibility удалось пока рулить только так: b.visibility = true, или = false; счётчиком и половинчатыми параметрами этого свойства рулить не получается. Впрочем мне этого и не нужно. Хотя если ставить false, то объект при рендере как и положено не отображается, но в видовом окне остаётся висеть в каком-то своём призрачном образе. Если же рулить той-же опцией через св-ва объекта, то объект и в видовых окнах пропадает, что мне более приоритетно. Странно как-то это работает ...
Пока выходит самый лучший вариант, это масштабирование.
Есть ещё какие-то варианты? И что делать с нумерацией и с картами?

Что-то все молчат ... helpsmilie.gif читают и молчат smile.gif
Go to the top of the page
 
+Quote Post
1асс
сообщение 28/03/2015, 21:42
Сообщение #6


Рыцарь форума
Иконка группы

Группа: Пользователи
Сообщений: 1 956
Регистрация: 08/01/2005
Из: Нижний Новгород
Пользователь №: 9 336



про visibility - ищи в хелпе раздел General Node Properties, и в нем под заголовком Rendering Related Properties все найдешь с примерами.
про скейл: $.scale = [0,0,0] - уменьшить в ноль, соответственно единицы в стопроцентный вернут.

Что касается инстансов объектов цифр - они будут тормозить меньше чем куча матов. Проще попробовать геометрию, чем с матами мудрить.
Насчет двойных кубиков - норм вариант, все кубики можно инстансить и маты на цифровых кубиках тоже можно инстансить вот сам и решай что тебе лучше инстансить - цифры-геометрию или кубики с цифрами.
Go to the top of the page
 
+Quote Post
Shurik
сообщение 29/03/2015, 00:13
Сообщение #7


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

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



to 1асс:
Спасибо за наводку на visibility в хелпе! Я ведь искал в хелпе изначально, но найти так и не смог.

Про скейл понял! Но думаю в моём случае лучше рулить либо видимостью, либо начальным нулевым размером при создании кубиков. Причём последнее, видимо, оптимальнее всего, так как я всё-равно делаю операцию создания. Так у меня получается цепочка короткая - создал нулевой бокс, а в нужном кадре задал ему нормальный размер. А в случае со скалированием и с visibility - добавляется одна дополнительная операция, после его создания. Но это на словах лучше, а что будет работать быстрее и корректнее с большим массивом, это буду пробовать. О результатах отпишусь, мало ли может кому это интересно, для общего развития.

Да и конечно-же попробую с цифрами геометрией. Возможно действительно так получится и проще и лучше. Только с этим один вопрос - как лучше и корректнее делать эти векторные цифры (text) видимыми? Кидать на каждую из них сверху модификатор, например EditPoly, EditMesh, или есть какой-то иной красивый способ?

И если можно, ещё один вопрос - если я буду делать вложенными, тоесть двойными кубиками, то как их лучше связывать друг с другом, чтобы потом ими было проще управлять программно? Ведь у меня получается два объекта физически, но как-бы один визуально. Группировать их? Линковать? Или лучше оперировать в программе как двумя отдельными объектами? Или ... ?

Спасибо тебе за помощь! Буду всё пробовать и тестировать ...
Go to the top of the page
 
+Quote Post
1асс
сообщение 29/03/2015, 00:28
Сообщение #8


Рыцарь форума
Иконка группы

Группа: Пользователи
Сообщений: 1 956
Регистрация: 08/01/2005
Из: Нижний Новгород
Пользователь №: 9 336



Можно обойтись и одним нулевым скейлом без визибилити. Что касается линков - зачем линковать? просто присвоишь матрицу от одного к другому и они будут на одном месте, матрицы же одинаковые. И делай через кубы, забей на цифры геометрией, замучаешься позиционировать относительно кубов.
Go to the top of the page
 
+Quote Post
Shurik
сообщение 29/03/2015, 00:57
Сообщение #9


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

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



Ну вот про позиционирование вокруг кубов этих цифр, это да - печаль, согласен ...

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

А на счёт "просто присвоишь матрицу от одного к другому и они будут на одном месте, матрицы же одинаковые" - можно ли на пальцах объяснить, что ты имел ввиду? Матрицу ты имел ввиду мою базовую, или программную матрицу преобразований? Если второе - то она меня пугает и я всегда старался обходить её стороной smile.gif

Спасибо!
Go to the top of the page
 
+Quote Post
1асс
сообщение 29/03/2015, 01:06
Сообщение #10


Рыцарь форума
Иконка группы

Группа: Пользователи
Сообщений: 1 956
Регистрация: 08/01/2005
Из: Нижний Новгород
Пользователь №: 9 336



программную матрицу. в твоем случае там все просто: $Box01.transform = $Box02.transform и первый будет такой же как и второй (повернут, подвинут, смасштабирован)
Go to the top of the page
 
+Quote Post
Shurik
сообщение 29/03/2015, 02:22
Сообщение #11


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

Группа: Пользователи
Сообщений: 170
Регистрация: 17/06/2002
Из: Москвы
Пользователь №: 19



Ах, вон оно как просто оказывается! Спасибо тебе большое за помощь!!!
Буду пробовать все варианты, как появится время.
Ещё раз спасибо!
drinks.gif
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






Reply to this topicStart new topic

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

 



RSS Текстовая версия Сейчас: 19/04/2024 - 06:49