Как стать автором
Обновить
4
0.1

Пользователь

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

Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3

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


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

Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Читать дальше →

Дизайн-документ: зачем применяется, как составить и какие сервисы использовать

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров2.2K

Создание документации — самая скучная часть в разработке игр. Так думают многие разработчики, а некоторые из них уверены, что «документация устаревает раньше, чем она написана». Отчасти они правы. В современной разработке игр жестким многостраничным документам нет места. Но это вовсе не значит, что документация бесполезна. Геймдизайн документ (диздок, GDD) как стандарт документации для создания игр эволюционировал вместе с индустрией.

Читать далее

Порталы: как устроен расчёт видимости в Quake, часть 2

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров2.1K

Часть 1

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

«Это просто задача отсечения»

Свет внезапно выключается. Вы сидите в огромном конференц-зале. Кто-то включает проектор. На экране сам Майкл Абраш! Похоже, это знаменитый доклад Quake Postmortem с GDC 1997.

Он говорит о порталах.

Мы берём плоскости отсечения, ограничивающие максимальный объём видимого, и отсекаем их по всё более дальним порталам, пока они не пропадут.

Читать далее

Нестандартная обобщённая хеш-таблица на чистом Си

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров2.5K

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

Читать далее

Game++. Dancing with allocators

Уровень сложностиПростой
Время на прочтение34 мин
Количество просмотров7.5K

C и C++ не имеют встроенной сборки мусора, поэтому разработчик сам решает, как и когда выделять и освобождать память. Мы, конечно, можем покивать в сторону STL, сокрытия аллокаций в контейнерах, но от этого они никуда не денутся. Просто если раньше приходилось думать про выделенный кусок памяти, понимать, как он скажется на времени фрейма, помнить, что его надо удалить (а может, не надо и стоит оставить на следующий фрейм), то теперь всё заворачивается в сахарные контейнеры и разработку в стиле STL-blin-vse-sterpit. STL-то может и стерпит, и даже как-то будет ворочаться, однако не стоит полагаться исключительно на системный аллокатор, бездумно вызывая new или malloc для каждого запроса памяти. Вы ведь понимаете, что std::vector посреди цикла или горячей функции — это плохая идея?

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

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

Я отнюдь не призываю вас встать на путь ручного управления памятью, ибо он будет усеян ловушками, граблями и чреват утечками. Но разработчик в итоге оказывается перед выбором: либо довериться системному аллокатору и столкнуться с проблемами вроде размазанного перфа, когда вроде и код написан правильно, модно и молодежно, но отчего-то работает небыстро, либо взять всё в свои руки, создавая собственные механизмы выделения и освобождения ресурсов.

Ребята из HFT, Database, Automotive и Embedded-систем наверняка могут рассказать немало интересных историй про оптимизацию new/delete. Давайте я расскажу немного про разные аллокаторы в играх?

Аллокатор аллокатору аллокации аллоцировал

Точность позиционирования объектов в играх: возможные ошибки

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.7K

- Чем чревато брать float или double в качестве типа данных для хранения позиций объектов?
- Как это может повлиять на наличие багов в игре и ошибки синхронизации сетевой игры или реплеев?

Об этом вы узнаете в этом гайде с наглядными гифками и пруфом на C++

Читать далее

Learn OpenGL. Урок 5.5 – Normal Mapping

Время на прочтение19 мин
Количество просмотров41K
OGL3

Normal Mapping


Все сцены, которые мы используем состоят из многоугольников, в свою очередь состоящих из сотен, тысяч абсолютно плоских треугольников. Нам уже удалось немного повысить реализм сцен за счет дополнительных деталей, которые обеспечивает нанесение двухмерных текстур на эти плоские треугольники. Текстурирование помогает скрыть факт того, что все объекты в сцене – всего лишь набор множества мелких треугольников. Великолепная техника, но возможности её не безграничны: при приближении к любой поверхности все одно становится ясно, что она состоит из плоских поверхностей. Большая же часть реальных объектов не является абсолютно плоской и демонстрирует множество рельефных деталей.
Читать дальше →

Простые способы изготовить микроскоп и изучать простейших, читать маркировку деталей и не только

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров13K
Картинка (в том числе): Youtube-канал "~j0ule", blog.ru

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

Тем не менее, как ни странно, он прав: если и не в части орфографии, то хотя бы во вложенном смысле. Чем система проще, тем легче её создать (а также она надёжнее и т. д., но нас интересует именно лёгкость реализации).

А что, если я скажу вам, что существует несколько весьма простых способов изучения простейших, а также как минимум один весьма лёгкий способ превратить смартфон в микроскоп для рассматривания маркировок электронных деталей и не только?
Читать дальше →

Настройка ToolChain-нa для Разработки на Микроконтроллерах YTM32x

Уровень сложностиПростой
Время на прочтение18 мин
Количество просмотров2.5K

Абсолютно все микроконтроллеры программируются одинаково, если собирать код из make файлов.

Настало время освоить очередное семейство ARM-совместимых микроконтроллеров. За плечами уже AVR, MSP430x, LPC21x, STM32x, MDR32x, ESP32x, SPC58x, CC26x2, NRF53x, AT32Fx. Теперь вот YTM32x от компании YUN TU (Suzhou YTM Semiconductor Co Ltd).

