Как стать автором
Обновить
-26
0
Жека @Jeka178RUS

Программист

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

Алгоритм быстрого и простого объёмного рендеринга

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

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

У моего ShaderToy были три основные задачи:

  1. Выполнение в реальном времени
  2. Простота
  3. Физическая корректность (… или типа того)

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

  1. Трассировка лучей непрозрачных объектов. Все объекты являются примитивами с простыми пересечениями с лучами (1 плоскость и 3 сферы)
  2. Для вычисления освещения используется затенение по Фонгу, а в трёх сферических источниках света применется настраиваемый коэффициент затухания света. Лучи теней не требуются, потому что мы освещаем только плоскость.

Вот как это выглядит:

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

Процедурная гидрология: динамическая симуляция рек и озёр

Время на прочтение15 мин
Количество просмотров7.9K
Примечание: полный исходный код проекта выложен на Github [здесь]. В репозитории также содержится подробная информация о том, как читать и использовать код.

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

Я исследовал уже существующие методики процедурной генерации рек и озёр, но найденные результаты меня не устроили.

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

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

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

В своём методе я стремлюсь одновременно и к простоте, и к реализму ценой небольшого повышения сложности базовой системы эрозии. Рекомендую прочитать мою предыдущю статью об этой системе [здесь, перевод на Хабре], потому что новая модель строится на её основе.
Всего голосов 22: ↑22 и ↓0+22
Комментарии4

Это норма — 4: решение проблем с картами нормалей

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

Часть 1: что такое карты нормалей и как они работают

Часть 2: как запекаются карты нормалей

Часть 3: типы карт нормалей

Это четвёртая часть туториала о картах нормалей, но она независима от остальных частей и её можно читать отдельно.

Здесь я перечисляю проблемы карт нормалей, с которыми я сталкивался за годы работы, и некоторые решения, позволяющие их устранить.
Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии1

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

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

Введение


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

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


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


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

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

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

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

Learn OpenGL. Урок 5.5 – Normal Mapping

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

Normal Mapping


Все сцены, которые мы используем состоят из многоугольников, в свою очередь состоящих из сотен, тысяч абсолютно плоских треугольников. Нам уже удалось немного повысить реализм сцен за счет дополнительных деталей, которые обеспечивает нанесение двухмерных текстур на эти плоские треугольники. Текстурирование помогает скрыть факт того, что все объекты в сцене – всего лишь набор множества мелких треугольников. Великолепная техника, но возможности её не безграничны: при приближении к любой поверхности все одно становится ясно, что она состоит из плоских поверхностей. Большая же часть реальных объектов не является абсолютно плоской и демонстрирует множество рельефных деталей.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии3

Преобразование полигональных моделей в граничное представление: алгоритм и примеры кода

Время на прочтение8 мин
Количество просмотров8.6K
В большинстве систем проектирования (САПР) основным представлением моделируемого объекта является граничное представление геометрии или B-rep (Boundary representation). Но все чаще пользователям САПР приходится иметь дело с полигональными моделями, например, полученными в результате 3D-сканирования или заимствованными из онлайн-каталогов.
Чтобы сделать их пригодными для дальнейшей работы, нужно конвертировать полигональную сетку в B-rep модель. А это совсем непросто.
Мы разработали программный компонент C3D B-Shaper, который встраивается в систему проектирования и преобразует полигональные модели в граничное представление. В этом посте покажем алгоритм конвертации и примеры реализации на С++.

image
Всего голосов 10: ↑10 и ↓0+10
Комментарии4

Десятка лучших докладов C++ Russia и плейлист конференции в открытом доступе

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

Этот хабрапост объединяет десять лучших докладов от таких спикеров, как Nicolai Josuttis, Timur Doumler, Андрей Давыдов и многих других.


C++17/20/23, concepts, immutable data structures, concurrency, parallelism, metaprogramming — всё это темы конференции C++ Russia 2019, прошедшей этой весной в Москве. Более шести сотен участников, известные международные спикеры, глубокие доклады. Обратите внимание — доклады такие, что устареют очень нескоро, а применить полученные знания можно хоть сейчас.



