Перейти к содержанию

Рекомендуемые сообщения

 

Я заметил что в интернете нет вообще упоминания использования 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, о котором я расскажу в другой раз.
 AHhj-A_qS3E.jpg?size=1920x1080&quality=9VotG34V_pMk.jpg?size=1920x1080&quality=9
E0s-Nbf-c4U.jpg?size=1920x1080&quality=9ycqeMQgbP8E.jpg?size=1920x1080&quality=97rZg5-wNASM.jpg?size=1920x1080&quality=9

Изменено пользователем Deathman
  • Лайк 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Интересная задумка, в просекторсе по-моему есть реализация альфа сглаживания, но не помню доступно ли оно на рендере меньше 11 DirectX

2 минуты назад, Deathman сказал:

ATOC это технология, суть которой заключается в использовании MSAA для текстур, использующих альфа тест.
То есть по простому это сглаживание лесенок у частично прозрачных текстур, в нашем случае как пример это листва, трава, сетка рабица и так далее.
Я загорелся идеей добавления подобного в свой проект, но возникла проблема - мой рендер использует API DirectX версии 9.0, а реализовать MSAA адекватными методами можно только начиная с DirectX 10.0 и далее.
 

Кстати во второй арме есть ATOC для травы и листвы и она на 9 DirectX

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
5 минут назад, StrawFlux сказал:

Интересная задумка, в просекторсе по-моему есть реализация альфа сглаживания, но не помню доступно ли оно на рендере меньше 11 DirectX

Кстати во второй арме есть ATOC для травы и листвы и она на 9 DirectX

Ну типа MSAA на DX9 реализовать можно, но это слишком сложно для того чтобы я это сделал, да и с Deffered rendering оно не сказать что до DX10 совместимо.
https://forum.beyond3d.com/threads/dx9-rendertargets-and-msaa.46308/

Изменено пользователем Deathman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Вообще разницы не вижу... Можно красным кружком обвести различия между двумя скринами? .-.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
17 минут назад, Supremeee сказал:

Вообще разницы не вижу... Можно красным кружком обвести различия между двумя скринами? .-.

Попробуй прогрузить две картинки и стрелочками на клавиатуре их переключать, так будет видно разницу, а так позже попробую сделать такое сравнение
5a68364c429cb44d.jpg?ex=659fbc73&is=658d

Изменено пользователем Deathman

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 

Supremeee в движении будет заметно, такой метод убирает лесенки с листвы и травы и при этом не садит производительность как дефолтное MSAA сглаживание, вопрос в том насколько эффективен именно FXAA ATOC режим так как до этого я видел только реализацию ATOC через MSAA

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
 
14 минут назад, StrawFlux сказал:

Supremeee в движении будет заметно, такой метод убирает лесенки с листвы и травы и при этом не садит производительность как дефолтное MSAA сглаживание, вопрос в том насколько эффективен именно FXAA ATOC режим так как до этого я видел только реализацию ATOC через MSAA

Там дополнительно другой прикол - при alpha test теряются пиксели с отдалением текстуры от камеры. При использовании alpha blend такой проблемы нет, но возникает проблема в том что у нас нет теста глубины и мы видим перекрытые пиксели объекта самим объектом так, как будто они накладываются поверх, а также касательно stalker мы их рендерим после gbuffer и следовательно на них не действует освещение. Есть также hashed alpha, но со сталкерскими текстурами получается странный результат. Остается ATOC - он убирает погрызанность текстур на расстоянии, а также их сглаживает. Но проблема моего подхода состоит в том что текстуры вблизи, если на них смотреть прямо в лоб на короткой дистанции, они не сглаживаются, но чем дальше находится текстура, тем лучше она начинает сглаживаться и тем меньше теряется деталей
1.jpg?ex=659fbc73&is=658d4773&hm=a8a4ff05a68364c429cb44d.jpg?ex=659fbc73&is=658d
Я бы с удовольствием показал это как на второй картинке, но я не знаю как так в одном и том же фрагменте кадрировать две картинки


Дополнено 4 минуты спустя

Научите меня кадрировать разные картинки также:u1F97A:
5a68364c429cb44d.jpg?ex=659fbc73&is=658d


Дополнено 12 минуты спустя

Короче вот тут можно больше узнать про разные вариации работы с альфой
https://casual-effects.com/research/Wyman2017Improved/index.html

А это то о чем я говорю
8.png


Дополнено 35 минуты спустя

Пацаны ждем пост про Hashed alpha - только что написал простую реализацию в три строчки кода

Изменено пользователем Deathman
  • Лайк 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу