HLFX.Ru Forum Страницы (16): « Первая ... « 6 7 8 9 [10] 11 12 13 14 » ... Последняя »
Показать все 227 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- Нубские вопросы (https://hlfx.ru/forum/showthread.php?threadid=2218)


Отправлено Дядя Миша 15-06-2020 в 10:38:

Некорректный вопрос. Тот функционал в шейдере, которым ты заменяешь стандартную FFP-часть очевидно не будет реагировать на установку этих стейтов.
Ну например GL_TEXTURE_ENV - ты же в шейдере их будешь смешивать.
Но можно использовать встроенные юниформы, чтобы сохранить работоспособность фиксированного функционала в собственном шейдере.

Чуть-чуть инфы есть, например здесь: http://www.yaldex.com/open-gl/ch04lev1sec5.html
Вообще сайт неплохой, рекомендую ознакомиться.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ncuxonaT 22-06-2020 в 22:30:

Обнаружил неприятный баг на радеонах - у тонких треугольников низкая точность интерполяции вариингов.
На примере плинтуса. Передаю мировую позицию вершины через вариинг во фрагментный шейдер, и вывожу как цвет, вот какая дрянь получается. И еще похоже, что оно как-то завязано на перспективную коррекцию, потому что количество артефактов зависит от ракурса и расстояния до камеры.
https://i.imgur.com/IyxELs9.pnghttps://i.imgur.com/g2bufMa.pnghttps://i.imgur.com/L9xLF62.png

На жифорсах и интелах такого нет, всё гладенькое, как и ожидалось.

Есть идеи, как забороть? Как-то вручную можно интерполировать?

Добавлено 23-06-2020 в 00:59:

Придумал корочи получать мировые координаты фрагмента через gl_FragCoord и обратную матрицу проекции. Вроде даже работает.

Добавлено 23-06-2020 в 01:30:

Надо сказать, что хоть при использовании такого способа артефакты и отсутствуют, но точность результата не высокая. Поэтому рад буду услышать альтернативные предложения.


Отправлено nemyax 23-06-2020 в 06:15:

Цитата:
ncuxonaT писал:
похоже, что оно как-то завязано на перспективную коррекцию

Пробовал noperspective добавлять?


Отправлено Дядя Миша 23-06-2020 в 07:20:

Цитата:
ncuxonaT писал:
у тонких треугольников низкая точность интерполяции вариингов

как-то ты неправильно сформулировал. У линейной интерполяции точность не может быть низкой или высокой. Там что-то другое. А глубина не 16 бит случайно?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ncuxonaT 23-06-2020 в 10:28:

nemyax пробовал, никаких изменений.
Дядя Миша может, и неправильно. Глубина 24 бита, но я пробовал и 16, и 32F, и 32F с Reversed-Z, никак оно не влияет.
Обратил внимание, что артефакты лезут в том случае, если часть вершин треугольника лежит позади передней плоскости отсечения,


Отправлено Дядя Миша 23-06-2020 в 13:41:

А не может быть такого, что вертексы по умолчанию в халфах хранятся?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ncuxonaT 23-06-2020 в 14:55:

Дядя Миша маловероятно, я же везде явно флоаты прописываю. И для рейтрейсинга все координаты во флоат текстуре хранятся. Если бы вершины были в халфах, то было бы много самопересечений, ну то есть лучи с поверхности халф-треугольника попадали бы в тот же флоат-треугольник. Но такого не наблюдается, артефачат только узкие треугольники. И только на радеонах.


Отправлено Дядя Миша 23-06-2020 в 15:10:

ncuxonaT драва поменять?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ncuxonaT 23-06-2020 в 15:26:

Дядя Миша на одном радеоне дрова свежие, на втором прошлогодние, разницы нет


Отправлено ncuxonaT 25-06-2020 в 12:58:

Слушайте, а я правильно восстанавливаю позицию из фрагкоорда?

code:
vec4 ndc = vec4(gl_FragCoord.xyz / vec3(screen_size, 1.0) * 2.0 - vec3(1.0) , 1.0); ndc = inverse_mvp * ndc; vec3 fixed_pos = ndc.xyz / ndc.w;


Отправлено Дядя Миша 25-06-2020 в 16:49:

Ну то есть ты по результатам сам что ли не видишь правильно или нет?
Откуда этот код?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ncuxonaT 25-06-2020 в 17:00:

Дядя Миша из интернета. Результат похож на правду, но точность заметно хуже, чем у интерполяции. Я хочу понять, это из-за неверного кода или из-за недостатка точность флоатов.


Отправлено Дядя Миша 25-06-2020 в 18:12:

Я в своё время, когда задавался этим вопросом перепробывал разные способы и вот у них тоже была какая-то очень низкая точность. Наилучший результат получился с Screen Rays, можешь в параное посмотреть.
Там надо четыре луча предрассчитать.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ncuxonaT 25-06-2020 в 18:15:

Дядя Миша четыре луча по углам вьюпорта, интерполируешь между ними и умножаешь на глубину?


Отправлено Дядя Миша 25-06-2020 в 20:49:

ncuxonaT именно так.

Добавлено 25-06-2020 в 23:49:

Глубину линеаризовать надо.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 20:57. Страницы (16): « Первая ... « 6 7 8 9 [10] 11 12 13 14 » ... Последняя »
Показать все 227 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024