2d игрушка, отсечения (clipping)

Программирование на Юнити.

2d игрушка, отсечения (clipping)

Сообщение Riddik 11 ноя 2011, 18:34

Привет!
Натолкните, пожалуйста на мысль, как реализовать отсечения?
Допустим есть фоновое изображение, поверх которого "тусуются" спрайты. Эти спрайты могут перемещаться за границу поля, но рисоваться за этой границей не должны. Задача в том, чтобы отобразить, как спрайты "заезжают" (скрываются) за границу, а не просто грубо отключать (renderer.enable = false;) их отображение.

Если бы фон был монотонным, я бы просто наложил плоскости с тем же материалом вокруг поля с z-координатой меньше чем у спрайтов и вуаля! Но фон сложный (несколько объектов и анимация).
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: 2d игрушка, отсечения (clipping)

Сообщение Левш@ 12 ноя 2011, 12:45

Проверяйте позицию и проигрывайте анимацию, потом отрубайте рендер.
Или я неправильно понял... :-?
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: 2d игрушка, отсечения (clipping)

Сообщение Paul Siberdt 12 ноя 2011, 14:09

Что мешает сделать renderer.enable = false чуть позже? Есть еще флажок IsVisible, который определяет, попадает ли renderer.bounds объекта во фруструм камеры.
Но раз игрушка 2D, я б просто держал гденть две граничные координаты "права" и "лева" и периодически чекал объекты на пересечение оных.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: 2d игрушка, отсечения (clipping)

Сообщение Riddik 12 ноя 2011, 14:46

Я, наверное, плохо объяснил. Объекты прячутся или выпадают, ну в как в match3 играх. Игровое поле (меньше экрана), за пределами которого фишки не должны рисоваться, но нужно отсекать их изображение по мере того, как фишка уходит за край поля.

Пример:
чёрная область - экран
белая область - поле, за переделы которого объекты не видно.
звёзды - объекты.

Как их отсекать?

Изображение

Между фоном и полем есть сложный бэк с анимацией и своими объектами. Если бы можно было вызвать direct3d api clipping... проблем бы не было.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: 2d игрушка, отсечения (clipping)

Сообщение BlackMamba 12 ноя 2011, 14:56

а чем плох вариант с черной рамкой поверх бэкграунда?
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: 2d игрушка, отсечения (clipping)

Сообщение Riddik 12 ноя 2011, 15:12

Тем, что это не вписывается ни в дизайн, ни в стилистику арт-дирекшена. Бeдет выглядеть отвратительно. К тому же, поле не всегда будет прямоугольным, оно может быть разной формы (но ступенчатым, т.е. прямые стороны под прямыми углами).

Если бы бэк был чёрным, то черная полоска - хорошее решение. Но фон, как я уже два раза повторял, сложный.
Последний раз редактировалось Riddik 12 ноя 2011, 15:27, всего редактировалось 2 раз(а).
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: 2d игрушка, отсечения (clipping)

Сообщение gnoblin 12 ноя 2011, 15:17

я вот не совсем понял что нужно
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2d игрушка, отсечения (clipping)

Сообщение Riddik 12 ноя 2011, 15:26

gnoblin писал(а):я вот не совсем понял что нужно


См. на рисунок: звёзды движутся внутри белого поля, периодически уходя за его пределы. Их нужно отсекать в этот момент, чтобы было не так:

Изображение

А так:

Изображение
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: 2d игрушка, отсечения (clipping)

Сообщение Riddik 12 ноя 2011, 15:33

В HGE или напрямую в direct3d для этого есть простые ф-ии Clipping(Rect rect) - (упрощённо, конечно), где в rect область отсечения на экране. Все части объектов, попавших за предел этой области, не рисуются.
Неужели в unity нет никаких лазеек для этого?
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: 2d игрушка, отсечения (clipping)

Сообщение gnoblin 12 ноя 2011, 16:04

а черный плейник нельзя положить?
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: 2d игрушка, отсечения (clipping)

Сообщение limait 12 ноя 2011, 16:22

limait
UNец
 
Сообщения: 15
Зарегистрирован: 30 июн 2011, 16:32

Re: 2d игрушка, отсечения (clipping)

Сообщение Riddik 12 ноя 2011, 16:29

gnoblin писал(а):а черный плейник нельзя положить?

Нет, я объяснил выше почему.

limait, о, как-то значит всё-таки можно. Но покупать ничего нельзя, буду искать, как они это делают.
Спасибо за ссылку.

Правка: там какие-то исходнички можно скачать, буду курить. Ещё раз спасибо:)
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: 2d игрушка, отсечения (clipping)

Сообщение limait 12 ноя 2011, 16:56

riddik, у меня есть купленная библиотека. К сожалению, исходники закрыты.

Сам бы я копал в следующем направлении:
- объект-контейнер определяющий границы отсечения;
- объекты, помещаемые внутрь проверяются на попадание в границы;
- попадающие полностью, рисуются целиком;
- не попадающие, не рисуются;
- для попадающих частично рассчитываются UV координаты текстуры, которые попадают в область отсечения. Соответственно, отображаем только эту область текстуры. Можно на отдельном плэйнике, можно на текущем (размеры нужно подогнать под clip)
limait
UNец
 
Сообщения: 15
Зарегистрирован: 30 июн 2011, 16:32

Re: 2d игрушка, отсечения (clipping)

Сообщение Riddik 12 ноя 2011, 16:59

Об этом и думал с самого начала, значит так и буду делать.
Аватара пользователя
Riddik
UNITрон
 
Сообщения: 160
Зарегистрирован: 18 апр 2011, 11:11

Re: 2d игрушка, отсечения (clipping)

Сообщение artk 12 ноя 2011, 17:10

Сделать прозрачную рамку и на нее шейдер, только не знаю как написать. Так же, можно сделать рендер в текстуру фон, последним вывести рамку с этой текстурой.
Но я бы сделал так: делаем 2 камеры, одной рендерим ваши звезды чуть ближе, так чтобы спот входил в рамку. Другой, рендерим фон. Далее или по маске, или делаем фон ввиде неба, т.е. не масштабируемый.
P.S. Как сделать такой фон-бэкграунд? Такой же как в максе, который не будет меняться при повороте камеры и зума?
Аватара пользователя
artk
Старожил
 
Сообщения: 749
Зарегистрирован: 22 май 2011, 12:22

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7