Войти
ПрограммированиеФорумГрафика

Directx 12 вопросы. (28 стр)

Страницы: 124 25 26 27 28 29 Следующая »
#405
15:30, 13 мая 2021

HolyDel
> а в HLSL нет аналога gl_FrontFacing?
Он же только input


#406
16:09, 13 мая 2021

/A\
> Он же только input
Да я про разный текст на страницах одного листа (front/back) face одного примитива. Для этой задачи геом. шейдер оверкилл, как мне кажется.

#407
22:41, 13 мая 2021

HolyDel
А как ты без геометрического шейдера сделаешь две стороны одного треугольника с разными текстурами? Я что-то такого метода не нашел.

#408
23:47, 13 мая 2021

san
Свойства скалярного произведения векторов не осилил за годы опыта?

#409
0:44, 14 мая 2021

san
> А как ты без геометрического шейдера сделаешь две стороны одного треугольника с
> разными текстурами?
Vec4 fragColor = texture(TexSides[gl_FrontFacing], uv) в пиксельном шейдере.
Ну и рендер примитива с double side само собой.

phridrich
> Свойства скалярного произведения векторов не осилил за годы опыта?
Да даже этого ненадо. Есть встроенная функция.

#410
(Правка: 0:48) 0:48, 14 мая 2021

phridrich
Да... титан мысли.
Ну расскажи нам как ты скалярно перемножишь вектора и тем покажешь обе стороны треугольника.

#411
(Правка: 0:54) 0:51, 14 мая 2021

HolyDel
> Ну и рендер примитива с double side само собой.
Напомню вопрос: "Есть ли возможность менять динамически D3D12_CULL_MODE_BACK для одного и того же PSO ?"
Еще одно напоминание, тема ветки -  "Directx 12 вопросы."

#412
(Правка: 1:05) 0:56, 14 мая 2021

san
Невозможно показать обе стороны треугольника одновременно. В этом и его прелесть для растеризацию. А вот определить, какая сторона сейчас рисуется - можно легко. Функцией, что я указывал сверху, или методом phridrich-а, dot(normal, position). После того как определили, какая сторона треугольника рисуется, уже в пиксельном шейдере выбираем текстуру (ему придётся передать обе).

san
> Напомню вопрос: "Есть ли возможность менять динамически D3D12_CULL_MODE_BACK
> для одного и того же PSO ?"
> Еще одно напоминание, тема ветки -  "Directx 12 вопросы."
Ок, согласен, оффтоплю. Закругляюсь :)
Если нужно динамически менять кулмод, то только геометрический шейдер остаётся, чтобы это сыммитировать. Другой вопрос - зачем это понадобилось? Если для того, чтобы менять правило отрисовки в зависимости от front/back face, то есть метод прямолинейнее. Если нужно скрывать некоторые треугольники, и не хочется запороть erlyZ discard-ом, тогда, наверное, геометрический шейдер оправдан.

#413
0:59, 14 мая 2021

san
Да никакой не титан, это базовая аналитическая геометрия.
В пайплайне ставишь cull none, в пиксельный шейдер передаешь геометрическую нормаль и параметры для расчета луча из позиции камеры в пиксель; в самом шейдере считаешь скалярное произведение такого луча и нормали, если оно положительное - значит ты видишь back face, иначе front.

HolyDel
А, ну так даже лучше, да.

#414
(Правка: 2:32) 2:16, 14 мая 2021

phridrich
Для тех кто не умеет читать напомню тему еще раз:
"Есть ли возможность менять динамически D3D12_CULL_MODE_BACK для одного и того же PSO ?".
Для совсем непонятливых - нужно по команде менять ориентацию треугольников (стены становятся невидимыми) или делать их двусторонними или односторонними по желанию. Никакими ухищрениями в пиксельном шейдере ты этого не добьешься даже освоив "свойства скалярного произведения векторов".

Можно конечно убрать тест глубины и кулинг, выводить от дальних к ближним (на уровне треугольников, Карл!) а потом управлять альфа каналом. Но это будет действительно "оверкил". При том, что в геометрическом шейдере это десяток строк и никакого геморроя.

