Объекты из "ниоткуда" и независимый диффузный цвет |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
Объекты из "ниоткуда" и независимый диффузный цвет |
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, но так как кубиков будет несколько десятков, а может и сотен тысяч, то чую комп мой взлетит от работы своих вентиляторов Поэтому, видимо, только с помощью карт. НО! Но тогда как мне менять (средствами скрипта) базовые цвета этих кубиков? Ведь один и тот-же номер дублируется многократно и на каждом из этих дубликатов один и тот-же номер, но базовый цвет может быть разным. Если создать, ну например, SubMaterial с 16-ю элементами (для каждого номера) и программно присваивать каждому номеру свой подматериал, то вроде бы всё прекрасно, но как мне при этом произвольно менять базовый цвет? Тоесть если я программно меняю в карте базовый цвет (Diffuse например), то все кубики с одним номером станут этим цветом, а мне нужно как-то отделить номер от цвета. Изначально мне прекрасно хватало WireColor-а безо всяких материалов и карт, но понадобилось цеплять номера, а это уже карта и проецирование и материал и WireColor убит. Как это решить красиво? 3) Хммм ... пока писал два первых пункта, забыл что хотел написать в этом Вспомню, по ходу обсуждения напишу. Заранее, всем откликнувшимся ОГРОМНОЕ СПАСИБО за помощь, советы и подсказки! |
|
|
28/03/2015, 10:39
Сообщение
#2
|
|
Рыцарь форума Группа: Пользователи Сообщений: 1 956 Регистрация: 08/01/2005 Из: Нижний Новгород Пользователь №: 9 336 |
1) Есть св-во visibility, его можно анимировать, но красивее эффект получится от анимированного скейла - с нуля и до нужного размера.
2) По-моему лучше клеить через текст, бояться тормозов не нужно, если сделать через инстансы, к тому же наверное необязательно цеплять номер на каждую грань, ведь не все грани видимы. Решение с картами приведет к появлению тонны новых матов, хотя мб и можно выкрутиться, если инстансить только карту с номером, присобаченную к карте цвета через композит или микс или что там есть еще для смешивания, но этот вариант будет посложнее. Я бы сначала делал через геометрию и посмотрел что выйдет. |
|
|
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? Или ты имел ввиду с помощью какой-то команды скалирования? Если такая есть, то я ей ещё не пользовался ... нужно поковырять. На счёт текста и материалов - ну мне бы конечно хотелось, чтобы цифры были на всех гранях, так как анимашка будет с разных видов. С текстом попробую конешно, но боюсь это не самый лучший способ. Судя по опыту работы в максе, а это долгие годы, инстансы в больших количествах всё-равно тормозят комп. Я, если честно, не очень понимаю, почему инстансы не должны грузить комп. Они же всё-равно процессором и картой обрабатываются, потому как мы их видим в окнах проекций. Или я что-то недопетриваю? В голову пришла мысль, создавать друг в друге два бокса - один с материалом опасити и видимыми цифрами, а второй чуть меньше, но уже несущий цвет. Но вот беда в том, что количество кубиков станет в два раза больше, а это не гуд. На счёт карт (микс, композит) - тоже над этим думал, но ведь тогда всё-равно получается, что у каждого кубика будет свой миксовый материал, или я что-то не очень понимаю до конца. Ведь если в слоте у нас две карты (одна для номеров, вторая дающая цвет) то микс этих карт конечно получится: в карте номеров (VectorMap) я указываю номер страницы pdf-файла (в нём 16 страниц с номерами) а в карте цвета - числовые значения цвета и всё это миксую и назначаю кубику. Но! Для следующего кубика я не могу уже использовать этот микс-материал и мне нужно создавать новый, да и базовые карты я тоже не могу инстансить, так как после этого все изменения в них затронут все ранее созданные материалы на их основе. Короче я уже запутался Было бы здорово, если бы можно было как-то оставить wirecolor объекта, но при этом налепить сверху маску-карту с цифрами. Тогда бы не нужно было бы мудрить с этим диффузным цветом и цвет каждого кубика был бы независим. Но думаю это сделать нереально ... |
|
|
28/03/2015, 19:14
Сообщение
#4
|
|
MaxMan Группа: Пользователи Сообщений: 170 Регистрация: 17/06/2002 Из: Москвы Пользователь №: 19 |
На счёт visibility попробовал в 12-м максе - такая-же петрушка. Тоесть обнулять видимость получается, причём даже значение 1 его прячет почему-то, а вот вернуть видимость обратно не выходит ... Наверное я что-то неправильно делаю или недопонимаю максскрипт, что неудивительно, потому как опыта у меня с ним не так много.
|
|
|
28/03/2015, 21:41
Сообщение
#5
|
|
MaxMan Группа: Пользователи Сообщений: 170 Регистрация: 17/06/2002 Из: Москвы Пользователь №: 19 |
Хм ... visibility удалось пока рулить только так: b.visibility = true, или = false; счётчиком и половинчатыми параметрами этого свойства рулить не получается. Впрочем мне этого и не нужно. Хотя если ставить false, то объект при рендере как и положено не отображается, но в видовом окне остаётся висеть в каком-то своём призрачном образе. Если же рулить той-же опцией через св-ва объекта, то объект и в видовых окнах пропадает, что мне более приоритетно. Странно как-то это работает ...
Пока выходит самый лучший вариант, это масштабирование. Есть ещё какие-то варианты? И что делать с нумерацией и с картами? Что-то все молчат ... читают и молчат |
|
|
28/03/2015, 21:42
Сообщение
#6
|
|
Рыцарь форума Группа: Пользователи Сообщений: 1 956 Регистрация: 08/01/2005 Из: Нижний Новгород Пользователь №: 9 336 |
про visibility - ищи в хелпе раздел General Node Properties, и в нем под заголовком Rendering Related Properties все найдешь с примерами.
про скейл: $.scale = [0,0,0] - уменьшить в ноль, соответственно единицы в стопроцентный вернут. Что касается инстансов объектов цифр - они будут тормозить меньше чем куча матов. Проще попробовать геометрию, чем с матами мудрить. Насчет двойных кубиков - норм вариант, все кубики можно инстансить и маты на цифровых кубиках тоже можно инстансить вот сам и решай что тебе лучше инстансить - цифры-геометрию или кубики с цифрами. |
|
|
29/03/2015, 00:13
Сообщение
#7
|
|
MaxMan Группа: Пользователи Сообщений: 170 Регистрация: 17/06/2002 Из: Москвы Пользователь №: 19 |
to 1асс:
Спасибо за наводку на visibility в хелпе! Я ведь искал в хелпе изначально, но найти так и не смог. Про скейл понял! Но думаю в моём случае лучше рулить либо видимостью, либо начальным нулевым размером при создании кубиков. Причём последнее, видимо, оптимальнее всего, так как я всё-равно делаю операцию создания. Так у меня получается цепочка короткая - создал нулевой бокс, а в нужном кадре задал ему нормальный размер. А в случае со скалированием и с visibility - добавляется одна дополнительная операция, после его создания. Но это на словах лучше, а что будет работать быстрее и корректнее с большим массивом, это буду пробовать. О результатах отпишусь, мало ли может кому это интересно, для общего развития. Да и конечно-же попробую с цифрами геометрией. Возможно действительно так получится и проще и лучше. Только с этим один вопрос - как лучше и корректнее делать эти векторные цифры (text) видимыми? Кидать на каждую из них сверху модификатор, например EditPoly, EditMesh, или есть какой-то иной красивый способ? И если можно, ещё один вопрос - если я буду делать вложенными, тоесть двойными кубиками, то как их лучше связывать друг с другом, чтобы потом ими было проще управлять программно? Ведь у меня получается два объекта физически, но как-бы один визуально. Группировать их? Линковать? Или лучше оперировать в программе как двумя отдельными объектами? Или ... ? Спасибо тебе за помощь! Буду всё пробовать и тестировать ... |
|
|
29/03/2015, 00:28
Сообщение
#8
|
|
Рыцарь форума Группа: Пользователи Сообщений: 1 956 Регистрация: 08/01/2005 Из: Нижний Новгород Пользователь №: 9 336 |
Можно обойтись и одним нулевым скейлом без визибилити. Что касается линков - зачем линковать? просто присвоишь матрицу от одного к другому и они будут на одном месте, матрицы же одинаковые. И делай через кубы, забей на цифры геометрией, замучаешься позиционировать относительно кубов.
|
|
|
29/03/2015, 00:57
Сообщение
#9
|
|
MaxMan Группа: Пользователи Сообщений: 170 Регистрация: 17/06/2002 Из: Москвы Пользователь №: 19 |
Ну вот про позиционирование вокруг кубов этих цифр, это да - печаль, согласен ...
На счёт скейла и визибилити - я имел ввиду, что либо создавать кубик, а затем его скалировать до нуля, а в нужном кадре скалировать обратно до единицы, либо после создания - делать нулевой визибилити, а в нужном кадре делать снова видимым; либо создавать изначально нулевой, а в нужном кадре ставить финальный размер. Из этих схем самая короткая третья, это по количеству операций. А как они считаются и обрабатываются самим процессором и на сколько быстро, это буду тестировать, чтобы понять что лучше. А на счёт "просто присвоишь матрицу от одного к другому и они будут на одном месте, матрицы же одинаковые" - можно ли на пальцах объяснить, что ты имел ввиду? Матрицу ты имел ввиду мою базовую, или программную матрицу преобразований? Если второе - то она меня пугает и я всегда старался обходить её стороной Спасибо! |
|
|
29/03/2015, 01:06
Сообщение
#10
|
|
Рыцарь форума Группа: Пользователи Сообщений: 1 956 Регистрация: 08/01/2005 Из: Нижний Новгород Пользователь №: 9 336 |
программную матрицу. в твоем случае там все просто: $Box01.transform = $Box02.transform и первый будет такой же как и второй (повернут, подвинут, смасштабирован)
|
|
|
29/03/2015, 02:22
Сообщение
#11
|
|
MaxMan Группа: Пользователи Сообщений: 170 Регистрация: 17/06/2002 Из: Москвы Пользователь №: 19 |
Ах, вон оно как просто оказывается! Спасибо тебе большое за помощь!!!
Буду пробовать все варианты, как появится время. Ещё раз спасибо! |
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 19/04/2024 - 06:49 |