Pull to refresh
0
@woopeexread⁠-⁠only

User

Send message

Houdini. Визуальное представление данных в молекулярной биологии. И фокусы

Reading time10 min
Views5.4K

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

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

— Да как ты это сделал! Это же невозможно!

Давайте посмотрим, какие возможности предоставляет Houdini (софт назван в честь Гарри Гудини, да) для работы с разным количеством объектов/данных/точек. Где есть место фокусам. И как они могут помочь при работе с большими и тяжёлыми сценами. И не забываем, что наша конечная наша цель — визуальное представление этих данных.

Чем больше биологических объектов мы показываем, тем сложнее сцена. Один иммуноглобулин IgG – это 13 тысяч атомов. А если мы показываем вирус SARS-CoV-2, облепленный антителами и двигающийся по поверхности клетки, то это порядка 50 миллионов атомов. 

Расшифрованные структуры всех белков (и не только), которые учёные хотят сделать общественным достоянием, передаются в глобальную базу — PDB (Protein Data Bank).  И любой школьник/студент/аспирант/профессор/велосипедист может свободно использовать какую угодно структуру, ссылаясь на источник. Изумительный случай человеческого единства. 

Данные хранятся в формате файла PDB/CIF. Это облако точек/атомов с координатами. Информации достаточно, чтобы описать структуру объекта в пространстве. Хотя данных там больше — есть информация о химических элементах, аминокислотах и прочем. Для нас сейчас важны только атомы и их координаты.

1 VDB (воксели/кубики)  

Воксели позволяют представлять модель/точки в виде кубиков. Они могут быть больше или меньше. Воксели не используются в чистовом производстве, т.к. криволинейную поверхность (например, сферу) сложно представить кубами. Чтобы сгладить воксели их конвертируются в полигоны. Обратный процесс тоже возможен. Воксели занимают много места. При линейном увеличении размера объём вокселей увеличивается в кубической зависимости. Тогда зачем нам воксели? 

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments12

World Composition для игр с открытым миром — Unreal Engine 4

Reading time16 min
Views14K

Всем привет. Меня зовут Ширшов Владимир и я техлид проекта King's Bounty 2. Игра разрабатывается на движке Unreal Engine 4.

King's Bounty 2 - это игра с открытым миром, в котором есть города, поселения, наполненные персонажами, интерактивными объектами и зонами сражений. Персонаж может перемещаться по миру как пешком, так и верхом. Все элементы открытого мира должны помещаться в память, удовлетворять требованиям по производительности и успевать загружаться на всех целевых платформах (PlayStation 4, XBox One, Nintendo Switch), чтобы вокруг игрока всегда были персонажи и детализированные объекты.

Я хочу поделиться опытом использования системы стриминга уровней в Unreal Engine 4 World Composition для создания открытого мира и рассказать об ее плюсах и минусах. Также расскажу о тех изменениях, которые нам потребовалось внести в нее для того, чтобы игра помещалось в память целевых платформ, и уровни успевали загружаться при перемещении игрока по локации.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments8

Джентльменский набор программиста UE4, ч. 3

Reading time4 min
Views13K

Данный вопросник является дополнением и логическим завершением темы "джентльменского набора", поднятой ранее. Разработка игр — весьма комплексная индустрия, с очень широкими набором технологий и подходов, при этом базис у всех этих вещей на самом деле общий. Этот список создан в первую очередь для тех, кто хочет быть программистом Unreal Engine, а также позволяет оценить свой уровень тем, кто уже считает себя продвинутым программером под анрил.

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

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments0

Имитация естественного движения: Steering Behaviors

Reading time23 min
Views19K
image

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

Идеи, на которых построены такие поведения, предложены Крейгом Рейндольдсом; они не основаны на сложных стратегиях с использованием планирования пути или глобальных вычислений, а применяют локальную информацию, например, силы соседних объектов. Благодаря этому они просты в понимании и реализации, но в то же время способны создавать очень сложные паттерны движения.
Total votes 41: ↑40 and ↓1+39
Comments7

От int main() до BeginPlay: как происходит инициализация Unreal Engine под капотом

Reading time16 min
Views18K

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

Но когда вы пишете игровой код на Unreal Engine, вы не имеете дело с игровым циклом напрямую. Вы не начинаете работать сразу с основной функцией — сначала вы определяете подкласс GameMode и переопределяете функцию под названием InitGame. Или пишете одноразовые классы Actor и Component и переопределяете их функции BeginPlay или Tick для добавления собственной логики. Это самый минимум того, что вам нужно сделать: обо всем остальном движок позаботится за вас.

Unreal Engine также предлагает вам как программисту мощный и гибкий инструментарий: конечно, он имеет открытый исходный код, но также возможно и расширение несколькими другими способами. Даже если вы только начинаете работать с этим движком, было бы не лишним получить представление о его GameFramework: о таких классах, как GameMode, GameState, PlayerController, Pawn и PlayerState.

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

Читать далее
Total votes 21: ↑21 and ↓0+21
Comments2

Готовим Physically Based Rendering + Image-based Lighting. Теория+практика. Шаг за шагом

