Как стать автором
Обновить
0
0
Иван Казаков @kandaru_san

Web-разработчик

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

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

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

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

Читать далее

Лабиринты: классификация, генерирование, поиск решений

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

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

Классификация лабиринтов


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

Odinbit, продолжение разработки своей игры. Новые механики, оптимизации, появление мультиплеера

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

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

Читать далее

Task-based мышление в игровых движках

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

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

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

Что еще можно вынести в другой поток без особого ущерба для игры?

Читать далее

Демо City In A Bottle – система рейкастинга в 256 байтах

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

Привет всем любителям size coding, сегодня я расскажу о чём-то потрясающем: крошечном движке трассировки лучей (raycasting) и генераторе города, умещающихся в автономном файле HTML размером 256 байтов.

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

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

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

Читать далее

Вороной, Манхэттен, рандом

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

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

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

Осторожно, очень много картинок!

Читать далее

Что почитать игровому программисту?

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

Объём специфичных знаний, которые требуются рядовому программисту игр, даже если он только начал свою карьеру, вызывает у меня «лёгкую» тоску. Это одна из причин, почему большая часть людей, которые «горят делать игры», отсеивается на этапе технических собеседований (обычно их больше одного). Это нормально и грустно. Добавьте сюда, что нефундаментальные знания, вроде инструментов, библиотек и движков, приходится обновлять где‑то раз в 5–7 лет. Не вижу тут, что игрострой сильно отличается от других областей разработки. Если бы лет 15 назад «добрый я» скинул на почту список книг, которые придется прочитать и осмыслить, армия собранных граблей не была бы столь большой и разнообразной, и без ручек половинной длины. Осторожно, в конце статьи будет супердлинная картинка (взята с github отсюда, с разрешения автора).

У программиста нет цели, только путь.

Переход с Vue-CLI и Webpack на Vite: ускоряем разработку Vue 3

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

Одним из новых инструментов в арсенале Vue 3 является Vite - быстрый и легковесный бандлер, который значительно упрощает процесс разработки и ускоряет сборку проекта. В этой статье мы рассмотрим, как перейти от стандартного подхода с использованием Vue-CLI и Webpack к более продвинутому и эффективному методу работы с помощью Vite.

Читать далее

Работа Apache Kafka на примерах. Поднимаем Kafka Cluster используя docker-compose

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

В этой статье продемонстрирую и объясню работу Kafka, используя как можно меньше определений и больше практики. Мы рассмотрим 3 сценария работы с Kafka. Для последнего сценария мы поднимем Kafka Cluster в Docker и с помощью UI увидим, как происходит общение между сервисами.

Читать далее

Носители английского языка — худшие коммуникаторы в мире

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

Носители языка — худшие коммуникаторы в мире

В комнате, полной людей, для которых язык не является родным, «нет никаких шансов на понимание». Возможно, это их язык, которым они владеют, но послание часто теряется.

Читать далее

Как на самом деле работает Async/Await в C# (Часть 1)

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

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

Читать далее

Все хуки и концепты React в одной статье

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

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

Читать далее

Нейронные сети для новичков и профи: топ бесплатных курсов по ИИ

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

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

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

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

Приглашаем к прочтению!

Читать далее

Архитектура unity проектов

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

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

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

Не волнуйтесь, никаких SOLID и других изотерических практик. Коротко, по делу, подкрепленное использованием на нескольких проектах.

Читать далее

Недельный геймдев: #145 — 29 октября, 2023

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

Из новостей: движок от VK за основу взял Dagor Engine от Гайджинов, разработчик Dreams и LittleBigPlanet собирается сократить 15-20% сотрудников, Steam изменит валюты магазина в Турции и Аргентине на доллары.

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

Читать далее

Как типизировать Vuex Store

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

Всем привет!

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

You are welcome!

Хочу типизировать Vuex

Фэнтези и бизнес-показатели, Или хорошие игроки работают лучше, а увольняются реже

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

— Я тебе за что плачу? За то, чтобы ты играл на рабочем месте!?
— Да.
— Действительно…Продолжай.

Люди играли, играют и будут играть. Но почему бы не играть с пользой и вместо «Танки Онлайн» приносить результат банку, а себе — денежку? Никаких причин отказываться от такой идеи нет, поэтому в 2020 году мы сделали пошаговую стратегию для сотрудников, чтобы поднять реальные показатели продаж и обученности. В игру мы зашили всё, что касается продаж продуктов малого бизнеса и обучения менеджеров, а интерфейс встроили в SFA — платформу, где мы проводим сделки.

И наш опыт легко повторим.

Привет, я — Мурат Абаев. В Альфе управляю отделом профобучения. Несколько лет назад я стал идейным вдохновителем проекта с игрой для менеджеров банка. Под катом расскажу о том, когда геймификация наконец сработала.

Читать далее

Обновление состояния системы через Server-Sent Events (SSE) без затей

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

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

Допустим, у нас есть список объектов, к примеру – список эпизодов для шоу. Один клиент на него смотрит, а другой в это время добавляет в список еще один эпизод. Хорошо бы факт добавления нового эпизода сразу отобразить у первого клиента. То же самое относится и к просмотру информации об отдельном эпизоде: если один клиент её просматривает, а другой – редактирует, было бы здорово результат редактирования сразу отображать у первого.

Для решения данной задачи очень удобно использовать механизм Server-Sent Events (SSE). О том как это сделать в проектах, у которых на беке Node, а на фронте React, я и хочу поговорить.

Читать далее

Unity: 8 причин отказаться от Coroutine в пользу Async

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

Когда речь заходит об асинхронных операциях в Unity, на ум первым делом приходит coroutine. И это не удивительно, так как большинство примеров в сети реализованы именно через них. Но мало кто знает, что Unity поддерживает работу с async/await еще с 2017 версии.

Так почему же большинство разработчиков до сих пор использует coroutine вместо async/await? Во первых, как я уже упомянул, большая часть примеров написана с использованием coroutine. Во вторых, async/await кажется очень сложным для начинающих разработчиков. Ну и в третьих, когда речь заходит о коммерческих проектах, где основным из критериев является стабильность, предпочтение отдается проверенному годами подходу.

Но технологии не стоят на месте и появляются библиотеки, которые делают работу с async/await в Unity удобной, стабильной и самое главное высокопроизводительной.

Читать далее

JavaScript триггеры и функции появились в Redis 7.2

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

В Redis уже много лет используется язык программирования Lua для исполнения пользовательского кода налету (eval) или определении пользовательских функций. Lua действительно удобный язык, но скорее с точки зрения встраивания внутрь проекта на C/C++ для выполнение простых скриптов. Большинство же разработчиков, которые используют Redis, предпочли бы не учить новый язык, а работать с уже известным и более популярным скриптовым языком, таким как JavaScript. И это наконец-то случилось.

Предлагаю ознакомиться с тем, как команда Redis в релизе 7.2 дошла до долгожданного внедрения JavaScript и как сделать первый шаги по запуску триггеров и функций.

Читать далее

Информация

В рейтинге
Не участвует
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Frontend Developer, Web Developer
Middle
Git
JavaScript
TypeScript
MongoDB
Redis
Svelte.js
CSS
HTML
Node.js
Express