SSR (Screen Space Reflections) — проблемы, артефакты (2 стр)
Danilw
у вас там в 1998, может, конечно, и так. но дети, которые у вас ещё не родились, у нас уже совершеннолетние и скринспейс реймарчинг только ленивый себе не пихает для преломлений и отражений.
#17
13:26, 12 окт 2018
>>у нас уже совершеннолетние и скринспейс реймарчинг только ленивый себе не пихает для преломлений и отражений.
чет я не знаю ни 1 игры гдеб это использовалось
насколько я знаю в 2018 решили «убавить обороты» а то мощностей на 120ФПС даже близко не хватает, и такие движки как Юнити и Godot отказываются от многих «фич» оставляя функционал на уровне OpenGL3 чтоб только не тормозило
технодемки то я и сам видел, но в продакшене ведь не используется
#18
13:37, 12 окт 2018
Danilw
> технодемки то я и сам видел, но в продакшене ведь не используется
то есть ты сейчас будешь утверждать, что в продакшене не используются sslr? даже у нас в пое, где нужно поддерживать sm3.0, я писал преломление на screenspace raymarching:

и screenspace shadows на нём же:

если бы можно было ориентироваться хотя бы на mid-end железо, я бы вообще весь glossiness рендерил через sslr, что, собственно, большинство последних игр уже давно и делают.
#19
14:21, 12 окт 2018
>>то есть ты сейчас будешь утверждать, что в продакшене не используются sslr?
я не утверждаю, я интересуюсь, извини если что
>>даже у нас в пое, где нужно поддерживать sm3.0, я писал преломление на screenspace raymarching:
>>если бы можно было ориентироваться хотя бы на mid-end железо, я бы вообще весь glossiness рендерил через sslr, что, собственно, большинство последних игр уже давно и делают.
120/144hz в 2к не дают это делать(мощностей не хватает), насколько я знаю
лично я, в тех сценах что ты показал
сделалбы «блики на воде» банальными градиентами(искажая их в верхнем слое), положение градиента менять от угла/расстояния камеры
и «тени» баланьным бамп-мапингом
картинка былаб 1в1 того что ты показал
такие мелкие детали ведь нужны на 0.01 сек игрок не обращяет на них внимания
и тратить столько сил. круто конечно, но можно и проще
тоже самое и у автора-во первых отражения сделать разрешения 256*256(или ниже) и смазать, отражать текущую текстуру фреймбуфера сцены(или куска нужного) под углом, это даст нагрузку 5-10% на видеокарту, на любой 5 летней видеокарте
#20
15:07, 12 окт 2018
Danilw
> 120/144hz в 2к
волнуют десяток задротов в кибердисциплины.
Ну реально посмотри количество мониторов 2к с 120гц+, там 1% не наберётся.(всего 120гц+ наверное уже наберётся, но основная масса FullHD 🙂 )
#21
15:43, 12 окт 2018
нехочу теоретезировать
в последнем Чел.пауке(спайдермен) все максимально оптимизировано с уклоном в «цветокорекцию» и минимум технически-правильных теней/отражений/шейдеров, очень много кубемапов и все заранее срендерено в текстурки
вот я сторонник такого подхода
всетаки игры это «визуальная часть», и визуально глаз обмануть очень легко, без ущерба для картинки
и во многих случаях «технически правильный рендеринг» с расчетом всех теней/отражений/освещений, будет выглядеть хуже(и непривычнее), чем растягивание заранее нарисованных(художником) текстур под углом(для теней/отражеий/прочего)
картинка с кучей цвето-коррекции(шаг вправа подсвечиваем все в оранжевом тоне, влево делаем голубым, и тд. в зависимости от декорации, цвет подсветки выбран заранее, не автоматически(так почти во всех играх сделано помоему)) и естественных текстур(нарисованных от руки) выглядит лучше чем сцена напиханная шейдерами с правильным рендерингом, это чисто мое скромное мнение
ничего не утверждаю, могу быть не прав
#22
16:04, 12 окт 2018
Danilw, тут вопрос в том, что у тебя за сцена.
Если посмотреть на видео выше — там лоу-поли сцена, причем вид сверху очень ограничивает количество объектов кадре.
Низкая геометрическая сложность сцены позволяет улучшить качество картинки за счет применяемых эффектов, и это вполне оправдано.
Если у тебя коридорная стрелялка или билборд-сцена, где ограничено пространство — там разумно предрассчитать все что можно — лайтмапы, кубмапы и прочее.
Если у тебя открытые пространства, да еще и с динамическими структурам (замки строятся, деревья растут, люди/транспорт движется и т.д.) то тут заранее насчитать все эти структуры не получится, придется генерировать их на лету. Вот тут-то и может быть зарыта собака, если тебе придется на лету генерить пачку кубмап текстур для какой-то сцены джунглей с миллионов эдак 10-ю полигонов (в кубмапу придется рендерить все). Вот тут как раз приходят на помощь экранные техники, которые позволяют отделить геометрическую сложность сцены от освещения. Остальное, типа «шаг вправа подсвечиваем все в оранжевом тоне, влево делаем голубым» это просто как бесплатный бонус к технике.
Блог
Многие из тех, кто только начинает свой путь во Frontend-разработке, не понимают, зачем нужен какой-то SSR или «тонкий рендеринг», потому что поначалу эта технология кажется объёмной и непонятной. На самом деле, от неё есть толк, но полезна она может быть далеко не каждому приложению. ⠀ Технология SSR (Server-Side Rendering) позволяет вам осуществлять пререндеринг вашего приложения непосредственно на сервере. Необходимо это может быть по нескольким причинам: если ваше приложение достаточно объёмное, тогда пользователю сначала будет загружаться просто index.html страница, а уже потом помодульно будут загружаться javascript-файлы, которые и добавят остальные действия на сайт. Кроме UX, есть ещё один важный аспект, который заставляет, например, большинство e-commerce cразу добавлять SSR в продакшне — это SEO. Все SPA приложения не очень хороши в плане SEO (только Google старается перестроить свою поисковую систему под SPA, и у него это получается не идеально). Всем остальным поисковым системам нужны html-страницы, и именно поэтому SSR так востребован. Стоит ли вам его изучать? Если вы уже изучили создание приложений на каком-либо фреймворке, вы можете начать изучать SSR — например, на Vue он встроен во фреймворк Nuxt. В React вам стоит изучить работу ReactDOMServer.
Еще статьи

