Вопрос HLSL Gausing Blur Shader BackGround Directx11 (Decided)

Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
39
Реакции[?]
9
Поинты[?]
2K
Всех приветствую, хотел сделать ПО с красивым интерфейсом на imgui и всё это на DirectX11, но когда захотел сделать background blur программы (в моём случае фон прозрачный, то есть мне надо размывать всё, что за окном программы) столкнулся с тем что я не понимаю как сделать его, в просторах интернета нашёл интересный github repo
Пожалуйста, авторизуйтесь для просмотра ссылки.
в котором показано как через DirectX11 создавать HLSL Shader, я убрал задник и начал работать с этим репо, в итоге у меня ничего не получилось, вот код который я попробовал для создания blur эффекта:

HLSL Gausing Blur:
Texture2D inputTexture; // Входная текстура
SamplerState textureSampler : register(s0); // Сэмплер для чтения текстуры

float2 texelSize; // Размер одного текселя

// Функция для размытия горизонтально
float4 HorizontalBlurShader(float2 texCoord)
{
    float4 color = float4(0.0, 0.0, 0.0, 0.0);
    
    // Применяем веса для текущего пикселя и его соседей
    color += inputTexture.Sample(textureSampler, texCoord - 4.0 * texelSize) * 0.05;
    color += inputTexture.Sample(textureSampler, texCoord - 3.0 * texelSize) * 0.09;
    color += inputTexture.Sample(textureSampler, texCoord - 2.0 * texelSize) * 0.12;
    color += inputTexture.Sample(textureSampler, texCoord - texelSize) * 0.15;
    color += inputTexture.Sample(textureSampler, texCoord) * 0.16;
    color += inputTexture.Sample(textureSampler, texCoord + texelSize) * 0.15;
    color += inputTexture.Sample(textureSampler, texCoord + 2.0 * texelSize) * 0.12;
    color += inputTexture.Sample(textureSampler, texCoord + 3.0 * texelSize) * 0.09;
    color += inputTexture.Sample(textureSampler, texCoord + 4.0 * texelSize) * 0.05;

    return color;
}

// Функция для размытия вертикально
float4 VerticalBlurShader(float2 texCoord)
{
    float4 color = float4(0.0, 0.0, 0.0, 0.0);
    
    // Применяем веса для текущего пикселя и его соседей
    color += inputTexture.Sample(textureSampler, texCoord - 4.0 * texelSize) * 0.05;
    color += inputTexture.Sample(textureSampler, texCoord - 3.0 * texelSize) * 0.09;
    color += inputTexture.Sample(textureSampler, texCoord - 2.0 * texelSize) * 0.12;
    color += inputTexture.Sample(textureSampler, texCoord - texelSize) * 0.15;
    color += inputTexture.Sample(textureSampler, texCoord) * 0.16;
    color += inputTexture.Sample(textureSampler, texCoord + texelSize) * 0.15;
    color += inputTexture.Sample(textureSampler, texCoord + 2.0 * texelSize) * 0.12;
    color += inputTexture.Sample(textureSampler, texCoord + 3.0 * texelSize) * 0.09;
    color += inputTexture.Sample(textureSampler, texCoord + 4.0 * texelSize) * 0.05;

    return color;
}

// Основная функция шейдера
float4 main(float2 texCoord : TEXCOORD) : SV_Target
{
    float4 blurredColor = float4(0.0, 0.0, 0.0, 0.0);
    
    // Размываем горизонтально
    blurredColor += HorizontalBlurShader(texCoord);
    
    // Размываем вертикально
    blurredColor += VerticalBlurShader(texCoord);
    
    return blurredColor;
}
данный код компилируется (уже спасибо) но по итогу я получаю просто пустое окно:1689249671731.png
Можете пожалуйста подсказать как мне сделать прозрачный размытый фон?

