标签: hlsl

不在 dx9 兼容模式下时,DX9 风格特性被禁用?

我目前正在编写一个HLSL用于基本高斯模糊的着色器。着色器代码很简单,但我不断收到错误:

不在 dx9 兼容模式下时,DX9 风格特性将被禁用。(法律公告#:19)

这告诉我,我的代码中的第 19 行是问题所在,我相信它要么是由于该特定行引起的tex2D,要么是Sampler在该特定行中。

#include "Common.hlsl"

Texture2D Texture0 : register(t0);
SamplerState Sampler : register(s0);

float4 PSMain(PixelShaderInput pixel) : SV_Target {
    float2 uv = pixel.TextureUV; // This is TEXCOORD0.
    float4 result = 0.0f;

    float offsets[21] = { ... };
    float weights[21] = { ... };

    // Blur horizontally.
    for (int x = 0; x < 21; x++)
        result += tex2D(Sampler, float2(uv.x + offsets[x], uv.y)) * weights[x];

    return result;
}
Run Code Online (Sandbox Code Playgroud)

请参阅下面有关代码的注释和我的问题。


笔记 …

hlsl directx-11

5
推荐指数
1
解决办法
2195
查看次数

在 Unity 计算着色器中调用 numthreads 和 Dispatch 之间的区别

假设我想使用计算着色器来运行 Kernel_X,线程尺寸为 (8, 1, 1)。

我可以将其设置为:

在脚本中:

Shader.Dispatch(Kernel_X, 8, 1, 1);
Run Code Online (Sandbox Code Playgroud)

在着色器中:

[numthreads(1,1,1)]
void Kernel_X(uint id : SV_DispatchThreadID) { ... }
Run Code Online (Sandbox Code Playgroud)

或者我可以这样设置:

在脚本中:

Shader.Dispatch(Kernel_X, 1, 1, 1);
Run Code Online (Sandbox Code Playgroud)

在着色器中:

[numthreads(8,1,1)]
void Kernel_X(uint id : SV_DispatchThreadID) { ... }
Run Code Online (Sandbox Code Playgroud)

据我所知,在这段代码的末尾,维度将是 (8, 1, 1); 然而,我想知道交换数字实际上有何不同。我的猜测是,运行 Dispatch (Kernel_X, 8, 1, 1) 会“运行”1x1x1 内核 8 次,而运行 numthreads(8,1,1) 将运行 8x1x1 内核一次。

shader hlsl unity-game-engine compute-shader

5
推荐指数
1
解决办法
1万
查看次数

如何在 Unity 中设置整个颜色通道的饱和度

我想在主相机中设置整个颜色通道的饱和度。我发现的最接近的选项是色调与饱和度分级曲线。场景的背景是一棵青色的棕榈树。我希望树的绿色程度仍然显示。与前景中的草顶相同,它比绿色更接近黄色,但我仍然想看到它具有的一点绿色值。

几周来我一直在 Unity 文档和资源商店中搜索可能的第三方着色器,但一无所获。我目前的结果是我能想到的最好的结果,任何帮助将不胜感激。谢谢 当前结果

分级曲线

已解决 - 通过复选标记的答案。只是想与将来偶然发现此问题的任何人分享结果。将上面的屏幕截图与下面的屏幕截图进行比较,其中背景中的棕榈树和前景中的草顶都是黑白的。完全掌控场景中的RGB饱和度! 格林·黑·白 红黑白

shader cg hlsl unity-game-engine

5
推荐指数
1
解决办法
2464
查看次数

实时动态阴影补充延迟着色?

我目前有一个延迟渲染系统设置,可以渲染点光源和方向灯.我的问题是我可以选择不同形式的阴影,它可以根据点光源和定向光源制作阴影,可以使用延迟着色设置?

c++ directx graphics hlsl

4
推荐指数
1
解决办法
2728
查看次数

HLSL像素着色器 - 更改特定色调的图像颜色

我想写一个带有输入图像的像素着色器,并将一个Hue范围(即HSV)的所有颜色转换为另一个Hue范围.

我的动机很简单:我想以不同的方式为一堆不同的纹理着色,但我不想为整个纹理着色,只是在特定范围内具有色调的部分.这样,我可以绘制一辆赛车的图像,然后使用像素着色器更改汽车上的条纹和徽标的颜色.

我在网上查看了HLSL文档,找不到任何处理色调的内容.是否有在线提供的HLSL代码库?

这是我想要完成的一些伪代码:

external float SrcMinHue,SrcMaxHue,TargetMin
void changeHues(image source)
{
   foreach x,y in image:
   {
      float sourceHue = getHue(source,x,y)
      if (SrcMinHue < sourceHue < SrcNaxHue):
          setHue(source,x,y,(TargetMin + (sourceHue - MinHue))
   }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用XNA Game Studio,如果这些信息对任何人都很重要.

shader hlsl

4
推荐指数
1
解决办法
7975
查看次数

DirectX11设置着色器常量

有了XNA背景,我尝试创建一个简单的DirectX11应用程序.现在我试着弄清楚如何设置着色器常量,例如投影矩阵等.我正在阅读有关常量缓冲区的信息 - 但是在渲染之前没有简单的方法来设置一些常量,而不使用缓冲区?

constants hlsl directx-11

4
推荐指数
1
解决办法
7617
查看次数

两个具有相同元素的常量缓冲区

假设我有一个带有常量缓冲区的HLSL顶点着色器片段:

cbuffer matrixBuffer 
{
    matrix worldMatrix;
    matrix viewMatrix;
    matrix projectionMatrix;
};

cbuffer matrixBuffer2
{
    matrix worldMatrix2;
    matrix viewMatrix2;
    matrix projectionMatrix2;
};
Run Code Online (Sandbox Code Playgroud)

来自常量缓冲区的变量然后用于acctual vs function,所以我需要设置它们.

在C++中,我声明了以下结构:

struct MatrixType
{
    D3DMATRIX world;
    D3DXMATRIX view;
    D3DXMATRIX projection;
};
Run Code Online (Sandbox Code Playgroud)

在我初学者的应用程序中,我创建了常量缓冲区指针ID3D11Buffer*.

稍后在每帧方法我更新常量缓冲区,即i映射缓冲区,更新子资源,unmap缓冲区和顶点着色器中的设置缓冲区.

当我只有一个常量缓冲区时,一切都很好,但这是我的问题.

directx如何在缓冲区之间进行区分?例如我想设置worldMatrix2如何实现这一目标?

我读了msdn参考但我没有回答.

是否允许具有两个或更多具有相同大小和元素的常量缓冲区?它们是否存储在连续的内存中,所以当我设置缓冲区时,它们是按HLSL声明的顺序设置的?

c++ hlsl directx-11 vertex-shader

4
推荐指数
1
解决办法
2437
查看次数

在HLSL中使用一个包含所有相关数据或几个较小缓冲区的大缓冲区更好

如果在使用HLSL或其他高级着色器语言将数据发送到GPU时,如果有一个单独的缓冲区,我对代码设计和性能方面感兴趣.

这是特定着色器需要具有大量可变数据的地方,这些数据在运行时期间会发生变化,因此需要通过缓冲区传递信息.

我举一个非常基本的例子:

cbuffer SomeLargeBuffer : register(cb0)
{
    float3 data;
    float someData;
    float4 largeArray[2500];
    float moreData;
    ...
    ...
    ... 
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者拥有

cbuffer SamllerBuffer: register(cb0)
{
    float3 data;
    float someRelatedData;

}

cbuffer SecondSmallerBuffer : register(cb1)
{

    float4 largeArray[2500];
    float moreData;

}

cbuffer ThirdBuffer: register(cb2)
{
    ...
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

directx shader hlsl directx-11

4
推荐指数
1
解决办法
319
查看次数

如何使用C#反转XAML PNG图像的颜色?

我正在使用Visual Studio,C#,XAML,WPF.

在我的程序中,我有带有白色png图标的XAML按钮.

在此输入图像描述

我想拥有它,所以你可以通过从ComboBox中选择主题来切换到带有黑色图标的主题.

不是创建一组新的黑色png图像,有没有办法使用XAML和C#我可以反转白色图标的颜色?

<Button x:Name="btnInfo" HorizontalAlignment="Left" Margin="10,233,0,0" VerticalAlignment="Top" Width="22" Height="22" Cursor="Hand" Click="buttonInfo_Click" Style="{DynamicResource ButtonSmall}">
    <Image Source="Resources/Images/info.png" Width="5" Height="10" Stretch="Uniform" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="1,0,0,0"/>
</Button>
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml hlsl visual-studio

4
推荐指数
1
解决办法
2151
查看次数

DirectX 11 Pixel Shader什么是SV_POSITION?

我正在学习DirectX 11的HLSL,我想知道SV_POSITION是什么,它是Vertex Shader的输出,还是Pixel Shader的输入。

1:是屏幕上每个像素或对象的x,y,z?

2:为什么有4个32位浮点数?

3:顶点输出需要这个系统变量吗?

谢谢!

hlsl directx-11 pixel-shader vertex-shader

4
推荐指数
1
解决办法
5998
查看次数