Gradle — система сборки для Java, Kotlin и C++
Сегодня мы расскажем про систему сборки Gradle, которая широко используется, например, при сборке Java — приложений.
29 апреля 2021

Golang — востребованность и сферы применения
Сегодня мы решили рассказать, что из себя представляет язык программирования Golang — зачем он нужен, и как его можно использовать. Он был придуман в корпорации Google для того, чтобы разрабатывать быстрые и надежные бекенд – приложения (однако создан для того, чтобы писать, а не читать).
24 апреля 2021

Gihub Cli — классная надстройка на обычным Git
Всем привет! Сегодня мы решили рассказать вам про классную надстройку над стандартной Git, которую умеренно рекламирует Gihub – Github-CLI. Поговорим о том, какие у нее возможности, и кому она может быть интересна.
Обман игроков, или как устроены отражения в играх.
Довольно часто разработчики игр пытаются сделать отражения в своих играх как можно более правдоподобными, но знаете ли вы, что с отражениями в реальной жизни они не имеют ничего общего. Практически всегда это обман. Создать эффект отблеска зеркал, переотражения на воде, преломление света от осколков стекла помогают многочисленные ухищрения и упрощения создателей игр. Сегодня нескольких таких методах мы и поговорим.

1. Рендер сцены с нескольких ракурсов. (planar reflections)
Это пожалуй самый распространённый метод создания зеркальных поверхностей в играх. Сцена (видимая игроком часть локации) рендерится (рендер — отрисовка кадра, либо сцены) с нескольких точек, далее уже накладывается на слой, которому нужно создать эффект отражения. Этот процесс добавляет много «гемороя», так как рендер сцены «съедает» очень много ресурсов компьютера, соответственно разработчикам игр требуется дополнительное время на оптимизацию. Довольно часто о таком методе вспоминают только под конец создания проекта, поскольку приоритет стоит у более важных аспектах игры (Например проработка персонажей, создание ландшафта и проработка мира). Пример на скриншотах внизу.


2.Полностью созданная зеркальная комната.
Это был очень популярный способ до начала 2000-х годов. Использовался метод в 99% случаев только для создания зеркал. Он ещё более ресурсозатратен, чем первый способ, зато очень простой в создании. Для начала создаются две абсолютно одинаковых комнаты, выставляется всё те же объекты, те же источники света, вообщем обе комнаты просто дублируются. Самое главное то, что вместо зеркала было просто отверстие в другую комнату, а другая комната просто отражалась по горизонтали. Естественно и сам персонаж в комнате-зеркале spawnился(создавался) и отрисовывался заново. По причинам всё большего нарастания количества объектов в локациях данный метод на сегодняшний день мало кем используется. Пример на скриншотах внизу.


3. Screen-space reflections (упрощённая трассировка лучей).
SSR (Screen-space reflections) появилась задолго технологии RTX от Nvidia, но в целом использует похожий принцип. Однако, в отличие от технологии Nvidia, такой метод задействует трассировку только для тех объектов, которые находятся в поле зрения игрока, остальные же объекты не просчитиваются для экономии ресурсов ПК. Это логично, так как технология впервые появилась в 2011 году, и представила её компания Crytek в своей Crysis 2, а после и в Crysis 3, в то время мощность видеокарты просто не позволяла разработчикам рендерить лишнее. Сейчас же такая технология присутствует во всех современных «движках» («движок» — ПО для создания игры) таких как Unreal Engine 4, Unity, CryEngine и других. Пример на скриншотах внизу.


4. Qube maps (кубическая карта).
Способ очень популярный, хотя не без своих изъянов, таких например как отсутствие игрока в отражении, поскольку кубическая карта «prerender» объект («prerender» объект — объект, отрисованый до присутствия персонажа в локации) а также большая степень размытия, из за чего qube maps нельзя использовать для зеркал. Кубическая карта состоит из шести граней куба, у которого на каждую грань «накладывается» своя текстура. Каждую текстуру можно увидеть только по отдельности, смотря в одно из шести направлений. Определяется такая текстура в зависимости от того, куда смотрит центральная точка на экране игрока. Метод используется как в настоящее время, так и в недалёком прошлом, так как не требует большого количества ресурсов ПК. Саму технологию представила Nvidia в 1999 году вместе со своей видеокартой GeForce 256. Примеры на скриншотах.



5. RTX (Ray Tracing). Трассировка лучей от Nvidia.
Многие считают, что RTX просчитывает тени, источники света и отражения также, как и в реальной жизни, но это не так. Ray Tracing это тоже лишь имитация, но основанная на природных и физических явлениях. Вообще в целом RTX — это целый набор различных технологий, таких например как: создание динамических теней; реалистичных отражений; реалистичных источников света, а также степень их преломления от объектов (перечислена лишь малая часть, на деле их гораздо больше). Благодаря тому, что в видеокартах серии RTX имеются RT ядра и достигается высокая производительность и приемлемый FPS, так как нагрузка на просчёт отражений ложится на них, а не на видеоядро. На самом деле, такой метод может работать и на видеокартах линейки GTX (пример: GTX 1080, 1070), но производительность будет очень низкой. Немного о том, как работает сама технология: это метод комбинированной отрисовки кадра, где отлеживается траектория лучей света во всех точках пространства. Он даёт возможность определить степень освещённости, степень отражения и преломления объектов. Даже сейчас, в 2020 году использовать «на полную» RTX не получается, так как мощности нынешних видеокарт всё ещё не хватает, но будем надеяться на лучшее. Примеры RTX на скриншотах внизу.



6. iRAY. Трассировка лучей на GTX видеокартах.
iRAY на самом деле редко используется непосредственно в играх, зато очень часто использовалась (пока на замену не пришёл RTX) в создании 3D моделей для этих самых игр. О том как работает «Nvidia iRAY» достаточно мало информации, но принцип схож с трассировкой лучей на видеокартах 2000 серии, хотя и с большим количеством упрощений и послаблений (так как до недавнего времени работала только на GTX видеокартах, поддержку RTX добавили в прошлом году). Примеры на скриншотах ниже (с помощью него созданы источники света, отражения на полу на первом скриншоте и в окнах на втором скриншоте).


7.Global illumination и shadow map (глобальное освещение и карты теней).
Технология GI (GI — global illumination (глобальное освещение)) очень давно используется в играх для создания лучей света и отражения их от поверхностей, а также преломления. Технология в целом связана не с отражениями, а с построением и правильным прелоилением лучей света, однако без этой технологии многие методы создания отражений просто не работают. Само понятие — глобальное освещение включает в себя множество технологий, (например: Light Propagations Volumes(LPV); Distance Field Ambient Occlusion(DFAO); Distance Field Global illumination(DFGI); Screen Space.) но практически все они базируются на построении лучей света. DFAO например работает (в Unreal Engine) только от света от неба, то есть солнца, другие источники света игнорируются. Метод позволяет создать более реалистичный свет и немного упростить разработчикам процесс создания проекта. До этой технологии применялось только прямое освещение, но оно выглядело весьма не реалистично, с приходом же глобального ситуация стала на порядок лучше. Также прямое освещение работает статично и не перестроится для игрока если потребуется (Глобальное же освещение работает динамически). Но метод не лишён недостатков, один из таких — гораздо бОльшая затрата времени на «render» сцены.
Shadow map (Shadow map — карты теней) используются как нетрудно догадаться для создания теней в играх. (Вообще GI и Shadow Map мало связаны друг с другом, однако решил объединить в один пункт, так как мало что интересного можно написать). Сам метод очень старый (1978 года выпуска), и до сих пор несмотря на эволюционные изменения базируется всё на тех же принципах, что и много лет назад. Как же он работает? Помимо карты нормалей и основной текстуры для 3D моделей рисуется ещё и карта теней, её вы и видите когда какой-нибудь объект отбрасывает тень. Самое главное достоинство в том, что такой метод позволяет наблюдать за тенью с разных ракурсов и она динамически перестроится для игрока. (Для построения таких карт используются например такие технологии: Distance Field Soft Shadows (DFSS); Cascaded Shadow Maps(CSM)). Карты теней неразрывно связаны с Qube Maps, так как работают во взаимодействии друг с другом, слой отражений кубической карты может накладываться на карту теней (Часто разработчики «играют» с прозрачностью тех или иных слоёв), тем самым получая более реалистичную графику. Примеры GI и Shadow map на скриншотах ниже.


8. Дополнительная камера.
Этот способ довольно редко используется в играх, так как требует очень много ресурсов и в целом он очень похож на способ #1, однако он очень прост в реализации, поэтому его используют в основном неопытные разработчики. Суть в том, что помимо камеры игрока (через неё вы видите всё, что происходит на экране) создаётся ещё одна с таким ракурсом, чтобы кадр для последующего отражения получился естественным. Далее на полученный кадр накладываются эффекты (самый частый из них это размытие) и для экономии ресурсов понижается разрешение (но даже с пониженным разрешением ресурсов требуется слишком много). Кроме высокого потребления ресурсов ПК, ещё одним недостатком является статичность кадра, то есть где бы ваш персонаж не встал, отражение не перестроится (хотя через «множество костылей» это можно реализовать, но это очень глупо, поскольку есть способы лучше, тот же SSR). Примеры на скриншотах внизу.


Сегодня вы узнали для себя чуть больше об отражениях в играх, надеюсь вы не жалеете о потраченном времени на прочтение, я же в свою очередь за уделённое мне время вас благодарю. (Можете также посмотреть новый блог о самых популярных игровых условностях у меня в профиле, мне будет приятно если именно вы его прочитаете)
ССЫЛКИ НА ВСЕ ИСТОЧНИКИ
Герои SSR
Вся доступная информация о редких специальных героях. Как их получить, сколько стоят, их параметры и скиллы. Данные о неопубликованных SSR-юнитах, которые ещё в разработке.
Общие данные о SSR-героях в Dota 2 Auto Chess
Аббревиатура SSR расшифровывается как Special Super Rare, то есть «специальный и очень редкий». И это неспроста, шанс получения такого героя в игре равен 1 : 100 000 000 (один к ста миллионам).
Слово «специальные» в названии они получили, так как они являются модифицированными версиями обычных юнитов — имеют другое заклинание. А остальные параметры, такие как здоровье, показатель урона, скорость и дальность атаки, броня и прочее, соответствуют такому же обычному герою 3 уровня (★★★).
SSR-юниты имеют те же самые расу и класс, что и стандартные герои. При учёте расовых и классовых бонусов они также считаются как не-SSR, то есть если поставить очень редкую версию героя и обычную, то они будут учитывается как 2 копии одного героя — например, при установке на боевом поле Hellfire и отобразится на экране, что у игрока есть 1 (один) и 1 (один) .
Чтобы получить возможность увидеть такого убер-героя у себя в магазине, нужно иметь, как минимум, курьера уровня 7 или выше. При этом шанс получения специальных версий не повышается для курьеров 8, 9 и 10 уровней.
Вместо звёзд (★★★) в конце названия героя красуется корона (♕).
- Corruption,
- Hellfire.
Цена подобных существ в несколько раз превышает стоимость обычного юнита, даже уровня Epic («Эпичный») за 5 . У каждого из них своя цена, например, сейчас — 10 и 15 .
Necrophos ♠ Corruption

Скорость атаки: 141 (1,20 сек)
Урон: 200-240
Дальность атаки: 400
Заклинание: Reaper’s Scythe
Стоимость: 10
Reaper’s Scythe — убивает любое существо на боевом поле. Время перезарядки — 10 секунд.
Интересный факт: заклинание работает как на вражеских героев, так и на нейтральных существ. Однако есть исключения — Monster Nian (раунд 45) получает 50% урона от его здоровья и Roshan (раунд 50) получает 25% урона от его здоровья при наложении данного заклинания.
Chaos Knight ♠ Hellfire

Скорость атаки: 130 (1,30 сек)
Урон: 160-440
Дальность атаки: 205
Заклинание: Phantasm
Стоимость: 15
Phantasm — вызывает 3 иллюзии героя, наносящие 100% урона и получающие 100% урона. Время перезарядки — 30 секунд.
Интересный факт: иллюзии всегда появляются со 100% здоровьем независимо от текущего здоровья героя и, к сожалению, все бонусы от предметов на данные иллюзии не действуют.
Shadow Shaman ♠ Gemforged

Скорость атаки: . (. сек)
Урон: . -.
Дальность атаки: .
Стоимость: 8
Добавлен в код тестовой версии 18.04.2019 года, но без параметров героя и указания на заклинание.
Герои в разработке
Все данные, указанные ниже найдены в коде custom-игры как в рабочей версии, так и на тестовом сервера. Они могут быть изменены или вообще удалены в будущем.
Enigma ♕

Скорость атаки: 113 (1,50 сек)
Урон: 180-220
Дальность атаки: 400
Заклинание: Black Hole
Стоимость: 15
Juggernaut ♕

Скорость атаки: 154 (1,10 сек)
Урон: 260-280
Дальность атаки: 205
Стоимость: .
Sand King ♕

Скорость атаки: 121 (1,40 сек)
Урон: 45-60
Дальность атаки: 205
Стоимость: .
На данный момент в коде игры у SSR параметры здоровья и урона почему-то очень низкие по отношению к другим SSR-юнитам. Скорее всего, это будет изменено.
Lich ♕

Скорость атаки: . (. сек)
Урон: . -.
Дальность атаки: .
Заклинание: Evil Sacrifice
Добавлен в код тестовой версии 24.04.2019 года. Подробностей о действии заклинания Evil Sacrifice пока нет.