Reading time24 min
Views36K
Хей, привет. 2017 год на дворе. Даже простенькие мобильные и браузерные приложения начинают потихоньку рисовать физически корректное освещение. Интернет пестрит кучей статей и готовых шейдеров. И кажется, что это должно быть так просто тоже обмазаться PBR… Или нет?

В действительности же честный PBR сделать достаточно сложно, потому что легко достичь похожего результата, но сложно правильного. И в интернете полно статей, которые делают именно похожий результат, вместо правильного. Отделить мух от котлет в этом хаосе становится сложно.
Поэтому цель статьи не только разобраться, что же такое PBR и как он работает, но и научиться писать его. Как отлаживать, куда смотреть, и какие ошибки типично можно допустить.
Статья рассчитана на людей, которые в достаточной мере уже знают hlsl и неплохо знакомы с линейной алгеброй, и можете написать свой простейший неPBR Phong свет. В общем я постараюсь как можно проще объяснить, но рассчитываю на то, что некоторый опыт работы с шейдерами вы уже имеете.
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments11

Строим города по клику мыши с Houdini и Python

Reading time3 min
Views15K


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

Эта статья как раз про подобное. Автор придумал метод постройки виртуальных городов, который в перспективе хочет превратить в полноценный инструмент левел-дизайнера.
Читать дальше →
Total votes 52: ↑52 and ↓0+52
Comments5

Ray Casting Visual Search (RCVS). Простой и быстрый алгоритм поиска схожих по геометрии 3D моделей

Reading time8 min
Views5K


Для меня эти две модели очень похожи, однако у них нет очевидных характеристик, по которым можно было бы измерить их сходство. У этих моделей разное количество вершин, рёбер и полигонов, они разного размера, к тому же по-разному повёрнуты в пространстве, и у обеих одинаковые трансформации (Положение = [0,0,0], Вращение в радианах = [0,0,0], Масштаб = [1,1,1]). Как определить их подобие?
Total votes 14: ↑14 and ↓0+14
Comments13

Советы по использованию алгоритма коллапса волновой функции

Reading time7 min
Views12K
image

В последнее время я много экспериментировал с процедурной генерацией на основе ограничений. В частности, с алгоритмом Wave Function Collapse (WFC, коллапс волновой функции). Я даже написал собственную open source-библиотеку и ассет unity.

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

В этой статье я расскажу, чему научился и что сможет поднять генераторы на основе ограничений на новый уровень.
Total votes 36: ↑36 and ↓0+36
Comments4

Исследование шейдера песка игры Journey

Reading time20 min
Views6.4K
Начало серии статей здесь

image

Часть 4: зеркальное отражение


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

Один из самых интригующих эффектов рендеринга песка Journey заключается в том, как дюны сверкают в лучах света. Такое отражение называется зеркальным (specular). Название произошло от латинского слова speculum, означающего «зеркало». Specular reflection — это «зонтичное» понятие, объединяющее в себе все типы взаимодействий, при которых свет сильно отражается в одном направлении, а не рассеивается и не поглощается. Именно благодаря зеркальным отражениям и вода, и отполированные поверхности под определённым углом выглядят сверкающими.

В Journey представлено три типа зеркальных отражений: свечение краёв (rim lighting), зеркальное отражение океана (ocean specular) и отражение отблесков (glitter reflections), показанные на схеме ниже.
Total votes 11: ↑11 and ↓0+11
Comments4

Создание красивых процедурных зданий с помощью Blueprint

Reading time6 min
Views10K

Введение


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

Это здание было создано всего из одного модуля, автоматически скопированного в Construction Blueprint. Идея заключается в том, чтобы материал не требовал практически никакого ввода данных вручную. Для всего здания используется только один материал (за исключением окон). Его функции используют для управления рандомизацией цвета вершин и позиции пикселей в мировом пространстве.


Единственный модуль — всё, что нам нужно


Никакого размещения вручную или скриптами. Вся рандомизация выполняется в материале

Описываемый в этом туториале материал:

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

Total votes 11: ↑11 and ↓0+11
Comments3

Вывод внутриигровых сообщений с помощью Particle System

Reading time8 min
Views8.4K
image

Задача


При разработке нашей игры The Unliving, мы поставили перед собой задачу по отображению различных сообщений, таких, как нанесенный урон, нехватка здоровья или энергии, величина награды, количество восстановленных очков здоровья и т.д., с помощью Particle System. Это было решено сделать для того, чтобы получить больше возможностей для кастомизации эффектов появления и дальнейшего поведения таких сообщений, что проблематично при использовании стандартных элементов UI-системы Unity.

Кроме того, данный подход подразумевает использование всего лишь одного инстанса Particle System для каждого типа сообщений, что дает огромный прирост в производительности по сравнению с выводом этих же сообщений с помощью Unity UI.
Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments17

Реализация шаблона «Состояние» в Unity

Reading time13 min
Views37K
image

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

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

Для изящного решения этой задачи можно воспользоваться шаблоном проектирования «Состояние» (State design pattern). Ему-то мы и посвятим этот туториал!

Из туториала вы:

  • Научитесь основам шаблона «Состояние» в Unity.
  • Узнаете, что такое конечный автомат, и когда его использовать.
  • Узнаете, как использовать эти концепции для управления движением персонажа.

Примечание: этот туториал предназначен для опытных пользователей; предполагается, что вы уже умеете работать в Unity и обладаете средним уровнем знаний C#. Кроме того, в этом туториале используется Unity 2019.2 и C# 7.
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments0

Деревья квадрантов и распознавание коллизий

Reading time13 min
Views25K
image

Эта неделя была короткой, в понедельник и вторник я продолжал работать над системой 2D-освещения. Остальное время я потратил на реализацию деревьев квадрантов (quadtree).

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

Во-первых, мне нужно сказать, почему я решил реализовать дерево квадрантов.

Quadtree — это структура данных разбиения пространства. Её основное преимущество по сравнению с другими структурами данных заключается в адаптивности. Оно обеспечивает хорошую производительность при вставке, удалении и поиске. То есть мы можем использовать это дерево в динамическом контексте, где данные часто меняются. Более того, эту структуру довольно легко понять и реализовать.

Если разбиение пространства для вас новая тема, то рекомендую прочитать эту статью Роберта Нистрома. Если вы хотите более подробно узнать о деревьях квадрантов, то прочитайте эту или эту статьи.
Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments7

5 способов полезного использования Raspberry Pi

Reading time5 min
Views163K
Привет Хабр.

Raspberry Pi наверное есть дома почти у каждого, и рискну предположить, что у многих она валяется без дела. А ведь Raspberry это не только ценный мех, но и вполне мощный fanless-компьютер с Linux. Сегодня мы рассмотрим полезные возможности Raspberry Pi, для использования которых код писать не придется совсем.

Для тех кому интересно, подробности под катом. Статья рассчитана для начинающих.
Читать дальше →
Total votes 58: ↑53 and ↓5+48
Comments129

Новый алгоритм поиска пути в Factorio

Reading time6 min
Views23K

На прошлой неделе мы говорили в своём блоге об изменениях, которые позволят врагам (biters, кусакам) не наталкиваться друг на друга, но это было не единственное обновление, связанное с biter-ами. Совпало так, что в обновления этой недели вошло то, над чем мы работали предыдущие несколько недель — обновление системы поиска пути для врагов.

Поиск пути


Когда юнит хочет куда-то переместиться, ему сначала нужно понять, как туда добраться. В самом простом случае можно двигаться прямиком к цели, но на пути иногда возникают препятствия — скалы, деревья, гнёзда врагов (spawners), юниты игрока. Чтобы проложить дорогу, мы должны сообщить функции поиска пути (pathfinder) текущую и конечную позиции, а pathfinder вернёт нам (возможно, через много тактов) путь, который просто является набором промежуточных точек (waypoints), по которым должен двигаться юнит, чтобы добраться до места назначения.

Для выполнения своей работы pathfinder использует алгоритм под названием A* (произносится «A star»). Простой пример поиска пути при помощи A* показан на видео: biter хочет найти путь в обход скал. Функция поиска пути начинает исследовать карту вокруг biter-а (исследование показано белыми точками). Сначала она пытается пойти напрямик к цели, но как только достигает скал, «разливается» в обе стороны, пытаясь найти позицию из которой снова можно будет двигаться к цели.
Total votes 58: ↑57 and ↓1+56
Comments29

Уравнение Навье-Стокса и симуляция жидкостей на CUDA

Reading time24 min
Views53K
Привет, Хабр. В этой статье мы разберемся с уравнением Навье-Стокса для несжимаемой жидкости, численно его решим и сделаем красивую симуляцию, работающую за счет параллельного вычисления на CUDA. Основная цель — показать, как можно применить математику, лежащую в основе уравнения, на практике при решении задачи моделирования жидкостей и газов.


Читать дальше →
Total votes 46: ↑46 and ↓0+46
Comments30

Создаем на C++ выразительные умные указатели для удаленной памяти

Reading time10 min
Views10K
Привет, Хабр!

Сегодня мы публикуем перевод интересного исследования о работе с памятью и указателями в C++. Материал немного академический, но явно будет небезынтересен читателям книг Галовица и Уильямса.

Следите за рекламой!
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments1

Пиксельный Lo-fi в Unity

Reading time3 min
Views15K
image

Визуальный стиль моей находящейся в разработке игры LAUNDRY GAME (да, это бессовестная реклама) основан на больших чётких пикселях в 3D. Я обожаю 3D в низком разрешении. Мне задавали много вопросов о том, как я это сделал, поэтому я решил написать туториал.

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

Дополнение 1: умный парень Пит Брисбёрн отправил сюда скрипт на случай, если вам не понравится трюк с «quad в небе» (этапы 4-6)!
Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments10

Cоздание визуальных компонентов в Unity UI. Система частиц

Reading time10 min
Views14K
Привет! Эта статья о создании собственных визуальных компонентов в UI на примере компонента для визуализации системы частиц в Canvas’e.

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

image

Читать дальше →
Total votes 22: ↑20 and ↓2+18
Comments6
1
23 ...

Information

Rating
Does not participate
Location
Литва
Date of birth
Registered
Activity