|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Вопрос назрел про шейдеры.
Есть такой контекст: в некоторый момент пользователь активирует диалог-меню, и во время этой активации блурится и темнится фон, происходит выбор в меню, далее отблур и просветление обратно.
Собрал блур на шейдере, который на image, и через это все смотрится на фон. Все красиво, но обнаруживается, что телефон начинает дико греться.
Беру шейдер попроще (вначале был O(r^2), стал O(r)) и после допиливания к контексту-дизайну вычислительная сложность упала на 1-2 порядка. Тем не менее, хотелось бы еще больше сэкономить батарею пользователю.
Идея и вопрос такие. Можно ли сделать так, чтобы заблуривался фон, а после заблуривания полученная картинка становилась статичной без постоянной покадровой работы шейдера? Например, заблурили, в шейдер передали флаг что заморозь картинку, он ее запоминает и перестает вычислять одно и тоже.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Jurec
348 EGP
   Рейтинг канала: 4(76) Репутация: 102 Сообщения: 1441 Заблокирован Откуда: Seattle Зарегистрирован: 25.02.2006
 |
|
1) юзай separate blur, то есть сначала горизонтально, потом вертикально (или наоборот) + используй mipmap поменьше, который уже "заблурен" билинейной интерполяцией
2) делай блур не материалом, а просто через https://forum.unity.com/threads/using-a-rendertexture-to-apply-a-shader-to-a-texture.437213/
таким образом сделаешь блур как раз один раз и больше он вызываться не будет.
_________________ MOV topka, C++ |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Да, последний блур у меня separate, и для него подбирал разрешение. Mipmap идею понял, но надо поразбираться с шейдерами как это лучше сделать.
То что по ссылке это скорее всего самое то что искал, спасибо. В блюжайшее время попробую.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Есть 2 или более мобильных телефонов, на них стоит одно и то же приложение. Хочется, чтобы они по wi-fi (без интернета) увидели друг друга, и один из них сделал запрос на второй и далее общая сессия с обменом данными. Потом чтобы можно было подключить 3-й, 4-й и т.д.
Как это лучше сделать средствами Юнити? Не Pro, хотелось бы конечно из коробки (без ассетов), в идеале взять какой-нибудь Network Manager и выбрать пару флагов, но если нет, то часть логики написать самому. Там что-то происходит с UNet, и совсем не в курсе (висит UNet is deprecated, and will be removed from Unity in the future, а новой вроде не видно). Не понятно как-то куда лучше копать.
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
seaman
59 EGP Репутация: 2 Сообщения: 18 Откуда: Самара Зарегистрирован: 15.01.2017
 |
