Как стать автором
Обновить
35
0.1
Гиляровский Константин @Chaos_Optima

RnD Computer Graphics

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

Нативная рефлексия в C++ уже близко

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

Почему в 2024 году нам приходится писать каст енума к строке вручную, для каждого кастомного типа нужна своя функция логирования, а биндинги к C++ библиотеке требуют кучу повторяющегося кода?

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

Сегодня рассматриваем пропозалы рефлексии, которые с большОй вероятностью попадут в следующий стандарт - C++26.

Читать далее
Всего голосов 23: ↑23 и ↓0+27
Комментарии72

Souls, куда уже плавнее?

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

На этот раз речь пойдет о миленьком мобильном батлере: SOULS

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

Изучить
Всего голосов 6: ↑5 и ↓1+4
Комментарии0

Генерация лабиринтов: алгоритм Эллера

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

Привет, Хабр!

Сегодня я хотел бы рассказать о генерации идеального лабиринта - алгоритмом Эллера. Статья подойдёт всем любителям алгоритмов.

Читать далее
Всего голосов 51: ↑51 и ↓0+51
Комментарии10

Как я создаю игры на своём 3D движке в одиночку

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

Много лет назад я занимался созданием маленьких Flash игр и публиковал их на сайте Newgrounds. Сейчас я делаю полноценные игры для ПК.

На сегодняшний день у меня 4 законченные коммерческие игры в Steam, и самая последняя из них — выпущенная в 2021 году Pilie Pals, о процессе создания которой я расскажу в этой статье.

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

Читать далее
Всего голосов 41: ↑40 и ↓1+48
Комментарии13

Рендеринг прекрасных кадров God of War на PC

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

После выпуска God of War на PC я был просто обязан попробовать её. Я играю с 90-х годов, поэтому совершенно не против снова и снова проходить игру с линейным сюжетом. В этом есть большая ценность. На данный момент моей самой переигрываемой линейной игрой является Max Payne (первая часть), я целиком проходил её на разных платформах более 15 раз. Но всё равно чаще всего я играю на PC. Когда я впервые играл в GoW на PS4, то надеялся приобрести её для PC, мне нравится коллекционировать игры и ачивки Steam, поэтому благодаря выпуску игры для компьютера я решил снова к ней вернуться. Но на этот раз я решил прихватить с собой рабочие инструменты, ведь мне было очень любопытно, как устроен движок/рендерер этой игры.

В этом нет ничего нового для меня, я переигрываю в любимые игры и изучаю их технологии; насколько я помню, этот синдром появился с Max Payne 3, и с тех пор я много раз я пробовал делать это с другими играми, но, к сожалению, так никогда и не завершил ни одной статьи. Я выполняю захваты кадров, рассматриваю их, делаю какие-то заметки, начинаю сохранять скриншоты, а потом бах! — и начинаю заниматься чем-то другим. Последними двумя жертвами моей лени стали The Medium и Halo Infinite, возможно, я когда-нибудь их закончу, выпущу черновик поста и освобожу кучу места, которую занимают их файлы! Однако с GoW получилась совершенно иная история: как только я получил письмо со Steam о выпуске игры, я решил переиграть её, по крайней мере, ради ачивок, а также на этот раз завершить анализ рендеринга.
Читать дальше →
Всего голосов 27: ↑27 и ↓0+27
Комментарии0

C++20. Coroutines

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

В этой статье мы подробно разберем понятие сопрограмм (coroutines), их классификацию, детально рассмотрим реализацию, допущения и компромиссы, предлагаемые новым стандартом C++20.


image

Читать дальше →
Всего голосов 32: ↑29 и ↓3+42
Комментарии27

3D Graphics Rendering Cookbook

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

В августе этого года, после полутора лет напряженной работы, наконец-то вышла наша третья книга (про первую и вторую уже были посты на Хабре) ориентированная на разработку игр: 3D Graphics Rendering Cookbook: A comprehensive guide to exploring rendering algorithms in modern OpenGL and Vulkan.


Читать дальше →
Всего голосов 15: ↑15 и ↓0+15
Комментарии17

