Войти
Программирование

Статьи

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

Читать | Комментарии [89]
9 окт. 2019

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

Читать | Комментарии [24]
18 авг. 2019

На пути к эффективному алгоритму Global Illumination, часть 1
В этой статье мы рассмотрим небольшой исторический контекст разработки алгоритмов global illumination, а также поразмышляем, какими свойствами должен обладать оптимальный алгоритм расчёта global illumination.

Читать | Комментарии [142]
22 апр. 2019

Синхронизации в Vulkan
Синхронизации в Vulkan
Одно из важных отличий Vulkan от более старых графических API, это больший контроль над синхронизациями как с CPU, так и внутри GPU. И как всегда многопоточность и синхронизация — это достаточно сложная тема. Стоит помнить, что драйвер Vulkan не обязан оптимизировать вызовы API, поэтому для максимальной производительности синхронизации должны быть расставлены наиболее оптимальным образом.

Читать | Комментарии [36]
26 фев. 2019

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

Читать | Комментарии [61]
18 ноя. 2018

Введение в Vulkan Raytracing
Введение в Vulkan Raytracing
В какое время мы живем! Казалось, еще недавно мы часами ждали пока CPU просчитает знаменитое изображение за авторством Тернера Уиттеда, а сегодня нам доступны потребительские модели видеокарт с аппаратной поддержкой рейтрейсинга! Любой программист трехмерной графики скажет, что он мечтал об этом дне, когда мы, наконец, можем трассироваться в мировом пространстве в реальном времени.

Читать | Комментарии [183]
4 ноя. 2018

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

Читать | Комментарии [63]
20 мар. 2018

Детали плавающей точки
Детали плавающей точки
Цель статьи - дать читателю представление о работе с числами с плавающей точкой в программировании. Предполагается дать базовый объём информации и предоставить уровень понимания, достаточный для самостоятельного проведения оценок в задачах, возникающих на практике.

Читать | Комментарии [22]
4 мая 2017

Frustum Culling
Одной из важных оптимизаций в компьютерных играх является отсечение геометрии, не видимой на экране (Frustum Culling, далее фрустум кулинг). Раз мы все равно не увидим объект, то и не зачем тратить ресурсы компьютера на его подготовку и отрисовку.

Читать | Комментарии [73]
8 фев. 2017

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

Читать | Комментарии [73]
8 фев. 2017

Rectilinear Texture Warping
Rectilinear Texture Warping
В данной статье я расскажу об адаптивном методе теневых карт под названием Rectilinear Texture Warping for Adaptive Shadow Maps, о его достоинствах и недостатках, а также о реальном опыте использования данного метода в проекте (и что из этого вышло).

Читать | Комментарии [29]
12 окт. 2016

Behavior Trees в Unreal Engine 4
Behavior Trees в Unreal Engine 4
Для программирования логики поведения искусственного интеллекта в Unreal Engine, используется Behavior Tree - древовидная структура которая задаёт действия для выполнения и условия для них. В этой статье будут описаны отличия реализации Behavior Tree в Unreal Engine 4 от классических реализаций. Кроме того приведен полный перечень имеющихся узлов для Behavior Tree с описанием.

Читать | Комментарии [13]
30 сен. 2016

Vulkan API «Hello Triangle»
Vulkan API «Hello Triangle»
Статья описывает основные принципы работы с Vulkan API и включает в себя материал по установке SDK, обработке ошибок, работе с различными сущностями API и краткий курс по выводу треугольника, в качестве практической части. Работа позиционирует себя как быстрый экскурс в основы Vulkan API, не претендуя на полноту и оставляя детали на самостоятельное рассмотрение.

Читать | Комментарии [69]
15 сен. 2016

Маленькая статья про Vulkan
Это небольшая статья для тех, кто хочет разобраться в основных концепциях нового графического API и его отличиях от предыдущего поколения. Я буду говорить о Vulkan vs OpenGL, но многие вещи можно применить и к другим API нового и старого поколений.

Читать | Комментарии [10]
1 сен. 2016

Unity Character Motor
Unity Character Motor
Когда-то давно, еще во времена Unity 3, мне стало интересно как работает физика персонажа. И я заглянул в класс CharacterMotor. Класс был написан на JavaScript, был огромный, страшный и непонятный. Я решил переписать его на C#, попутно отрефакторив. Недавно я вспомнил про свой старый CharacterMotor, решил еще немного подправить его и поделиться им. Тем более, тема физики персонажа не очень популярная (я вообще не видел никакой информации), хотя довольно интересная.

Читать | Комментарии [61]
29 июня 2016

Ассемблерные вставки в GCC
Статья является попыткой систематизировать brain-dump известной автору информации по ассемблерным вставкам в GCC.

Читать | Комментарии [33]
30 апр. 2016

Простая система событий на С++11
При проектировании своих игр/программ/систем мы стараемся как можно больше следовать принципу SRP (Single responsibility principle) [1] - то есть каждая сущность инкапсулирует в себя одну конкретную обязанность.

Читать | Комментарии [107]
2 дек. 2015

Coverage Buffer из CryENGINE в деталях
Coverage Buffer из CryENGINE в деталях
Некоторое время назад я наткнулся в замечательной презентации Secrets of CryEGNINE 3 Graphics Technology от не менее замечательных Nickolay Kasyan, Nicolas Schulz и Tiago Sousa на описание любопытной технологии, названной авторами.

Читать | Комментарии [23]
21 окт. 2015

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

Читать | Комментарии [28]
9 сен. 2015

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

Читать | Комментарии [55]
20 мая 2015

Dynamic vertex pulling в Direct3D11
Dynamic vertex pulling в Direct3D11
Данная статья рассказывает про то, как можно рисовать миллионы уникальных объектов в Direct3D11 с минимальным оверхедом на CPU и максимально близкой к D3D12 или «AMD Mantle» скоростью. В статье показан пример использования так называемых Structured Buffers.

Читать | Комментарии [42]
21 янв. 2015

Screen space ambient occlusion с учетом нормалей и расчет одного отражения света.
Screen space ambient occlusion с учетом нормалей и расчет одного отражения света.
В этой статье я расскажу, как я с нуля делал SSAO (Screen Space Ambient Occlusion — расчёт фонового освещения в экранном пространстве) с учетом нормалей. Сразу следует отметить, что это наиболее простая и прямолинейная реализация «в лоб», не претендующая на оптимальность или новизну. Статья будет полезна в первую очередь тем, кто имеет желание разобраться, как это работает.

Читать | Комментарии [69]
17 янв. 2015

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

Читать | Комментарии [39]
14 сен. 2014

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

Читать | Комментарии [78]
6 янв. 2014

Процедурная генерация карты (часть 1)
Процедурная генерация карты (часть 1)
В этой короткой статье я поделюсь нехитрым алгоритмом, для процедурного генерирования геометрии карты, который я собрал как прототип для своей небольшой roguelike-like игры.

Читать | Комментарии [37]
11 ноя. 2013

Кое-что о размытии изображения с помощью шейдеров.
Кое-что о размытии изображения с помощью шейдеров.
Эта статья познакомит читателя с основными техниками размытия изображения при помощи GLSL шейдеров. Данные техники широко применяется в играх для создания таких эффектов как засветка (bloom), глубина резко изображаемого пространства (DOF), эфект движения на большой скорости итд.

Читать | Комментарии [43]
28 сен. 2013

Скелетная анимация на пальцах.
Скелетная анимация на пальцах.
Многие новички, которые только начинают постигать «скелетку», очень часто не понимают как она работает (даже при наличии многих статей на данном ресурсе) и что для её работы нужно, собственно им я и хотел бы объяснить на пальцах как работает скелетная анимация.

Читать | Комментарии [59]
26 дек. 2012

Физика «на пальцах»: Обнаружение столкновений для выпуклых геометрий
Физика «на пальцах»: Обнаружение столкновений для выпуклых геометрий
Обнаружение столкновений между телами — один из принципиально важных моментов при моделировании игровой физики твёрдых тел. Причём необходимо не просто указать сам факт пересечения, но и предоставить конкретные точки и нормали контактов, множество которых называется contact manifold. После многих лет написания собственного физического движка я пришёл к алгоритму, который хорошо себя зарекомендовал, как очень общий и достаточно быстрый алгоритм генерирования контактных точек.

Читать | Комментарии [79]
9 окт. 2012

