-
Публикаций
1 198 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Тип контента
Профили
Форумы
Блоги
Календарь
Новости
Моды
Весь контент Deathman
-
В последний раз в этом году Deathman на связи и в этот раз я расскажу про то как работают объекты с прозрачностью в 3D графике и очередной крутой технологии в N.S.P.X: The Final. Начнем с абстрактного примера: У нас есть необходимость сделать дерево с листвой, но мы ограничены в вычислительных возможностях, так как дерево будет использоваться не для фильма, а для игры, и мы не можем сделать каждую ветку и листочек на нем отдельным набором полигонов. Как быть? А поступить можно следующим образом - можно замоделить полноценную ветку и запечь ее в текстуру и вместо ветки использовать текстуру ветки. Но тут другая проблема - текстура ветки имеет фон, и если мы наложим текстуру прямо так то это будет выглядеть как картонка с рисунком. Как убрать фон? А решений очень много, но в одном они все схожи. Мы можем взять и сделать отдельную карту, по которой мы будем "обрезать фон" - эта карта называется "альфа" или более корректно Opacity map, то есть карта прозрачности. Суть этой карты следующая - чем ярче в диапазоне [0; 1] пиксель тем менее он прозрачен. Первый и самый очевидный подход к использованию этой карты это брать некоторое пороговое значение на соответствие с которым мы будем "тестировать" яркость пикселя альфы и если яркость ниже - "отрезать" этот пиксель и не отрисовывать его. Это называется "Alpha test" Окей, мы добились нужного нам результата, но какой ценой? - пиксели "Отрезаются" очень грубо, получаются лесенки из пикселей, а если текстура, которую мы тестируем находится далеко и занимает мало площади в кадре - мы теряем слишком много данных и текстура получается "Обгрызанной". С лесенками из пикселей и частично с потерей данных мы можем бороться другой технологией - alpha to coverage, которую я частично объяснял в прошлом своем посте. При помощи ATOC данные мы теряем меньше, да, но не так мало как можно было бы. На этом моменте в студию заходит Nvidia со своим подходом к альфа тесту. А что если использовать не константное пороговое значение для тестирования пикселя? Что если это значение будет меняться от пикселя к пикселю? В таком случае это даст нам возможность терять намного меньше информации о прозрачности пикселя. Данная технология была названа Hashed alpha testing. Как это можно реализовать? Я реализовал это следующим образом - я беру текстуру синего шума, для того чтобы не тратить время кадра на расчет качественного шума в реальном времени. Ограничиваю полученное значение шума между двумя точками [0.05; 0.2] и использую его как пороговое значение для пикселя в альфа тесте. (Если пиксель карты прозрачности менее яркий чем пороговое значение - вырезаем его) Результат перед вами. Всех с наступающим новым годом, встретимся снова после новогодних праздников. Документ по настоящему Hashed Alpha от NVidia - https://developer.download.nvidia.com/assets/gameworks/downloads/regular/GDC17/RealTimeRenderingAdvances_HashedAlphaTesting_GDC2017_FINAL.pdf Если вам нравятся мои посты то можете подписаться на мою группу в ВК - https://vk.com/nocturning_games Если вы хотели бы присоединиться к разработке моего проекта напишите мне здесь или в ВК - https://vk.com/ns_deathman
- 54 ответа
-
- stalker hashed alpha
- nvidia hashed alpha
- (и ещё 1 )
-
Там нет разграничения - там именно 3D графика и анимация и мне кажется что это название категории намекает на то что это не про эффекты, а про модели и анимацию. То есть немного не очевидно
-
Там дополнительно другой прикол - при alpha test теряются пиксели с отдалением текстуры от камеры. При использовании alpha blend такой проблемы нет, но возникает проблема в том что у нас нет теста глубины и мы видим перекрытые пиксели объекта самим объектом так, как будто они накладываются поверх, а также касательно stalker мы их рендерим после gbuffer и следовательно на них не действует освещение. Есть также hashed alpha, но со сталкерскими текстурами получается странный результат. Остается ATOC - он убирает погрызанность текстур на расстоянии, а также их сглаживает. Но проблема моего подхода состоит в том что текстуры вблизи, если на них смотреть прямо в лоб на короткой дистанции, они не сглаживаются, но чем дальше находится текстура, тем лучше она начинает сглаживаться и тем меньше теряется деталей Я бы с удовольствием показал это как на второй картинке, но я не знаю как так в одном и том же фрагменте кадрировать две картинки Дополнено 4 минуты спустя Научите меня кадрировать разные картинки также Дополнено 12 минуты спустя Короче вот тут можно больше узнать про разные вариации работы с альфой https://casual-effects.com/research/Wyman2017Improved/index.html А это то о чем я говорю Дополнено 35 минуты спустя Пацаны ждем пост про Hashed alpha - только что написал простую реализацию в три строчки кода
- 6 ответов
-
- 1
-
-
- n.s.p.x: the final
- fxaa atoc
-
(и ещё 1 )
C тегом:
-
Попробуй прогрузить две картинки и стрелочками на клавиатуре их переключать, так будет видно разницу, а так позже попробую сделать такое сравнение
- 6 ответов
-
- n.s.p.x: the final
- fxaa atoc
-
(и ещё 1 )
C тегом:
-
Ну типа MSAA на DX9 реализовать можно, но это слишком сложно для того чтобы я это сделал, да и с Deffered rendering оно не сказать что до DX10 совместимо. https://forum.beyond3d.com/threads/dx9-rendertargets-and-msaa.46308/
- 6 ответов
-
- n.s.p.x: the final
- fxaa atoc
-
(и ещё 1 )
C тегом:
-
Я заметил что в интернете нет вообще упоминания использования FXAA для сглаживания полупрозрачных объектов, поэтому решил поделиться этим в своей группе в ВК и здесь, потому что кому-то это может быть интересно. На связи Deathman и это одна из двух последних новых технологий в этом году, которые я использую в N.S.P.X: The Final В этот раз я покажу то, как я заместил Alpha to coverage. ATOC это технология, суть которой заключается в использовании MSAA для текстур, использующих альфа тест. То есть по простому это сглаживание лесенок у частично прозрачных текстур, в нашем случае как пример это листва, трава, сетка рабица и так далее. Я загорелся идеей добавления подобного в свой проект, но возникла проблема - мой рендер использует API DirectX версии 9.0, а реализовать MSAA адекватными методами можно только начиная с DirectX 10.0 и далее. Вопрос - как это сделать. С этого момента я решил пойти другим способом - а что если сохранить суть (сглаживать текстуры под альфа тестом), но использовать не MSAA, а что-то другое? Буквально сегодня, до того как у меня в конец отъехала в мир иной моя видеокарта я реализовал это. Правда на этот раз не получилось сделать все чисто и без кастылей, но кастыль вышел всего один и не такой уж и позорный. Я подцепил к альфа тестовым текстурам FXAA и оформил это как отдельную опцию, назвав ее как FXAA ATOC, чем мне кажется оно не является. Результат перед вами. Лично я оказался немного удивлен результатом - оно работает немного не так как я ожидал и дало результат, похожий на использование Hashed alpha testing, о котором я расскажу в другой раз.
- 6 ответов
-
- 1
-
-
- n.s.p.x: the final
- fxaa atoc
-
(и ещё 1 )
C тегом:
-
Ну kinda да, но в любом случае это не совсем то
-
Я не знаю как правильно предложить, но можно создать категорию тем "Эффекты и шейдеры" как аналог категории с 3D графикой, но специально для эффектов?
-
0_о Океееей, занятненько. У меня ни эксклюзивных материалов, ни незаконных вещей на жёстком диске и в вообще в принципе нигде нет, а история диска намного более скромная, так что поделиться в этом диалоге мне нечем. Просто диск, просто куча игр и куча связанного с X-ray, просто старый жестак Дополнено 6 минуты спустя Самое мерзкое за эту ночь это то что пока я реализовывал alpha to coverage на FXAA (https://vk.com/wall-206168883_162) у меня ещё и рыкса отъехала. То есть эта ночь это время когда по мне максимальный удар пришелся- и чуть проект не потерял, и жестак добывать новый и самая топовая видеокарта из парка отъехал. 10/10 ночь, лучше бы мне под ёлку нагадили.
- 148 ответов
-
- 1
-
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
Так не должно быть. Это не нормально. Дополнено 5 минуты спустя Я боюсь представить что за кретины делали мод, если для смены сезонов года нужно просто добавить тип материала, который принимает две текстуры, фактор смешивания и на выходе даёт как альбедо в gbuffer интерполированный цвет -_- Дополнено 41 минуты спустя Ну чё пацаны, NSPX походу реально The final - жестак на 400ГБ после целой серии клинических смертей отъехал окончательно. Вроде как на Гугл диске у меня лежит бекап проекта около недельной давности, если сейчас не получится запустить это техноднище то придется брать эту версию и повторять целую кучу изменений повторно. Говорю сразу - диск крутится, головка ходит, дисковому покрытию ж*па. Первые же 1475 секторов не читабельны вообще, в системе не определяется. Советов не нужно, все под контролем. Если диск получится определить в системе то перекину NSPX на один из SSD в первую очередь, после чего прогоню Викторией, но что-то мне подсказывает что ему трындец. Дополнено 52 минуты спустя Итог вечера - хеппи с*ка энд. Это была еще одна клиническая смiрть за вечер. Проект в безопасности, диск отъезжает в помойку
- 148 ответов
-
- 1
-
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
---___--- В твоем двигле и банальная человеческая логика выпилена к чертям - то что ТЫ вырезал прекеш и ТЫ считаешь то что он не нужен не говорит о том что работа без него не вызывает пролагов при подгрузке отдельных вещей
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
И как ты можешь говорить с полной уверенностью об этом тогда?
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
Господи, это ужас. Так НЕ должно быть. Это называется говнокод Дополнено 0 минут спустя 0_о Чего. А скажи-ка мне принципиальную разницу в механизме загрузки текстур из внутренней памяти в видеопамять (А в сралкере еще и в ОЗУ) между этими двумя версиями API. А главное скажи почему ты упустил прекеш звуков, моделей и кода
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
---___--- Прекеш НУЖЕН для любого рендера, чтобы в момент прогрузки каких-либо объектов или предметов у тебя не было просадки по одновременной загрузке модели, звука, кода и текстуры. Дополнено 3 минуты спустя Да, ao из текстур ты можешь использовать в игре. Сейчас его можно как совать в красный канал bump текстуры, так и подкидывать с названием текстуры, с которой расчитывал и _ao в конце. А менять текстуру у рук так не получится - можно только менять модель, для чего все равно надо разделять оружие и руки на две модели. Не спорю - так сделать можно, но так делать просто нельзя, это ужасное решение.
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
Окей, спасибо за развернутый комментарий, думаю хоть-то из этого, да реализую
- 148 ответов
-
- 1
-
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
А речь то изначально вообще была про то что Я НАМОНТИРОВАЛ то что у меня двигло собралось на 2019 студии, и без bind2nd и унарок\бинарок ничего не заработает и вообще для X-Ray 2013 студия это потолок, а без этих штук игра будет падать на "синхронизации" и с коллизией проблемы будут
-
АХАХАХАХАХАХАХ Посмотри со звуком мое разоблачение того как я тебя попытался обмануть
-
Ты про это? Монтаж? ТЫ УМОМ ТРОНУЛСЯ ЧТО-ЛИ Целый Голливуд нанял - все для того чтобы сделать вид что жалкий мод на сталкер не является тем чем кажется деду Господи, твои перлы можно заносить в книгу рекордов Гиннеса за самые тупые выводы
-
Окей. Посмотрю по времени - будет или нет и если будет то подумаю как реализовать
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
Первое - Можно пожалуйста объяснить что именно такое "Коллбеки" и что именно за слоты? Я не сталкивался с этим и здесь мои знания околонолевые. Второе - я слышать не хочу про OGSR в этом контексте. Я не собираюсь вообще никак связываться с агрессивным комьюнити форка, который с огромным количеством васни и с нолевым пониманием того что именно разрабы делают и вытекающим из этого подходом к разработке и качеству кода, который на RX580 идет в 10 FPS, которое не раз перемывало кости мне и другим, а главное оскорбляло, а на момент релиза оригинального NSPX официальный разраб (один из) и строил из себя дофига важного и опытного, который чуть ли не с Эпаир стейт билдинг может смотреть на окружающих и в чем-то там упрекать. По факту OGSR не способны ни на что кроме вырезни из-за лени и кривых попыток в фичи, с ужасным качеством кода и чудовищным убийством производительности. Эти люди не хотят прикладывать усилия, что-то изучать, что-то изобретать и так далее - это люди, которые в состоянии потока сидят и плодят абсолютно бессмысленные правки, очень часто вообще никак не влияющие на опыт пользователя или модедела, а часто еще и делающие хуже, а если к ним приходят и предлагают какие-то фичи, которые могут стать бенгером проекта - они либо ИГНОРИРУЮТСЯ либо кродин начинает вертеться как уж на сковороде чтобы не делать это Можно чекнуть беседу с I am dead на релизе NSPX Дополнено 0 минут спустя Я опять тебя не понимаю, прости
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
То есть ты хочешь сказать что у тебя где-то есть вот такое?
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
У тебя в Oldfake переписанные шейдеры, или я просто чего-то не знаю? 0_о Я думал ты только приставку xr на of заменять умеешь и чужие коммиты переносить. Подожди минуту.
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
И что? Ты много перенесешь от моего шейдерного конвейера к себе? Разочарую, но нет, потому что я переписал около 90% шейдеров под нормальный код и он вообще не совместим с оригиналом, так как я многое перепроектировал. Тут другой вопрос и вопрос только ко мне - а сколько времени у МЕНЯ самого займет перенос шейдеров с Shader model 3.0 на 4.0/5.0, если кто-то придет и займётся переносом рендера на DX10/11, а я полностью сосредоточу все свое внимание на переносе шейдеров, а не сможет ли КТО-ТО взять мой код и перенести на SM другой версии. Да и тем более есть возможность компилировать шейдеры старых шейдерных моделей в DX10 и DX11 силой backwards capatibility. Не говоря про то что то что ты сказал про перенос в корне не верно - переносить НА shader model 3.0 задолбишься с 4.0/5.0, а не наоборот. Потому что в старых шейдерных моделях нет битвайз операций, нет всяких удобных разделений семплера на текстуру и семплер, получения разрешения текстуры и так далее. Дополнено 1 минуту спустя Ты в любой момент можешь придти ко мне и сказать что за функционал тебе конкретно нужен и в меру своих возможностей я перенесу или не перенесу к себе, или же если ты найдешь конкретный коммит то можешь перенести сам, потому что очень часто это очень просто
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
Во-первых шейдеры я переписывал с ноля и перепроектировал с кучей новых фич, так что никакого слоада. Причем не только шейдеры, но и рендер. Во-вторых почему именно DX11. Что именно он даёт такого, чтобы он был критичен.
- 148 ответов
-
- nspx the final
- nocturning studio
- (и ещё 2 )
-
Первое - Даже если ограничиться этим расстоянием то активация теней травы все равно вызывает большие потери производительности и увеличение времени кадра. Второе - 0_о занимательно. Как хорошо что NSPX на 2019-2022 студии работает нативно без кастылей