Comments 13
Здравствуйте. Я пока только изучаю программирование 3D графики с использованием Direct3D API. В вашем HLSL шейдере я вижу использование техник и .fx файлов. Не могли бы Вы рассказать, как на сегодняшний день на практике используются шейдеры в DirectX? Дело в том, что, если я не ошибаюсь, .fx эффекты в основном используются со специальным Effects фреймворком (из d3dx11), который объявлен deprecated в последнем DirectX 11. Как сегодня в индустрии используются шейдеры? Создаются в отдельных файлах с константными буферами или каким-то образом можно использовать техники?
0
Насколько я понимаю fx файлы действительно объявлены deprecate с 11 версии. Использование файлов эффектов исключительно для удобоваримого описания настроек, и возможности содержать все типы шейдеров в одном файле. После генерации мы также получаем hlsl шейдер, с входной функцией main
сами по себе техники как я понимаю это описание к использованию шейдера, включение того или иного теста, указание входной функции. Все эти настройки можно хранить по раздельности с шейдером. А можно воспользоваться сторонними библиотеками к примеру NVFX. Как сейчас принято разрабатывать на последнем DX я честно говоря затрудняюсь ответить
float4x4 u_MVPMatrix;
struct VS_DEFAULT_OUTPUT {
float4 position : POSITION;
float2 texture_coord : TEXCOORD0;
float4 color : COLOR0;
};
VS_DEFAULT_OUTPUT vs_default_texture(float4 u_position : POSITION, float2 u_texture_coord : TEXCOORD0, float4 u_color : COLOR0) {
VS_DEFAULT_OUTPUT Out;
((Out).position = mul(u_MVPMatrix, u_position));
((Out).texture_coord = u_texture_coord);
((Out).color = u_color);
return Out;
};
float4 ps_default_texture(VS_DEFAULT_OUTPUT Out, uniform sampler2D u_texture) : COLOR {
float4 clr = (tex2D(u_texture, (Out).texture_coord) * (Out).color);
return clr;
};
float4 main(VS_DEFAULT_OUTPUT Out, uniform sampler2D u_texture) : COLOR {
return ps_default_texture(Out, u_texture);
};
сами по себе техники как я понимаю это описание к использованию шейдера, включение того или иного теста, указание входной функции. Все эти настройки можно хранить по раздельности с шейдером. А можно воспользоваться сторонними библиотеками к примеру NVFX. Как сейчас принято разрабатывать на последнем DX я честно говоря затрудняюсь ответить
0
Есть достаточно жесткий пайплайн: Effect->Technique->Pass, но если вы не будете использовать geometry shaders в принципе ничего не изменилось. hlsl файл компилируется в эффект, который содержит в себе техники и пассы. Считается что техника это завершенный рендер, но все можно сочетать в любых пропорциях. Если раньше приходилось отдельно применять VS/GS/PS шейдеры, то теперь можно выбрать технику и нужный пасс из эффекта и все настройки к контексту применятся пакетом. Для сложного рендера стало проще, для новичков сложнее вобщем. Мой совет, начинайте с D3D9, он проще и с него потом можно легко перейти на 11 когда возникнет реальная необходимость.
0
И да, AFAIK, не Effects стали deprecated, а поменялась реализация компилятора, что-то убрали, что-то перекинули в другие места. Сам пайплайн не меняли.
0
А что используют чаще? Эффекты или отдельные шейдеры? А ведь еще есть precompiled shaders и динамическая линковка. Вот вы, например, что используете?
0
Перешел на эффекты 4 месяца назад, стало удобнее. Но у меня жутко сложный рендеринг, т.к. я ускоряю WPF на GPU, в том числе и просто расчеты данных всякие. Эффекты компилируются из исходников хранящихся в embedded resource при загрузке сборок, нативные библиотеки для компиляции подгружаются автоматически в зависимости от платформы рантайма .NET. Как-то так.
0
В эффекте и переменные и constant buffer, описание типов, пара десятков шейдеров, несколько техник с 1-3 пассами.
0
Мне кажется ваша проблема надумана. Дело в том, что opengl прекрасно поддерживается ios, вулкан- этот перепиленный огл, и использует он синтаксис glsl, ну а платформа винды, под которую заточен hlsl прекрасно работает с опенжеле.
Так вот, зачем вам генератор шейдеров, если уже есть glsl, под все возможные платформы? Суть аппловского метала, вулкана и hlsl в том, что они должны давать большую производительность из-за специализации под платформу. Если вы будете генерировать код под все платформы, то вы выстрелите себе в ногу, аннулировав приемущества, предоставленные этими апи.
Так вот, зачем вам генератор шейдеров, если уже есть glsl, под все возможные платформы? Суть аппловского метала, вулкана и hlsl в том, что они должны давать большую производительность из-за специализации под платформу. Если вы будете генерировать код под все платформы, то вы выстрелите себе в ногу, аннулировав приемущества, предоставленные этими апи.
0
Дело в том, что opengl прекрасно поддерживается iosпо мимо технической стороны вопроса часто на выбор технологии влияют другие факторы. К примеру приложения использующие Metal проще продвигать. Списков топ 10 лучших приложений использующих GLES я честно говоря не видел, а вот топ 10 лучших приложений с использованием метал встречаются. Да и думаю получить фичеринг приложению использующему любимое эплом детище будет проще.
под которую заточен hlsl прекрасно работает с опенжелеесть ли поддержка opengl на мобильных платформах винды (после 8.0 версии)? Angle активно поддерживающийся google и ms работает явно хуже нативной поддержки DX
Да и цель статьи просто описать как можно уменьшить платформо-зависимый код.
0
Опенгл прекрасно не работает даже на взрослой винде.
А суть метала, вулкана и директ12 совсем не в специализации, а в предоставлении низкоуровневого доступа к железу без потери абстракции от железа насколько это возможно. Иначе во всем этом было бы мало смысла. Их суть это избавление от API оверхеда, а не избавление от всех абстракций.
А суть метала, вулкана и директ12 совсем не в специализации, а в предоставлении низкоуровневого доступа к железу без потери абстракции от железа насколько это возможно. Иначе во всем этом было бы мало смысла. Их суть это избавление от API оверхеда, а не избавление от всех абстракций.
0
Sign up to leave a comment.
Генерация шейдеров GLSL, HLSL, Metal