С какой же стороны следует подходить к микроконтроллерам YTM32x?
Давайте разбираться...

Читать далее

Криптоанализ шифра Виженера. Как реализовать и взломать

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров6K

Сказал как-то один французский дипломат...

Что же он такого мог сказать в 16 веке ? Разберемся в этой статье.

Читать далее

Путеводитель C++ программиста по неопределённому поведению

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров10K

Путеводитель C\+\+\ программиста по неопределённому поведению


Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.

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

Stat Commands: Добавляем трассировку в Unreal Engine

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров743

Единственный разумный подход к оптимизации игры — это всегда иметь под рукой хорошие метрики производительности. Unreal Engine поставляется сразу с несколькими полезными инструментами профилирования. «Stat commands» — один из таких инструментов. Они позволяют нам измерять ряд показателей для различных фрагментов нашего (C++) кода.

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

Читать далее

Заметки о вращении вектора кватернионом

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

Структура публикации


  • Получение кватерниона из вектора и величины угла разворота
  • Обратный кватернион
  • Умножение кватернионов
  • Поворот вектора
  • Рысканье, тангаж, крен
  • Серия поворотов


Получение кватерниона из вектора и величины угла разворота


Ещё раз – что такое кватернион? Для разработчика – это прежде всего инструмент, описывающий действие – поворот вокруг оси на заданный угол:

(w, vx, vy, vz),

где v – ось, выраженная вектором;
w – компонента, описывающая поворот (косинус половины угла).
Читать дальше →

Editor Scripting в Unreal Engine: создание утилит для генерации Actor и Data Asset

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров1.1K

Привет, Хабр! В этой статье я поделюсь своим опытом создания утилит в Unreal Engine, которые автоматизируют процесс генерации Actor Blueprint и Data Asset. Эти утилиты значительно упрощают работу дизайнерам уровней, помогая сократить время на рутинные задачи и минимизировать ошибки, а также могут быть полезны в широком спектре задач, связанных с разработкой.

Мы рассмотрим, как использовать Editor Utility Widgets на практике, чтобы упростить работу в редакторе. Основная часть будет выполнена в Blueprint, но для решения отдельных задач нам также понадобятся функции на C++. Помимо этого, я расскажу о важных аспектах работы с Asset Registry, фабриками ассетов и Subobject Data Subsystem.

Читать далее

Gameplay Ability System в Unreal Engine и с чем его едят

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров2.5K

Рано или поздно разработчик на Unreal Engine почти наверняка сталкивается с необходимостью использовать плагин Gameplay Ability System. И если он не был знаком с этим плагином, то он также столкнется с необходимостью освоить огромное количеством информации, требуемой для работы с ним, на изучение которой может уйти не одна неделя. Эта статья для таких людей, а также для тех, кто работает с Unreal Engine и до сих пор с этой системой не знаком, но хочет познакомиться.

Ознакомившись с ней вы узнаете что вообще за Gameplay Ability System. Где, как и, главное, зачем его использовать. Познакомитесь с основными сущностями, которые необходимы для работы с плагином. А также получите возможность пронаблюдать его использование на небольшом примере. Приятного чтения!

Читать далее

Интеллектуальные права на компьютерную игру

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров624

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

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

Читать далее

Разбор рендеринга в Unity, часть вторая: посмотрим на Genshin Impact

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров12K

Казалось бы, техническая сторона графики у игр, созданных на одном игровом движке, должна быть более-менее схожей. Вот я и приступил к реверс-инжинирингу рендеринга Genshin Impact, не питая особого энтузиазма, ожидая увидеть там что нибудь вроде Universal Render Pipeline, стандартного решения для мобильных игр на Unity, с шейдером Cell shading для отрисовки персонажей. Но реальность преподнесла немало сюрпризов...

Читать далее

Доступно о кватернионах и их преимуществах

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

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

Концепция кватернионов была придумана ирландским математиком сэром Уильямом Роуэном Гамильтоном в понедельник 16 октября 1843 года в Дублине, Ирландия. Гамильтон со своей женой шёл в Ирландскую королевскую академию, и переходя через Королевский канал по мосту Брум Бридж, он сделал потрясающее открытие, которое сразу же нацарапал на камне моста.

$i^2=j^2=k^2=ijk=-1$




Памятная табличка на мосту Брум Бридж через Королевский канал в честь открытия фундаментальной формулы умножения кватернионов.

В этой статье я постараюсь объяснить концепцию кватернионов простым для понимания образом. Я объясню, как можно визуализировать кватернион, а также расскажу о разных операциях, которые можно выполнять с кватернионами. Кроме того, я сравню использование матриц, углов Эйлера и кватернионов, а затем попытаюсь объяснить, когда стоит использовать кватернионы вместо углов Эйлера или матриц, а когда этого делать не нужно.
Читать дальше →

Оптимизация игры на UE. Часть 1. Сбор статистики

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров6.6K

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

Читать далее

STM32. CMSIS. Пять способов генерации (псевдо-)случайного сигнала на выводе микроконтроллера

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров4.1K

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

Читать далее
1
23 ...

Информация

В рейтинге
3 346-й
Зарегистрирован
Активность