Модели многопоточности, или «Прощайте дедлоки»
Статья является выборочным переводом главы 5 из книги «Erlang and OTP in Action», Martin Logan, Eric Merritt, Richard Carlsson, издательство Manning.

Читать | Комментарии [41]
24 авг. 2012

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

Читать | Комментарии [23]
6 авг. 2012

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

Читать | Комментарии [100]
4 июля 2012

GPSM: Geometry Pitch Shadow Map
GPSM: Geometry Pitch Shadow Map
GPSM (Geometry Pitch Shadow Map) — еще один метод рендеринга теневых карт, дающий возможность реализовать тени, покрывающие огромные территории, используя всего одну текстуру, в которую происходит рендеринг (render target). Метод GPSM даёт для теней вдали от камеры наблюдения качество хуже, а вблизи — лучше. Этот метод я изобрел для своего движка и уже использую в двух проектах, решил поделится с вами, надеюсь, кому-то пригодится.

Читать | Комментарии [157]
30 апр. 2012

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

Читать | Комментарии [169]
2 ноя. 2011

OpenGL на Qt 4. Это просто! (часть 2)
OpenGL на Qt 4. Это просто! (часть 2)
Во 2-ой части продолжается рассмотрение работы с OpenGL на Qt 4. Читатель познакомится с настройкой контекста OpenGL, созданием анимации и простым наложением текстур. Заодно в рамках «чистого» OpenGL будет рассмотрена интерактивная графика с помощью режима выбора (выбираем объекты на экране для дальнейшей манипуляции с ними), в рамках «чистого» Qt будет продемонстрировано создание главного окна, меню (menu bar), задействованы механизм сигналов и слотов и технология дерева объектов (иерархии объектов).

Читать | Комментарии [17]
10 авг. 2011

Редактор функций на основе кривых Безье
Редактор функций на основе кривых Безье
Статья о кривых Безье и о проблемах, с которыми можно столкнуться при написании редактора скалярных функций на базе кривых Безье.

Читать | Комментарии [12]
9 авг. 2011

Простая машинка в Unity
Простая машинка в Unity
Урок по созданию простой машинки в среде Unity при помощи компонента WheelCollider. Описаны базовые настройки этого компонента. Для понимания урока необходимы базовые знания среды Unity.

Читать | Комментарии [15]
19 июля 2011

Пишем отладчик для Lua 5.1
Пишем отладчик для Lua 5.1
В современных играх достаточно многое отдается на откуп скриптам. Самым распространенным и часто используемым для этого скриптовым языком является Lua . Удобный синтаксис, хорошая скорость (особенно при использовании LuaJIT), кроссплатформенность. Lua используется в проектах любых масштабов от небольших аркад, до монстров вроде World Of Warcraft.

Читать | Комментарии [25]
27 апр. 2011

Программирование звука с использованием XAudio2.
Программирование звука с использованием XAudio2.
Всем доброго времени суток! Это моя первая статья на GameDev.ru, которая появилась в связи с тем, что в недавнем времени решил я сам перейти на библиотеку XAudio2. Документации по ней в Интернете на русском нет.

Читать | Комментарии [18]
23 апр. 2011

Software Occlusion Culling
Software Occlusion Culling
Оклюжен кулинга сейчас, наверное, нет только у ленивых. Некоторые используют HW OC, у которых есть очевидные недостатки в виде латентности и дополнительной нагрузки на GPU. Другие используют софтовую растеризацию. К примеру, мы можем растеризовать глубину близлежащих оклюдеров (специальной или прямо рендер геометрии), затем проверять баунд боксы отрисовываемых объектов относительно этой глубины. Радостей от такого подхода может быть несколько.

Читать | Комментарии [134]
3 апр. 2011

Компонентная система игровых сущностей.
Компонентная система игровых сущностей.
Не раз поднималась тема об иерархии игровых объектов, их взаимодействии и управления ими. Я пробовал всякие варианты построения игрового объекта, и в итоге остановился на компонентной системе. Было это давненько, так что система успела себя оправдать по удобству и масштабируемости. О получившейся схеме и пойдет речь. Но для начала рассмотрим возможные варианты.

Читать | Комментарии [428]
3 апр. 2011