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

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

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

Разобраться раз и навсегда: Task.WhenAll или Parallel.ForEachAsync в C#

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


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

Если быстро посмотреть на результаты, которые появляются в интернете при поиске советов по реализации подобных вещей, то можно увидеть, что есть как много похожих, так и различных предложений от различных программистов. В какой-то момент поиска вы, вероятно, столкнётесь с поиском идеей использования Task.WhenAll или Parallel.ForEachAsync.

При чтении некоторых из этих материалов будет видно много различных противоречивых ответов как на StackOverflow, так и по всему интернету. Сегодня я собираюсь сравнить эти два метода с помощью определённых бенчмарков, которые стравят их друг против друга, чтобы, наконец, выяснить применимость каждого из двух методов.
Читать дальше →
Всего голосов 42: ↑41 и ↓1+56
Комментарии18

Почему B-деревья быстрые?

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

B-дерево — это структура, помогающая выполнять поиск в больших объёмах данных. Она была изобретена более сорока лет назад, однако по-прежнему используется в большинстве современных баз данных. Хотя существуют и более новые структуры индексов, например, LSM-деревья, B-дерево пока никто не победил в обработке большинства запросов баз данных.

После прочтения этого поста вы будете знать, как B-дерево упорядочивает данные и выполняет поисковые запросы.

Читать далее
Всего голосов 151: ↑150 и ↓1+183
Комментарии13

Объёмное атмосферное рассеяние света

Время на прочтение31 мин
Количество просмотров29K
image

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

GIF

Статья разбита на следующие части:

  • Часть 1. Объёмное атмосферное рассеяние
  • Часть 2. Теория атмосферного рассеяния
  • Часть 3. Математика рэлеевского рассеяния
  • Часть 4. Путешествие сквозь атмосферу
  • Часть 5. Атмосферный шейдер
  • Часть 6. Пересечение атмосферы
  • Часть 7. Шейдер атмосферного рассеяния
Читать дальше →
Всего голосов 50: ↑50 и ↓0+50
Комментарии14

Трёхмерная графика с нуля. Часть 1: трассировка лучей

Время на прочтение42 мин
Количество просмотров132K
image


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

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

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


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

Трёхмерная графика с нуля. Часть 2: растеризация

Время на прочтение47 мин
Количество просмотров56K
image


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

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

Тогда как это удаётся играм?

Ответ заключается в использовании совершенно иного семейства алгоритмов, которое мы исследуем во второй части статьи. В отличие от трассировки лучей, которая получалась из простых геометрических моделей формирования изображений в человеческом глазе или в камере, сейчас мы будем начинать с другого конца — зададимся вопросом, что мы можем отрисовать на экране, и как отрисовать это как можно быстрее. В результате мы получим совершенно другие алгоритмы, которые создают примерно похожие результаты.
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии2

Эффект дизеринга в трёхмерной игре

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

Создатель Papers, Please Лукас Поуп работает над новым трёхмерным проектом Return of the Obra Dinn, в котором пытается с помощью эффекта дизеринга воссоздать в игре ощущение старинной книги.

Для начала краткое объяснение: Obra Dinn выполняет внутренний рендеринг всего в 8-битной палитре в градациях серого, а затем на этапе постобработки преобразует конечные выходные данные в 1-битные значения. Преобразование из 8-битного в 1-битный цвет выполняется сравнением каждого пикселя исходного изображения с соответствующей точкой в тайловом паттерне дизеринга. Если значение пикселя изображения больше значения точки паттерна дизеринга, то выходному биту присваивается значение 1, в противном случае оно равно 0. Выходные данные упрощаются до 1-битных значений, а глаз зрителя объединяет пиксели, аппроксимируя из них больше битов.
Читать дальше →
Всего голосов 72: ↑72 и ↓0+72
Комментарии42

Создание концепт-артов в 3D

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

Бен Николас поделился секретами своего рабочего процесса и рассказал об источниках вдохновения для ярких экспериментов с 3D.

Введение


Я начал заниматься 3D, когда мне было 13 лет. Мой хороший друг детства тогда баловался с 3D, и он вдохновил меня на его самостоятельное изучение. Сначала я работал в Bryce, потом довольно быстро перешёл к 3ds Max и Maya. В старшей школе я уже занимался 3D на фрилансе и выполнял случайные работы, пользуясь обретёнными знаниями. Больше всего меня притягивало hard surface-моделирование, потому что я вырос рядом с самолётными и вертолётными ангарами, ведь мой отец был пилотом. Он же научил меня любить научную фантастику. Думаю, оба этих аспекта стали основой моего вкуса в искусстве.
Читать дальше →
Всего голосов 20: ↑20 и ↓0+20
Комментарии1

Как правильно предложить свою игру ютуберу/стримеру

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

Привет всем! Меня зовут Welsknight, я профессиональный ютубер и стрим-партнёр Twitch. Получив особенно плохое письмо от кого-то, предложившего мне спонсируемую серию видео (он неправильно написал моё имя и, что более важно, не предоставил никакой информации о своей игре), я решил, что будет полезно поделиться моей точкой зрения на то, как правильно общаться с ютуберами и стримерами. Итак, без лишних предисловий…