Недельный геймдев: #33 — 29 августа, 2021

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

На этой неделе: новая рубрика «Посиделки с инди», Gamasutra переименовалась в Game Developer, Google Play изменит рейтинг приложений, Photo Mode для Unity, ZBrush 2021.7.

Из интересностей: доклад от Activision про их архитектуру пайплайна рендеринга геометрии, плавный стриминг сцен в Unity3D, постмортем Loop Hero, подробное видео про Path Tracing.

Читать далее
Всего голосов 6: ↑6 и ↓0+6
Комментарии5

Как работает трассировка лучей в Quake II

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

Когда-то Кристоф Шид разработал проект Q2VKPT — мод для Quake II с поддержкой рейтрейсинга и в то же время унифицированное решение для симуляции и фильтрации всех типов переноса света для лучшего изучения того, что уже возможно, а что еще предстоит сделать в разрезе трассировки лучей в игровой графике.

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

Поэтому Q2VKPT имеет множество вариаций, в которых мы вкратце и разберемся.

Читать далее
Всего голосов 19: ↑18 и ↓1+22
Комментарии2

Как создать панораму 360° на квадрокоптер DJI Mini 2

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

На современных картах все больше появляется 360 аэроснимков, которые принято называть "Сферические панорамы". Почти каждый владелец БПЛА с камерой может создавать свою собственную сферу. Разбираем подробный способ создания 360 панорамы с помощью бюджетного дрона DJI Mini 2.

Читать далее
Всего голосов 12: ↑12 и ↓0+12
Комментарии12

Почему графику в видеоиграх по-прежнему так сложно создавать?

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

Введение


В этом посте будут рассмотрены трудности и аспекты производства, которые нужно учитывать при создании новых методик и алгоритмов рендеринга/графики, особенно в контексте прикладных исследований рендеринга реального времени. Я буду рассказывать о своём личном опыте работы над Witcher 2, Assassin’s Creed 4: Black Flag, Far Cry 4 и God of War.

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

Я слышал вопросы типа «почему эта великолепная исследовательская методика X не используется в продакшене?» и от геймеров, и от коллег из научных кругов. На то всегда бывают очень веские причины!

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

Я вспоминаю об этой теме ещё и каждый раз, когда слышу дискуссии о том, что «фотограмметрия, трассировка лучей, нейронный рендеринг, [вставить любую другую новую тему] станет универсальным решением для рендеринга и заменит всё остальное!». Спойлер: этого не случится (по крайней мере, в ближайшее время).
Читать дальше →
Всего голосов 60: ↑60 и ↓0+60
Комментарии40

C++ zero-cost abstractions на примере хеш-таблиц в ClickHouse. Доклад Яндекса

Время на прочтение12 мин
Количество просмотров12K
Хеш-таблицы — это королевы структур данных. Нигде не сломано так много копий, как на оптимизации хеш-таблиц. В докладе я рассказал ещё об одной хеш-таблице, которая используется в ClickHouse. Вы увидите, что zero-cost abstractions в современном С++ оправдывают себя и как с помощью небольших трюков получить разнообразные структуры данных из общей кодовой базы. На основе общих строительных блоков можно построить быстроочищаемую хеш-таблицу, несколько видов LRU-кешей, lookup-таблицы без хешей, хеш-таблицы для строк и т. п. Я показал, как получить максимальную производительность на конкретных сценариях и не ошибиться при её тестировании. В моём докладе — самая мякотка низкоуровневых оптимизаций. В общем, то, что мы любим.

— Для начала мы обсудим, зачем нужны хеш-таблицы, где их можно использовать в базах данных и как сделать их оптимальными. Затем посмотрим бенчмарки различных хеш-таблиц в интернете и разбёремся, как делать их правильно. В конце посмотрим на C++-обертку над идеальной хеш-таблицей в ClickHouse.
Читать дальше →
Всего голосов 23: ↑20 и ↓3+29
Комментарии10

Новая методика кэширования информации затенения в мировом пространстве