В заранее всех благодарю, а я пока пойду утоплюсь т.к. после изучения всего этого безобразия у меня вскипел мозг :(
 
эксперт в майнкрафт апи
Read Only
Статус
Оффлайн
Регистрация
25 Янв 2023
Сообщения
684
Реакции[?]
286
Поинты[?]
21K
Чет я не совсем понимаю :
как в текстуру должно попасть то, что рендерится под твоим окном?мне кажется не в том направлении мыслишь.

также добавлю из своего опыта(GLSL, может быть неуместно) :
значения гауссовой функции я бы все таки предпочел пропихивать баффером, а не константами внутри кода который ты потом заебешься менять xD
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
39
Реакции[?]
9
Поинты[?]
2K
Чет я не совсем понимаю :
как в текстуру должно попасть то, что рендерится под твоим окном?мне кажется не в том направлении мыслишь.
я не супер крутой кодер, но пока искал всё что касается блюра и изучал, наткнулся на сурс чита legendware в котором было реализовано размытие фона через hlsl текстуру, вот и начал думать в этом направлении
Меня так то устроит любое размытие фона, просто начал рыть hlsl так как наткнулся на такой способ реализации, но он был на DirectX9 :(
 
Пользователь
Статус
Оффлайн
Регистрация
23 Авг 2021
Сообщения
521
Реакции[?]
53
Поинты[?]
20K
прозрачность блюра поставлена на 0, попробуй на 100
скорее всего там 0.0 и 1.0 используются раз это float иначе смысла не вижу ставить такой тип данных
лучше 0.2-0.3
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
39
Реакции[?]
9
Поинты[?]
2K
прозрачность блюра поставлена на 0, попробуй на 100
скорее всего там 0.0 и 1.0 используются раз это float иначе смысла не вижу ставить такой тип данных
лучше 0.2-0.3
к сожалению не сработало, какие значение туда не вводи всё равно ничего не происходит :(
 
Начинающий
Статус
Оффлайн
Регистрация
28 Дек 2021
Сообщения
85
Реакции[?]
27
Поинты[?]
13K
К большому сожалению сделать нормальный блюр на DirectX в приложениях на винде получится только из того, что ты сам рендеришь, размыть то, что находится за приложением не получится. Хотя все зависит еще от того как ты создаешь окно.
Upd
Хотя возможно я ошибся
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
17 Май 2023
Сообщения
11
Реакции[?]
10
Поинты[?]
10K
К большому сожалению сделать нормальный блюр на DirectX в приложениях на винде получится только из того, что ты сам рендеришь, размыть то, что находится за приложением не получится. Хотя все зависит еще от того как ты создаешь окно.
Upd
Хотя возможно я ошибся
создать второе окно на весь экран и его размывать уже хахвфыхахывахвыафхыафв
 
Начинающий
Статус
Оффлайн
Регистрация
28 Дек 2021
Сообщения
85
Реакции[?]
27
Поинты[?]
13K
создать второе окно на весь экран и его размывать уже хахвфыхахывахвыафхыафв
Ну если не учитывать огромную потерю производительности, то да, можно, но все же я думаю речь о нормальных методах
Ну если не учитывать огромную потерю производительности, то да, можно, но все же я думаю речь о нормальных методах
upd
Хотя нет, даже так не получится сделать, если хочешь-попробуй
 
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
39
Реакции[?]
9
Поинты[?]
2K
Пока на работе курил и искал нужный мне код наткнулся на guthub repo:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(no ad) как я понял работает он через установку специальных параметров, осталось его подружить с imgui и я думаю получится вполне рабочий код
создать второе окно на весь экран и его размывать уже хахвфыхахывахвыафхыафв
хвхваххахаха идея хорошая, но я уже пробывал сделать python окно с размытым фоном, а на него кидать overlay, но чёт я так посидел по экспериментировал, и это самое бесполезное чем я когда либо занимался, уж проще сделать всё как надо (ну или попробовать сделать всё как надо :D )
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
22 Июл 2020
Сообщения
39
Реакции[?]
9
Поинты[?]
2K
Пожалуйста, авторизуйтесь для просмотра ссылки.
(no ad) тут вам и размытие, и нормальная работа imgui с альфа каналами, скругление окна, крч отличная база для проектов

P.s Админы закройте позязя тему
Всем кто пытался помочь огромное спасибо
 
Сверху Снизу