Совет 1: упростите мне работу!


  • Не заставляйте меня искать информацию о вашей игре. Добавьте в письмо скриншоты, ссылку на трейлер, краткое текстовое описание вашей игры, расскажите, на что она похожа и т.д.
  • Просто пришлите мне ключ. Если мне придётся ответить на письмо, чтобы попросить его, то, скорее всего, я не буду этого делать.
  • Приложите пресс-кит. Мне нужны хорошие PNG вашего логотипа с прозрачностью и красивые фоновые изображения, чтобы использовать в иконке видео. Если вы действительно хотите меня впечатлить, добавьте PNG с основными персонажами и врагами, которые я тоже смогу использовать. Помните, что мне придётся собрать из ваших иллюстраций целостную и красивую иконку размером 1280x720.
  • Если ваша игра ещё не вышла, укажите дату выхода, и будет ли эмбарго на видеообзор.
Читать дальше →
Всего голосов 33: ↑20 и ↓13+7
Комментарии25

Создание неба для 3D-игр

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

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




Всего голосов 37: ↑37 и ↓0+37
Комментарии9

Лицензирование музыки для инди-разработчиков

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

Когда я начала думать над созданием игры Bollywood Wannabe, одной из первых проблем была музыка. Мне нужны были песни, которые в сочетании с соответствующей графикой и геймплеем воссоздавали бы ощущения от просмотра болливудских фильмов. Музыку при разработке игр часто игнорируют, но в музыкальной игре (rhythm game) плохих композиций быть не может. Большинство песен в Bollywood Wannabe лицензировано — редкий случай для инди-игры. Мне задали кучу вопросов по этой теме, поэтому я написала небольшую инструкцию по лицензированию музыки для инди-разработчиков.

Зачем лицензировать музыку?


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

Для Bollywood Wannabe мне нужна была очень специфическая музыка. После долгих поисков мне удалось найти для игры две песни с лицензией без отчислений (royalty free). Но мне нужно было десять. Я не знала ни одного композитора, способного написать остальные, и даже если бы и нашла его, это было бы слишком дорого. Оптимальнее всего оказалось найти уже выпущенные песни и убедить их авторов продать мне лицензию.
Читать дальше →
Всего голосов 16: ↑16 и ↓0+16
Комментарии22

Введение в процедурную анимацию

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

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

GIF

Серия будет состоять из следующих частей:

Всего голосов 48: ↑46 и ↓2+44
Комментарии3

Создание шейдеров

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

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


Сцена из Minecraft, до и после добавления нескольких шейдеров.

Задача этого туториала


Иногда программирование шейдеров представляется загадочной чёрной магией и его часто понимают неправильно. Существует множество примеров кода, демонстрирующих создание невероятных эффектов, но в которых практически нет объяснений. В своём руководстве я хочу восполнить этот пробел. Я сосредоточусь в основном на базовых принципах создания и понимания кода шейдеров, чтобы вы смогли с лёгкостью настраивать, сочетать или писать свои собственные шейдеры с нуля!
Всего голосов 105: ↑105 и ↓0+105
Комментарии27

Создание камней для игр с помощью фотограмметрии

Время на прочтение11 мин
Количество просмотров22K
Себастьян ван Элвердинге рассказывает о своём подходе к созданию потрясающих трёхмерных камней и скал с помощью множества фотографий. Более подробно о нём можно узнать в туториале на gumroad.com/sebvhe.


Введение


Привет, меня зовут Себастьян, я живу в Брюсселе, на родине лучшего картофеля фри, пива и шоколада! Сейчас я работаю художником по окружениям в Starbreeze Studios (Стокгольм). раньше я работал в Playground Games над игрой Forza Horizon 3, которая стала для меня отличной возможностью применения фотограмметрии в игре AAA-класса.



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

Хотя с момента написания мой рабочий процесс немного поменялся, туториал всё равно применим к тому, что собираюсь рассказать. Если вам будет что-то непонятно в этом интервью, то, скорее всего, вы найдёте подробное объяснение в туториале.
Всего голосов 41: ↑41 и ↓0+41
Комментарии8

Как создаются визуальные эффекты для игр

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

Основные задачи художников визуальных эффектов


Если говорить только о визуальных эффектах, то их можно разделить на два основных типа задач: геймплейные эффекты и природные эффекты (или эффекты окружений). Принцип их разделения зависит от конкретного проекта. Например в такой игре, как Castlevania (жанра hack'n'slash), 90% визуальных эффектов состояло в умениях персонажа и магии, сильно влиявших на геймплей. Такие задачи требуют серьёзного понимания механик игры и постоянного общения с командой дизайнеров, с которой нужно постоянно договариваться. Для примера давайте возьмём огнемёт. Дизайнеры геймплея подбирают область урона атаки, а затем вам необходимо создать эффект поверх отладочного цилиндра. Постепенно уменьшающийся огонь не полностью соответствует области урона, и дизайнеры начинают на это жаловаться. Вот один из примеров «конфликтов» между двумя дисциплинами, потому что если придерживаться строгих правил, огонь не будет похож на огонь. Поэтому приходится искать альтернативы и убеждать дизайнеров, что игрок не заметит, что небольшой исчезающий огонь не нанёс никакого урона.

