Questions tagged «glsl»

GLSL是OpenGL着色语言。使用此标记可以解决专门针对使用该语言编写的着色器的问题。对于通用着色器问题,请改用[shader]。

6
如何调试GLSL着色器?
在编写非平凡的着色器时(就像在编写其他任何非平凡的代码时一样),人们会犯错误。[需要引用]但是,我不能像其他任何代码一样调试它-毕竟不能仅仅附加gdb或Visual Studio调试器。您甚至无法进行printf调试,因为没有任何形式的控制台输出。我通常要做的是将要查看的数据呈现为彩色,但这是一个非常基本且业余的解决方案。我确信人们已经提出了更好的解决方案。 那么我该如何实际调试着色器?有没有办法遍历着色器?我可以查看着色器在特定顶点/原始/片段上的执行情况吗? (此问题专门用于调试着色器代码,类似于调试“正常”代码的方式,而不是调试状态更改之类的东西。)
45 opengl  glsl  debugging 

4
在多个GLSL着色器之间共享代码
我经常发现自己在多个着色器之间粘贴粘贴代码。这包括在单个管道中的所有着色器之间共享的某些计算或数据,以及我所有的顶点着色器(或任何其他阶段)都需要的通用计算。 当然,这是可怕的做法:如果我需要在任何地方更改代码,则需要确保在其他地方进行更改。 有保持DRY的公认最佳实践吗?人们是否只是将一个通用文件添加到所有着色器?他们是否编写自己的基本C样式预处理程序来解析#include指令?如果行业中存在可接受的模式,我想遵循它们。
30 glsl 

1
为什么我的Perlin Noise看起来“块状”?
我尝试仅凭理论自己实现Perlin Noise (遵循flafla2.github.io/2014/08/09/perlinnoise.html)。不幸的是,我无法获得“原始” Perlin Noise的外观。 下面的代码呈现Perlin Noise的块状版本的原因是什么? 我应该改进/更改代码中的哪些内容,以使其呈现出没有伪影的Perlin Noise? 我怀疑插值方式或grads向量中可能存在问题。该grads载体包含(晶格点随机向量)和(大小矢量)的点产品-适用于所有4个附近的格点。(随机向量和大小向量在第一个链接中进行了描述。) GLSL沙箱:http://glslsandbox.com/e#32663.0 float fade(float t) { return t * t * t * (t * (t * 6. - 15.) + 10.); } vec2 smooth(vec2 x) { return vec2(fade(x.x), fade(x.y)); } vec2 hash(vec2 co) { return fract (vec2(.5654654, -.65465) * dot …
21 glsl  noise  artifacts 

1
与PBR实施混淆
我发现了数学的奇妙世界,并且用PBR和命名来碰壁,所以我有几个问题:据我了解,BRDF描述了材料对光(入射的直接光和反射)的反应。但是在“ Cook-Torrance”中,我看不到任何有关反射的信息,我不了解如何对其进行整合,因此只能得到漫反射的光和反射。 我已经读过很多有关“ Oren-Nayar”等不同“扩散术语”的文章,它是否像DFG提名人中的其他“ D”一样,是Cook-Torrance的一部分?不用镜面计算就可以代替它吗? 我从搅拌机艺术家的背景中读到了很多有关“ GGX”的东西,我认为这是一种模糊的反映,但似乎我错了,现在我在许多不同的情况下(例如在微刻面正常情况下)都发现了这个GGX术语本教程中的分发 简而言之,问题是:“ Oren-Nayar”,“ GGX”和“ Cook-Torrance”如何相互关联(如果存在),以及如何在这些算法中集成“ vec3反射”? 正如我在成为数学新手之前所说的那样,因此如果您的回答“算是数学上的麻烦”,请为您的方程式写一个glsl / hlsl版本,这对我来说更容易理解,因此等效性对我有很大帮助 PS:我知道我的问题很模糊,但也跟我对这个问题的理解一样模糊。
14 glsl  pbr 

1
何时禁用透视校正插值(非透视)
在GLSL中,顶点属性的透视正确插值是默认设置-可以通过使用非透视限定符对特定的顶点属性禁用它。除了在后处理着色器中,我从未见过禁用透视校正的正确插值-还有其他用例吗?此外,从性能角度来看,它是否还会有所作为?

1
着色器中的循环性能
我想知道在着色器中集成动态循环功能的最佳方法是什么? 首先,似乎动态数组是不可能的。因此,创建最大大小的数组并仅填充其中一部分或使用预定义的大小定义数组会更好吗? 那么,迭代此数组的最佳方法是什么? 使用展开循环或动态循环进行4到128次迭代比较好吗?我还看到有可能将其展开到最大的预定义迭代次数,然后使用诸如的条件将其停止if (i == myCurrentMaximumIterationNumber)。

1
更改着色器程序时是否需要重新绑定制服或属性?
渲染场景通常涉及多个着色器程序,在我的情况下,所有着色器程序都使用相同的属性,并且至少共享一些制服。为了使它们正常工作,我目前保持安全,这意味着我每次在着色器程序之间切换时都重新绑定属性并获得适当的统一位置。因此,基本上每个帧中都有多次,这可能不是最佳方法。 因此,在切换着色器程序之后,是否有必要(通常​​)重新绑定属性和制服?又为什么呢? 如果是这样,是否有办法在程序启动时执行一次,而不必再次触摸它们(设置统一值除外)?
11 opengl  glsl  shader 

1
在片段着色器中计算纹理坐标时,为什么访问纹理要慢得多?
在GLSL中使用纹理时,最好在顶点着色器中计算最终的纹理坐标,然后使用varyings 将其移交给片段着色器。在y坐标中进行简单翻转的示例: // Vertex shader attribute vec2 texture; varying highp vec2 texCoord; // ... void main() { texCoord = vec2(texture.x, 1.0-texture.y); // ... } // Fragment shader varying highp vec2 textureCoordinates; uniform sampler2D tex; // ... void main() { highp vec4 texColor = texture2D(tex, texCoord); // ... } 如果vec2(0.5)在片段着色器中执行y坐标的翻转或什至更简单的操作(如添加到纹理坐标),则纹理访问会慢得多。为什么? 需要注意的是,例如,使用它们的加权总和来混合两个纹理在时间上要便宜得多,并且还需要针对每个像素完成,因此纹理坐标本身的计算似乎并不那么昂贵。

1
WebGL全向阴影映射问题
首先,我想说的是,我已经阅读了很多有关使用深度图和立方体贴图进行阴影贴图的文章,我了解它们是如何工作的,并且我在使用OpenGL时也有使用它们的工作经验,但是,实现时遇到了问题全向阴影贴图技术在我的3D图形引擎“ EZ3”中使用单点光源。我的引擎使用WebGL作为3D图形API,并使用JavaScript作为编程语言,这是我的计算机科学学士学位论文的目的。 基本上,这就是我实现阴影贴图算法的方式,但是我只关注点光源的情况,因为有了它们,我可以归档全向阴影贴图。 首先,我像这样积极进行正面剔除: if (this.state.faceCulling !== Material.FRONT) { if (this.state.faceCulling === Material.NONE) gl.enable(gl.CULL_FACE); gl.cullFace(gl.FRONT); this.state.faceCulling = Material.FRONT; } 其次,我创建一个深度程序以记录每个立方体贴图面的深度值,这是我在GLSL 1.0中的深度程序代码: 顶点着色器: precision highp float; attribute vec3 position; uniform mat4 uModelView; uniform mat4 uProjection; void main() { gl_Position = uProjection * uModelView * vec4(position, 1.0); } 片段着色器: precision highp float; …

1
尝试实施Microfacet BRDF,但我的结果图像错误
我正在尝试实现微面BRDF模型。我正在读塞巴斯蒂安·拉加德的幻灯片。我在代码中实现了公式,但是我认为结果图像是错误的。 黄色是材料的底色。镜面反射颜色为红色才能正确看到。 我的代码: // Fragment Shader #version 330 core in vec3 Position; in vec2 TexCoord0; in vec3 Normal; in vec3 Tangent; out vec4 FinalColor; uniform vec3 uCameraPosition; // init value: vec3(0, 0, 5) #define PI 3.1415926f #define EPSILON 10e-5f #define saturate(value) clamp(value, 0.0f, 1.0f); float BRDF_Lambert(float NdotL) { return NdotL; …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.