|
Поищите по запросу WiFi-direct.
Пример для андроид https://github.com/saltyJeff/UnityWifiDirect
В сторе есть на этой основе https://assetstore.unity.com/packages/tools/network/mnf-mobile-network-framework-53955
или там же под iOS ссылка
|
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Нужен и Android, и iOS. Хотелось бы конечно забесплатно.
На это посмотрю, спасибо, может по ключевым следам на что-нибудь еще выйду.
Пока что не копал сложность вопроса. Если функционал сводится к открытию сервера на каждом устройстве, далее сканирование по некоторому диапазону адресов-портов в окружении, и передаче сообщений с контролем соединения, то можно попробовать самому. Но с платформенно-зависимыми заморочками, распознаванием wi-fi и т.п. возиться уже не хочется, хочется уже такое передать на стороннюю библиотеку.
Пока что мысли что стоит взять UNet, несмотря на то что он объявлен deprecated.
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (21:27 13-02-2020), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Unity 2019.3 перестал поддерживать iOS 9, и теперь iOS+. В связи с этим возник такой вопрос. Если приложение в магазине уже опубликовано, и оно уже iOS 9+. Далее, если делаем стандартную сборку Unity, то получаем в магазине ошибку ITMS-90109: This bundle is invalid, что Apple не дает выпоускать обновления, которые уменьшают множество поддерживаемых устройств.
По большому счету предлагают два пути:
1) оставаться на предудущем множестве, и использовать Unity 2019.2, не выше.
2) выпустить новый бандл, собрать запрос в старом на установку нового (чтобы пользователь после захода в приложение кликнул и перешел на новый бандл для загрузки).
Во втором случае мы потенциально теряем значительную часть базы пользователей. В первом работаем уже только на старом Unity.
Есть какие-нибудь другие варианты решения? Потому как лично я не наблюдаю повсеместного использования второго пункта, такое впечатление что все продолжают использовать старые версии Unity. Единственно видел подобное в Hearthstone, где приложение запрашивает загрузку с магазина. Хотя может Blizzard может себе такое позволить.
И вопрос в следующих моментах.
1) Можно ли скомпилировать сборку в XCode в новом Unity, но указать что он подходит для iOS 9? Теоретически, устройств на iOS уже не осталось, и все равно если указать 9+ практически ни у кого проблем не будет. Можно ли так сделать и насколько это политкорректно?
Может есть другой вариант аккуратного использования Unity 2019.3?
2) Насколько критичен для базы пользователей вариант 2?
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
По моему последнему вопросу отбой.
Как оказалось, 2019.3 требует iOS 10. В то же время, пытается сохранить совместимость по сборке для 32bit устройств и включает в required capabilities опцию metal. Такая комбинация не нравится системе публикаций приложений в AppStore. Полагаю, что конфликт возникает что требуется metal, но при этом на ios 10 могут работать устройства без metal.
Если перейти на сборку только 64 бит, то проблема пропадает. Но для этого нужно уйти в metal/arm64 (без armv7), и например поднять iOS (11 достаточно, но может и 10.3 достаточно будет, не проверял). Unity еще как-то до конца не разруливает переход в 64bit, так как при указании architecture ARM64 следы armv7 с проекте сохраняются (plist например, что можно подчистить уже самому)
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Пробую понять сетевой и многопользовательский уровень Unity, и что-то не совсем получается.
Изначально картинка и задача была такая. Есть несколько устройств c Wi-Fi (iOS и Android), и на каждом из них установлено наше Unity-приложение. Необходимо организовать обмен данными между этими приложениями с контролем соединений, идентификацией, защитой транспорта и т.д.
Себе я представлял, что должна существовать подсистема, с помощью которой можно для каждого приложения создать сервер с некоторым открытым портом, далее приложение может сканировать по wi-fi близлежащие устройства и пробовать найти такой же сервер. Далее подключение, идентификация и обмен данными. еще хотелось тотальный peer-to-peer, но в крайнем случае подойдет и клиент-сервер.
Хотелось бы это организовать средствами Unity. Но посмотрев на то что сейчас происходит в движке, стало как-то не понятно. UNet записан в deprecated, на смену заявлен(ы) New networking layer/Game Server Hosting.
Сейчас смотрю в своем Unity 2019.3, и там среди пакетов вижу Multiplayer HALPI. Это старый UNet? Или он уже адаптирован под новые New networking layer? Еще наблюдаю Unity NetCode и Unity Transport - это элементы New networking layer? или отдельные библиотеки?
Еще есть сообщения о целесообразности из-за (UNet событий) использования сторонних библиотек, например Mirror.
Какие сейчас магистральные пути применения средств юнити для сети и многопользовательских режимов? Как можно/лучше реализовать описанный выше функционал? Есть ли обзорные статьи-описания где это подробнее по понятиям разобрано?
_________________ μηδείς αγεωμέτρητος εισίτω
Последний раз редактировалось: Minx (03:33 19-07-2020), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Есть старые (legacy) анимации и новые. Первые это если Animation и в него ставим Motion. Новые это если у нас есть State-машина, где для каждого состояния можно задать Motion и движок обеспечивает трасформацию из одного состояния в другое.
Legacy анимации удобны если хочется просто что-то одноразово проанимировать. Например, появляется элемент с изменением scale по кривулине с 0 до 1.2 и потом к 1. Красиво. Или, изменился элемент и хочется привлечь внимание пользователя - делаем на секунду Rotation по Z в обе стороны туда-сюда. Захотели проанимировать для обоих случаев - дернули Animation - Play
Если делать тжс через State-машину, то там все как-то криво получается. Чтобы просто проанимировать надо (например) сделать состояние с этой анимацией и продержать там элемент заданное время. Переход в состояние через флаг-переменную и из него обратно. Здесь надо делать состояния, надо контролировать конец анимации, запуск же не совсем оченьвиден (Animator - Setbool например).
Нужно ли постепенно уходить от Legacy анимаций? Если да, то как предполагается делать простые анимации на новых аниматорах без лишних телодвижений - создания state-машин, переходов между состояниями и т.д.?
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
ТехноМаг
360 EGP
     Рейтинг канала: 2(19) Репутация: 93 Сообщения: 2516 Откуда: Кронштадт Зарегистрирован: 09.04.2007
 |
