Search
Write a publication
Pull to refresh
88
0
Вячеслав Шапилов @SHVV

User

Send message

Как сделано интро на 64k

Reading time13 min
Views38K

Введение в интро


Демосцена — это о создании классных штук, которые работают в реальном времени (как бы «крутятся в вашем компьютере»). Их называют демки. Некоторые из них по-настоящему маленькие, скажем, 64k или меньше — такие называются интро. Название происходит от рекламирования или представления взломанных программ (crack intro). Итак, интро — это просто маленькая демка.

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

Бинарник под Windows: guberniya_final.zip (61.8 kB) (немного ломается на картах AMD)

Создание софтверного движка 2.5D

Reading time11 min
Views24K
В настоящее время интерес к софтверным движкам, как из игр Quake, DOOM или Duke Nukem 3D практически нулевой. Однако, эти движки имели своё очарование и мне, например, очень нравится графика именно таких вот движков с нереалистичными текстурами на стенах. Конечно, такие текстуры можно накладывать без фильтрации и в OpenGL, получая такой же уровень графики, но всё же, написать собственный софтверный движок было весьма интересно. Движок уровня Quake я написать в своё время не смог, так как не удалось создать редактор 3D карты – я просто не представлял, как вообще рисовать в 3D карту. Да и с большой вероятность текстурирование в произвольном случае в моём исполнении (без ассемблера) было бы очень медленно. Но движок уровня DOOM мне покорился. Основу такого движка я написал в 2002 году, пользуясь книжкой Шикина и Борескова “Компьютерная графика. Полигональные модели”. На базе того движка используя графику из Doom я написал некое подобие игры под MS-DOS на Watcom C. Несколько лет назад я решил вынуть из той игры код движка и переработать его под мои текущие знания языка Си++ и представления о том, как стоило бы устроить этот движок. Ну и заодно перенести этот движок под Windows и дополнить наклонами головы, как в Blood или Duke Nukem. О том, что в результате получилось, я и написал в этой статье.
Читать дальше →

Элементы функционального программирования в C++: композиции отображений

Reading time8 min
Views15K

Стандартная библиотека языка C++ очень неплоха. Долгие годы стандартные алгоритмы верой и правдой служат простому плюсовику!


Но вся отрасль бурно развивается, и язык C++ вместе с ней. Уже давно люди стали понимать, что как бы хороши ни были стандартные алгоритмы, у них есть большой недостаток: нулевая компонуемость. Иначе говоря, невозможно без дополнительных сложностей объединить в цепочку несколько алгоритмов преобразования, фильтрации, свёртки и т.д. и т.п.


Существует несколько вариантов решения данной проблемы. Один из них — ленивые вычисления и диапазоны — уже на подходе к стандартной библиотеке.


Однако, и старые добрые алгоритмы пока рано списывать со счетов.


В этой статье я хочу рассмотреть один из приёмов, который хоть и не является полноценным решением проблемы компонуемости алгоритмов, но вполне способен и упростить работу со старыми стандартными алгоритмами, и обязательно пригодится для работы с грядущими версиями стандарта языка C++.

Читать дальше →

Обзор исходного кода Quake 2

Reading time51 min
Views62K
image

Около месяца свободного времени я уделил чтению исходного кода Quake II. Это был удивительный и поучительный опыт, потому что в движок idTech3 внесено большое изменение: Quake 1, Quake World и QuakeGL объединены в одну красивую архитектуру кода. Особенно был интересен способ, которым достигли модульности, несмотря на то, что язык программирования C не обеспечивает полиморфизма.

Quake II во многих отношениях является блестящим образцом программного обеспечения, потому что это был самый популярный (по количеству лицензий) трёхмерный движок всех времён. На его основе было создано более 30 игр. Кроме того, он ознаменовал переход игровой индустрии от программной/8-битной системы цветов к аппаратной/24-битной. Этот переход произошёл примерно в 1997 году.

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

Процесс «подчистки» меня сильно увлёк: в статье теперь более 40 мегабайт видео, скриншотов и иллюстраций. Сейчас я не знаю, стоили ли мои труды того, и нужно ли публиковать в будущем необработанные заметки в ASCII, выскажите своё мнение.

Ведется массовая атака криптором Wana decrypt0r 2.0

Reading time7 min
Views230K

В настоящий момент можно наблюдать масштабную атаку трояном-декриптором "Wana decrypt0r 2.0"
Атака наблюдается в разных сетях совершенно никак не связанных между ссобой.



A ransomware spreading in the lab at the university (отсюда)


