Articles of 着色器

SFML / GLSL中的轮廓着色器不起作用

我有一个SFML的问题。 此代码不起作用: uniform sampler2D texture; varying vec2 v_texCoords; float offset = 1.0/32; void main() { v_texCoords = gl_TexCoord[0].xy vec4 col = texture2D(texture, v_texCoords); if (col.a == 1) gl_FragColor = col; else { float au = texture2D(texture, vec2(v_texCoords.x , v_texCoords.y -offset )).a; float ad = texture2D(texture, vec2(v_texCoords.x , v_texCoords.y + offset)).a; float al = texture2D(texture, vec2(v_texCoords.x […]

D3D9CAPS提供了不寻常的最大着色指令值

我正在试图在一个硬件上实现一个顶点和像素着色器,我们正在开发一个使用DirectX 9.0c运行时的游戏。 着色器是用于粘结网格animation的,并且比我到目前为止工作的唯一的其他着色器要复杂一点,这是一个简单的二维精灵着色器。 在我的PC上开发时,粘结的网格着色器似乎工作正常,但在将其转移到目标硬件时不起作用。 这导致我检查两台机器的硬件function,以检查是否有任何差异,我得到了以下不寻常的结果: 开发机Dx9上盖结果: Maximum primitive count: 16777215 Device supports level 3.0 vertex shaders Vertex shader maximum number of instructions run when using flow control 65535 Vertex shader maximum number of constant buffers 256 Vertex shader maximum number of 30 instruction slots 4096 Vertex shader instruction predication supported Vertex shader dynamic flow control […]

为什么当我运行我的游戏时,我的着色器的纹理变成未选中状态?

我想添加一个自定义材质到我在Unity中绘制的线(使用Vectrosity )。 我正在使用Unity内置的“不亮/纹理”着色器。 当我从我的资源目录中拖放纹理到我的着色器中的“纹理”插槽时,一切都看起来不错: 但是当我点击播放,纹理消失: 我的队伍并没有出现在我的比赛中 但是,如果在单击播放之后将纹理拖动到着色器的纹理槽,贴图看起来会“粘住”,而且我的行按预期呈现: 但是,一旦我停下来开始游戏,纹理再次消失。 为什么Unity在我的游戏开始时踢出了我的纹理? 我的纹理有问题吗? 我在控制台中看不到任何警告或错误。 我尝试了许多不同的纹理,他们都做同样的事情。 我正在使用Unity 5.6.1f1。

使用多个纹理的MonoGame HLSL fx

我将旧的XNA标题转换为MonoGame,其中一个HLSL fx文件使用两种纹理。 但是不管我做什么,它只在使用MonoGame渲染效果的时候使用屏幕纹理,否则什么也不画。 我可以看到在debugging模式下,我试图传递正确的纹理在C#中,再加上它在XNA版本中正常工作。 那么为什么我的着色器只使用Monogame中的屏幕纹理? HLSL Texture2D ScreenTexture; sampler2D ScreenSampler = sampler_state { Texture = <ScreenTexture>; }; Texture2D DistortionMap; sampler2D OffsetSampler = sampler_state { Texture = <DistortionMap>; AddressU = Clamp; AddressV = Clamp; }; float4 PixelShaderFunction(float4 pos : SV_POSITION, float4 color1 : COLOR0, float2 texCoord : TEXCOORD0) : COLOR0 { // Use the DistortionMap to […]

如何在LibGdx + SpriteBatch中使用多个着色器

我正在编写一个2D游戏libgdx。 我正在使用一个SpriteBatch来绘制一些Sprites 。 现在我想用SpriteBatch来使用多个ShaderPrograms ,但不幸的是,一次只能设置一个ShaderProgram。 例如,我想用特定的颜色绘制整个场景,并希望通过在着色器中操作texCoords来为某些精灵添加视差效果。 我知道,在原生的OpenGL中,您可以在绘制调用之前启用尽可能多的着色器。 但似乎在libgdx中是不可能的。

纯金属reflection率的基本方程

我正在做一个活的壁纸,显示一个纯粹的金属物体。 由于它是一个dynamic壁纸,我可以做大量的近似…这不是一个游戏世界的完整场景。 我的着色器只需要支持这一个材质。 人们不会期望极端的细节等等。所以,例如,我甚至不用担心散射,因为纯粹的导电材料几乎没有。 所以我试图实现一个reflection的导电表面,从表示照明环境的立方体贴图中拉出reflection。 在一个非常基本的层面上看起来像这样: vec3 fresnelSchlick (vec3 f0, float cosTheta) { return mix(f0, vec3(1.0), pow(1.0 – cosTheta, 5.0)); } //… float NdV = dot(normal, viewDir); vec2 brdf = texture2D(u_brdf, vec2(u_roughness, NdV)).rg; // from a LUT vec3 reflection = textureCube(u_cubemap, reflect(viewDir, normal)); gl_FragColor = reflection * (fresnelSchlick(materialColor, NdV) * brdf.x + brdf.y); 这里我简单的math问题是,可能的最终像素颜色的范围不会产生一个适当的色调范围。 假设我的素材颜色是#0050ff,环境是单色的白色。 […]

有没有与GLSL的“地图”function相当的HLSL?

Google在这方面并没有帮助我。 这是GLSL着色器: vec3 globalIllumination(vec3 p, vec3 n) { vec3 g = vec3(0.0); float dist; for (float i = 1.0; i <= samples; i++) { dist = stepDistance * i; float d = vec3(dist – map(p + n * dist, returnColor)); g += returnColor*d/ i; } return g; } 我知道如何将其转换为HLSL,除了该地图function。 我可以使用一些帮助。

着色器资源绑定

我试图设置一个恒定的缓冲区,在我的着色器中的值。 但是一无所获,没有结果。 在着色器中的代码 cbuffer MatrixBuffer : register(b0) { float4 test; }; —————————————————————- In main part #pragma pack(push,1) struct CB_GBUFFER_UNPACK { D3DXVECTOR4 test; }; #pragma pack(pop) D3D11_BUFFER_DESC cbDesc; ZeroMemory( &cbDesc, sizeof(cbDesc) ); cbDesc.Usage = D3D11_USAGE_DYNAMIC; cbDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; cbDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; cbDesc.ByteWidth = sizeof( CB_GBUFFER_UNPACK ); device->CreateBuffer( &cbDesc, NULL, &m_pGBufferUnpackCB ); D3D11_MAPPED_SUBRESOURCE MappedResource; ic->Map( m_pGBufferUnpackCB, 0, […]

我有一个Unity插件,通过着色器生成噪声。 除了把它拖到网格上,我怎么能使用它?

我可能会问这个问题是错误的。 我正在使用湍stream库来产生噪声作为着色器。 我想要做的就是将这些着色器生成的噪声应用到我正在程序化生成的Texture2D中。 我想要做的是从噪声中获取每个像素的值,然后在程序生成纹理的同时,使用程序生成的网格中的另一种颜色“另一种颜色”来确定多less颜色。 我会张贴一个示例图片,但我不能这样做,因为我只能发布一个链接与我的声誉。 我强烈怀疑我只需要从头开始编写自己的着色器,但是没有办法从着色器中拾取噪声并将其应用到Texture2D,以便继续使用标准着色器?

如何知道我的照明着色器匹配着名的模型?

我有一些像lambert等着名模型的漫reflection和高光照明着色器。事情是,我怎么知道我的着色器实际上正在执行正确的公式? 我可以看到我的材料确实reflection光,但我怎么能确定我的公式匹配模型。 任何方式来testing这个?