Комментарии 104
Лучше бы столько внимания самой игре уделили, а не выдумывали фейковые полоски.
Плохо работает с тех пор, как игры научились виснуть намертво, но с бегущими полосками, скачущими счётчиками ФПС и играющей фоновой музыкой.
это чисто отвлекающий маневр для пользователей - а пока мы виснем, подр...помедитируйте, пожалуйста, на нашу охренеть насколько классную как и в других прогах цикличную анимацию!
а циферки прогресса и правда врут безбожно - то быстро ползет до 99% и на 2 часа там остаётся, то бодро шагает до 90, сбоасываясь до 10, и дальше...
и, (пользуясь случаем) лично меня очень расстраивает, что напрочь перестали говорить, что именно происходит, всё одни загадочные надписи "это магия, вы моргнете, а у нас всё готово", и действительно, засыпаешь... где это "скопирован файл такой туда, создана такая запись в реестр" и т.д.?
и тут мы впоминаем GTA5 где сначала пользователь смотрит на прогрессбар (который к слову отображает более менее реальную загрузку ресурсов судя по iotop) а потом совершенно рандомное время (от минут до часов и судя по реддиту даже дней) смотрит на чёрный экран без каких либо элементов интерфейсов, спинеров, полосок прогресса..
хотя лично мне при чтении статьи вспомнилась Vice City, уж незнаю насколько реально полоса прогресса загрузки отображала этот самый прогресс, но глаз дёргался каждый раз от того что каждая загрузка заканчивалась БОЛЬШЕ чем на 100% (судя по полосе прогресса которая уезжает за пределы экрана справа хотя начинается совсем не рядом с краем экрана слева).
ну или Life Is Feudal с которым я познакомился недавно по просьбе друзей, загрузка длилась больше часа пока я не полез разбираться и не выяснил что игра попыталась поднять сервер, не справилась, и больше не делала ничего всё это время.
ИМХО лучше всего отображать прогресс хоть в играх хоть в софте ввиде человекочитаемого информативного текстового лога:
starting session. done: 1/1
loading resources. done 1/125
loading resources. done 2/125
loading resources. done 3/125
error loading resources. file ~/.steam/steamapps/common/MySuperGame/shaders/some.shader is corrupted
abort loading resources. retry
loading resources. done 1/125
ну и так далее (правда тогда разработчикам прийдётся объяснять юзверям что warning это не error и вертел он исправлять весь миллион варнингов).
Человекочитаемого ?)
При попадание знакомого до флешбэков слова Life Is Feudal , у меня невольно начинают дёргаться конечности. Хотелось бы передать привет всем разработчикам и геймдизайнерам этого милого проекта. Они явно хотели как лучше, но не по чертежам пошло.
Как правило вычисление честного прогресса просто слишком сложно, и игра не стоит свеч. Например, идет этап загрузки моделей, там надо загрузить сто файлов, и они имеют разный размер - от нескольких килобайт до десятков мегабайт. Ну вот и как делать честную загрузку? По количеству файлов, по их размеру? А если там добавляется еще какой-нибудь нетривиальный постпроцессинг, время которого не зависит напрямую от размера модели?
Вот в итоге и делают "загрузка всех моделей - это 50%, потом загрузка звуков это еще 20%, потом постпроцессинг... ну давай еще 20% накинем, и 10% на все остальное", просто какие-то от балды прописанные константы, и всех устраивает.
Иногда бывает смешно, когда приложение грузится слишком быстро, и заказчик просит вставить фейковую задержку, а то иначе "не солидно". Клиент не поймет, что приложение делает что-то важное и то, за что он заплатил кучу бабла, если оно проскакивает за миллисекунду.
Иногда бывает смешно, когда приложение грузится слишком быстро
Тоже приходилось добавлять буквально delay(200), так как данные грузились неожиданно быстро, а пользователь не успевал насладиться анимацией прогресса. ლ(́◉◞౪◟◉‵ლ)
Была такая история. Добавили в код sleep на 1 секунду между сменами этапов обработки, чтобы юзер успел увидеть в UI смену статуса. А потом количество данных выросло в 1000 раз и процесс занимающий 5 минут растягивался на час и большую часть времени спал на этом sleep.
Извините, но поставил минус к комментарию.
По-моему, искусственное замедление загрузки - это форменное вредительство. В идеале программа должна летать, особенно с учётом того что современные смартфоны, с ARMv9 и 16GB UFS 3.0, имеют ошеломляющую производительность по меркам большинства программ 5-10-летней давности. Так нет - мало того что некоторые разработчики откровенно плюют на оптимизацию, некоторые ещё и ухудшают!
Вы путаете инженерно-компьютерную сторону вопроса и психологическую.
Конечно, программы должны работать быстро, но разве вы сами хоть раз не ловили себя на мысли "что-то оно подозрительно быстро завершилось"?
Ха, а как вам история с кнопками "Обновить" в почтовом клиенте и "Сохранить" в текстовом редакторе или среде разработки — кнопки, которые пытались убрать, потому что все эти события и так происходят автоматически, но вернули для того, чтобы у пользователя оставалось ощущение контроля и обратной связи? :)
"Обновить" в почтовом клиенте происходит посредством поллинга с довольно большим интервалом, а не через оповещение. И даже если через оповещение — оно залипает, и приходится дергать ручками. Не будет "Обновить" — будут дергать перезагрузку страницы, или несколько, для надежности.
"Сохранить" не сохраняет автоматически файл, а делает автосохранение, которое может сглючить или не восстановиться в случае сбоя. Там, где оно работает корректно (Obsidian, например) — этой кнопки и нет, и никто не жалуется.
Иногда это может быть оправдано тем, что на экран загрузки выносится дополнительная информация по лору мира, текущем задании, подсказки и т.п.
Но, на мой взгляд, хороший тон тут не закладываться на время загрузки ресурсов, а ждать инпута от пользователя по окончанию загрузки.
Если процесс примерно один и тот же, я всегда рисую на полоске время: "Осталось 15 секунд". Если время выйдет, а процесс не готов, пишет что то вроде "продолжаю: 5 секунд" - время уже растёт.
Первый запуск ориентировочное время выбираю от балды, а все последующие - от фактического результата предыдущего, иногда перемноженного с размером исходных данных.
В результате у меня средняя ошибка угадывания времени меньше, чем было до меня - там скурпулёзно подсчитывали количество комманд в задаче, но совершенно не могли учесть влияние кешей.
Странно, но конкретно проблему количества \ объема прекрасно решили уже давно. Делается контрольный замер, определяется сколько времени друг относительно друга стоили файлы и каждому из них определяется процент того, сколько загрузки они займут.
Если вся загрузка предсказуемая, то можно делать прямо очень приятные и плавные загрузки, реализация такого в начале проекта может стоит условный человеко-день. А вот если загрузка на ходу может решить, что надо сделать что-то ещё, но не каждый раз - то да, загрузка будет не очень плавной. Но всё равно лучше, чем просто от балды накиданные цифры. Просто всем пофиг, вот и весь ответ. Нынче куча игр просто рисует бесконечную загрузку в виде какой-нибудь простенькой анимации.
Делается контрольный замер
Где он делается? На компе у пользователя? Что будет если скажем во время замера была только загрузка, а потом так случайно совпало что параллельно антивирус начал что-то делать и тем самым замедлил процесс загрузки?
На компе разработчика, на билд-машине - да где угодно.
Вам нужны относительные тайминги, не обязательно идеальные. Просто чтобы можно было сравнить файлы друг с другом.
Я не говорю, что это идеальный сценарий. Но это сценарий лучше, чем предлагается в новости. И это сценарий, которым пользуется приличное число программ.
UPD: кто-то уже в карму плюнул. За реально работающее решение. Интересные люди. Пишите хоть, предлагайте свои решения. Мне тема интересна, я бы послушал хорошие решения озвученной проблемы.
На компе разработчика. Делаем распределение: 5% — на это, 10% — на то, и так далее. При первом старте у клиента предполагаем, что процес будет идти максимально долго, при этом измеряем фактическое время выполения. При втором и последующих стартах предполагаем, что работать будет в 1,1 – 1,2 раза дольше, чем при первом старте, и показываем процесс.
А потом на один старт оказывается что виндовс закэшировал часть данных, а на другой - всё по новой подгружать надо ещё и в условиях когда всё свопится и нагрузка на диск большая. И все эти наши расчёты идут лесом.
Уточню что имеется ввиду то, что все эти соотношения "этот этап занимает такой процент времени, а вот тот такой" сломаются. Ибо в одних случаях ввод вывод будет медленнее, а в других быстрее. И если у нас часть загруpки завязана на непосредственно загрузку с диска, а часть на расчёты на CPU то прогресс бар будет колбасить от раза к разу. И придём к тому с чего начинали - индикация загрузки не показывает ничего полезного кроме того факта что что-то происходит.
Да, чем сложнее процесс - тем больше нужно заморочек.
Но это же от ПО зависит. Кому то такого решения будет достаточно. Кто-то будет плясать от особенностей своей реализации.
Кто-то не будет заморачиваться и сделает просто анимированную бесконечную загрузку.
Зачем делать "фальшивый" прогресс-бар - я не понимаю.
Недавно вон играл в хорайзон на ПК - шейдеры на каждом запуске очень долго подготавливались. Зато с прогресс-баром, пофиг что больше 5 минут.
Тогда надо вести статистику загрузок, и перед каждым запуском считать некое средневзвешенное значение, последним запускам давать бо́льший вес. Но это уже сильно для любителей поизвращаться.
Ну так и в чём проблема то ? Логировать время загрузки каждого элемента, посчитать пропорции и от этого уже рисовать ползунок.
А нафига? Это же надо вот прям время потратить, нцать раз загрузить игру, что-то там померять. Причем если речь идет об игре - она будет работать на разных компьютерах, и где-то быстрый ССД и этап чтения файлов будет вот такой пропорции от общего времени, а где-то медленный хдд и загрузка данных будет дольше всех остальных этапов. В общем все равно получится по сути тыканье пальцем в небо, только еще время потратишь на какие-то бессмысленные эксперименты.
Понимаю, что сложно сделать чтобы стать вй индикатор загрузки. Сегодня сложно.
А в 80е на достаточно было взглянуть на счётчик оборотов кассеты магнитофона.
А потом в коридоре неожиданно включался холодильник, и индикатор загрузки приходилось отматывать обратно на ноль…
(ну вы поняли, про что я)
Наслышан про холодильник, но сам с таким не сталкивался. Хотя играл на спектруме довольно много. Наверное был хороший блок питания (то-ли у магнитофона, то-ли у холодильника) ну в этом повезло. А если возникали проблемы с загрузкой скорее всего дело было в плохом качестве кассет или записи, т.к. глючило примерно в одних и тех же местах.
Как-то, не помню уж зачем, замерял напряжение в сети на кухне ламповым стрелочным вольтметром. В этот момент включился советский холодильник ЗиЛ. Так вот, стрелка вольтметра скакнула до 800 вольт немного там постояла и быстро откатилась назад к 230.
Мой спектрум такое переживал нормально. Но у меня отпали вопросы - почему у моих друзей в аналогичной ситуации комп мог подвиснуть :)
P.S. Примерно в то же время мы в универе проходили переходные процессы в электрических цепях. До этого измерения теория воспринималась как-то отвлечённо, а вот после... После я понял, что переходные процессы - это серьёзно!
Холодильник, допустим, висел на отдельной фазе, а вот звонок, в который звонили друзья, которые пришли к тебе поиграть... :-)
В квартире? Вторая фаза???
Ну у кучи квартир их три. Это вроде бы даже норма для новостроек. Или уже нет?
я не говорю про абстрактную СОВРЕМЕННУЮ квартиру. Речь шла про ZX. Это 90-ые... И вот не представляю я в то время многофазную разводку в квартире. Не надо забывать, что это нужен совсем другой счетчик.... и т.д.... Так что тут я поддерживаю Станиславского - "Не верю...".
я не говорю про абстрактную СОВРЕМЕННУЮ квартиру. Речь шла про ZX. Это 90-ые…
Мне как-то казалось что уже в 80-е начали делать новостройки с многофазовой разводкой. По крайней мере в Питере и скорее всего в Москве тоже. Я ошибаюсь?
А вы думали электроплиты в 90-е от 220В работали?
Вот как раз в то время это было нормально. У нас в квартиру шло три линии (на левую сторону квартиры, на правую сторону и отдельная в ванную), и на каждую в щитке на лестничной клетке стоял отдельный автомат. И "кинуты" они были на разные фазы потому что случайно раскидать линии по фазам — это простейший способ выравнивания нагрузки. Счётчик, да, стоял трёхфазный. Потому что ставили его в советское время, когда для юрлиц понятия "дорого" не существовало, какой удалось достать — тот и поставили.
А вот как в десятые сделали ремонт — так и оказалось, что однофазный счётчик дешевле, да и щиток на лестничной клетке надо от жильцов закрыть — для чего надо уменьшить количество автоматов там. Теперь в квартиру идёт одна линия, которая делится в квартирном щитке на пять.
А бывало, счетчики в доме и не ставили вообще. Дефицит. Считали по нормативам — по количеству лампочек и розеток, но при цене в 4 копейки за кВт×ч плата была довольно мизерной, зато была возможность подключать любые устройства и не думать о счетах. В сентябре (а то и в августе) ставили трехкиловаттные козлы в каждую комнату — и гоняли сутками, пока в октябре батареи не включат...
Запросто. Если в квартиру идёт несколько линий от щитка — обычно они оказываются на разных фазах.
У меня две заведено. Примерно половина квартиры на одной висит, половина — на другой. В многоквартирный дом всегда три фазы заходят, и дальше их распределяют между квартирами так, чтобы потребляемая мощность по каждой фазе в идеале была одинаковой. В нашем доме даже в однушки две фазы затянуто. Проект 1965 года. А в частные дома по умолчанию одна фаза идет, там распределение трех фаз по домам происходит. Хочешь три фазы в частный дом — надо очень сильно местных энергетиков пинать.
Написать точный прогресс не то чтобы сильно сложно, но достаточно муторно. Нужно уметь прогнозировать точный объем работы (иногда это нелинейный процесс, - игра может решить, что в процессе загрузки, допустим, нужно провести децимацию мешей, ибо комп слабый или памяти мало, или, наоборот, часть данных можно пометить для отложенной загрузки, и прогрузить уже в процессе игры). Нужно заморочится пробросом коллбеков и посылкой сигналов в не очень удобных с программной точки зрения места. Нужно помнить внутреннее состояние и синхронизировать его в случае параллельной одновременной загрузки ряда ресурсов. И все это для того, чтобы полоска плавно двигалась.
Гораздо проще в нескольких местах написать условно что-типа setProgress(30) а силы и время потратить на более важные вещи. Ичсх, пользователю действительно "рваный" прогресс может показаться более естественным. Вот и весь заговор инди компаний.
Гораздо больше, чем фейковая загрузка, бесят непропускаемые предупреждения и логотипы всех фирм, причастных к проекту. "Даже если вы этого не знаете, и никто из ваших родственников не болел, из-за отдельных сцен в игре у вас могут проявиться симптомы чего-то там. И эта бесячая надпись будет каждый раз при запуске по минуте! Нам всё равно, что вас она бесит, наши юристы предпочли перестраховаться. Ну как, всё прочитали? А теперь вот вам перечисление всех фирм, причастных к проекту, или причастных к оплате показа логотипа. А чтобы вы не расслаблялись, иногда мы будем показывать черный экран, чтобы вы гадали - игра уже зависла или это пауза между показами роликов"
Ну, предупреждения для эпилептиков действительно необходимы - приступ в лучшем случае весьма неприятен, в худшем случае - опасен.
А как авторы роликов узнают, опасны их ролики для эпилептиков, или нет? Метрики, которые они используют, опробованы в природе или взяты от балды?
Одним из самых известных триггеров эпилептического приступа является быстрая смена ярких и красочных кадров. К примеру, Cyberpunk 2077 вполне может такое демонстрировать. Если такое есть, то проверять в природе смысла нет, ибо уже проверено.
Да ничего они не меняют. Просто ставят заставку на всякий случай, чтобы потом с ними не судились.
Так же как и с медицинскими препаратами, везде в противопоказаниях пишут детский возраст, беременность и лактация. Хотя никто даже не парился о том, чтобы действительно исследовать есть ли вред для детей. В результате куча детей остаются без препаратов, которые могли бы им помочь выздороветь, зато производители прикрыли свою попу от судебных исков.
Пусть будет. Но разрешите мне в Стиме или в консоли поставить галочку что у меня и у всех кто у меня дома может играть такого нет, я беру ответственность и себя и все такое. И больше не показывайте нигде.
Провести исследования лекарства на детях или на беременных - в разы дороже и сложнее юридически, чем на взрослых. Без исследований - неизвестно, помогли бы выздороветь или получить какие-нибудь побочки, с которыми взрослые не сталкиваются.
А не прикрывший попу производитель разорится на судебных исках, и дети лекарство всё равно не получат.
Было бы неплохо иметь галочку в настройках для их отключения, или хотя бы возможность пропустить по Esc, например. Каждый раз при старте игры это читать бесит, одного раза было достаточно...
(И мне что-то подсказывает, что эпилептики и так в курсе, от чего им может стать плохо)
Anno 2205, как-же меня раздражало каждый раз при запуске наблюдать эти прекрасные надписи.
Кстати, вспомнился Stronghold Legends, там хоть и нет таких предупреждения и непропускаемых заставок, но идея включать рык дракона при запуске игры весьма "гениальна". Особенно под вечер, да с колонками. И сиди, жди пока загрузит что-бы переключить успеть.
эпилептики и так в курсе, от чего им может стать плохо
Играет эпилептик в какую-нибудь Subnautica:Below Zero, с плавным передвижением среди красивых подводных пейзажей. И тут атака одной галлюциногенной зверюшки вызывает дикие переливы цветов по всему экрану и искажения перспективы, такие, что здорового начнёт подташнивать(так и задумано). Откуда ему об этом узнать заранее?
иметь галочку в настройках для их отключения
Всякие логотипы разработчиков могут отключаться, полностью согласен. Но вот предупреждения для эпилептиков должны появляться каждый раз: есть шанс, что этот экземпляр игры открывали уже сто раз, но теперь в первый раз за этим компьютером сидит эпилептик. Правила безопасности написаны кровью.
Если бы ещё все люди читали все надписи, которые им показывают. Хотя я не знаком с эпилептиками, вдруг они читают всё на случай, если там появится предупреждение.
Минусующие товарищи, ну приведите контр-аргументы, что ли. Интересно же, с чем не согласны.
Дэйлли заявил, что он никогда не внедрял загрузочный экран
I've never faked one. In fact, I've gone out of my way to try and make it as "correct" and as smooth as possible...
Перевод неточен, Дэйлли не говорил, что никогда не делал экран загрузки. Он говорил, что делал экран загрузки максимально плавным и честным, без рывков.
испортились разработчики. Вот на спектруме с кассеты была честная загрузка. Даже если сильно кастомизировнная =)
В проводнике Windows бывает забавный прикол с прогресс-баром. Заходишь в какую-нибудь сетевую папку, которая не отвечает и не может ответить, но прогресс-бар идёт, сначала бодро, потом еле-еле. Если подождать подольше, он может перевалить за 100%. Неужели нельзя разделять "ожидание" (когда система ждёт и неизвестно, будет ли ответ) от прогресса (когда ответ получен, байты бегут и надо просто немного подождать).
Причем одна недоступная сетевая папка может положить весь проводник
В линуксе тоже, если в директории есть другая, подключенная по sshfs, и она висит из-за сбоя сети, выключившегося сервера, или если сервер сильно занят и долго отвечает, то повисает ls родииельской директории, пока не сделаешь umount -f или пока не прибьёшь сам процесс sshfs.
-o ServerAliveInterval=15
и опционально -o reconnect
Вот именно с reconnect он и тупит до последнего, если вдруг сервер перезагружается или ещё что. Лучше бы отвалился по таймауту.
Это ладно если только проводник... Включал на днях поддержку SMB v1 (роутер только это умеет) в 10 винде. Через какое-то время комп наглухо виснет. После 3 раза стало понятно, что это не совпадение, пришлось отключить. На другой машине с 7 всё работает как часы
Оно отделено. По гайдлайнам есть «градусник» и есть «червяк». «Градусник» монотонно увеличивает полосу до 100% исходя из предположений о длительности процесса. «Червяк» — это маленькая полоска, которая бегает слева направо и обратно до тех пор, пока процесс не закончится или когда станет ясно, сколько процесс реально займет времени. Только вот в MS понаписали гайдлайнов, а потом собственные программисты забили на них большой-пребольшой болт. :-(
Вот у меня похожая проблема. Есть десктопное приложение на питоне, которое использует сравнительно "тяжелые" модули. Сделал грубый лоадер, который их импортирует в самом начале работы, и показывает прогресс, но всё на уровне "модуль X из Y". Вроде и хочется сделать что-то более изяшное, и чтобы список модулей для предзагрузки само определяло, но есть ли вообще смысл...
А можно делать не полоску, а картинку-мозаику вроде собранного паззла из кусочков разного размера (по размеру файлов, блоков, модулей). И показывать загрузку, заливая эти кусочки цветом. Заливаться они будут с разной скоростью. Но будет ясно, что вот эта штука грузится быстро, а вот у этой - скорость низкая. То есть будет видно и число модулей, и их размеры, и темпы обработки раздельно. Очень наглядно.
игроки не верят равномерному движению полоски загрузки. Регулярные рывки и паузы кажутся более правдоподобными
Да не станет такой проблемы, если выводить на экран подробную информацию о текущем шаге, а не бесполезную крутилку как а Windows 8+
Хотя выше написали 2 комментария: либо прогресс-бар с замером предыдущим (тоже вариант), либо мучения с внедрением коллбеков.
В SW KotOR 1-2 на экране загрузки можно было интересную инфу по лору и игре почитать. Так что не всегда задержки зло :)
До сих пор помню загрузочные экраны серьезного сэма 2, где была какая то динамика (персонажа можно было покрутить что ли?) и текст с прокруткой (вроде бы).
Учитывая, что остальные игры прямо "зависали" на загрузке, было прямо чудом.
Современные компьютеры слишком быстро соображают для такого. Но разработчиков это не останавливает.
Помню была проверка диска после некорректного завершения работы в Виндоус. Вот там прям очень неравномерно прогресс бар скакал
я всегда ненавидел окна, когда они целую вечность висели на уровне 20%, а затем подскакивали до 100%
"окна". Редакторы хабра пробивают дно :(
В синглплеерных играх процесс загрузки последнего сохранения должен невидимо запускаться сразу после запуска, и продолжаться в главном меню. Если нет сохранений то точно таким же образом должен грузиться первый уровень. Чтобы когда пользователь дошёл до пункта "Новая игра" или "Загрузить последнее сохранение", всё уже было загружено.
А ресурсов точно хватит? Современные игры очень хитро ими управляют. Там часто все на пределе. И вторую локацию запихать уже некуда. Загрузка в той же локации технически должна происходить околомгновенно по определению. А вот геймплейно сделать паузу может быть и оправданно.
В доте2 есть такая возможность, т.к. карта одна. Но это в основном для тех, у кого может не хватить мощностей на обычную загрузку.
"Может быть, поэтому мы так не любим экраны загрузки и стремимся к бесшовному стримингу ассетов или, если вмешивается суровая реальность разработки, просто добавляем иконку, которая вращается". Обожаю настоящий процесс загрузки. Желательно максимально подробный, что конкретно происходит в текущий момент времени. Как минимум это успокаивает, что процесс хотя бы идёт, и хорошо, если он идёт ещё и как нужно.
Я так "люблю" наблюдать вращяющиеся иконки, которые могут минутами вращаться и нет ни малейшего представления - оно вообще работает или нет? Хорошо если минутами, ведь этот процесс может происходить часами, а в некоторых случаях днями.
Или индикатор в 99%, который может закончится, а может и нет. И полная неизвестность а оно зависло? Зависнет? Этот процесс вообще надо дожидаться или уже пора?
Это особенно важно на устройствах, которые ещё работают, но уже не так хорошо, как хотелось бы.
Пожалуйста, делайте понятные прогресс-бары...
"Вы благополучно скачали 64 килобайта нашей новой ретро-игры. А теперь можете попить чай пока наслаждаетесь долгой анимацией процесса установки на SSD" ?
Ждём откровений от фронтендеров.
Инди-разработчики рассказали о фальшивой полоске загрузки в играх