HolyDel
> А вот определить, какая сторона сейчас рисуется - можно легко. Функцией, что я указывал сверху, или методом phridrich-а, dot(normal, position
Если ты поменял направление кулинга, то у тебя будет показываться внутренняя сторона вместо внешней, но нормаль будет направлена к тебе, т.е. так ты сторону не определишь. В геометрическом шейдере ты знаешь порядок вершин что и можно передать в пиксельный шейдер. Тогда всегда будет показываться текстура связанная с физической стороной.

#415
7:33, 14 мая 2021

ronniko
> В PSO есть флаг D3D12_CULL_MODE_BACK\FRONT\NONE
> Есть ли возможность менять динамически D3D12_CULL_MODE_BACK для одного и того
> же PSO ?
> При этом не пересоздавая PSO.

в вулкане можно

#416
11:17, 14 мая 2021

san
> Никакими ухищрениями в пиксельном шейдере ты этого не добьешься даже освоив "свойства скалярного произведения векторов"
Еще раз - ты никакими ухищрениями в пиксельном шейдере не добьешься того, чтобы задача была выполнена ИМЕННО ТАК как ее запрашивали. Однако точно такого-же  результата можно добиться другим способом - именно в пиксельном шейдере.
Отсекать динамически ненужные грани - или выводить разные текстуры на back/front face, или делать еще что-то в этом роде.
Возможно, что-то связанное с transform feedback, или какой-то другой экзотикой - причина использовать геом. шейдер. Но скорее всего - это больше кода, меньше перфоманса, менее прямолинейный путь.

san
> Если ты поменял направление кулинга, то у тебя будет показываться внутренняя сторона вместо внешней, но нормаль будет направлена к тебе, т.е. так ты сторону
> не определишь. В геометрическом шейдере ты знаешь порядок вершин что и можно передать в пиксельный шейдер. Тогда всегда будет показываться текстура связанная с физической стороной.

В пайплайне ставишь cull none, и в пиксельном шейдере решаешь что делать с какой гранью. Рисовать, дискардить, рисовать с другой текстурой, перевернуть нормаль, перевернуть uv. Тебе весь этот код один фиг нужно будет писать - но в геометрическом шейдере, с дополнительным бойреплейтом на генерацию триса.

Может быть я что-то не понимаю, Andrey, /A\, ronniko
объясните, когда генерить доп грани в геом-шейдере будет лучше?
У  san-а пока не получилось. Его пример со страницми в книге очень хороший - но выглядит так, что gl_FrontFacing в пиксельном шейдере проще, быстрее и понятнее, чем генерация.

#417
(Правка: 15:07) 12:48, 14 мая 2021

san
> Для тех кто не умеет читать напомню тему еще раз:
Раз ты такой профессиональный читатель, возьми прочитай мои сообщения и подумай кому я ими отвечал, роннике или тебе. Подсказка: присмотрись к тексту, выделенному жирным шрифтом.

> "Есть ли возможность менять динамически D3D12_CULL_MODE_BACK для одного и того же PSO ?"
По этому поводу HolyDel уже все сказал - с вероятностью 99% на самом деле это не то что на самом деле нужно роннике, скорее всего фундаментально задача совершенно другая, вроде твоей со страницами книги.

> Для совсем непонятливых - нужно по команде менять ориентацию треугольников (стены становятся невидимыми) или делать их двусторонними или односторонними по желанию. Никакими ухищрениями в пиксельном шейдере ты этого не добьешься даже освоив "свойства скалярного произведения векторов".
Люди, понимающие что-либо в разработке, очень редко делают такие сильные утверждения типа "невозможно" и "никакими ухищрениями". Ты ведь тоже самое говорил о своей странице без геометрического шейдера, помнишь?

#418
(Правка: 16:24) 16:09, 14 мая 2021

HolyDel
> ты никакими ухищрениями в пиксельном шейдере не добьешься того, чтобы задача была выполнена ИМЕННО ТАК как ее запрашивали. Однако точно такого-же  результата можно добиться другим способом - именно в пиксельном шейдере.
Если выяснилось, что "решение" phridrich где он советует мне изучить "скалярное перемножение вектора" не имеет отношения к тому, что бы "задача была выполнена ИМЕННО ТАК как ее запрашивали", то зачем продолжать дискуссию с аргументами типа "в огороде бузина а в Киеве дядька" подменяя задачи и смешивая платформы?

phridrich
> Люди, понимающие что-либо в разработке, очень редко делают такие сильные утверждения типа "невозможно" и "никакими ухищрениями"
Люди, понимающие что-либо в разработке, знают о последовательности работы графического пейплайна. Пиксельный шейдер не имеет отношения к кулингу и обработке вершин. Это происходит до того как он начинает свою работу. Поэтому решить задачу "ИМЕННО ТАК как ее запрашивали" на этом уровне "невозможно никакими ухищрениями". Доступно излагаю?

Геометрический шейдер был создан специально для того, что бы дать разработчику возможность влиять на обработку вершин. Кулинг это типичная задача такой обработки. Можно конечно пытаться надевать штаны через голову, вопрос только зачем?

#419
16:25, 14 мая 2021

san
> то зачем продолжать дискуссию с аргументами типа "в огороде бузина а в Киеве дядька" подменяя задачи и смешивая платформы?
Затем, что если кому-то захочется сделать лист книги с двумя разными текстурами на каждой страницы - чтобы он знал, что есть более быстрый и простой способ. Чем генерация трисов в геом. шейдере, что, безусловно, тоже работает.

Потому, что сама по себе задача - динамически менять winding - она странная. Очень похоже на XY-problem. Правда ронико покинул этот тред, и не сознается, зачем ему это понадобилось :)

innuendo
> в вулкане можно
только с VK_EXT_extended_dynamic_state вроде?

Страницы: 124 25 26 27 28 29 Следующая »
ПрограммированиеФорумГрафика