Некоторые компании советуют своим пользователям выключить свои компьютеры и ждать дальшейших инструкций.


Читать дальше →

Готовим Physically Based Rendering + Image-based Lighting. Теория+практика. Шаг за шагом

Reading time24 min
Views39K
Хей, привет. 2017 год на дворе. Даже простенькие мобильные и браузерные приложения начинают потихоньку рисовать физически корректное освещение. Интернет пестрит кучей статей и готовых шейдеров. И кажется, что это должно быть так просто тоже обмазаться PBR… Или нет?

В действительности же честный PBR сделать достаточно сложно, потому что легко достичь похожего результата, но сложно правильного. И в интернете полно статей, которые делают именно похожий результат, вместо правильного. Отделить мух от котлет в этом хаосе становится сложно.
Поэтому цель статьи не только разобраться, что же такое PBR и как он работает, но и научиться писать его. Как отлаживать, куда смотреть, и какие ошибки типично можно допустить.
Статья рассчитана на людей, которые в достаточной мере уже знают hlsl и неплохо знакомы с линейной алгеброй, и можете написать свой простейший неPBR Phong свет. В общем я постараюсь как можно проще объяснить, но рассчитываю на то, что некоторый опыт работы с шейдерами вы уже имеете.
Читать дальше →

Потокобезопасный std::map с производительностью lock-free map

Reading time21 min
Views34K

Примеры использования и тестирование потоко-безопасного указателя и contention-free shared-mutex


В этой статье мы покажем: дополнительные оптимизации, примеры использования и тестирование разработанного нами потоко-безопасного указателя с оптимизированным разделяемым мьютексом contfree_safe_ptr<T> – это эквивалентно safe_ptr<T, contention_free_shared_mutex<>>
В конце покажем сравнительные графики тестов нашего thread-safe указателя и одних из лучших lock-free алгоритмов из libCDS на процессорах Intel Core i5/i7, Xeon, 2 x Xeon.
Читать дальше →

Ускоряем std::shared_mutex в 10 раз

Reading time35 min
Views56K
В этой статье мы детально разберем атомарные операции и барьеры памяти C++11 и генерируемые ими ассемблерные инструкции на процессорах x86_64.

Далее мы покажем как ускорить работу contfree_safe_ptr<std::map> до уровня сложных и оптимизированных lock-free структур данных аналогичных по функциональности std::map<>, например: SkipListMap и BronsonAVLTreeMap из библиотеки libCDS (Concurrent Data Structures library): github.com/khizmax/libcds

И такую многопоточную производительность мы сможем получить для любого вашего изначально потоко-небезопасного класса T используемого как contfree_safe_ptr<T>. Нас интересуют оптимизации повышающие производительность на ~1000%, поэтому мы не будем уделять внимание слабым и сомнительным оптимизациям.
Читать дальше →

Делаем любой объект потокобезопасным

Reading time30 min
Views77K
image

В этих 3-ех статьях я детально расскажу об атомарных операциях, барьерах памяти и о быстром обмене данными между потоками, а так же о «sequence-points» на примере «execute-around-idiom», а заодно постараемся вместе сделать что-нибудь полезное — умный указатель, который делает любой объект потоко-безопасным для любых операций с его членами переменными или функциями. А затем покажем как используя его достичь производительности высоко-оптимизированных lock-free алгоритмов на 8 — 64 ядрах.
Читать дальше →

DNK | PRIME. Часть первая: Дизайн

Reading time3 min
Views16K
image

При разработке нового дизайна для стандарта MINI-ITX, мы сделали акцент на строгом внешнем виде, добавили немного геймерской агрессивности, чуть-чуть винтажности и элегантности. Все это вылилось в симметричные линии в очень компактном размере. Мы сразу отказались от рамной конструкции, сделав дизайн монолитным, где каждая деталь вытачивается на станке с ЧПУ и являет собой жесткую основу, крепежные и декоративные элементы. Благодаря этому стало возможным применить более эффективный воздухообмен и замечательную финишную обработку. Такой дизайн обеспечивает отличную жесткость всей конструкции, защиту от вибраций и внешних воздействий, таких как попадание жидкостей и мелких металлических предметов внутрь, что полностью соответствует Европейскому стандарту для корпусов персональных компьютеров, в которых используются внутренние блоки питания.
Читать дальше →

Создание игры на Unreal Engine 4 за 150 часов (видео + исходники)