Формат таков:


  • Обязательное видео на YouTube
  • Подробное описание доклада на русском языке (со слайдами, если они есть)
  • Краткая биография докладчика

Не стесняйтесь писать комментарии! Кстати, в плейлисте, опубликованном под катом, есть не только топ-10. И мы выключили рекламу на YouTube, так что никто не будет мешать.

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

Реализация физически корректных объемных облаков как в игре Horizon Zero Dawn

Время на прочтение16 мин
Количество просмотров16K
Раньше облака в играх рисовались обычными 2D спрайтами, которые всегда повернуты в направлении камеры, но последние годы новые модели видеокарт позволяют рисовать физически корректные облака без заметных потерь в производительности. Считается, что объемные облака в игры принесла студия Guerrilla Games вместе с игрой Horizon Zero Dawn. Конечно, такие облака умели рендерить и раньше, но студия сформировала что-то вроде промышленного стандарта на исходные ресурсы и используемые алгоритмы, и в настоящее время любая реализация объемных облаков так или иначе этому стандарту соответствует.

UPD. Картинка обновлена. Изменения описаны в конце статьи.


Читать дальше →
Всего голосов 42: ↑40 и ↓2+38
Комментарии18

В этой статье слишком много воды

Время на прочтение9 мин
Количество просмотров41K
«Мы начинаем разработку новой игры, и нам нужна классная вода. Такую сможешь?»


, — cпросили меня. «Да не вопрос! Конечно, смогу», — ответил я, но голос предательски задрожал. «А, еще и на Unity?», — и мне стало понятно, что впереди очень много работы.
Читать дальше →
Всего голосов 175: ↑174 и ↓1+173
Комментарии36

Как реализован рендеринг «Ведьмака 3»: молнии, ведьмачье чутьё и другие эффекты

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

Часть 1. Молнии


В этой части мы рассмотрим процесс рендеринга молний в Witcher 3: Wild Hunt.

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


Они очень быстро исчезают, поэтому лучше просматривать видео на скорости 0.25.

Можно увидеть, что это не статичные изображения; со временем их яркость слегка меняется.

С точки зрения нюансов рендеринга здесь есть очень много сходств с отрисовкой занавес дождя в отдалении, например, такие же состояния смешивания (аддитивное смешивание) и глубины (проверка включена, запись глубин не выполняется).
Всего голосов 48: ↑48 и ↓0+48
Комментарии2

Основы формата GLTF и GLB, часть 2

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

Данная статья является продолжением рассмотра основ GLTF и GLB форматов. Вы можете найти первую часть статьи здесь. В первой части мы рассмотрели с вами зачем изначально планировался формат, а также такие артефакты и их атрибуты GLTF формата как Scene, Node, Buffer, BufferView, Accessor и Mesh. В данной же статье мы рассмотрим Material, Texture, Animations, Skin, Camera, а также закончим формировать минимальный валидный GLTF файл.


image

Material и Texture


С мешем неразрывно связаны материалы и текстуры. При необходимости меш может быть анимирован. Материал хранит информацию о том, как модель будет отрендерена движком. GLTF определяет материалы, используя общий набор параметров, которые основаны на Physical-Based Rendering (PBR). PBR модель позволяет создавать “физически корректное” отображение объекта в разных световых условиях благодаря тому, что шейдинговая модель должна работать с “физическими” свойствами поверхности. Есть несколько способов описания PBR. Самая распространенная модель — это metallic-roughness model, которая и используется по умолчанию в GLTF. Также можно использовать и specular-glosiness модель, но только при помощи отдельного расширения (extenstion). Основные атрибуты материала следующие:


  1. name — имя меша.
  2. baseColorFactor/baseColorTexture — хранит инфомрацию о цвете. В случае атрибута Factor информация хранится в числовом значении для RGBA, в случае Texture — хранится ссылка на текстуру в объекте textures.
  3. metallicFactor — хранит информцию о Metallic
  4. roughnessFactor — хранит информцию об Roughness
  5. doubleSided — имеет значение true либо false (значение по умолчанию) и указывает на то, будет ли меш рендериться с обоих сторон или только с "лицевой" стороны.
Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии10

