Skak. Девлог 2. Глаза

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

Все время с прошлого девблога я потратил на глаза фигур. Я себя убедил, что раз фигуры это очень важные элемент игры про, ну… шахматные фигуры, то на них и их Look&Feel резонно тратить много времени. А так как у фигур по макетам должны быть глаза, то глаза должны быть самыми крутыми.

Начал с простого — пустых глаз, вращающихся вокруг фигуры в сторону курсора мыши. Выглядело довольно крипово, но уже работало:

Глаза 0.1

Потом добавил зрачки, но из-за перемешавшихся параметров высоты, относительных позиций и просто математики все произошло не с первого раза (гифки):

Но потом все завелось:

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

Я не слишком хорош в тригонометрии и математике и уже несколько лет вообще не прикасался к этому, поэтому вспоминалось все это туговато. Но в какой-то момент я понял, что в глазе 7х7 пикселей с отводкой в один пиксель (то есть 5х5) это все вообще не нужно и поддался на идею Юры просто сделать горизонтальные веки. Получилось вот так:

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

Внутренности

Внутри все устроено довольно просто. Глаз состоит из трех спрайтов, и если мысленно представить в 3д и растянуть по слоям (что я для удобства сделал за вас), то выглядеть будет вот так:

Skak. Девлог 2. Глаза

У самих век специальный шейдер, которому передается угол поворота и высоты обоих век, на основе чего считается прозрачность для каждого пикселя:

Skak. Девлог 2. Глаза

Основная функция прозрачности получилась слегка замудрёной, но в целом вроде бы понятной:

void EyeLidAlphaCheckNode_float(float angle, float radius, float c, float closeLevelUp, float closeLevelDown, float2 pos, out float alpha) { const float s = sign(angle); const float signed_c = c * s; const float threshold = radius * cos(angle); alpha = ((1 - pos.x) * s > threshold + signed_c) || pos.y > closeLevelUp || pos.y < closeLevelDown; }

Как-то так вот

Подозревают
Подозревают
3838
10 комментариев

Комментарий недоступен

11
Ответить

Поправил поправку

10
Ответить

Всё равно криповато ;)

4
Ответить

Ну вот :(

Ну прикрутим к этому полноценные эмоции, которые будут реагировать на всякое разное, думаю станет лучше

1
Ответить

А мне нравится х)

Ответить

Пока что кажется что без глаз лучше было 

Ответить

На превью с их прищуром выглядело как то ли руки, то ли сиськи...

Ответить