Время на прочтение14 мин
Количество просмотров3.5K
Представленное в этой статье исследование было проведено исследователем графики и лектором Мэттью Делером в DAE Research (HOWEST University of Applied Sciences). Результаты были использованы для получения степени магистра в Breda University of Applied Sciences под научным руководством кандидата технических наук Жако Биккера. Эта статья является сокращённой версией исследования и может служить введением в тему. Она содержит примеры кода, вкратце объясняющие алгоритм, что, как мы надеемся, поможет разработчикам и исследователям в воссоздании прототипа в собственном фреймворке/движке. Публикацию/дипломную работу можно найти на ResearchGate, а полный пример кода — по этой ссылке.

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

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

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

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

image

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

Как можно оптимизировать dot-product и не только. Доклад Яндекса

Время на прочтение18 мин
Количество просмотров3.9K
Разработчик инфраструктуры качества поиска Яндекса Ильнур Хузиев ilnurKh взял простую задачу — скалярное произведение двух векторов — и попробовал выжать все соки производительности кода. Из доклада вы узнаете, как использовать возможности процессора, настройки компилятора (и даже попробовать превзойти его), какой была бы правильная постановка задачи, как выбирать приоритеты и архитектуру. Да, вопрос выбора абстракций может встать даже на примере настолько простой задачи.

— Сегодня мы рассмотрим достаточно простую функцию — скалярное произведение двух векторов, и попробуем провести различные оптимизации. Надеюсь, что приёмы, которые мы рассмотрим, будут применены не только в этой задаче, но и в других.
Читать дальше →
Всего голосов 18: ↑18 и ↓0+18
Комментарии2

Эволюция рабочего места: от ноутбука на кухне до работы стоя

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

Компьютерный стол у меня появился на два года раньше компьютера, в 2004 году. Это был обычный стол, у которого даже были полки для монитора и клавиатуры. За ним я научился всему, а спустя 17 лет он всё так же стоит у моих родителей.

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

Поделюсь своей историей о том, какой путь прошёл и что нового узнал.

Читать далее
Всего голосов 50: ↑47 и ↓3+52
Комментарии217

Система динамического разрушения стен в Radio Viscera

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

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

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


Рисунок 1. Базовые концепции, лежащие в основе системы
Всего голосов 23: ↑23 и ↓0+23
Комментарии1

15 лучших и крупнейших библиотек иконок

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


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

Сразу уточняем: это не 15 самых лучших библиотек, а 15 из лучших. Разумеется, есть и другие, не менее замечательные, о которых я не упомянул или не знаю.
И, нет, это не рейтинг — список маркированный, а не нумерованный.
Читать дальше →
Всего голосов 20: ↑18 и ↓2+22
Комментарии12

Трассировка теней с технологиями AMD: как реализованы тени в The Riftbreaker

Время на прочтение10 мин
Количество просмотров7.6K
The Riftbreaker — изометрическая стратегия, сочетающая в себе элементы выживания, исследования и hack’n’slash. Разработанная на собственном движке Exor Studios — Schmetterling Engine 2.0, The Riftbreaker позволяет использовать новейшие разработки в игровой индустрии, одной из которых является трассировка лучей в реальном времени. В этой статье речь пойдет о том, с какими проблемами столкнулись в студии при реализации трассировки лучей в игре и какие нашли для них решения.

image

Динамически меняющееся время суток, разнообразные погодные эффекты и множество исследуемых биомов делают трассировку лучей в реальном времени отличным выбором для The Riftbreaker
Читать дальше →
Всего голосов 44: ↑44 и ↓0+44
Комментарии10

Процедурная генерация деревьев методом транспорта питательных веществ

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

Примечание: код для этой статьи выложен на мой Github [здесь].

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

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

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

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

При помощи этой методики можно генерировать высококачественные меши деревьев на разных этапах роста в реальном времени и с незначительной тратой вычислительных ресурсов!
Всего голосов 39: ↑39 и ↓0+39
Комментарии7
1
23 ...

Информация

В рейтинге
3 715-й
Откуда
Воронеж, Воронежская обл., Россия
Зарегистрирован
Активность