Основы формата GLTF и GLB, часть 1

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

Что такое GLTF и GLB?


GLTF (GL Transmission Format) — это формат файла для хранения 3Д сцен и моделей, который является крайне простым в понимании (структура записана в стандарте JSON), расширяемым и легко взаимодействующим с современными веб-технологиями. Данный формат хорошо сжимает трёхмерные сцены и минимизирует обработку во время выполнения приложений, использующих WebGL и другие API. GLTF сейчас активно продвигается Khronos Group как JPEG от мира 3D. На сегодняшний день используется GLTF версии 2.0. Существует и бинарная версия данного формата, которая называется GLB, единственное различие которого в том, что все хранится в одном файле с расширением GLB.


Эта статья — 1 часть из 2х. В ней мы с вами рассмотрим такие артефакты формата и их атрибуты, как Scene, Node, Buffer, BufferView, Accessor и Mesh. А во второй статье мы рассмотрим оставшиеся: Material, Texture, Animations, Skin и Camera. Больше общей информации о формате можно найти здесь.
Если в процессе просмотра статьи захочется лично поработать с данным форматом, то можете скачать модели GLTF 2.0 с официального репозитория Khronos на GitHub


image


Проблематика и её решение


Изначально GLTF формат был задуман Khronos Group как решение для передачи 3D контента по интернету и был призван минимизировать количество импортеров и конвертеров, разные виды которых создаются при работе с графическими API.


image

На текущий момент GLTF и его бинарный брат GLB используются как унифицированные форматы и в CAD программах (Autodesk Maya, Blender и т. д.), в игровых движках (Unreal Engine, Unity и прочих), AR/VR приложениях, соц. сетях и т.д.

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

Визуализация времени возрождения Рошана

Время на прочтение56 мин
Количество просмотров51K
В данной статье рассматривается перехват функций графического API на примере DirectX 9 под x64 применительно к игре Dota 2.

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



Disclaimer: Автор не несет ответственности за применение вами знаний полученных в данной статье или ущерб в результате их использования. Вся информация здесь изложена только в познавательных целях. Особенно для компаний разрабатывающих MOBA, чтобы помочь им бороться с читерами. И, естественно, автор статьи ботовод, читер и всегда им был.
Читать дальше →
Всего голосов 134: ↑133 и ↓1+132
Комментарии22

Энциклопедия освещения художника Naughty Dog

Время на прочтение8 мин
Количество просмотров7.4K
Джои Ленц из Naughty Dog подробно рассказал нам об освещении в UE4: о значениях, источниках, световой температуре, освещении в PBR, ресурсах, по которым можно изучать освещение, а также обо многом другом. На официальном сайте Джои polyplant.co есть множество полезных советов о работе с освещением.


Про PBR


PBR (physically-based rendering, основанный на физике рендеринг) благодаря использованию замеренных данных реального мира предоставляет удобные средства для создания материалов/освещения с предсказуемыми, неизменными результатами при разных условиях освещения. Для студий разработки игр это означает, что их художники могут тратить меньше времени на итерации создания контента и его переработку для создания «корректного» внешнего вида в разных уровнях. В свою очередь, это экономит студиям деньги. На освоение PBR художникам, привыкшим к старым методологиям, потребуется какое-то время. Иногда сложнее всего им избавиться от привычки добавления в albedo-текстуры информации об освещении/затенении. Однако как только они освоятся с этим рабочим процессом, то быстро понимают, что им гораздо проще управлять, чем традиционными средствами рендеринга текстур.
Всего голосов 15: ↑14 и ↓1+13
Комментарии1

Простое объяснение алгоритмов поиска пути и A*

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

Часть 1. Общий алгоритм поиска


Введение


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

