Questions tagged «shaders»

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

1
当玩家角色进入该区域之内或之外时,我该如何淡化?
当他离开该区域时,我想使他褪色。 例如,假设一个人进入建筑物。当一个人在建筑物外面时,不应该看到他,但是当他进入建筑物时,他会逐渐变得可见(使用褪色效果)。 当大象在绿色区域内时,其alpha值应为1 当大象在绿色区域之外时,其alpha值应为0
17 unity  shaders 

1
Phong照明-镜面照明有些奇怪
我实施了Phong照明。一切似乎都可以正常工作-圆环和球体都按预期方式进行了照明,等等。但是我注意到定向光的镜面照明有些奇怪。 这是两个屏幕截图。 第一: 第二: 如您所见,当相机远离物体时,更多区域具有镜面照明。 以下是简化的顶点着色器: #version 330 core layout(location = 0) in vec3 vertexPos; layout(location = 1) in vec3 vertexNorm; layout(location = 2) in vec2 vertexUV; uniform mat4 MVP; uniform mat4 M; out vec2 fragmentUV; out vec3 fragmentNormal; out vec3 fragmentPos; void main() { fragmentUV = vertexUV; fragmentNormal = …


2
OpenGL:我应该在哪里放置着色器?
我正在尝试学习OpenGL ES 2.0,并且想知道“管理”着色器的最常见做法是什么。 我之所以问这个问题,是因为在我发现的示例中(例如与android sdk一起提供的API Demo中包含的示例),我通常会看到GLRenderer类中的所有内容,而我希望将它们分开,这样我就可以拥有例如,一个GLImage对象,无论何时我想绘制带纹理的四边形(我现在仅专注于2D),都可以重用,就像我在OpenGL ES 1.0代码中一样。在我发现的几乎每个示例中,着色器仅定义为类属性。例如: public class Square { public final String vertexShader = "uniform mat4 uMVPMatrix;\n" + "attribute vec4 aPosition;\n" + "attribute vec4 aColor;\n" + "varying vec4 vColor;\n" + "void main() {\n" + " gl_Position = uMVPMatrix * aPosition;\n" + " vColor = aColor;\n" + "}\n"; …

1
GLSL,全部包含在一个或多个着色器程序中?
我正在使用OpenGL进行一些3D演示,我注意到GLSL有点“受限”(或者仅仅是我吗?)。无论如何,我有许多不同类型的材料。某些材质具有环境和漫反射颜色,某些材质具有环境光遮挡贴图,某些材质具有镜面贴图和凹凸贴图等。 是最好在一对顶点/片段着色器对中支持所有对象,还是更好地创建许多顶点/片段着色器并根据当前选择的材质进行选择?OpenGL或D3D中通常的着色器策略是什么?
17 opengl  3d  shaders  glsl 

6
如何使单位选择圈合并?
我想知道如何使合并圆选择产生这种效果。以下是说明图片: 基本上我正在寻找这种效果: 如何实现圆的合并效果?我没有发现有关此效果的任何解释。我知道投射这些纹理可以开发贴花系统,但是我不知道如何创建合并效果。 如果可能的话,我正在寻找纯粹的着色器解决方案。

1
使用分层的alpha四边形是否适合地面雾?
分层方法将使用一系列与地面平行排列的大块alpha纹理化四边形,与所有介入的地形几何相交,从而从上到下,俯视到地面时都非常有效地提供了地面雾的幻觉,而在雾中时,效果却稍差一些。朝着地平线看(见下图)。 替代地,主要基于着色器的方法将改为根据进入地面雾化基底的视距来计算密度,并基于该密度输出片段值。 在不必亲自测试每种方法的性能的情况下,我想先听听别人对分层alpha纹理方法可能会产生什么样的性能影响的经验(而不是猜测!)。我特别要问的是,透支经常会受到影响(不确定填充率对普通台式机系统的限制)。使用此方法的游戏列表,尤其是较旧的游戏,将非常有用:如果在DX9 / OpenGL2之前的硬件上可行,那么对我来说可能很好用。 关于这种效果,一个大问题是: (图片来源:lume.com的Lume) 请注意垂直雾的渐变如何连续/平滑。OTOH,使用带纹理的四层,我只能假设遍历它们时这些层会非常明显-它们越稀疏,就越明显。这与雾面对齐以每帧面向播放器的情况相反,在这种情况下,这种粗糙程度将不那么明显。
16 opengl  3d  textures  shaders 

4
固定功能与着色器:适合初学者?
我目前正在上大学,攻读计算机科学。尽管我确实计划在某个时候利用现有的引擎来制作一款小型游戏,但我现在的目标是学习基础知识:即3D编程。我已经对DirectX和OpenGL之间的选择进行了一些研究,由此得出的普遍看法是,无论您选择OpenGL还是DirectX作为培训平台,很多知识都可以转移到其他平台上。因此,由于OpenGL得到更多系统的支持(可能是选择学习内容的愚蠢理由),所以我决定首先学习OpenGL。 做出学习OpenGL的决定后,我进行了更多研究,发现我一直都不知道这种二分法:固定功能OpenGL与基于现代可编程着色器的OpenGL。起初,我认为学习基于着色器的OpenGL是一个显而易见的选择,因为这是当今行业中最常用的。但是,然后我偶然发现了Jason L. McKesson 非常受欢迎的“ 学习现代3D图形编程”,位于:http : //www.arcsynthesis.org/gltut/ 我通读了介绍性文章,并在“关于本书”部分中指出: “首先,当用户遇到必须通过可编程性解决的图形问题时,必须不可避免地放弃使用这种方法学到的很多知识。可编程性会抹去几乎所有的固定功能流水线,因此知识不容易转移。” 但同时也说明固定功能为初学者提供了更轻松,更直接的学习曲线,方法是: “通常认为,使用固定功能管线教新手图形程序员最容易。” 自然地,您可以理解为什么在学习哪种范式上可能会产生矛盾:我是否花了大量时间学习(然后在随后的学习中)固定功能的方式,还是选择从着色器开始?我主要关心的是现代可编程着色器以某种方式要求程序员已经了解固定功能管线,但是我怀疑情况确实如此。 TL; DR =作为一个有抱负的游戏图形程序员,通过固定功能或基于现代着色器的编程学习3D编程是我的最大利益吗?


1
阴影贴图文物
我想尝试为3D XNA游戏添加阴影。我已经用一盏灯和一台摄像机设置了一些测试环境。但是,我的方法遇到了工件。 我使用来自http://pastebin.com/zXi0hmsU的着色器代码渲染最终结果,并使用http://pastebin.com/rY4Gcj9N创建阴影贴图。该代码非常简单,涉及从灯光角度生成深度图,然后将其投影到相机空间并检查遮挡。 但是,从大多数角度来看,我得到的结果都很丑陋 场景由一些简单的立方体(手动构造,面向外部,背面被剔除),一盏灯(左上角所示的阴影图-看起来还可以)和一台摄像机组成。 我的阴影贴图的RenderTarget初始化为 int shadowMapSize = 512; RenderTarget2D shadowMap = new RenderTarget2D(GraphicsDevice, shadowMapSize, shadowMapSize, true, GraphicsDevice.PresentationParameters.BackBufferFormat, DepthFormat.Depth24Stencil8); GraphicsDevice.SetRenderTarget(shadowMap); GraphicsDevice.Clear(Color.White); GraphicsDevice.DepthStencilState = DepthStencilState.Default; 然后,应用该CreateShadowMap效果,然后应用LambertWithShadows效果。最后,使用绘制阴影图SpriteBatch。 其余代码仅包含为着色器提供正确的值。如有必要,我可以提供。

2
RenderMonkey是否有继任者?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 5年前关闭。 我从GLSL着色器编程开始,一直在研究RenderMonkey。可悲的是,AMD不再支持它。为什么?是否有继任者?
16 shaders  glsl 

2
GLSL Shader Effects:如何进行运动模糊?
我有一个完整的2D环境,周围有精灵,例如风景,角色等。 为了使它看起来更先进,我想实现运动模糊效果,类似于快速移动相机时的现代FPS游戏(即《孤岛危机》)模糊。 在侧滑车中,理想的效果是使这种轻微的模糊出现,从而使摄像机在移动时可以快速移动。如果有人可以给我一些这样做的技巧,我假设是在像素着色器中,我将不胜感激。

1
交换效果的实际成本
我在项目中使用XNA,在那些论坛上有时会看到这样的事实,即将效果交换为网格的成本相对较高,这让我感到惊讶,因为我认为交换效果只是复制替换着色器程序的一种情况以及适当的参数 我想知道是否有人可以确切解释此过程的成本?并在可能的情况下“相对”放置上下文? 例如,说我想使用一个短着色器来帮助拾取,我会: 更改每个对象上的效果,计算出唯一的颜色以识别它,并将其提供给着色器。 将所有对象绘制到内存中的渲染目标。 从目标获取颜色,并使用它来查找所选对象。 完成该过程所需的总时间中有哪些部分将用于交换着色器?我的直觉是,无论着色器多么简单,再次渲染场景都将比过程的任何其他部分慢一个数量级,那么为什么还要关注效果?
16 xna  shaders 

7
程序像素着色器效果有哪些很棒的示例?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 程序或屏幕空间像素着色器效果的一些好例子是什么?无需任何代码;我只是在寻找灵感。 特别是,我正在寻找不依赖于几何图形或场景其余部分的效果(因此,它们看起来可以单独在四边形上渲染)并且不基于图像处理(它们不需要“基本图像” ”,尽管它们可以包含纹理)。多遍或单遍都可以。屏幕截图或视频会是理想的选择,但创意也可以。 下面是我在寻找什么的(全部来自RenderMonkey的样品)的几个例子: 替代文字http://public.blu.livefilestore.com/y1pXcNg_0EPZVzwu1T84a4Yek373x8062rhrNCA7UcftTjCkeiY-5uAuJiBYY29x2E53p5MO-uMA8FmEquvxsPCkA/effect1.jpg?psid=1 替代文本HTTP :?//public.blu.livefilestore.com/y1p_5Lx7BdjFyFRBkbcc0WakAT7Q-99fVcFOxmTXBbG4VtoFzC0UfAj51eSnE7ZOD84EYL2Y51HhMS2nWsohhn1mQ/effect2.jpg PSID = 1 替代文字http://public.blu.livefilestore.com/y1p_5Lx7BdjFyE3KhYtHe-Cdg7XuXcJ9Ou-GKzED-kZnzACyB5ypA6NSCfsYfuKa0h3ztoDRwwq9qBddX2OfG0fhg/effect3.jpg?psid= 1个替代文字http://nv3wrg.blu.livefilestore.com/y1p1iHFwf-wytDo8HlTJca8RfckA-iTKgvLiJm0t9iz3S35YgeEnt99NMjKDgotxa3Bv90wAhOYLabzx2Sd3LoEH2Hf76fect1FM。 我知道这个问题 ; 我不是在寻求实际着色器实现的来源,而是在寻求一些鼓舞人心的想法-NVIDIA Shader Library中的想法大多需要场景或图像处理效果。

2
线宽可变的卡通/透明阴影?
我看到一些进行cel着色的广泛方法: 具有翻转法线的模型的复制和放大(对我而言不是一种选择) Sobel滤波器/片段着色器进行边缘检测的方法 模板缓冲区方法进行边缘检测 用于计算面法线和边缘法线的几何(或顶点)着色器方法 我是否假设以几何为中心的方法也可以最大程度地控制照明和线条粗细,这是正确的吗?对于可能会看到山的轮廓线逐渐合并成平原的地形? 如果我不需要地形表面的像素照明怎么办?(而且我可能不会,因为我计划使用基于单元的基于顶点或基于纹理贴图的照明/阴影。)那么我是否会更好地坚持使用几何类型方法,或者改为使用屏幕空间/片段方法?使事情更简单?如果是这样,我怎么会得到山上的“墨” 内网的剪影,而不是只有整个网格(的轮廓与轮廓内没有“墨水”的细节?(AKA 暗示的轮廓,折痕)。 最后,是否可以使用几何着色器廉价地模拟翻转法线方法?我对此的担心是,我当然可以复制每个单个顶点并相应地缩放它们,但是我将如何处理翻转法线和片段着色器中的不同着色? 我想要的-在轮廓内插入线来改变线的粗细... 我不要... 编辑:进一步的研究发现了以下... 由于我在地形上拥有大量顶点,因此即使考虑基于距离的LoD,由于所有对象的复制和缩放都涉及巨大的计算复杂性,因此无论是基于翻转法线还是基于几何着色器的方法(即使使用平截头体剔除)都不是明智的选择。上传的顶点。 考虑到我不需要在地形表面上以纯色阴影的形式进行逐像素照明,因此考虑基于面部法线的方法(否则需要正确的表面照明)也变得不太谨慎计算起来自然很昂贵。但是,他们确实提供了最好的控制权。例如,使用“艺术”笔触为边缘着色的能力:漂亮,但又不能在大规模复杂的游戏环境中真正实现。 我宁愿避免使用模板缓冲区,因为我希望在着色器中完成所有工作。(上面带有红色轮廓的示例是使用模板缓冲区-旧学校完成的。) 这样就留下了片段着色器的图像空间方法。计算复杂度降低为片段的数量,而不是顶点的数量(在我的情况下,这比几何着色器中的操作要少10-100倍)。为了生成一个g缓冲区(包括一个普通缓冲区和一个可选的深度缓冲区),需要多次渲染渲染,我们可以将不连续性滤镜(例如Sobel运算符)应用到该缓冲区。深度不连续性使轮廓和折痕产生暗示。我唯一的疑问是无法对墨迹边缘宽度进行更好的控制,尽管使用片段着色器中的正确算法,我相信这是可能的。 因此,现在的问题变得更加具体:我如何精确地在片段着色器中获得可变的边缘宽度,尤其是在外部轮廓上?

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.