Среди прочих жанров, геймплейные эффекты более «важны» в файтингах и RPG.

Существуют и другие игровые жанры, например, шутеры (в особенности это касается реалистичных), в которых природные эффекты так же важны, как и геймплейные. В этом случае художник, ответственный за природные эффекты, становится практически художником по окружениям и в основном сотрудничает с этой командой. Примерами природных эффектов являются водопады, туман, дождь и т.д. Больше всего природных эффектов я создал в Gears of War 4, где мы работали над многопользовательскими картами и должны были заботиться о влиянии эффектов на производительность, потому что от игры требовалось работать в 1080p при 60 fps.
Всего голосов 43: ↑43 и ↓0+43
Комментарии7

От чего зависит интересность геймплея?

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

Думаю, каждый согласится, что ощущения от игрового процесса в разных играх отличаются. Одни игры кажутся более «игровыми», чем другие. Просто сравните игру в Super Mario с чем-нибудь вроде Dear Esther, и, как мне кажется, ясно, что в первой по ощущениям больше геймплея, чем в последней. Чем вызвано это чувство? Моя гипотеза такова: разница в возможности планирования.

Чем больше игрок может планировать в игре заранее, тем более захватывающей она кажется.

Прежде чем я представлю доказательства того, что это скорее всего правда, мне нужно дать небольшую вводную информацию. Чтобы понять, почему планирование играет такую выдающуюся роль в играх, нам нужно взглянуть на эволюцию нашего вида и ответить на вопрос: почему рыбы такие глупые?
Читать дальше →
Всего голосов 38: ↑36 и ↓2+34
Комментарии30

Синхронизация состояний в многопользовательских играх

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

Проблема многопользовательских игр


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

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

Обычно программа игры должна симулировать следующее:

изменения в окружении с учётом времени и вводимых игроками данных.

Игра — это программа, хранящая состояние, поэтому она зависит от времени (реального или логического). Например, PACMAN симулирует окружение, в котором постоянно перемещаются призраки.

Многопользовательская игра не является исключением, однако из-за взаимодействия игроков её сложность намного выше.
Читать дальше →
Всего голосов 48: ↑48 и ↓0+48
Комментарии38

Синхронизация ритма в музыкальных играх

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

Недавно я начал работу в Unity над битбоксовой музыкальной игрой Boots-Cut. В процессе прототипирования базовых механик игры я обнаружил, что довольно сложно правильно синхронизировать ноты с музыкой. В Интернете по этой теме нашлось довольно мало статей. Поэтому в своей статье я постараюсь дать наиболее важные подсказки по разработке музыкальной игры (особенно в Unity).
Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии11

Функции шума и генерирование карт

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


Когда я изучал обработку аудиосигналов, мой мозг начал проводить аналогии с процедурным генерированием карт. В статье излагаются принципы, связывающие обработку сигналов с генерированием карт. Не думаю, что открыл что-то новое, но некоторые выводы были для меня в новинку, поэтому я решил записать их и поделиться с читателями. Я рассматриваю только простые темы (частоту, амплитуду, цвета шума, использование шума) и не затрагиваю другие темы (дискретные и непрерывные функции, фильтры FIR/IIR, быстрое преобразование Фурье, комплексные числа). Математика статьи в основном связана с синусоидами.

Эта статья посвящена концепциям, начиная с самых простейших и заканчивая более сложными. Если вы хотите перейти сразу к генерированию рельефа с помощью функций шума, то изучите другую мою статью.
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии6

Важно то, что внутри: о процедурной генерации органов

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

(Дисклеймер переводчика: на всякий случай не советую читать эту статью во время еды.)

Когда я начинаю участвовать в геймджемах, то вхожу в режим «максимального ускорения», который обычно заканчивается ужасными понедельниками на работе после бессонных ночей. Чем старше становлюсь, тем сложнее для меня набраться энтузиазма для участия. К счастью, PROCJAM очень расслабленный, что идеально мне подходит. Кроме того, читерство там совершенно не запрещено, поэтому я мог, например, вернуть из небытия мой генератор органов, над которым я работал несколько месяцев назад для Bestiarium и создать свой прототип на его основе.
Всего голосов 33: ↑30 и ↓3+27
Комментарии2

Gen Jam 2016: процедурно генерируемые спрайты

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

19 ноября 2016 года в Сан-Франциско прошёл первый ежегодный Gen Jam (геймджем по процедурной генерации). Идея была в том, чтобы за субботу создать генератор графики, «объект, создающий объекты», если вам угодно.

Я создал программу, рисующую спрайты персонажей в удивительном стиле набора 16-битных спрайтов Кристофера «Oryx» Барретта из Oryx Design Lab. Посмотрите на примеры того, что делает программа:

image
Читать дальше →
Всего голосов 46: ↑45 и ↓1+44
Комментарии29

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность