Как стать автором
Обновить
4
0.5
Роман Титов @perfect_genius

Неостановимый генератор идей по улучшению мира

Отправить сообщение

Что если в играх использовать видеокарточку для физики, а не для графики

Время на прочтение5 мин
Количество просмотров79K
Хочу рассказать сообществу о проведённом мной эксперименте.

Мне всегда нравились игры, в которых есть физика. То есть, некоторые процессы не управляются скриптами, а эволюционируют во времени, следуя физическим законам. Из этого проистекают сложность и непредсказуемость игрового процесса.

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

Или те же гоночки: до чего приятней на полной скорости сшибать людей, рекламные щиты и помойки, чтобы разлетались во все стороны, вместо того, чтобы мгновенно останавливаться, врезаясь в мёртво врощенный в землю столб.

Или ещё замечательный пример — Kerbal Space Program. Там физика уже является непосредственым источником геймплея.

Или, например, жанр 2д артиллерии. Часть его очарования базируется на уничтожаемой, динамичной земле. Но до чего он был бы лучше, если б земля не просто линейно осыпалась, а вела себя реалистично, разлетаясь от взрывов кусками.

Я давно мечтал сделать именно такой, до предела физически реалистичный римейк Scorched Earth. Но все мои эксперименты с моделированием физических систем упирались в неумолимо медленные процессоры. Тысяча-две частиц были пределом для real-time симуляции.

Но недавнее моё «открытие» изменило ситуацию.
Всего голосов 157: ↑146 и ↓11+135
Комментарии217

Как я сделал самый быстрый ресайз изображений. Часть 0

Время на прочтение7 мин
Количество просмотров34K

Здравствуйте, меня зовут Саша, я написал самый быстрый ресайз изображений для современных х86 процессоров. Я так утверждаю, поскольку все остальные библиотеки, которые я сумел найти и протестировать, оказались медленнее. Я занялся этой задачей, когда работал над оптимизацией ресайза картинок на лету в Uploadcare. Мы решили открыть код и в результате появился проект Pillow-SIMD. Любой желающий с легкостью может использовать его в приложении на языке Python.


Любой код выполняется на конкретном железе и хорошей оптимизации можно добиться, только понимая его архитектуру. Всего я планирую выпустить 4 или 5 статей, в которых расскажу как применять знание архитектуры железа для оптимизации реальной задачи. Своим примером я хочу побудить вас оптимизировать другие прикладные задачи. Первые две статьи выйдут в течение недели, остальные — по мере готовности.

Читать дальше →
Всего голосов 80: ↑79 и ↓1+78
Комментарии67

Собственный алгоритм поиска похожих изображений. Теория

Время на прочтение6 мин
Количество просмотров25K
Недавно, в связи с разработкой новой линейки продукции, в нашей компании встала задача поиска идентичных изображений в базе.

Отдавать реализацию на аутсорс слишком дорого и не гарантирует наилучшего решения. Отдать на откуп фрилансеру — дешевле, но и решение скорее всего будет таким же дешевым и основанным на существующих библиотеках, типа OpenCV. Но если бы задача решалась так просто, то конкуренты уже давно бы этим воспользовались и сделали достойный продукт, но его на рынке нет. В общем, присущие нам перфекционизм, амбициозность и желание быть лучшими, не позволяют нам выводить на рынок продукт «как у всех», нам нужно лучше, быстрее, сильнее. Приняли решение самостоятельно разобраться в вопросе, выработать решение, написать подробное техническое задание и уже отдать на реализацию фрилансеру. Была надежда, что существуют готовые решения, которых просто не заметили конкуренты. Но изучив вопрос (а вместе с ним и алгоритмы ORB, BRIEF, FAST, SIFT, SURF, BRISK, A-KAZE, Viola-Jones и еще несколько) стало понятно, что у всех этих алгоритмов есть свои недостатки. Хотя для решения нашей задачи некоторые из вышеперечисленных алгоритмов и подходили, но как то неожиданно захотелось уникальности и простоты решения. И вот выношу на суд сообщества, алгоритм собственного сочинения.

Любителей покритиковать (конструктивно) прошу под кат.
Читать дальше →
Всего голосов 30: ↑23 и ↓7+16
Комментарии61

Дизассемблируй это: «Лаборатория Касперского» объявляет старт зимнего конкурса CrackMe

Время на прочтение1 мин
Количество просмотров13K
Ломать не строить. Иногда ломать — дело не менее сложное и благородное, чем строить.

В январе «Лаборатория Касперского» открывает свой сезон зимних айтишных видов спорта и запускает конкурс CrackMe. Скачайте три файла и разреверсите их, чтобы вычислить ключ, который генерируется в зависимости от введенного адреса email. Полученный ключ необходимо зарегистрировать на сайте.

image

Задания пронумерованы в порядке повышения сложности, поэтому советуем решать их в той же очередности.
Читать дальше →
Всего голосов 25: ↑22 и ↓3+19
Комментарии18

2D магия в деталях. Часть четвёртая. Вода

Время на прочтение13 мин
Количество просмотров34K

— Я тут воду для проекта запилил.
— О, круто! А почему она плоская? Даёшь волны!

— Слушай, ты тогда про волны говорил, помнишь? Зацени!
— Да, хорошие волны, а преломление и каустику ещё не делал?

— Привет, я тут игрался с Unity всю ночь, смотри какие отражения и каустику закодил!
— Дарова, и правда, хорошо! А когда у тебя вода кипит, отражения не глючат?

— Хай, реализовал наконец, кипение, вроде ничего?
— О, прямо как нужно! Слушай, прикинь как круто, если кипящую волну заморозить?

— Лови картинку, лёд вроде ничего придумал?
— Норм, слушай, а у тебя лёд замерзает, он в объёме увеличивается? И кстати, ты когда геймлей то делать начнёшь?
Вариации на тему лога с другом.

Да, вы уже поняли, наконец-то расскажу про реализацию воды в проекте. Приступим?

Всего голосов 87: ↑86 и ↓1+85
Комментарии36

Эффективный расчёт области видимости и линии взгляда в играх

Время на прочтение16 мин
Количество просмотров37K
image

В стратегических играх обычно требуется знать область видимости NPC, чтобы игрок мог продумывать стратегию и делать следующий ход. Мы рассмотрим математику и реализацию рациональной модели, не просаживающей скорость игры при большом количестве NPC на карте. Если вы хотите увидеть готовое интерактивное демо модели, перейдите сюда и играйте прямо в браузере! Вот скриншот демонстрации:

image

Имея параметры видимости наблюдателя (направление взгляда, расстояние видимости и угол поля зрения), нам нужно найти видимую для него область, т.е. определить область видимости (field of view, FoV). Если препятствия отсутствуют, это будет сектор круга, состоящий из двух граней (радиусов) и соединяющей их дуги (см. Рис. 1). Кроме того, имея заданную точку мира, мы должны быстро определить, видима ли она для наблюдателя, т.е. необходимо обрабатывать запросы линии взгляда (line of sight, LOS) для заданной точки. Обе эти операции можно выполнить достаточно эффективно для использования при рендеринге в реальном времени.
Читать дальше →
Всего голосов 130: ↑126 и ↓4+122
Комментарии27

Пишем настоящий Pointer Analysis для LLVM. Часть 1: Введение или первое свидание с миром анализа программ

Время на прочтение8 мин
Количество просмотров7.3K
Привет, Хабр!