Reading time6 min
Views188K
Приветствую, Хабр! Хотел бы познакомить вас с относительно небольшим проектом, который я сделал c нуля примерно за 150 часов (50 заходов ~3 часа каждый) на Unreal Engine 4. Проект я делал в прямом эфире только на стримах раз в неделю (в общей сложности ушел год), попутно отвечая на вопросы пользователей.

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

  • Планирование и прототипирование проекта
  • Продумывание и реализация архитектуры проекта и отдельных его компонентов
  • Реализация интерфейса пользователя
  • Отладка и исправление ошибок
  • Работа с ассетами и графикой

image

В конце всей серии стримов у нас получился играбельный прототип “Сурвайвл” шутера. Те, у кого стакан наполовину полон, смогут даже назвать это пре-альфой без сюжета.

Если вам интересны подробности проекта, записи стримов, исходники и прочее, читайте далее.

Открытый проект модуля управления электрическими моторами. Начало

Reading time4 min
Views43K


Основное назначение модуля — управление синхронными бесколлекторными двигателями (BLDC, BLAC, PMSM ...) с трапецеидальной или синусоидальной формой напряжения, с сенсорами скорости-положения или без сенсоров. Кроме этого модуль имеет небольшие габариты, достаточно широкий диапазон питающих напряжений, разнообразные каналы отладки, проводную и беспроводную связь.
Читать дальше →

Электробайк. Контроллер двигателя своими руками

Reading time10 min
Views228K

image


Как вы уже знаете из прошлых постов, у нас в компании есть DIY-движение. В свободное от работы время коллеги занимаются фрезеровкой печатных плат в домашних условиях, делают тепловизор на FLIR Lepton, а также решают семейные разногласия с помощью 4 контроллеров и 2 умных часов. Продолжим серию увлекательный историй! Сегодня я расскажу, как сделать контроллер к трехфазному двигателю электровелосипеда своими руками. Целью создания такого контроллера было:


  1. Изучение работы трехфазного мотора под управлением контроллера.
  2. Большинство контроллеров для электровелосипедов, представленных на рынке, — китайские. Они хоть и относительно дешевые (около 2.000 руб в зависимости от мощности), но являются неведомой коробкой, в которой неизвестно что происходит. И сразу к ней возникает очень много вопросов — экономично ли она потребляет и распределяет ток, какой у нее запас мощности, почему так сильно перегревается, преждевременно срабатывает защита по току и т.д.

В тоже время на рынке представлены европейские качественные контроллеры для электробайков. Они оснащаются расширенными функциями, работают на разных напряжениях и токах и их можно программировать. Устанавливаются они на сверхмощные электровелосипеды. Но цена у них кусается — 10-20 тыс. рублей.


В итоге я решил пойти своим путем: разобраться в устройстве контроллера, сделать его прототип, а затем попытаться сделать контроллер качественнее китайского контроллера. На текущий момент проект у меня в разработке только и на уровне прототипа, готового варианта пока нет. Буду рад услышать ваши комментарии и советы.

Влияние ambient-музыки на процесс написания кода

Reading time7 min
Views58K
В данной статье я хотел бы поговорить о той музыке, под которую мы пишем код. О музыке «для программистов». А точнее, про такой специфический жанр музыки, как эмбиент.



Человек работающий и музыка


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

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

На том же Хабре есть масса отличных статей о том, как музыка влияет на рабочий климат офиса, на концентрацию работника и т.п. Но данный материал немного о другом.
Читать дальше →

RobotDyn наносит двойной удар: Mega + ESP8266

Reading time14 min
Views85K
RobotDyn Mega + ESP8266
Что делает разработчик в редкие часы досуга? Правильно, просматривает прайсы железячных магазинов. Выдалась свободная минутка и я решил полистать странички популярных интернет-магазинов — скукота, ничего интересного, всё это мы уже видели… и тут неожиданно мой взгляд падает на очередную Mega. Ба! да это не простая Мега, а совмещённая со всеми любимым ESP8266, да ещё заботливо снабжённая переключателями для совместной работы двух контроллеров — проводного (при помощи Ethernet Shield) со множеством GPIO и Wi-Fi для беспроводной связи.

Неплохо! Подумал я и вспомнил про AMS — туда же можно установить два сервера — проводной и беспроводной и связать их в одну систему — ESP8266 получит 54 цифровых и 16 аналоговых пинов, а Mega получит беспроводное управление по Wi-Fi и все плюшки ESP8266. Давненько мне не попадалась такая интересная плата.

— Здравствуйте! У вас есть плата Mega + ESP8266?
— Есть, но у нас только одна осталась.
— Почему только одна?
— Остальные разобрали.
— Зарезервируйте её, пожалуйста, для меня.
Читать дальше →

Куда деваются программисты после 40

Reading time16 min
Views169K


— Вам уже 45? Но у нас коллектив очень молодой. Вы уверены, что хотели бы у нас работать?
— Да, конечно! Я много наслышан о вашей компании. Это мечта всей моей жизни!
— Ну ладно. Вот вам простой вопросик. Что означает буква L в аббревиатуре SOLID?
— Liskov Substitution Principle.
Читать дальше →

Охота на мифический MVC. Построение пользовательского интерфейса

Reading time27 min
Views42K

Детектив по материалам IT. Часть вторая


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


Начну с Вида. Не смотря на то, что Вид определяется как модуль, отображающий Модель – "а view is a (visual) representation of its model", на практике к Виду, как правило, просто относят все графические элементы GUI, то есть Видом считается все то, что мы видим на экране ЭВМ.


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


View or Controller

Читать дальше →

Генерирование полигональных карт для игр

Reading time24 min
Views61K
Я хотел научиться генерировать интересные игровые карты, которые не обязательно были бы реалистичными, а также попробовать техники, с которыми раньше не работал. Обычно я создаю карты с другой структурой. Что можно сделать с тысячей полигонов вместо миллиона тайлов? Отчётливо различимые игроком области могут быть полезны для геймплея: местоположения городов, места квестов, территории для захвата или колонизации, ориентиры, точки поиска пути, зоны с разной сложностью и т.д. Я генерировал карты с помощью полигонов, а затем растеризировал их вот в такие карты:

image

Во многих процедурных генераторах карт, в том числе и некоторых моих предыдущих проектах, для генерирования карты высот используются функции шума (midpoint displacement, фракталы, diamond-square, шум Перлина и т.д.). Здесь я их не применял. Вместо неё я использовал структуру графов для моделирования элементов, определяемых ограничениями геймплея (высота, дороги, течение рек, места квестов, типы монстров) и функции шума для моделирования того, что не ограничивается геймплеем (форма побережья, расположение рек и деревьев).
Читать дальше →

Чёртова дюжина странных игр

Reading time8 min
Views34K


Я люблю разные игры. Например, те, что могут меня удивить. В этой подборке я перечислил игры и почти игры, в хорошем смысле этого слова странные. Я сознательно игнорирую в обзоре симуляторы козлов и хлебушка, игры с необычным графическим дизайном (иначе статья лопнет по швам) и очень известные игры, такие как Dear Esther. И ни в коем случае не претендую при этом на полноту изложения. Просто предлагаю скоротать часок-другой во время праздников, если вам станет любопытно.
Читать дальше →

Охота на мифический MVC. Обзор, возвращение к первоисточникам и про то, как анализировать и выводить шаблоны самому

Reading time24 min
Views150K
— Не понимаю, почему люди так восхищаются этим Карузо? Косноязычен, гугнив, поёт — ничего не разберешь!
— А вы слышали, как поёт Карузо?
— Да, мне тут кое-что из его репертуара Рабинович напел по телефону.

Детектив по материалам IT. Часть первая


Я осознаю, что писать очередную статью на тему Модель-Вид-Контроллер это глупо и вредно для «кармы». Однако с этим «паттерном» у меня слишком личные отношения – проваленный проект, полгода жизни и тяжелой работы «в корзину».


Проект мы переписали, уже без MVC, просто руководствуясь принципами – код перестал быть похож на клубок спагетти и сократился наполовину (об этом позже, в обещанной статье про то, как мы применяли «принципы» в своем проекте). Но хотелось понять, что же мы сделали не так, в чем была ошибка? И в течении долгого времени изучалось все, что содержало аббревиатуру MVC. До тех пор пока не встретились исходные работы от создателя – Трюгве Реенскауга…


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


Более 30 лет собранные в MVC идеи и решения остаются наиболее значимыми для разработки пользовательских интерфейсов. Но как ни странно, несмотря на существующую путаницу и обилие противоречивых трактовок, разработчики продолжают довольствоваться информацией «из вторых рук», черпая знания о MVC из википедии, небольших статей в интернете и фреймворков для разработки веб-приложений. Самые «продвинутые» читают Мартина Фаулера. И почему-то почти никто не обращается к первоисточникам. Вот этот пробел и хотелось бы заполнить. И заодно развеять некоторые мифы.


Читать дальше →

Information

Rating
Does not participate
Location
Самара, Самарская обл., Россия
Date of birth
Registered
Activity