|
Minx, тут кроме меня и тебя никого нет. А Юнька, извини, не моя тема =(
_________________ (Л)"Алекс, я живу уже почти 200 лет. но как видишь, выгляжу я всего на 20. И это не единственное отличие меня от людей." |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Да, есть в этом что-то. Но кто-то же написал 18 страниц
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
seaman
59 EGP Репутация: 2 Сообщения: 18 Откуда: Самара Зарегистрирован: 15.01.2017
 |
|
Для простых анимаций лучше всего и проще всего использовать какой-нибудь твинер, Мне нравится DoTween
https://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676
А как уж там внутри реализована анимация - неважно (обычно просто прямым изменением трансформа).
Последний раз редактировалось: seaman (21:31 25-03-2021), всего редактировалось 1 раз |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Про сторонние библиотеки как-то не думал, надо посмотреть.
Но тут как-то не понятно, как же разработчики Unity предполагали не-legacy способом проводить простейшие анимации без состояний?
Как-то странно. Там еще под капотом библиотек может окажется что legacy-анимации. И в какой-то момент из ядра вдруг их уберут как legacy и всё как посыпется..
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
Zachesa
151 EGP
  Рейтинг канала: 4(95) Репутация: 13 Сообщения: 1420 Откуда: Хабаровск Зарегистрирован: 12.11.2007
 |
|
ТехноМаг : |
Minx, тут кроме меня и тебя никого нет. А Юнька, извини, не моя тема =(
|
Я тоже заглядываю иногда, но больше просто читаю...
_________________ Язык Образов, для ситуационного моделирования, программирования и как язык мысли, думающей машины. |
|
|
Minx
1011 EGP
        Рейтинг канала: 6(332) Репутация: 139 Сообщения: 10548 Откуда: Gomel, Belarus Зарегистрирован: 19.11.2005
 |
|
Есть такое свойство - isStatic. То есть, если мы поместили на сцену объекты, и не собираемся их перемещать, то пометив их, мы повышаем производительность Unity. Так понял что идея тут в том, что Unity заранее объединяет все статические элементы в один меш, готовит это дело как константу для каждого тика, и далее массированно всё это и эффективно обрабатывается.
Попробовал поискать как его корректно применять в динамике - не нашёл.
Далее попробовал сделать так:
Код: |
var script = Instantiate(prefab ..
script.gameObject.isStatic = true; |
Т.е., после получения желаемого объекта на сцене (параметры которого задаю динамически), включаю isStatic и далее не меняю ни объект, ни свойство.
Так можно делать, нет ли тут ничего криминального?
Может есть более корректные способы?
_________________ μηδείς αγεωμέτρητος εισίτω |
|
|
|
|
|
Канал Игры Мечты: «Unity -- учим вместе» |
|