Pull to refresh
67
0
Гордый Хохол @Nomad1

Погромист игоръ

Send message

Обнаружена уязвимость PwnKit! 12-летняя LPE в большинстве Linux-дистрибутивов

Reading time 3 min
Views 20K

В новый год с новыми старыми уязвимостями! 25 января командой Qualys был опубликован отчет об уязвимости класса memory corruption (https://cwe.mitre.org/data/definitions/787.html) в утилите pkexec из компонентов Polkit (бывший PolicyKit). Успешная эксплуатация уязвимости может привести к получению root-привилегий у аутентифицированного локального непривилегированного атакующего (Local Privilege Escalation aka LPE). При этом совсем не важно, запущен демон polkit или нет — для эксплуатации важно наличие уязвимого компонента в системе. Центр мониторинга и реагирования на инциденты информационной безопасности Jet CSIRT компании «Инфосистемы Джет» проанализировал доступную информацию об уязвимости и вывел рекомендации по ее обнаружению и устранению. Добро пожаловать под кат!

Читать далее
Total votes 20: ↑19 and ↓1 +18
Comments 16

Простое объяснение симуляции жидкости в реальном времени

Reading time 28 min
Views 14K
image

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

Код проекта можно найти на моём Github.


Ресурсы, посвящённые симуляции жидкостей, могут быть очень пугающими. Помню, что когда я впервые прочитал статью о ней и увидел уравнения Навье-Стокса, то был в ужасе. Со временем я понял, что сама тема совершенно не сложна. На самом деле, если бы вам дали задачу написать собственный симулятор жидкостей, то вы, вероятно, написали бы что-то подобное на основании интуитивного понимания работы жидкостей. Если, посмотрев на уравнения Навье-Стокса, вы подумали «ага, понятно», то вы, возможно, быстрее бы реализовали симуляцию жидкости, прочитав работы, перечисленные в конце этой статьи. Я же попытаюсь не использовать сжатое выражение и объяснять всё как можно медленнее.
Читать дальше →
Total votes 45: ↑45 and ↓0 +45
Comments 8

Как симулировать плохую сеть под Linux, macOS и Windows

Reading time 3 min
Views 21K

Clumsy 0.2

Все распределённые системы — базы данных, мобильные приложения, корпративные SaaS и так далее — следует разрабатывать с учётом сбоев. Например, компания Stripe во время тестов убивала случайные инстансы — и смотрела, что произойдёт. Компания Netflix рандомно уничтожала инстансы прямо в продакшне с помощью программы Chaos Monkey (проект Simian Army).

Симуляция сбоев — необходимое средство тестирования. Проблема в том, что ситуации не делятся только на чёрное и белое, Есть огромная «серая» зона, где сбои явно не выражены, а проявляются в плохих условиях сети: ненадёжное соединение, узкий канал, потери пакетов, высокая задержка, дубликаты пакетов и так далее.
Читать дальше →
Total votes 45: ↑45 and ↓0 +45
Comments 6

Гексагональные тайловые миры

Level of difficulty Hard
Reading time 32 min
Views 33K

Тайловость в играх – очень распространенное явление, особенно в играх инди сегмента. Чаще всего используют квадратные тайлы – в них проще всего задать необходимые данные, будь то карта уровня или инвентарь. Однако на квадратных и прямоугольных формах возможности подобной системы не ограничиваются.

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

Читать далее
Total votes 80: ↑80 and ↓0 +80
Comments 12

Чини свою Теслу сам, тыжпрограммист

Reading time 7 min
Views 71K

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

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

Читать далее
Total votes 113: ↑82 and ↓31 +51
Comments 45

Математика провисающих проводов и цепей в играх

Reading time 5 min
Views 14K
Во многих современных играх присутствуют провода, кабели и цепи. В этой статье мы рассмотрим математические модели, от которых зависит их форма, также называемая catenary («цепная линия»).

Введение в цепные линии


Из множества изученных и описанных математических объектов один очень дорог многим разработчикам игр. И только некоторые из них знают его истинное название: цепная линия.

Цепная линия — это фигура, к которой естественным образом сводится подвешенная за края верёвка или цепь. Неслучайно само название catenary происходит от латинского catenaria, что и означает «цепь».

В современных играх появляется всё больше заброшенных предприятий и разрушенных окружений. И во многих из них встречается довольно много свисающих проводов. Например, их можно увидеть в комнате GLaDOS из «Portal» или в «Half-Life: Alyx».


Так как цепные линии окружают нас повсюду, неудивительно, что мы с детства привыкли к их форме. А ещё это означает, что мы очень легко замечаем, когда что-то свисает неправильно. Подобно сложности движения кожи или физики ткани, неправильное свисание цепных линий само по себе создаёт эффект «зловещей долины».
Total votes 29: ↑29 and ↓0 +29
Comments 23

Как всего одна игровая механика навсегда изменила Diablo

Reading time 8 min
Views 39K

«Игра всегда называлась именно так», — вспоминает Дэвид Бревик, ведущий программист оригинальной Diablo 1997 года. — «Diablo — это название горы в районе залива Сан-Франциско, у подножия которой я тогда жил. Когда я об этом узнал, помнится, я сказал: «Да, когда-нибудь это станет отличным названием для видеоигры».

Своеобразная анти-RPG того времени, Diablo многие заложенные в нее решения получила не благодаря, а вопреки. «Посмотри, как делают другие, и сделай ровно наоборот», — примерно по такому принципу и разрабатывалась ее философия.

Но одна из знаковых для игры механик все-таки не была заложена в нее изначально.

Читать далее
Total votes 64: ↑60 and ↓4 +56
Comments 85

Обучаем нейросеть играть в «Змейку» и пишем сервер для соревнований

Reading time 5 min
Views 26K


  • В этот раз выбрана игра «Змейка».
  • Создана библиотека для нейросети на языке Go.
  • Найден принцип обучения, зависимый от «глубины» памяти.
  • Написан сервер для игры между разработчиками.
Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Comments 9

Модульные боты-муравьи с памятью

Reading time 15 min
Views 19K

Одним из проектов, которые я долго мечтал реализовать, были модульные боты задач с памятью. Конечная цель проекта заключалась в создании мира с существами, способными действовать независимо и коллективно.

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

Я уже реализовал базовую систему конвейера задач на Javascript (потому что это упростило мою жизнь), но мне хотелось чего-то более надёжного и масштабируемого, поэтому этот проект я написал на C++. На это меня сподвиг конкурс по реализации процедурного сада в сабреддите /r/proceduralgeneration (отсюда и соответствующая тема).

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

Для увеличения сложности я хотел, чтобы акторы сохраняли информацию о предыдущем опыте взаимодействия с миром и использовали знания об этих взаимодействиях в будущих действиях.
Читать дальше →
Total votes 55: ↑54 and ↓1 +53
Comments 11

Алгоритм быстрого и простого объёмного рендеринга

Reading time 9 min
Views 14K

Недавно я написал небольшой ShaderToy, выполняющий простой объёмный рендеринг, а затем решил опубликовать пост с объяснением его работы. Сам интерактивный ShaderToy можно посмотреть здесь. Если вы читаете с телефона или ноутбука, то рекомендую посмотреть эту быструю версию. Я включил в пост фрагменты кода, которые помогут вам понять работу ShaderToy на высоком уровне, но в них есть не все подробности. Если вы хотите разобраться глубже, то рекомендую сверяться с кодом ShaderToy.

У моего ShaderToy были три основные задачи:

  1. Выполнение в реальном времени
  2. Простота
  3. Физическая корректность (… или типа того)

Я начну с этой сцены с кодом-заготовкой. Не буду вдаваться в подробности реализации, потому что она не очень интересна, но вкратце расскажу, с чего мы начинаем:

  1. Трассировка лучей непрозрачных объектов. Все объекты являются примитивами с простыми пересечениями с лучами (1 плоскость и 3 сферы)
  2. Для вычисления освещения используется затенение по Фонгу, а в трёх сферических источниках света применется настраиваемый коэффициент затухания света. Лучи теней не требуются, потому что мы освещаем только плоскость.

Вот как это выглядит:

ShaderToy screenshot
Читать дальше →
Total votes 52: ↑52 and ↓0 +52
Comments 6

Рендерим облака на мобильных девайсах

Reading time 3 min
Views 21K
3 года назад художник спросил меня:
— Слушай, а можно в нашу мобильную игру добавить красивые облачка?
— Нет, это абсолютно невозможно, у нас постоянно вращается камера, так что билборды будут смотреться очень фальшиво даже если на них добавить карты нормалей, а другие способы…
*художник погружается в летаргический сон*

Для меня нет большего удовольствия, чем выяснять, что я был неправ.



Про фотореалистичный рендеринг облаков написано много статей, но если хочется рисовать облака на смартфоне, приходится придумывать кучу всяких хаков, упрощений и допущений.
Под катом подробное описание рендеринга облаков на мобильных и много html5 гифок.
Поехали!
Total votes 73: ↑71 and ↓2 +69
Comments 20

Простой шейдер для точечных источников света в тумане

Reading time 3 min
Views 4.6K
Мне нужен был простой и быстрый шейдер, создающий туман, освещённый точечными источниками света. Для его реализации я написал эффект экранного пространства, результаты работы которого показаны ниже. Конвейер почти столь же прост, что и для обычных точечных источников. Он не требует структур данных объёмов, ray marching, и может быть без проблем подключен к уже существующему шейдеру освещения.

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


Небольшая сцена с космическим кораблём, отрендеренная в тумане при помощи моей техники
Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 3

Реалистичный боевой ИИ для 2D-игры

Reading time 6 min
Views 13K
image

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

Окружение и ограничения


Игровое окружение состоит из полигонов. Большинство полигонов блокирует движение, область видимости и стрельбу, однако есть и «низкие» полигоны, только блокирующие движение. Окружение плотно заставлено препятствиями и укрытиями.

ИИ тоже ограничен несколькими техническими факторами. Самый важный из них: сервер, на котором выполняются боты, когда онлайн находится мало игроков, должен быстро работать на недорогом VPS как минимум при десяти ботах. Кроме того, нагрузка на ЦП должна оставаться достаточно низкой, чтобы можно было выполнять несколько инстансов сервера на одном VPS без превышения лимита ЦП, и не при этом вызвать санкций со стороны поставщика услуг VPS.
Total votes 40: ↑40 and ↓0 +40
Comments 2

Реализация эффекта акварели в играх

Reading time 10 min
Views 5.6K
image

Введение


Когда в январе 2019 года мы начали обсуждать нашу новую игру tint., то сразу решили, что важнейшим элементом будет эффект акварели. Вдохновлённые этой рекламой Bulgari, мы понимали, что реализация рисования акварелью должна соответствовать высокому качеству остальных ресурсов, которые мы планировали создать. Мы обнаружили интересную статью исследователей из Adobe(1). Описанная в ней техника создания акварели выглядела замечательно, а благодаря своей векторной (а не пиксельной) природе она могла работать даже на слабых мобильных устройствах. Наша реализация основана на этом исследовании, мы изменили и/или упростили отдельные его части, потому что наши требования к производительности были другими. tint. — это игра, поэтому кроме самого рисования нам нужно было в одном кадре рендерить всё 3D-окружение и выполнять игровую логику. Также мы стремились к тому, чтобы симуляция выполнялась в реальном времени и игрок сразу видел нарисованное.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 2

Усложняем Sci-fi-модели процедурно: что такое Greeble и как его использовать

Reading time 5 min
Views 4.6K
image

Для начала позвольте мне пожаловаться, что «greeble» — ужасное слово, которое нужно изгнать из словаря.

Ну, сняв камень с души, перейдём к объяснениям. Greeble — это мелкие повторяющиеся детали, добавляемые к модели, чтобы придать ей ощущение масштаба и определённой эстетики. Гриблы стали популярны благодаря классическим научно-фантастическим фильмам, в которых «моделью» часто была физическая скульптура:


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

Однако вы могли заметить, что представленный выше туториал рассматривает только экструдирование треугольников, в то время как на изображении в начале статьи гриблы квадратные. Мне пришлось настроить меш так, чтобы он был разделён на четырёхугольники, и многие меши часто состоят из полигонов с более чем тремя индексами. Поэтому в этом туториале мы узнаем, как экструдировать полигон с n индексами и применим этот алгоритм ко всему мешу, чтобы создать гриблы. Также мы узнаем пару способов внесения вариаций в алгоритм гриблинга для получения менее однородных результатов.
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 5

Vertex Wireless VW210: редкий роутер и его внутренний мир

Reading time 15 min
Views 14K
Лирическое отступление: всё описанное в данной статье производилось исключительно в образовательных целях, цели извлечения материальной выгоды не преследовалось, ни одного котика в процессе (надеюсь) не пострадало. Всё, что здесь описано вы повторяете на свой страх и риск.
КДПВ курильщика (для тех, у кого дорогой трафик)

КДПВ курильщика (для тех, у кого дорогой трафик)

Несколько лет в глухой деревне трудится, не покладая рук, этот неуловимый Джо сетевой промышленности. Выбор пал на него, благодаря поддержке единственно рабочего решения для данной местности, а именно CDMA 450 от местного оператора «Сотел» (аля SkyLink). В отличии от других роутеров/модемов для данного стандарта того времени он единственный позволил добиться устойчивой связи с помощью какой-то матери и направленной антенны. Но вот беда: сайт производителя (а возможно и он сам) исчез с горизонта этих наших интернетов в далёком 2011 году. Осталось лишь пафосное видео на YouTube и упоминания их продуктов у разномастных продавцов и операторов.
Внимание! Под спойлером много картинок большого размера и с гикпорн содержанием!
Total votes 35: ↑35 and ↓0 +35
Comments 17

Некоторые особенности программирования временных событий в играх

Reading time 9 min
Views 15K

Дóжили. Недавно была обнаружена проблема синхронизации игрового процесса с реальным временем не где-нибудь, а в игре "Quake Champions". Название игры "Quake" раньше было синонимом чего-то крутого, высокотехнологичного и идеального. И в голову не могло придти, что через какую-то пару десятков лет и камня на камне не останется от былого превосходства, а в новой игре с именем "Quake" появятся грубые ошибки, приводящие к тому, что один из игроков может получить преимущество только потому, что у него лучше "железо". Дело в том, что скорость стрельбы в новом шутере зависит от fps, то есть, количество пуль, выпущенных игроками с разным значением fps за один и тот же промежуток времени будет разным, а значит один из них может получить преимущество.


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

Читать дальше →
Total votes 21: ↑21 and ↓0 +21
Comments 17

Как я создавал карты континентов для своей игры

Reading time 23 min
Views 46K
image

Часть 1. SVG и системы координат


До недавнего времени размеры карт в моей игре Dragons Abound были фиксированными и несколько недетерминированными. Я считал их «региональными» — не картами всего мира, но его значительными частями, такими например, как западное побережье США или часть Европы. Меня вполне устраивал этот масштаб, но я хотел немного поэкспериментировать с игрой, чтобы посмотреть, смогу ли я генерировать карты целого мира (или хотя бы большего размера). Но прежде чем я приступлю к этому, давайте немного поговорим о картах фэнтези-миров.

Мир — это большое пространство. Большинство карт фэнтезийных «миров» даже близко не походят на истинный размер. Возьмём, например, Средиземье, в котором происходит действие «Властелина колец»:


Хоть и кажется, что на ней запечатлён огромный мир, на самом деле Средиземье создано на основе Европы.
Читать дальше →
Total votes 55: ↑54 and ↓1 +53
Comments 5

Information

Rating
Does not participate
Location
Украина
Date of birth
Registered
Activity