Случайный цвет для шейпа в один слайдер.

Продолжая тему случайных чисел и их применения, делюсь с Вами еще одним способом получения случайного цвета всего в несколько слайдеров. Я буду продолжать предыдущий проект (разный размер в один слайдер), так что все что я добавляю — буду добавлять в уже имеющийся.
В общем погнали.

Шаг 1

1 Добавляем в уже имеющийся или создаем новый пустой Shape Layer (или нуль объект, кому как нравиться), обзываем его «Control» и добавляем на него 3 контроллера (2 Slider Control и 1 Color Control):
1-Color Contol -нужен чтобы задать начальный цвет/насыщенность.
2-Randomize Color — слайдер, который будет управлять нашей рандомностью
3-Seed -т.к. он уже был, просто оставляем его, к нему будем привязываться

Шаг 2

Создаем шейп и добавляем в него Elipse и Stroke или т.к. у нас уже все имеется, будем работать с уже имеющимся цветом Strok или Fill (не важно, можно использовать любой параметр цвета).

 

Шаг 3

Включаем бубен, скрещиваем пальцы и понеслось…
Нажимаем на секундамер в параметре Strok->color для того чтобы начать писать выражение, и начинаем прописывать наши 3 контроллера, просто указывая любые переменные, какие вам нравятся, и присваивать им значения с контроллеров. Я написал так:

 

теперь по порядку и с объяснениями.

col, ran, seedR, r — это просто переменные, которым я присвоил значение с контроллеров. переменные могут быть любые, какие вам нравяться, главное самим не запутаться.

Больше всего вопросов вызовет 1 и 2 строчки.

но тут все просто. Изначально цвет в After Effect`е представлен в RGB формате, т.е. цвет состоит из 4 чисел: красного, зеленого, синего и алфа-канала. А цвет в HSL представлен в виде оттенка, насыщенности и освещенности. Поэтому для начала нам нужно сконвертировать цвет из одного цветового пространства в другое. Этим как раз и занимается функция rgbToHsl. Потом нам нужно будет перевести цвет обратно с помощью обратной функции hslToRgb (но об этом позднее)
в общем тут мы просто переводим цвет ф пространство HSL. Подробнее можете почитать тут.

И вторая строчка (тоже достаточно интересная).

Т.к. 8-битный цвет изменяется от 0 до 255, то мы берем наш цвет и делим на 255 и потом еще ищем остаток от деления на 1 (%1). Если первое деление нам дает дробную часть, то второе дает свободу в изменении слайдера.. цвет в любом случае будет изменяться от 0 до 255, но теперь слайдер можно крутить в сумашедшие значения.

фуф.. надеюсь понятно объяснил…

ну, а далее уже легче…

seedRandom(seedR,true); — это генератор случайных чисел, второй параметр (true) говорит о том что это постоянное значение и не меняется со временем (в каждом кадре). Если его не прописать, то значения будут менять размер как бешенный в каждом кадре… И еще этот параметр дает нам свободу рандомизации цветов, т.е. без него размер у дубликатов цвет будет всегда одним и тем же.

r=random(0,ran); — вот тут как раз указываем в каких пределах будет изменяться цвет нашего шейпа. Это тоже генератор случайного числа, но в пределах заданных значений, т.е в нашем случае от 0 до значения со слайдера Randomize Color, но, как я уже говорил выше, фактически значения будут меняться в пределах от 0 до 255. И вот тут то как раз благодаря слайдеру Seed и вышенаписанному («seedRandom…») у нас будут всегда разные значения в этих пределах.

и последней строчкой мы переводим цвет опять в пространство RGB.
hslToRgb(col+ran*r);
т.е. мы сперва изменяем наш цвет на какой нибудь случайный, а потом переводим в RGB.

все.
Теперь дублируя шейп и изменяя Randomize Color мы всегда будем получать шейп с разным цветом. и этот параметр можно заанимировать. А слайдер Seed позволит нам иметь разные цвета при одинаковом Randomize Color.. в общем поробуйте и сами все увидите.

P.S. т.к. я использовал один и тот же Seed и для размера и для цвета, то собственно при его изменении будут меняться и цвета и размеры.. но если Вам нужна гибкость, можете добавить отдельный Seed для размера, отдельный для цвета.. тогда они не будут пересекаться.

P.S.S. ну и проект, конечно же