Цель данной статьи — объяснить поиск пути в целом и A* в частности очень понятным и доступным образом, положив таким образом конец распространённому заблуждению о том, что эта тема сложна. При правильном объяснении всё достаточно просто.

Учтите, что в статье мы будем рассматривать поиск пути для игр; в отличие от более академических статей, мы опустим такие алгоритмы поиска, как поиск в глубину (Depth-First) или поиск в ширину (Breadth-First). Вместо этого мы постараемся как можно быстрее дойти от нуля до A*.
Читать дальше →
Всего голосов 29: ↑29 и ↓0+29
Комментарии11

Как превратить спутниковые снимки в карты. Компьютерное зрение в Яндексе

Время на прочтение10 мин
Количество просмотров31K
Один из главных источников данных для сервиса Яндекс.Карты — спутниковые снимки. Чтобы с картой было удобно работать, на снимках многоугольниками размечаются объекты: леса, водоёмы, улицы, дома и т. п. Обычно разметкой занимаются специалисты-картографы. Мы решили помочь им и научить компьютер добавлять многоугольники домов без участия людей.

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

Читать дальше →
Всего голосов 87: ↑84 и ↓3+81
Комментарии34

Here be dragons: Управление памятью в Windows как оно есть [1/3]

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

Каталог:
Один
Два
Три

Менеджер памяти (и связанные с ним вопросы контроллера кеша, менеджера ввода/вывода и пр) — одна из вещей, в которой (наряду с медициной и политикой) «разбираются все». Но даже люди «изучившие винду досконально» нет-нет, да и начинают писать чепуху вроде (не говоря уже о другой чепухе, написанной там же):
Грамотная работа с памятью!!! За все время использования у меня своп файл не увеличился ни на Килобайт. По этому Фаерфокс с 10-20 окнами сворачивается / разворачивается в/из трея как пуля. Такого эффекта я на винде добивался с отключенным свопом и с переносом tmp файлов на RAM диск.

Или к примеру μTorrent — у меня нет никаких оснований сомневаться в компетентности его авторов, но вот про работу памяти в Windows они со всей очевидностью знают мало. Не забываем и товарищей, производящих софт для слежения за производительностью и не имеющих ни малейшего понятия об управлении памятью в Windows (и поднявших по этому поводу истерику на пол интернета, на Ars-е даже был разбор полетов). Но самое потрясающее, что я видел всвязи с управлением памятью — это совет переместить pagefile на RAM-диск:
Из моих трех гигабайт под RAM disk был выделен один (на тот момент, когда на лаптопе еще была установлена XP), на котором я создал своп на 768МБ ...

Цель данной статьи — не полное описание работы менеджера памяти (не хватит ни места ни опыта), а попытка пролить хоть немного света на темное царство мифов и суеверий, окружающих вопросы управления памятью в Windows.
Читать дальше →
Всего голосов 360: ↑338 и ↓22+316
Комментарии85

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

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

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

Доклады с весенней конференции С++ Russia 2018

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

С 19 по 21 апреля в Санкт-Петербурге прошла конференция С++ Russia 2018. Из года в год организация и проведение становится на уровень выше, что не может не радовать. Спасибо бессменному организатору С++ Russia Сергею Платонову за его вклад в развитие этого направления.
Читать дальше →
Всего голосов 49: ↑47 и ↓2+45
Комментарии3

Курс MIT «Безопасность компьютерных систем». Лекция 4: «Разделение привилегий», часть 1

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

Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3
Лекция 2: «Контроль хакерских атак» Часть 1 / Часть 2 / Часть 3
Лекция 3: «Переполнение буфера: эксплойты и защита» Часть 1 / Часть 2 / Часть 3
Лекция 4: «Разделение привилегий» Часть 1 / Часть 2 / Часть 3
Всего голосов 27: ↑26 и ↓1+25
Комментарии1
1

Информация

В рейтинге
Не участвует
Откуда
Петродворец, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

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

Software Developer, Game Developer
Senior
От 5 000 $
C++
Unreal Engine