Поиск сообщества
Показаны результаты для тегов 'stalker hashed alpha'.
Найдено: 1 результат
-
В последний раз в этом году 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 )