• Красота прогрессивных улучшений
    0
    Реальные webp, создаваемые ImageMagick из тех же png, обычно оказываются больше, причём значительно, на треть где-то.

    Можете показать примеры изображений? Мне интересны примеры, где webp не работает.

    В наших проектах (не связанных с вебом) проводили начальное исследование эффективности сжатия на конкретном (не синтетическом) контенте, и выигрыш по размеру был существенным — в среднем сжатые изображения весили 25% от начального размера PNG
  • Оптимизация рендера под Mobile
    0
    Расскажите про инструменты профилировки графики, которые вы используете (кроме adb shell dumpsys surfaceflinger)
  • Под чёрным флагом пост, или Как я не выложил ваш видеокурс на трекер
    0
    В том то и дело что там нет защиты «только на 2 компьютера» — ipr общий на всех «потребителей». ipr файл — обертка вокруг видеофайла с метаданными, зашитая одним ключем (скорее всего через AES-128). Там есть и плейнтекстовая информация с разметкой внутреннего контента и явный видеобинарник. То есть ключ для раскодировки либо зашит в сам бинарник (меня не удивит если это так), либо каждый раз отправляется с сервера при открытии плеера. При этом видео не разделено на чанки, закодированные разными ключами (как это иногда делают), т.к. после запуска видео можно физически вырубить доступ к сети и раскодировка будет спокойно работать на протяжении всего видео. Вариант с мгновенной раскодировкой во время запуска исключается, поскольку на моем железе нет возможности разжать 3х гиговый бинарник за полсекунды. Плюс плеер постоянно висит достаточно высоко в списке процессов — openssl либа активно работает, нехило загружая процессор.

    Основной смысл реверса бинарника в том, что вместе с «сырым» выходным видеофайлом мы получим автоматическую очистку всех ватермарок с ключами активации (видимыми глазом, которые иногда замазывают при публикации видео на торренты, и невидимые, которые команда infoprotector вручную отслеживает по этим раздачам, очевидно налепливая что-то типа полу-рандомного шума на видео, как делают при «атаке» на нейронные сети).
    Эти ватермарки-ключи не зашиты в видео, а генерятся плеером на лету и лепятся поверх видеопотока для каждого пользователя в отдельности. И эти ключи являются единственной возможностью отследить человека, сделавшего «рип» видео.

    Я уже пробовал тыкать в инфопротектор дебаггером — но он обфусцирован и защищен чем-то типа VMProtect. Пока более глубоко копать времени не было.
  • Под чёрным флагом пост, или Как я не выложил ваш видеокурс на трекер
    +2
    Инфопротектор еще очень нестабильно работает на MacOS — билд постоянно вылетает из-за ошибок доступа к памяти.

    Не пробовали реверсить бинарник .ipr? Судя по тому, что интернет требуется только для активации, а во время просмотра можно спокойно выключить доступ к сети — ключ для декодирования бинарника либо зашит в сам бинарник, либо получается единовременно при запуске видео.
  • Как мы разогнали САПР КОМПАС-3D → Часть 2
    0
    В итоге остались на OpenGL? У вас есть какая-то статистика платформ и железа, на которых работает КОМПАС? Есть ли там поддержка какого-нибудь DX12 или Vulkan?
    Рассматривали ли вы варианты реализации рендеринга через другие графические API?
  • Релиз кросс-платформенного .NET UI-тулкита AvaloniaUI 0.8
    0
    Специфичный кейс:
    Есть ли возможность встраивать кадры сырого рендера на OpenGL / Vulkan / DX / Metal внутрь окон с контролами? (с пересечением / перекрытием кадра контролами или без)
  • Подсчитаем баги в калькуляторе Windows
    +10
    Обратите внимание на сигнатуры в вашем коде — wstring против wchar_t из статьи. wstring поддерживает структурное равенство через ==, массив wchar_t — нет.
    Именно такие малозаметные изменения и опечатки говорят в пользу статического анализа кода.
  • Компилируем Kotlin: JetBrains VS ANTLR VS JavaCC
    0
    Тогда ещё вопрос — основной платформой и для текущего кроспилятора и для «к примеру, скриптования» является Android? Почему именно Java (как платформа в первую очередь, JVM)? Понятно, что кроспилированные шейдеры можно использовать в сыром виде, но что со скриптованием? Рассматривали ли вы какие-то альтернативные варианты типа скриптового рантайма на С например?
  • Компилируем Kotlin: JetBrains VS ANTLR VS JavaCC
    +1
    А по какой причине шейдеры в GLSL кроспилируются каждый раз в рантайме заново, а не заранее на этапе сборки и не бандлятся в игру/приложение собственно в виде GLSL?
  • Когда больше нет сил: как преодолеть эффект «плато» в английском
    0
    В Amazon Kindle есть такая фича — поиск выделенного слова в оксфордском толковом словаре. Однако в большом количестве случаев непонятное слово объясняется через другое, ещё более непонятное слово, либо через тавтологию (например слово Хs-множественное число слова X). При этом нельзя рекурсивно искать слово через сноску. Ещё один минус такого подхода — перестаёшь ассоциировать слова на английском со словами на русском. То есть понятны смысл и контекст применения слова, но не можешь найти аналогичное слово на русском, хотя чаще всего есть простой и однозначный перевод. Очень неудобно в случаях, когда надо перевести какое-то предложение незнающему человеку — начинаются долгие раздумывания про «как это по-русски», хотя весь смысл предложения понятен.
    В идеале надо и переводить, и смотреть толкование в словаре eng-eng.
  • Разработка на LÖVE
    0
    ибо не было практики ковыряния голого OpenGL.

    Очень советую, крайне полезный опыт, большинство вопросов сразу пропадут :)
  • Разработка на LÖVE
    0
    Это, насколько я знаю, двухмерный режим OpenGL, трёхмерный чуть иначе работает: там посылаем кучу всякой фигни, отсекаем невидимые камерой грани, строим z-буфер, по нему рисуем плоскости с натянутой текстурой, хитро обсчитанной

    У OpenGL нет «двухмерного режима», есть только API команды, которые описывают текущий вариант использования механизма отсечения невидимых граней (glCullFace), либо использования z-buffer (glDepthFunc). В случае если он не используется — мы просто пишем что не используем его (просто не включаем его в текущий render buffer). Но это не значит что его нельзя включить для 2Д рендеринга.

    Опять же — OpenGL не знает что вы через него пытаетесь рисовать, он всё считает трёхмерной геометрией.
    2Д обычно рисовать быстрее просто потому, что не нужно считать попиксельное освещение. Но при этом 2Д может быть медленнее в случае если оно рисуется через alpha-blend с огромным количеством накладывающихся слоёв. Хороший пример — закрытие игрового «мира» чёрной подложкой и рисование чего-то другого поверх (например экрана опций). В случае, если появляется такое большое количество «перерисовок» (overdraw) мобилки начинают сильно захлёбываться из-за «физического» ограничения на количество отрисовываемых пикселей за кадр — fillrate. ПК от этого обычно меньше стадают из-за большей общей производительности.
  • Разработка на LÖVE
    0
    Помнится, для GPU нет понятия 2d или 3d

    Да, именно об отсутствии понятия 2Д для GPU я написал выше. Все вершины считаются трёхмерными, вся математика с положением — в трёхмерном пространстве.

    Пайплайн со скриншота как раз явно содержит передачу массива вершин — input geometry and attributes, которые определяют трёхмерные объекты (даже если они плоские)

    Более интересен ваш пример с шейдерами — это и есть обычный режим работы OpenGL. Расчёт экранных координат переданных вершин расчитывается в vertex shader — там где умножается матрица 4х4 на четырёхмерный вектор. Мерность матрицы и положения вершины как бы намекает на трёхмерную природу — вектор вершины хранит её положение в трёхмерном пространстве (в гомогенном виде — четвёртая составляющая), а матрица — обычная матрица трансформации в трёхмерном пространстве (translate — rotate — scale). То есть Love тоже работает как «эмулятор 2Д в 3Д пространстве», и это крайне эффективно.

    Отсечение невидимой геометрии за пределами камеры — это пользовательский код, которого нет в графическом драйвере по умолчанию. То есть если вы будете использовать сырой OpenGL для отрисовки 3Д геометрии, там тоже не будет фильтрации геометрии, выходящей за границы камеры (неважно — перспективной или ортографической, либо вообще камеры с кастомной матрицей проекции) пока её не напишешь вручную (frustum culling)
  • Разработка на LÖVE
    0
    поэтому 2d эмулируется через 3d, у которого камера перемещается по одной плоскости.

    Ну, тут просто слегка избыточная трата ресурсов, что может быть критично на телефонах.


    Для GPU, кстати, вообще нет понятия «2Д» — она в любом случае рисует трёхмерные примитивы (меши). Именно такой способ «ускоренного» рендеринга (через «эмуляцю» 2Д через 3Д) позволяет существенно увеличить производительность, особенно на телефонах. Именно таким ускорением (переводом рендеринга с CPU на GPU) в своё время занимались Adobe с их Molehill (Stage3D). И скорее всего именно так уже работает Love, если посмотреть на love.graphics API (например вот — явный отсыл к графическому Stencil Buffer love2d.org/wiki/love.graphics.setInvertedStencil) Точнее сказать не могу, т.к. уже написал выше что сам не пробовал Love. Но очень советую поглубже копнуть в эту тему, интересно уточнить как именно работает рендеринг в Love
  • Разработка на LÖVE
    0
    Глянул в очередной раз на сайт. Не понял до конца — можно на мобилки билдить или нет? Там есть какая-то Android version, но это вроде сам редактор.

    И наверное общий вопрос: чем принципиально отличаются Lua движки типа Defold / Corona / Love? На что в первую очередь обратить внимание при выборе?
  • Как рендерит кадр движок Metal Gear Solid V: Phantom Pain
    0
    Просто в тему — есть ещё более быстрый и более cache-friendly вариант блюра — «Dual Filtering Blur». Именно на этот метод ссылается автор интеловской статьи про ресёрч реалтаймового блюра.
    Подробнее можно прочитать вот тут community.arm.com/graphics/b/blog/posts/moving-mobile-graphics#siggraph2015
    Bandwidth-Efficient Rendering — Marius Bjørge, ARM — Notes (презентация с описанием и примерами кода)
  • Игра на Unity, с открытым кодом
    +1
    +, мне тоже интересно
  • Игра на Unity, с открытым кодом
    +1
    Недавно годный доклад на эту тему опубликовали на youtube. Я сам практикую немного другие вещи (ECS / Entitas), но то что сделали они мне очень понравилось www.youtube.com/watch?v=raQ3iHhE_Kk
    Очень советую к просмотру, примеры кода так же можно найти по коментам и в блоге (https://blogs.unity3d.com/2017/11/20/making-cool-stuff-with-scriptableobjects/)
  • «Без лишних слов»: самые короткие научные статьи
    0
    Если что — я не биолог, но суть примерно такая:
    «Мы не могли не заметить, что механизм кодирования генов парами, который мы предложили, предполагает возможность использования его (механизма кодирования парами) для копирования генетического материала»
  • Вы работаете не в том месте (если у вас офис открытого типа)
    0
    Можете скинуть ссылки на оригиналы этих идей? Я уверен что где-то видел что-то подобное, но никак не могу найти.
  • Как программисты-самоучки в реальности получают работу
    0
    А как вы помогали? Не пытались научить или заинтересовать в продолжении самообучением?
  • Простой плагин для локализации приложений на Unity3D
    0
    Опять же непонятно откуда взялась история про «переименование». Даже в самых первых упоминаниях движка на Unite 2007 (San Francisco) авторы движка называют его Unity. Источник — www.youtube.com/watch?v=bU17M_HDRBE
  • Простой плагин для локализации приложений на Unity3D
    +1
    Движок всё-таки называется Unity. Название Unity3D привязалось к нему из-за имени домена unity3d.com. (к слову — домен unity.com они выкупили относительно недавно, буквально года полтора назад он ещё не редиректил на основной unity3d.com) Нигде в официальных источниках или в документации вы не найдёте упоминания Unity3D.
    Так что всё-таки придётся как-то жить с двумя разными вещами, называнными Unity.
  • И небеса содрогнутся… Diablo: заглядывая в прошлое
    0
    Я помню, как запустил игру, кликнул мышкой по экрану и мой персонаж с мечом в руках пошел и разбил скелет на кусочки!

    В Classical Game Post Mortem про Diablo есть запись видео этого момента. Очень советую посмотреть весь доклад. www.youtube.com/watch?v=VscdPA6sUkc
  • Опыт обучения программированию детей от 8 лет онлайн
    0
    Можете рассказать о минусах подобного подхода? Помимо того, что «не всем подходит»
  • Как С# разработчику перейти на Unity
    0
    Дебаггер это отдельная история. На данный момент для Visual Studio на Windows устанавливается специальный плагин, который подцепляется к юньковскому рантайму. Visual Studio for Mac это по сути Xamarin Studio, то есть с Win версией VS общего ничего не имеет. Для всех редакторов (VS Code например) необходима такая надстройка, которая подружит текстовый редактор с Unity. Для «встроенного» в Unity MonoDevelop она интегрирована по умолчанию, а для Visuai Studio (Windows) и VS Code (Windows + Mac) она устанавливается отдельно. Не часто дебажу в Unity с Мака, но по-моему дебаггер пока можно подключать только во встроенном Mono Develop, либо в VS Code.
  • Как С# разработчику перейти на Unity
    0
    Если рассматривать контекст Unity, то Visual Studio работает с ней как простой редактор кода, ничем не отличный от обычного блокнота или Notepad++. После сохранения скрипта в Visual Studio нужно переключиться на окно с Unity чтобы она собрала (с помощью внутреннего компилятора) основную текущую сборку (Assembly-CSharp). Рантайм у Unity и в редакторе и на таргет девайсах тоже свой. Причём на iOS там вообще не Mono, а IL2CPP. То есть «кроспилированный» код из IL в С++. Если игровой код Unity компилировать прям в Visual Studio — результат сам по себе просто провалится в бездну, он нигде не используется. Есть конечно возможность использовать готовые .dll файлы, собранные специально под текущий .NET Profile в Unity (стабильный в юньке до сих пор .NET 3.5), но при компиляции на тагрет девайсы с IL2CPP рантаймом, они всё равно перегоняются в С++.

    Если резюмировать — неважно в чём вы пишете код для Unity, т.к. движок сам занимается конечной сборкой кода и настройкой рантайма на конечном устройстве.
  • Как С# разработчику перейти на Unity
    0
    Можете привести конкретную цитату? Скорее всего либо автор имел в виду что-то другое, либо есть вероятность неверного перевода.
  • Город цифрового солнца. Путевые заметки из Иннополиса
    0
    Около двух тысяч сейчас живёт, в статье это упоминается. Коммерческая недвижимость — все первые этажи спроектированы под коммерцию, причём с указанной ценой 100 рублей за кв.м. Но там какие-то бюрократические проволочки, желающих снять и попасть много, но мало у кого получается добиться результатов. Пока успешно используются только те самые «свечки» одноподъездные — есть бар, книжный магазин, хостел, прокат спортивного инвентаря. Из «длинных» домов — супермаркет бахетле, и недавно открывшаяся пиццерия (не знаю как у них получилось снять часть первого этажа в «длинном» доме). Есть автомойка, где кроме прочего вроде делают мелкие ремонтные работы. За всем остальным — в Казань.
  • DIYorDIE Meetup 1 июля: выбираем спикеров
    +1
    Плюсую про статью, тоже интересно прочитать
  • Антипаттерны для поиска соискателей
    +1
    Я помню собеседовался как-то на вакансию с запросом зарплаты в 100к рублей.
    Меня спросили про то, какие я знаю паттерны. Я спросил все ли мне по списку перечислять или лучше что-то конкретное на примере рассказать? Спросили про синглтон и про то, в каком случае лучше всего использовать именно его. Я ответил что обычно нет случаев, когда можно использовать только синглтон и ничего другого. В любом случае есть разные варианты, а злоупотребление синглтонами некоторые считают антипаттерном. Рассказал немного про strategy и композицию вместо наследования, про template method. Из рабочей практики кроме этих вещей вспомнить ничего больше не смог, хотя в своё время прям балдел от этих паттернов (тот самый период паттернов головного мозга), прочитал Head First и оригинальную книжку банды четырёх.

    В конце общения тоже спрашивал вопросы у собеседующих и один ответ вспоминаю до сих пор.
    Вакансия — Unity / C# разработчик на мобилки.
    Мой вопрос был такой — какие основные причины утечек памяти по ресурсам (текстуркам и мешам) можно выделить при работе с Unity.
    Ответ — про Unity я не знаю, но вот в Marmalade / C++ мы делали вот так… (и далее собственно ответ про ресурсы, я не запомнил все подробности. По-моему это был лид команды разработки на Unity).

    В отзыве о собеседовании получил «отсутствие знаний основных паттернов и неумение их применять». (отзыв кстати был подробным, что сейчас редкость)
  • IT — проект со школьниками: несколько рекомендаций
    +3
    Обязательно создайте для своего проекта облачное хранилище с совместным доступом участников. Если это Google Диск или Облако Mail.ru, то создайте общие папки. В одном проекте у нас их было 8: “Модели”, “Текстуры”, “База данных”, “Фоны”, “Картинки”, “Скрипты”, “Настройки”, “Общее”. Можно использовать, наверное, более продвинутые инструменты, например, Битрикс24, я не пробовал. Надо, кстати, обратить на это внимание. Наверняка, есть еще инструменты совместного ведения проектной деятельности.

    GIT / Mercurial?

    И вот тут не очень понятна аргументация —
    Например, давайте сделаем так, чтобы свет в комнате включался по хлопку ладонями? Интересная идея, но спросите себя, а зачем, кому это будет нужно, если таких решений уже пруд пруди. Ради изучения чего-то нового?

    А разве не для изучения чего-то нового выбираются другие проекты типа сайтов или программ? Я уверен, что и сайтов-анкет например тоже «пруд пруди».
  • UE4 для Unity-разработчиков
    0
    Можете немного рассказать про систему, используемую для создания UI? Окошки / анимация / архитектура
  • Как соединить два провода?
    0
    А сколько человек было на предприятии? И какое максимальное количество было заложено в системе? 5 бит как на картинках?
  • 13 лет плохого кода в играх
    +2
    Не очень понятно что имеется в виду. Переменные, например, одного типа int? Независимо от назначения этих переменных?
  • Синхронизация ритма в музыкальных играх
    0
    Скорее всего решается через это самое преобразование Фурье и последующей фильтрацией трека по частотам — например можно найти низкие частоты басовой бочки и по пикам амплитуды определить расстояние. Скорее всего этот «бит» будет отбивать четверти или восьмые с редкими ускорениями, не выбивающимися из общего ритма. И с мелодией (обычно более высокими частотами) то же самое — фильтруем по нужной частоте и смотрим пики амплитуды. Так же, насколько я знаю, в этом деле всегда присутствует какая-то стохастика — есть только определённая вероятность верного определения нужных параметров. Сам я интересовался этой проблемой достаточно поверхностно, но вещи все очень хорошо гуглятся, тема популярная.
  • Синхронизация ритма в музыкальных играх
    0
    А на каком этапе понимания проблемы у вас возник вопрос? Уже после всяких преобразований Фурье или вообще с самого начала (с сырого аудиофайла)?
  • Сложности при создании изометрической игры в Unity
    +2
    На самом деле любым инструментом нужно уметь пользоваться. Как и С++/OpenGL, так и любой готовый движок требует определённого опыта. Хорошим контрпримером с «забудьте о батчинге» является игра Mushroom 11, где в огромной сцене с глубиной отрисовки, большим количеством активных объектов количество DC не превышает 10-11. Доклад можно посмотреть тут https://youtu.be/bYqI77dteYk?t=2734 (залинкованное время — скриншот статистики отрисовки).
    Это не значит что любой только начавший что-то делать в движке сможет без всяких проблем достичь такого же результата — нужен опыт, контекст, и базовые знания по предметной области.
  • Отрисовка векторной графики — триангуляция, растеризация, сглаживание и новые варианты развития событий
    0
    «Полноценное решение из коробки» в конце статьи относится к новому способу отрисовки цветной векторной графики, основанном на принципе SDF. «Полноценное решение из коробки» основанное на триангуляции описывается ещё в самом начале статьи при разборе Tiny Thief. Контекст предложения важен.
  • Отрисовка векторной графики — триангуляция, растеризация, сглаживание и новые варианты развития событий
    0
    SVG не весь правильно парсит (там упор на Adobe Illustrator). Проблемы были и с Inkscape и со Sketch, приходилось руками парсить и править SVG тэги у файлов чтобы импортер нормально их понимал (SVG это такой же «адский» формат как и Collada — у всех какие-то свои тонкости реализации, порядка и способа закрытия тэгов). Ну и собственно минусы, описанные в статье про память на вершины и прочие вещи. Это отнюдь не значит что SVG Importer не нужно использовать. И принцип решения и само решение в этом пакете хороши «как есть» для своего типа задач.