Pull to refresh
5
0
Иван @iushakov

Программист

Send message

SwiftUI AlignmentGuide

Level of difficultyMedium
Reading time8 min
Views1K

Всем привет, сегодня я расскажу про верстку в SwiftUI с помощью AlignmentGuide.

AlignmentGuide позволяет сделать специальное выравнивание внутри View. А точнее сказать, инструмент позволяет строить направляющие для выравнивания в контейнерных типах View (HStack, VStack, ZStack) между родителем и его потомками.

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

Новая модель от Nvidia для генерации 3D объектов

Level of difficultyMedium
Reading time5 min
Views4.7K

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

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

Сегодня я хочу рассказать вам про XCube - новый подход от Nvidia к генеративному 3D, в котором для преодоления этих ограничений используются подход Sparse Voxel Hierarchies. В отличие от традиционных моделей, XCube легко масштабируется от отдельных объектов до обширных открытых сцен, достигая уровня детализации с разрешением до 1024^3 вокселей - и при этом сохраняя эффективность вычислений. Этот метод не только повышает геометрическую сложность создаваемых моделей, но и поддерживает редактирование пользователем и универсальную генерацию атрибутов.

Читать далее
Total votes 3: ↑2 and ↓1+1
Comments1

Ornament-8. Аналоговый функциональный генератор поведения. Часть 1

Level of difficultyEasy
Reading time10 min
Views2.9K

В 2019 году я ступил на путь разработки электроники. Моим первым устройством является Орнамент-8. Не судите строго.

- Орнамент-8 это устройство, способное реализовывать сложные конечные автоматы.
- Переход конечного автомата из одного состояния в другое определяется патчем, соединением входов и выходов ячеек Орнамента.
- Каждая из 8 ячеек Орнамента представляет собой моновибратор.
- Если моновибратор запустить, он будет удерживать высокое состояние в течение периода времени, задаваемого потенциометром TIME.
- В момент перехода моновибратора (далее ячейка) из высокого состояния в низкое происходит генерация триггера.
- Этот триггер способен запустить любую другую ячейку Орнамента, кроме самой себя. Для этого необходимо соединить тригерный выход с тригерным входом.
- Если триггер приходит на вход уже активной ячейки, он не поглощается, а поступает на тригерный выход PASS>. Этот выход реализует логику: если ячейка активна -> пусть триггер активирует другие ячейки.
- Помимо тригерных входов и выходов каждая ячейка имеет аналоговый выход, сигнал на котором пропорционален времени активации ячейки от 0 до 1 в зависимости от параметра TIME. Если моновибратор сравнить с наполняющимся сосудом, то аналоговый выход (CV>) показывает уровень жидкости в этом сосуде.
- Каждая ячейка имеет вход для управляющего напряжения (>CV). Приложенное к этому входу напряжение управляет коэффициентом, увеличивающим значение параметра TIME установленного потенциоментром. Приложение управляющего напряжения к >CV можно представить как растяжение времени в системе координат ячейки.

Кажется, что Орнамент-8 это какой-то странный артефакт, упавший из космоса. Зачем он нужен? Что с ним делать? Кто и почему придумал такую странную систему правил?

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

Читать далее
Total votes 24: ↑24 and ↓0+30
Comments13

Возможности С++: от стандартных алгоритмов до диапазонов (Ranges)

Level of difficultyMedium
Reading time10 min
Views6.6K

Привет, Хабр! Меня зовут Николай, я разработчик С++ в SimbirSoft. В предыдущей статье мы с вами рассмотрели применение стандартных алгоритмов в повседневном коде и их преимущества над обычными циклами. В продолжение этой темы мне хотелось бы рассказать о недостатках стандартных алгоритмов и способах их решения с помощью библиотеки Ranges. Практические примеры я разбил на три части: в первой показаны обычные циклы, во второй — вариант написания с помощью алгоритмов (но не всегда можно это сделать), в третьей – с использованием Ranges. Этот материал будет полезен тем разработчикам, которые хотят применять новые стандарты и подходы у себя на проектах.

Читать далее
Total votes 6: ↑5 and ↓1+7
Comments6

У меня нет конструктора, но я должен инициализироваться

Reading time13 min
Views10K

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

Главная ошибка была в том, что ты в это вообще ввязался — в этом никаких сомнений.

Ещё когда я впервые взялся проходить курс по C++ несколько лет назад, меня учили, что, если я не предоставлю собственного конструктора, то компилятор сам подберёт ему замену — своего рода конструкторы, действующие по умолчанию. Я решил подробнее в этом разобраться, особенно меня волновали случаи, которые выглядят примерно так:

Читать далее
Total votes 15: ↑13 and ↓2+21
Comments16

Дайте мне 15 минут, и я изменю ваш взгляд на GDB

Level of difficultyMedium
Reading time6 min
Views14K

Материал подготовлен на основе выступления с CppCon 2015 "Greg Law: Give me 15 minutes & I'll change your view of GDB" (доступно по ссылке ). Многие моменты я изменял и корректировал, поэтому учтите, что перевод достаточно вольный.

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

В статье будет рассматриваться отладка кода на C в ОС Linux.

Читать далее
Total votes 47: ↑45 and ↓2+63
Comments16

Первый легендарный мобильный GPU: каким был PowerVR MBX Lite? Пишем игру-демку про «жигули» с нуля

Level of difficultyMedium
Reading time22 min
Views5.8K
image


Пожалуй, многие из вас помнят, какими были мобильные игры до и после выхода первого iPhone. В начале 2000-х годов, ещё до появления яблочного смартфона, игры для телефонов в основном были весьма интересными, но тем не менее, достаточно простенькими с точки зрения графики и реализации в целом. После запуска AppStore в 2008 году, на iPhone начали выходить самые разные красочные, невиданные раннее по уровню детализации и проработке 2D и 3D игры. Но появление таких игр — отнюдь не заслуга Apple, а относительной малоизвестной компании PowerVR (подразделение Imagination Tech), которая смогла разработать на базе видеочипа Dreamcast и внедрить один из первых действительно массовых мобильных 3D-ускорителей, имя которому — PowerVR MBX! Сейчас мы с вами привыкли, что почти любой дешевый смартфон может отрисовывать графику уровня PS3 в 1080p, а то и выше, но когда-то даже уровень PS2 был роскошью… Сегодня мы с вами: узнаем предысторию появления аппаратно-ускоренной 3D-графики на телефонах, рассмотрим такую фирменную фишку PowerVR, как тайловый рендеринг, а в практической части статьи нам поможет легендарный КПК Dell Axim X51v с MBX на борту, под который мы напишем 3D-игру «про жигули» с нуля! Интересно? Тогда добро пожаловать под кат!
Читать дальше →
Total votes 49: ↑48 and ↓1+60
Comments26

Как создавали Корсаров

Level of difficultyEasy
Reading time12 min
Views11K


«Твой двадцатый день рождения
отмечал я в Картахене;
двадцать душ зажёг как свечи
доброй порцией картечи!»


Андрей Корф, «Порт-Ройял».

Что вам приходит в голову, когда вы слышите про «русские видеоигры»? «Атомик Харт»? Смута? Онлайн залипалки «Вартандер» и «Мир кораблей» с танками? Множество локальных инди? Негусто… А давайте я вам расскажу про настоящую российскую игру ААА-класса, которая добилась мировой известности, была очень тепло встречена на родине и на Западе, получила множество продолжений разной степени удачности (отголоски этих продолжений выходят даже сейчас, спустя почти четверть века после релиза!), и зародила, по сути, отдельный жанр, став законодателем целого направления в мировом игростроении? Даже современные игры, вольно или невольно, сравнивают с ней. Ладно, вы всё равно прочитали название статьи, так что хватит нагнетать драму — дамы и господа, «Корсары: Проклятье дальних морей» («Sea dogs» по-заморскому) на страницах Хабра!
Читать дальше →
Total votes 43: ↑40 and ↓3+52
Comments19

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

Reading time2 min
Views39K

Наткнулся недавно на книгу "1100 words you Need to Know" by Murray Bromberg and Melvin Gordon" (для уровня C1-C2). Она легко гуглится в Яндексе.

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

Читать далее
Total votes 16: ↑13 and ↓3+13
Comments18

3D Graphics Rendering Cookbook

Reading time2 min
Views7.5K

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


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

