Questions tagged «shaders»

在图形硬件上运行的计算机程序,可高度控制场景的渲染方式

3
对于体素渲染,更有效的方法是:预制的VBO或几何着色器?
给定一个相当静态的体素数组,效率更高:使用CPU预先生成VBO来渲染体素面(暂时忽略更高级的渲染形式,如行进立方体),或在GPU上使用几何体着色器生成脸上苍蝇? 我不是担心更新变化的体素,但是这当然是GPU版本的好处,因为您不必重建VBO。另外,GS方法感觉更现代了:) 另一方面,我还没有研究过GS如何真正与现代GPU中的栅格化管道一起工作的细节。它是将顶点输出到某种流缓存中,还是将顶点写入两者之间的普通GPU内存中?如果是后者,那么即时生成可能会减少我猜想的其余GPU任务的可用带宽和处理能力,然后在CPU上进行将更为有益。

2
如何实现快捷草效果?
我一直在看一些来自Rocket League和FIFA等游戏的屏幕截图: 我开始怀疑有人能达到捷径的效果。 它是着色器吗?它是实际的几何形状吗?还是只是纹理四边形?如果有人能指出我的方向,将不胜感激。

3
为什么在镜面反射明暗处理中使用H(阴影)代替R(phong)?
我在任何地方都找不到这样做的充分理由。phong中使用的反射向量在物理学上具有简单的基础。但是,在blinn中使用的半向量似乎没有合理的基础,并且不能构成适当的反映。但是,它已用于所有所谓的“基于物理的”阴影功能中。如果有良好的身体基础,我想知道。 我找到的原因有几个: 它的速度更快 -对此的信息参差不齐,但是即使如此,这也仍然是一个很好的理由……在1998年。 据我所知,它处理角度大于90度的效果更好 -唯一的原因是,不当使用phong术语。反射和视图的点积给出介于-1和+1之间的角度。通常将此角度钳制为0到1,这是90度问题的直接原因。重新对角度进行归一化,而不是对其进行夹紧,即可获得完整的180度覆盖范围。我拒绝相信简单的x * 0.5 + 0.5运算已经使图形世界望尘莫及了40年。 它可以更好地处理边缘 -边缘“问题”在blinn解决方案中也存在,只是程度较小。主要原因是在终结器处对区域光照的模拟不正确,这对于任何“基于物理的”着色器来说都是必不可少的。但是,即使在较简单的情况下,S型函数也可以正确地逼近软终止线。乘以兰伯特项是不正确的,因为它会不适当地衰减镜面项,这可能会抵消菲涅耳项并导致进一步的误差。 它在边缘有很长的反射 -在我看来,尽管各向异性反射可能是现实的,但blinn并不是实现它们的正确方法,因为它们仅出现在边缘。H项中的错误恰好看起来是现实的,这只是一个快乐的巧合。 这些原因都不能令人满意,我想理清这种疯狂。 我想澄清的是,我并不是在专门讨论blinn和phong ,而是在讨论向量分量H和R,它们被用作这些着色器以及其他着色器的基础。

2
即使不使用深度测试,我也会失去/获得丢弃像素的性能吗?
当我第一次搜索废弃指令时,我发现专家说使用废弃将导致性能下降。他们说,丢弃像素将破坏GPU正确使用zBuffer的能力,因为GPU必须首先为两个对象运行Fragment shader,以检查是否更靠近相机的对象被丢弃。对于我目前正在开发的2D游戏,我同时禁用了深度测试和深度写入功能。我正在绘制按深度排序的所有对象,仅此而已,无需GPU即可完成精美的工作。现在我想知道是否可以将片段着色器中的像素丢弃吗?

4
在OpenGL ES中绘制四边形的最快方法?
我正在使用OpenGL ES 2.0,我要绘制一堆四边形,希望能够像在使用GL_QUADS一样,每四边形仅传递4个顶点,但是基本上我只是想知道绘制一个四边形的最佳方法一堆单独的四边形。 到目前为止,我发现我可以做的是:-GL_TRIANGLES(每个四角形6个顶点)-退化GL_TRIANGLE_STRIP(每个四角形6个顶点) 我发现的可能性:-GL_TRIANGLE_STRIPS具有特殊的索引值,该值可重置四边形带(这意味着每个四边形5个索引,但是我不认为这是OpenGL ES 2.0)
22 opengl  3d  iphone  android  shaders 

1
船体,域和几何着色器有什么用途?
我为自己的(前任)老板做了相当多的3D游戏编程工作,也为自己的独立游戏使用了自己的自定义引擎。 最初,我从Direct3D 9和D3DX9开始,它们几乎为我完成了所有工作,并且完全不需要我考虑着色器。 在那之后,我写了我的第一个Direct3D 9着色器,但是我所做的一切大多使用一个非常简单的着色器。 在我的游戏引擎的最新迭代中,我移至Direct3D 11,并由此创建了许多着色器。我在GPU中进行了GPU蒙皮,GPU计算的粒子,大量照明和后处理效果。真的很酷的东西。 到目前为止,我仅使用了顶点和像素/片段着色器。即使还有很多事情我还没做完,但我相信我对顶点和像素/片段着色器的功能以及如何将其全部融入整个3D管线具有扎实的知识。 随着最新的发展,我对新的着色器阶段非常感兴趣。也就是说,几何着色器,甚至是更新的Hull和Domain着色器。 我从未使用过这些阶段,但是据我所知,几何着色器(如果启用)在顶点着色器之后运行,对每个变换的顶点(或每个图元一次)运行一次,并允许您丢弃顶点(和图元?)。 ,然后创建新的(我想可以追溯到管道的开头吗?)。 我的猜测是,几何着色器的主要用途是在GPU中以编程方式生成几何。通常的用法是基于单个顶点创建广告牌四边形,但是除了生成分形和其他可以以编程方式100%生成的东西之外,我并没有真正看到许多其他常见场景。 至于Hull和Domain着色器,似乎它们与细分有关(要从粗糙表面创建更平滑的表面吗?),并且必须一起使用或根本不使用。术语“补丁”在这里似乎也很常见。 有人愿意在实践上向我解释这些新的着色器阶段是什么,它们如何适合3D管线,以及在哪种情况下应该考虑使用它们?

3
我通常应该在游戏的一帧中使用几个活动着色器?5个或更多,例如100个?
在现代游戏中,通常同​​时在一个场景中同时激活多少个着色器?我知道正在使用多个着色器,游戏在每一帧中在它们之间切换,通常通过着色器绘制对象: 使用着色器一绘制所有对象 从着色器一更改为着色器二 使用着色器2绘制所有对象 不过,我知道这并不是那么简单,尤其是对于整个场景的光晕效果,渲染到纹理等效果,但是我想我们可以假设它在大多数时间都可以正常工作,对吗?“按着色器分组”方法很好,因为切换着色器是一项昂贵的操作。 一方面,您不能有太多的着色器,因为您想快速渲染场景。另一方面,您需要用于皮肤,金属,水等的许多不同的着色器(或带有分支的超级着色器-非常相似)。 理论上的,现代的,第三人称3D PC侦探游戏(如果需要的话,是DirectX 11)将使用多少个(以及哪个)不同的着色器?在某个“帧X”处,将是5个,20个或更多(例如100个活动着色器),仅计算活动着色器吗?我知道这不是一个数字,但我想知道在考虑PC游戏时,什么规模和因素很重要。 在我的示例游戏中,我将每帧使用大约9-11(将其视为不同的小型着色器或一个超级着色器-现在不重要): 皮肤着色器 眼影器(不是太多吗?但它们是不同的) 金属着色器 地面着色器 雪/雨着色器(如果需要) 着色器(如果场景中存在水) 发光着色器(仅当涉及某些特殊效果时) 发光器着色器(路灯等) 标准着色器(对于所有其他着色器,仅是标准着色) 具有法线贴图的标准着色器 2D着色器(用于GUI等) 是“很多”还是“不是很多”?我是否忘记了一些我需要的重要着色器?

2
一个人如何构造现实的“红外视觉”效果?
您将如何使用着色器构建逼真的红外视觉效果?现实的,我的意思是看起来像这个例子的现实。 我有一个想法,要制作一个纹理以确定材料散发多少热量,然后通过使用法线和视图矢量的点积来确定有多少热量到达观察者,但是我什至不确定这就是热视觉甚至可以正常工作,所以我想在开始实施可能完全错误的东西之前检查是否有更好的方法。
20 shaders 

7
现代着色书?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 我对了解着色器感兴趣:它们是什么,何时/何地使用它们,以及如何使用它们。(特别是我对水和光晕效果感兴趣,但是我对着色器的了解接近于0,因此我需要进行一般性介绍)。 我看到了很多已经有两年历史的书籍,所以我不知道它们是否仍然适用。目前,我的目标是XNA 4.0(我认为这意味着适用于Shader Model 4.0的HLSL Shaders),但是我认为通常针对DirectX 11和OpenGL 4的任何东西都是有帮助的。

1
如何用ASCII艺术效果渲染3D游戏?
我正在尝试为Unity3D中的3D游戏创建复活节彩蛋。我想用ASCII艺术暂时渲染我的游戏。 我的第一个想法是创建一个着色器来执行此操作,但是我不确定这是否正确。
19 unity  shaders 

1
产生油性/污染性水?
那里的所有着色器向导都具有如何实现油性/污染水效果的想法,类似于以下内容: 理想情况下,水不是均匀油性的,而是可以从某些来源(例如化工厂的排污口)中产生油,然后扩散到整个水体中。对于这部分,我的想法是保留“油图”作为2D纹理,该纹理确定水面上每个点的油密度。它会随着水的倾斜而自然扩散并移动;此时,卵性(我对动态波进行了波粒模拟,并且已经在水面上进行了类似的泡沫处理)。但是,由于油可能不会以与水相同的速度运动,因此我不确定这在物理上的正确性。 而且我不知道如何制作所有那些令人迷惑的颜色:-)。有什么想法吗?

1
游戏引擎设计– Ubershader-着色器管理设计
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我想实现一个带有延迟着色的灵活的Ubershader系统。我目前的想法是从模块中创建着色器,以处理某些功能,例如FlatTexture,BumpTexture,位移映射等。也有一些模块可以解码颜色,进行色调映射等。这具有我可以如果GPU不支持某些类型的模块,请更换它们,以便我可以适应当前的GPU功能。我不确定这种设计是否良好。我担心我现在可能会做出错误的设计选择,以后再为此付出代价。 我的问题是,在哪里可以找到有关如何有效实施着色器管理系统的资源,示例和文章?有谁知道大型游戏引擎是如何做到的?

4
如何获得平滑的2D照明效果?
我正在XNA中制作基于2D瓦片的游戏。 目前,我的闪电看起来像这样。 我怎样才能使它看起来像这样? 并非每个块都有自己的色彩,而是具有平滑的覆盖层。 我假设使用某种着色器,并将周围瓷砖的照明值传递给着色器,但是我是着色器的初学者,因此我不确定。 我当前的照明计算光,然后将其传递到a SpriteBatch并使用tint参数进行绘制。每个图块都有一个Color在绘制之前在我的照明算法中计算出的,用于着色。 这是一个有关我当前如何计算光照的示例(我也从左,右和下进行此操作,但是我真的厌倦了逐帧进行此操作...) 因此,到目前为止,获取和吸引人们的光是没有问题的! 我看过无数关于战争迷雾的教程,并使用渐变圆形叠加创建平滑的闪电,但是我已经有了一个不错的方法为每个瓦片分配一个闪电值,只需在它们之间进行平滑即可。 所以要复习 计算照明(完成) 绘制图块(完成,我知道我需要为着色器进行修改) 阴影图块(如何传递值和应用“渐变”)

3
为什么像素着色器不让我们直接从帧缓冲区或深度缓冲区读取?
让我在像素着色器中采样帧缓冲区或深度缓冲区将是一个非常有用的功能。即使只是能够知道当前像素背后的深度或颜色,也会很有用。 为什么OpenGL和DirectX都不允许我这样做?我原本希望存在某种硬件限制,但是Alpha混合使用帧缓冲区中的颜色进行混合计算,而Z测试会在当前位置采样深度缓冲区。为什么不直接将这些价值观展示给我们呢?我希望以后能看到吗?
18 opengl  3d  directx  shaders 

2
如何调试着色器程序?
我正在调试GLSL顶点着色器,并且无法摆脱自己做错了的感觉。 总的来说,我有两种策略来弥补跟踪的不足 我将值填充到调试颜色变化中,然后将其传递给片段着色器,然后尝试解释颜色。 我更改了顶点着色器代码,看看会发生什么。 我在想,理想情况下,我可以通过以某种方式将值写入纹理,从GPU读取纹理并打印填充在纹理中的值来弥补跟踪的不足。 我的猜测是可能会有更好的方法。有什么建议么?

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.