Эта статья станет вступительной в моем небольшом цикле заметок, посвященном такой технике анализа программ, как pointer analysis. Алгоритмы pointer analysis позволяют с заданной точностью определить на какие участки памяти переменная или некоторое выражение может указывать. Без знания информации об указателях анализ программ, активно использующих указатели (то есть программ на любом современном языке программирования — C, C++, C#, Java, Python и других), практически невозможен. Поэтому в любом мало-мальски оптимизируещем компиляторе или серьезном статическом анализаторе кода применяются техники pointer analysis для достижения точных результатов.

В данном цикле статей мы сосредоточимся на написании эффективного межпроцедурного алгоритма pointer analysis, рассмотрим основные современные подходы к задаче, ну и, конечно же, напишем свой очень серьезный алгоритм pointer analysis для замечательного языка внутреннего представления программ LLVM. Всех интересующихся прошу под кат, будем анализировать программы и многое другое!
Читать дальше →
Всего голосов 39: ↑38 и ↓1+37
Комментарии17

Как я Дота-лигу открывал. Часть 1

Время на прочтение12 мин
Количество просмотров36K

Шел 2006й год. Это были хорошие студенческие годы, время расцвета и становления игры DotA Allstars. В те времена все играли в доту через официальный сервер от Blizzard — Battle.net. Индустрия была очень скудная — не было нормальных трансляций, интернет у многих был еще на adsl, а из событий — мало освещаемые турниры с призами до $5000. Тогда инициативные игроки собирались в группы и организовывались в кланы. Именно тогда мне позвонил мой товарищ и предложил организовать первую Дота-лигу в СНГ. Это был настоящий вызов для меня, и он был принят…
Читать дальше →
Всего голосов 53: ↑45 и ↓8+37
Комментарии41

Ambient Occlusion Volumes для прожженных самоваров

Время на прочтение7 мин
Количество просмотров14K
Скитаясь по интернету в поисках алгоритмом освещения, которые бы удовлетворили мои потребности, я наткнулся на весьма новый алгоритм, разработанный компанией NVIDIA, название которого AOV (Ambient Occlusion Volumes). Имея в своём распоряжении тёмные осенние ночи и несколько чашек горячего кофе, я решился изучить данный алгоритм, следствием чего является данная статья. Прежде чем я начну, хотелось бы отметить своё удивление по поводу того, что данный алгоритм имеет незаслуженно малую популярность в кругах разработчиков игр, в отличии от всеми знакомого нам SSAO. Содержание данной статьи будет, по большей мере, состоять из теории.
Читать дальше →
Всего голосов 40: ↑38 и ↓2+36
Комментарии11

7 типичных русских проблем в английской речи

Время на прочтение10 мин
Количество просмотров254K
South Park
Предметом данной статьи является попытка систематизировать культурные различия, и типичные ошибки которые мы допускаем с нашими иностранными коллегами. Большинство примеров взято из книги Русские проблемы в английской речи. Я взял на себя смелость в небольшой популяризации данной темы, снабжению комментариями и собственными примерами.

1. Я прав, а ты нет
Читать дальше →
Всего голосов 170: ↑160 и ↓10+150
Комментарии171

Запуск старых игр на современном компьютере — список методов

Время на прочтение6 мин
Количество просмотров200K
В этом посте я решил собрать все известные мне способы запуска старых игр на современном компьютере. Это не пошаговая инструкция, а именно список способов, утилит и ссылок, что бы понимать, куда копать и что делать. По каждому конкретному методу уже существуют подробные документации, написанные другими людьми, так что моя цель – просто собрать всё это добро воедино.
Откройте хабракат, и ваше импы станут мягкими и шелковистыми.
Всего голосов 47: ↑47 и ↓0+47
Комментарии42

Симулятор нервной системы. Часть 1. Простой сумматор

Время на прочтение5 мин
Количество просмотров25K


Здравствуй, Geektimes! Я хочу поделиться свой работой над созданием системы позволяющей моделировать рефлекторные и когнитивные процессы, протекающие в нервной системе.

Частично система воплощена в простенькой программе, созданной на игровом движке Unity3D. Это своего рода симулятор нервной системы, благодаря которому возможно имитировать не только простые рефлексы, но и демонстрировать различные явления в нервной системе, такие как привыкание, сенсибилизация и образование условных рефлексов. А также возможно эмулировать временную и долговременную память и её консолидацию, эмоции и эмоциональное поведение. Причем как простые эмоции, к примеру, голод и насыщение, так и более сложные, такие как любопытство, страх или привязанность. Благодаря системе у нас появится возможность разобраться в предназначении различных областей мозга, в том, как происходит распознавание зрительных образов, как происходит обучение и эмоциональная оценка происходящего.
Всего голосов 27: ↑27 и ↓0+27
Комментарии15

Need For Speed III Modern Patch: более 100 изменений без исходных кодов

Время на прочтение3 мин
Количество просмотров48K
imageКогда я впервые увидел Need For Speed III, от изумления я даже присел. Диск шёл в подарок к видеокарте моего первого компьютера, и это была первая трёхмерная игра в моей жизни. До этого момента я совершенно не подозревал, что графика в играх может быть настолько потрясающей. Это был далёкий 2000 год. Не счесть количество часов, потраченных на игру в сплитскрине за одной клавиатурой с моим двоюродным братом… Музыке — отдельное слово. Мне она настолько нравилась, что я даже записывал её на кассету, а с кассеты потом обратно на компьютер, при помощи стандартной «Звукозаписи». Это единственное что я тогда смог придумать. Слушал я эти записи по кругу по много часов подряд. MP3? Что это за странные буквы? Только WAV, только хардкор!

И вот, годы спустя, мне захотелось сыграть в эту игру. Но она не заработала на современном железе. Пришлось разбираться. В процессе захотелось ещё и поддержку широкоформатных разрешений… и понеслась! Немного увлёкся этим делом, и в результате получился внушительный патч. Более 8000 строк на ассемблере, исписано 18 листов А4, огромный список изменений…
Читать дальше →
Всего голосов 87: ↑86 и ↓1+85
Комментарии55

Исследователи из MIT научили нейронные сети аргументировать свои решения

Время на прочтение9 мин
Количество просмотров20K


В последнее время нейросети показывали себя прекрасно во многих прикладных задачах. Они искали закономерности в данных, которые использовались для классификации и прогнозирования. Нейросети с кажущейся легкостью распознавали объекты в цифровых изображениях или, «прочитав» отрывок текста, резюмировали его тему. Однако никто не мог рассказать, какие преобразования проходили вводимые данные для получения того или иного решения. Даже авторы сетей владели данными на входе и информацией на выходе. И если рассматривать визуальные данные, то иногда даже можно автоматизировать опыты по выяснению, на какие составляющие изображений реагирует нейросеть. А с системами обработки текста процесс более сложный. В чем сложность понимания человеческого языка машиной вы можете прочитать ниже.

В лаборатории CSAIL (лаборатории информатики и искусственного интеллекта) Массачусетского технологического института исследователи нейросетей сделали так, что теперь «виртуальный мозг» в дополнение к решению выдает и его обоснование. Они обучали два модуля одной нейросети одновременно. Данными для обучения были текстовые отрывки. Результаты порадовали: компьютер думал, как и человек, в 95% случаев. И все же, прежде, чем запустить новый метод нейросетей в активное пользование, потребуется дополнительная настройка и доработка.

Почему картинки обрабатывать легче, чем текст? Можно ли будет беспилотным автомобилям ездить свободно, позволительно ли заменять живого доктора запрограммированным интеллектом, внутри которого бессчетное количество нейронов? Приближает ли это нас к сознательным машинам в реальной жизни? Компьютерные модели нейронных сетей ведут себя так же, как и человеческий мозг, но им пока не разрешали принимать решения, затрагивающие жизни людей. Чтобы изменить это, специалистам понадобилось время и теперь мы можем узнать, как нейросеть приходит к итоговым значениям.
Читать дальше →
Всего голосов 25: ↑22 и ↓3+19
Комментарии45

«Фотошоп» для человеческой речи

Время на прочтение4 мин
Количество просмотров29K


3 ноября 2016 года на технологической конференции Adobe MAX компания Adobe представила очень интересную научно-техническую разработку, которая в будущем может превратиться в популярное программное приложение. Если описать изобретение вкратце, то это программа для семантического редактирования человеческой речи. При этом применяется не просто стандартный метод синтеза из собранных фонем (компиляционный синтез), но и вспомогательные методы, которые повышают реалистичность. Это интеллектуальный выбор трифонов и использование специафических характеристик голоса образца.

В результате пользователь пишет произвольный текст — а программа озвучивает его тем голосом, на который её натренировали. Можно быстро добавить в речь любые слова или вырезать ненужные.
Читать дальше →
Всего голосов 29: ↑25 и ↓4+21
Комментарии63

IoT за копейки: делаем устройство с веб-интерфейсом

Время на прочтение6 мин
Количество просмотров49K

Автор: Николай Хабаров, Senior Embedded Developer, DataArt

В этой статье мы расскажем, как создать собственное устройство с веб-интерфейсом в домашней сети, используя новейшую версию 0.5 прошивки DeviceHive для микросхемы ESP8266. Но для начала, давайте разберем, что нового появилось в самой прошивке: основные нововведения связаны с возможностью автономной работы в локальной сети.
Всего голосов 21: ↑20 и ↓1+19
Комментарии52

Реверс-инжиниринг и замедление «Казаков»

Время на прочтение5 мин
Количество просмотров61K


В известной игре «Казаки: Снова Война» присутствует баг, сводящий удовольствие от сетевой игры к нулю: Нечеловеческая скорость игрового процесса на современных компьютерах. При этом изменение скорости игры в настройках, прекрасно работающее в режиме одиночной игры, никак не влияет на происходящее в игре по сети. Этот вопрос обсуждается на множестве форумов, но самые популярные советы это:

  1. Искусственно загрузить ядро процессора, на котором запущена игра
  2. Запускать игру в виртуальной машине с ограниченными ресурсами
  3. Играть не по локальной сети, а по интернету — там задержки побольше
4. Только дизассемблинг, только хардкор!
Всего голосов 84: ↑81 и ↓3+78
Комментарии29

Юникод: необходимый практический минимум для каждого разработчика

Время на прочтение8 мин
Количество просмотров114K
Юникод — это очень большой и сложный мир, ведь стандарт позволяет ни много ни мало представлять и работать в компьютере со всеми основными письменностями мира. Некоторые системы письма существуют уже более тысячи лет, причём многие из них развивались почти независимо друг от друга в разных уголках мира. Люди так много всего придумали и оно зачастую настолько непохоже друг на друга, что объединить всё это в единый стандарт было крайне непростой и амбициозной задачей.

Чтобы по-настоящему разобраться с Юникодом нужно хотя бы поверхностно представлять себе особенности всех письменностей, с которыми позволяет работать стандарт. Но так ли это нужно каждому разработчику? Мы скажем, что нет. Для использования Юникода в большинстве повседневных задач, достаточно владеть разумным минимумом сведений, а дальше углубляться в стандарт по мере необходимости.

В статье мы расскажем об основных принципах Юникода и осветим те важные практические вопросы, с которыми разработчики непременно столкнутся в своей повседневной работе.
Читать дальше →
Всего голосов 47: ↑45 и ↓2+43
Комментарии52

VR-шлем Pimax P1 4K — решает не только картинка

Время на прочтение5 мин
Количество просмотров44K
Со шлемами виртуальной реальности сейчас одна главная проблема — разрешение. С виртуальностью все ок, а вот до реальности пока никто не дотягивает. Пиксели мешают. Китайцы из Pimax решили повысить планку и выкатили на рынок модель P1 с разрешением 4K — так отдельные пиксели уже почти не заметны, но вот реализация всего остального вызывает вопросы.


Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии66

Оптимизация кода: память

Время на прочтение12 мин
Количество просмотров91K
Большинство программистов представляют вычислительную систему как процессор, который выполняет инструкции, и память, которая хранит инструкции и данные для процессора. В этой простой модели память представляется линейным массивом байтов и процессор может обратиться к любому месту в памяти за константное время. Хотя это эффективная модель для большинства ситуаций, она не отражает того, как в действительности работают современные системы.

В действительности система памяти образует иерархию устройств хранения с разными ёмкостями, стоимостью и временем доступа. Регистры процессора хранят наиболее часто используемые данные. Маленькие быстрые кэш-памяти, расположенные близко к процессору, служат буферными зонами, которые хранят маленькую часть данных, расположеных в относительно медленной оперативной памяти. Оперативная память служит буфером для медленных локальных дисков. А локальные диски служат буфером для данных с удалённых машин, связанных сетью.

image

Иерархия памяти работает, потому что хорошо написанные программы имеют тенденцию обращаться к хранилищу на каком-то конкретном уровне более часто, чем к хранилищу на более низком уровне. Так что хранилище на более низком уровне может быть медленнее, больше и дешевле. В итоге мы получаем большой объём памяти, который имеет стоимость хранилища в самом низу иерархии, но доставляет данные программе со скоростью быстрого хранилища в самом верху иерархии.
Читать дальше →
Всего голосов 80: ↑78 и ↓2+76
Комментарии99

Информация

В рейтинге
1 471-й
Откуда
Набережные Челны, Татарстан, Россия
Дата рождения
Зарегистрирован
Активность