Вопросы на собеседовании для программистов компьютерной графики

Reading time4 min
Views11K

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

Недавно я видел в твиттере довольно много дискуссий о хороших и плохих вопросах на интервью. Некоторые из этих вопросов выглядят полезными.

В основном, наиболее интересные из них выглядят открытыми. Они могут привести к весьма большим и разветвленным обсуждениям или даже не имеют «‎верного» ответа. В конце концов, вам, скорее, нужно не узнать ответ (он всё равно будет 42), а увидеть процесс решения проблемы и/или оценить общие знания и понять собеседуемого.

Ниже я приведу примеры, которые я использовал несколько раз, и они ориентированы на программистов графики с некоторым количеством опыта.

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

Еще один пост о синхронизации в Vulkan

Reading time21 min
Views5.2K

Так, я наиграл в Fire Emblem: Three Houses уже порядка 160 часов в течение последней пары недель, думаю пришло время вновь побыть интернет-экспертом.

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

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

Декомпозируем игровую графику: технологии под капотом современных игр

Reading time19 min
Views8.9K

С момента релиза War Robots прошло уже более 7 лет. В 2014 году мобильный игровой рынок был гораздо скромнее, чем сейчас, а девайсов, которые могли без проблем тянуть трехмерную игровую графику, — и того меньше. Несмотря на то, что уже случилась шейдерная «революция», и на замену графического конвейера с фиксированным функционалом (fixed-function pipeline) пришли вершинные и фрагментные шейдеры, возможностей для создания качественной картинки уровня настольного компьютера было явно недостаточно.

На старте разработки оригинальной игры фактически единственным среди графических API на мобильных платформах (Android, iOS) был OpenGL ES 2.0. Результат его эволюционного развития, OpenGL ES 3.0, был только-только утвержден, и на рынке даже не было устройств, которые бы его поддерживали. Таким образом, графика в Walking War Robots была основана на технологиях и возможностях, предоставляемых именно OpenGL ES 2.0. 

У War Robots тех времен был вполне себе типичный графический стек, поддерживающий один направленный источник света и способный рассчитать от него затенение с учетом весьма простой системы материалов. Со временем графика в игре улучшалась и совершенствовалась, но довольно быстро ее развитие стало упираться ограничения OpenGL ES 2.0. Наступил момент, когда потенциал эволюционного развития был достигнут, и без комплексного революционного подхода рывок в графике уже не представлялся возможным. В тот момент мы и приняли решение, что игре нужен ремастер.

Читать далее
Total votes 21: ↑20 and ↓1+24
Comments14

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

Reading time16 min
Views15K

Всем привет. Меня зовут Ширшов Владимир и я техлид проекта 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

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

Reading time16 min
Views19K

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

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

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

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

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

Агрегаторы вакансий для разработчиков: сравниваю 10+ самых популярных

Reading time7 min
Views8.8K

Только самый-самый ленивый человек не написал о том, как искать работу на удаленке. Большинство советов про то, как откликнуться, пройти собеседование и так далее. Меня интересует другое — где вообще удобно искать вакансии. Составил свой рейтинг, протестировав 10 самых известных агрегаторов.

К рейтингу
Total votes 5: ↑4 and ↓1+4
Comments6

Теория инвестиций для начинающих, часть 4

Reading time28 min
Views51K
Франс Франкен Младший. Смерть и скупец. XVII в. Галерея Wellcome, Лондон.

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

Краткое содержание четвёртой части:
  • как жить в мире, в котором среднестатистический инвестор паевого фонда получает доходность хуже рынка (купить рыночный портфель, то есть индекс);
  • какие инструменты позволяют купить индексный портфель в один клик (биржевые фонды, они же ETF'ы);
  • насколько эффективным может быть рынок, и как быстро новая информация отражается в цене акций (эффективность пугающая: рынок расследует космические катастрофы за несколько минут);
  • если не покупать индекс, то можно ли заработать на фондовом рынке по-другому (можно, если вы помогаете остальным преодолевать рыночные трения);
  • как автор инвестирует собственные деньги и копит на пенсию (всё скучно: индексные фонды).
Читать дальше →
Total votes 40: ↑40 and ↓0+40
Comments64

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity