Магия Parallax Mapping'a
Всего лишь 1 плоскость + текстура. И особый алгоритм смещения текселей с дорисовкой динамичесиких теней.
Всего лишь 1 плоскость + текстура. И особый алгоритм смещения текселей с дорисовкой динамичесиких теней.
Интересно, насколько это ресурсозатратно для рендеринга по сравнению с обычной многополигональной моделью.
О_О 4.5 ляма? Кто в здравом уме будет создавать такую модель? Как-то не очень практично выглядит...
округлости и трубочки требуют много полигонов, чтобы сделать их действительно круглыми при ближайшем рассмотрении.
Это понятно. Но, если рассматривать геймдев, то никто не будет использовать подобный способ, ибо 4.5 ляма - это целая не маленькая локация, а не кусок текстуры ;D
Здорово, конечно, что развиваются в подобном направлении, но пока что это выглядит не юзабельно на практике.
так 4,5 млн полигонов никто не использует напрямую в игре, модель создавалась для ретопологии, в описании написано же, что речь про текстуру на плоскости
Ну все равно ведь надо эти 4,5кк полигонов сделать, чтобы получилась текстура. Он про трудозатраты, а не ресурсозатратность непосредственно во время отображения.
Вы, видимо, не очень понимаете как происходит создание персонажей и моделей в целом, как и про инструменты моделирования.
Сначала создают модель с высокой полигональной структурой, после копируют модель и оптимизируют до низко полигональной, с hi-poly переносится информация (запекается) на low-poly. В итоге низко полигональная модель движком считается быстрее, а текстура на ней проецируется с высоко полигональной. Запекание нормалей
Сейчас изучаю Opengl 4 ... я даже представить себе не мог НАСКОЛЬКО это правда.
Перемножение матриц искажает геометрию, чтобы создать иллюзию глубины и перспективы, пляски с текстурами превращают полтора полигона в ультрадетальный материал, а ты смотришь и видишь почти кинематографичную сцену.
Наверное графика для меня никогда больше не будет прежней.
Будто в театре играет инвалид без рук, немой, поёт и пляшет одновременно за 30 человек и при этом фальшивит в одной ноте. А зрители хлопают...
Вопрос некорректен. Если бы не было оптимизации - вся эта пиздоблядия показывала бы 0.5-2 фпс.
Это еще достижение современного железа и науки (да, там немало науки запрятано). Не будь этого всего, видео вообще не получилось бы - было бы чрезвычайно медленное слайд-шоу.
Ну, либо пришлось бы откатывать качество на пару десятилетий назад - в то время тоже графику тоже не от полного незнания делали такой, а просто техника не позволяла делать лучше, сохраняя хоть подобие скорости.
В основном от количества объектов на экране и больших разрешений.
Все оптимизировано до отказа, но почти каждый пиксель на экране все же требует вычислений по этим хитрым алгоритмам.
Потому что они оптимизируют игру для обычного компьютера с двумя i7 и четырьмя топовыми видюхами в SLI, в котором еще есть чуть-чуть оперативной памяти (128 Gb DDR4).
давно хотел спросить, расскажите зачем програмировать в open gl. для чего это нужно? вот допустим какая то группа девелоперов делает игру на каком нибудь движке. В каком случае они начинают лезть из движка в сам опен жл или директ 3д?? для чего это нужно, если там уже все настроено? гуглил. внятного ответа не нашел.
Это довольно просто понять если почитать парочку таких статей:
https://habrahabr.ru/post/309844/
https://habrahabr.ru/company/ua-hosting/blog/271931/
Само собой человеку не особо увлеченному этим делом глубинное вчитывание смысла не придаст, можете просто картинки посмотреть.
Суть в том, что игры действительно по разному рисуют картинку.
Вот довольно простой пример:
В шутерах вроде DOOM или CS:GO уровни часто представляют собой закрытые комнаты, которые легко разбить на зоны и для каждой маленькой зоны уровня сохранить кубическую текстуру.
В GTA весь мир большой и бесшовный, разбить его на сегменты можно, но сохранять тестуру для каждого из них все равно затратно.
По этому в GTA эта текстура создается на лету, а в DOOM предположительно подгружается с диска.
Если интересно для чего такая текстура нужна, в GTA для создания горизонта и неба, отблисков и коррекции цветов. В DOOM например для дешевых отражений (в статье смотри карту статичных отражений).
Это один простой пример, но на самом деле даже если не вдаваться в такие подробности есть огромная куча параметров которые можно просто настроить и уже изменить внешний вид игры.
Движок в некоторых случаях - вообще излишество.
Потом, когда базовый функционал движка не дает необходимой свободы - что следует сделать: порезать игру, чтобы вместить в ограничения движка (неизбежно имеющиеся), или для движка написать собственное расширение?
И сами движки откуда берутся - осенью с деревьев собирают?
Очень похоже на рассуждения типа "а зачем изучать ... - ведь есть же Java!"
Да там не только нормалей запекание, учитывание нестабильность макса. Буквально этой ночью полчаса провёл в инете в поисках решения одной проблемы, которая оказалась глюком и вылечилась перезапуском проги.
Более того скажу, что иногда при рендере в текстуру, макс может выдать тебе корявый результат, в то время, когда сохраненная копия текстуры будет нормально. Мой тебе совет, бросай нафиг макс, сам перешел недавно с Макса на Модо, и безмерно счастлив
Кто-то невнимательно читал -_-
Эта штука как раз и нужна, чтобы в игре не рендерить кучу полигонов - делаешь модель, запекаешь текстуру и готово.
В чем проблема спроектировать текстуру в 4,5М полигонов и в игре рендерить в одну? Где здесь не юзабельность на практике?
если ты спроектируешь текстуру в 4,5 млн полигонов, а потом отрендеренную картинку воткнёшь в игру на плоскость, эта плоскость не будет создавать иллюзию объёмности.
смысл маппинга именно в реагировании на динамическое освещение (что и создаёт иллюзию объёма) - отбрасывание теней более высоких деталей на элементы в низине, блики глянцевых поверхностей, нет бликов на матовой шагрени.
у тебя будет красивая, но безжизненная картинка. которая может ещё бы прокатила в каком-нибудь 2005-м году в игре без динамического освещения.
пля. простыми словами.
картинка должна реагировать на изменение света, потому к плоской текстуре идёт "инструкция", как ей реагировать, как отражать, как затеняться.
текстура БЕЗ "инструкции" будет мёртвой. с какой бы стороны не находился источник света (солнце, фонарик) текстура будет выглядит абсолютно одинаково, т.е. мёртвой, плоской.
т.к. наш мозг определяет объём именно по теням.
потому текстура рисуется без теней вовсе, а потом прикладывается к ней (та самая) "инструкция" как реагировать на свет.
это я про bump mapping рассказал.
https://developer.valvesoftware.com/wiki/Bump_map
параллакс чуть о другом и посложней, но всё это об одном и том же - как сохранить ресурсы компа и добиться реалистичной картинки.
и что? В результирующей игре все равно используется текстура, другая текстура, которая показывает что выше, что ниже. И все. Где здесь не юзабельность на практике?
если ты в игре отдашь 4,5 млн полигонов на одно лишь подкапотное пространство (на видео двигатель же вроде какой-то, не?), то сколько всего ты отдашь на всё остальное? на модельку игрока - на его волосы, прыщики, ранки, ссадинки, складочки одежды, следы от ботинок, на мир вокруг - на ямочки на земле, возвышенности, кучки, камешки, листочки с прожилками, итд итп итд итп...
и есть несколько источников света (естественные и искуственные), есть несколько источников отражения света (лужи, стёкла домов).
рендеру (движку) нужно просчитать каждый полигончик, как он соотносится к источникам света, отбрасывает ли он тень, в тени или на солнце. и так ПРО КАЖДЫЙ ПОЛИГОН, про каждый "пиксель" его краёв.
и всё равно нужно задавать параметры каждого объекта на его возможность пропускать свет и/или отражать.
да ты ебанись, ближайшие лет 10 точно никогда не сможешь отрендерить подобное в риал-тайме на простом домашнем (пусть и самом топовом) ПК. да и на сверх-мощных кластерах в Голливуде такое не делается риал-тайм. один кадр может рендериться несколько минут. а тебе для комфортного видео нужно их хотя бы 30, а лучше бы 60.
а кому нужны игры, которые ни у кого не пойдут?
а как тогда делать игры, ведь и красоты хочется навести, кинематографичности и чтобы компы обычных Вась это тянули?
вот и используют разные технологии для иллюзии, для обмана.
некая кухня технологий, чтобы получилось и вкусно и доступно.
проще нарисовать текстуру плоскую, воткнуть в игру ОДНИМ-ДВУМЯ полигономи, а потом маппингом дать ей свойства затеняться так или иначе, чтобы твой комп мог это потянуть.
> проще нарисовать текстуру плоскую, воткнуть в игру ОДНИМ-ДВУМЯ полигономи, а потом маппингом дать ей свойства затеняться так или иначе, чтобы твой комп мог это потянуть.
Я господину в комментарии #comment_75620426 и говорю, что рендерить в реалтайме 4,5М полигонов никто не будет. Но пререндерить в две текстуры - легко. И спрашиваю его - где не юзабельность на практике?
этот господин, вроде, я же.
я тебя вообще нихера не пойму.
так ты о чём говоришь то? про какую неюзабельность? про какую практику?
неюзабельность - отдавать много ресурсов на отрисовку какого-то одного сраного двигателя на 4,5 млн полигонов, когда в игре ещё дохера чего другого? это мы обсудили.
почему бы не пререндерить крутую текстуру и потом одной jpg-шкой не натянуть на полигон?
текстура НЕ ДОЛЖНА СОДЕРЖАТЬ ТЕНИ. представь, что ты решил сделать бочку. обычную такую железную бочку для бензина, например.
текстура будет выглядет, будто ты трёхмерный объект расправил в плоскость, металл разрезал и выпрямил под прессом в идеаульную плоскость, будто бумага лежит на столе.
и вот ты её нафотошопил, она в высоком разрешении у тебя. добавил тень от рёбер жёсткости, красивые такие тени, мягкие...
только тени на текстуре куда падают? вниз? а если в игре солнце не в зените? если оно сбоку? а тень вниз? твоя бочка безжизненная. она смотрится чуждо по сравнению с другими объектами. а, включив фонарик, тень не должна ли пропасть? но она у тебя уже нарисованная, пререндеренная!
или как. ты сделал старую бочку. на ней потёртости, ржавчинки, даже царапины есть и замятости.
ты будешь моделировать эту вмятину? или проще картой нормалей задашь ей "инструкции" по-другому затеняться?
а как глянцевая краска должна реагировать на свет, а как ржавчина?
блики и тени не рисуются на текстуре. они задаются картами нормалей, идут в комплект с текстурой, но не на самой текстуре рендерятся заранее.
потому что блики и тени зависят от источника света и от местоположения объекта. если у тебя источник света один и бочка намертво приклеена к полу - можно и текстуру пререндерить. и добро пожаловать в конец 90-х, начало 2000-х, когда не хватало технологических мощностей думать о всяких динамических источниках света и всяких там реагированиях.
но мы в 2016. сейчас и смена погоды, и всякие леволюшны, и смена дня и ночи, и озаряющие взрывы, и поглощающие чёрные дыры в играх. и мимо пролетающая ракета из рпг, и фары автомобиля/прожекторы вертолётов, и просто хочется поморгать фонариком, а наша бедная бочка в свою очередь будет бликовать и оттеняться своей каждой потёртостью/ржавчинкой/ссадинкой/царапкой/вмятинкой, будто на самом деле из 4,5 млн полигонов ОТ КАЖДОГО ИСТОЧНИКА СВЕТА.
хотя на деле - это обычный цилиндр с плоской текстурой и картой нормалей.
P.S. плоская - потому что без теней. сама игра должна эту тень, исходя из сложившейся ситуации, просчитать и отрисовать.
ибо объём и приближённость к объекту наш мозг определяет исходя из тени.
отсюда и столько "иллюзий".
что? в думе никогда параллакс маппинг не использовался, разве что через моды только. ты с обычным нормал маппингом путаешь.
Читал что в последнее время так игры и делают. Создают модель на несколько млн. полигонов, в саму игру идет упрощенная модель на несколько сотен тысяч полигонов, а высокополигональную модель используют для создания parallax mapping текстур. Ну как в последнее время, со времен Doom 3.
однако в разы медленнее чем нормальная лоуполька+нормалмапа, а результат будет слабо отличим
Нормалями там будут сделаны заклепки, гофра и прочее тиснение. И это будет намного менее ресурсоёмко.
Грамотная адаптивная тесселяция чуть медленнее, но качество заметно лучше, особенно на границах полигонов.