Articles of 着色器

我的中间渲染到后处理着色器的方法有什么问题?

我正在开发一个OpenGL项目。 本周早些时候,我成功实现了延迟着色,但是我不确定如何将信息从“延期着色器”传递到“后期着色器”。 glBindFramebuffer(GL_FRAMEBUFFER, fboId); glViewport(0, 0, int(ScreenSize.x), int(ScreenSize.y)); // Render on the whole framebuffer, complete from the lower left corner to the upper right glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //…Drawing for Opaque objects, pass all transparent objects to a seperate texture //after having drawn them using Forward Shading //glBindFramebuffer(GL_FRAMEBUFFER, 0); glViewport(0, 0, int(ScreenSize.x), int(ScreenSize.y)); // Clear the […]

GL中VertexTextureFetch的合理纹理格式

这是一个合理的GL版本,支持在OpenGL中的顶点纹理提取(VTF)? (例如GL 3.0,3.1,3.3)在进行顶点提取时,我应该期望平均video卡支持哪些纹理格式。 GL ES 2可以吗?

着色器 – 实时纹理遮罩

首先要记住的是使用RGBA值进行遮罩。 有了这个,你可以获得这种纹理和这种结果。 但是有了这个,你最多可以在纹理内部存储4个蒙版,并且在最多4个纹理之间进行混合。 我想知道是否有一种方法来存储超过4个口罩内的纹理,并能够使用此口罩纹理混合超过4个纹理。 目标是尽可能多地在纹理中存储掩膜数据。 可能吗 ? 怎么样 ?

如何正确渲染网格,特别是远距离?

我正在绘制一个网格,就像在Unity编辑器本身或任何3D编辑器,许多3D相关的应用程序和一些游戏中可以看到的一样。 但在我的情况下,这看起来不太好看。 我把一些随机的对象,使透视更可读。 请同时查看全尺寸视图,以便更清楚地查看远处的文物。 如何呈现网格 整个网格是一个大飞机。 有代表一个单元格的纹理。 单元格是通过平铺来增加的。 图片上的线条粗细如何? 这只是3架飞机(每个都有一个网格)在不同的设置之上。 我只能留下一个,但3个网格更好地展示了我的问题。 额外细节: Mipmap被禁用(网格单元在启用时很快就会消失)。 三线过滤和最大aniso设置(否则看起来更糟糕)。 我猜 我认为,距离线比像素更薄,特别是在浅角度(因此“垂直”线比“水平”更好。 结论 网格渲染显然是在我之前做了很多次,所以我认为它应该是非常广泛的知识如何绘制他们娇滴滴。 我试图谷歌它,但我试过的任何查询公式只导致完全无关的东西。 我有一些想法,我可以尝试,但我相信这将是重新发明轮子。 PS:我使用的是Unity引擎,但我相信引擎是无关紧要的。 user29244和Thebluefish建议的平面简单模糊效果真的非常不同: 最大的线条现在太模糊了,但是这是不相关的,因为容易修复。 请注意,如果您要重现它,我必须启用 mipmaping。

解释Unity Sprite – 默认着色器

我想知道为什么我们会在该着色器中使用alpha混合来渲染一个精灵,这只是一个纹理? 什么是色彩的颜色? 为什么我们在这里乘以颜色的alpha值? fixed4 c = tex2D(_MainTex, IN.texcoord) * IN.color; // why ? c.rgb *= ca; // why ? Shader "Sprites/Default" { Properties { [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {} _Color ("Tint", Color) = (1,1,1,1) [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 } SubShader { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" } […]

丢弃Z缓冲区中的透明像素

我正在用精灵来构建2D游戏。 我想使用Z缓冲来帮助阴影。 为此,我需要Unity将不透明像素写入 z缓冲区(又名深度缓冲区)。 在Unity中,精灵由多边形构成,它将整个多边形(包括透明像素)写入深度缓冲区。 这是我使用的着色器(在尝试使用此function时添加了一些垃圾) http://pastebin.com/khprCUA0 我努力了 AlphaTest更大0 alphatest:MyAlphaTestVar discard关键字 Cg的clipfunction 我怀疑一个灯光通道可能会写入深度,所以我添加了novertexlights和noambient 我会怀疑AlphaTest防止透明像素对帧或深度缓冲区有任何影响(如这里所建议的那样),但是他们仍然写入深度缓冲区! 以下屏幕截图显示了Z缓冲区中对象的不准确形状。 国王和树已经成为斑点,因为即使他们的透明像素更新在Z缓冲区(绘制使用http://willychyr.com/2013/11/unity-shaders-depth-and-normal-textures/ ): 将它与常规视图中对象的“正确”形状进行比较: 我该如何让Unity 不把透明像素写入z缓冲区? 编辑: Unity 5的帧debugging器是一个奇迹! 原来“深度纹理”实际上是在所有其他几何体之前的一个单独的通道中渲染的。 而且我很难find如何使用RenderType从这个通道中包含/排除某些对象。

Unity3D使用顶点数据在着色器中设置混合模式

我正在从iOS / Obj-C / OpenGL ES 2.0移植到Unity。 我有一个程序化的网格脚本,生成一批需要混合在一起创建游戏板的四边形。 一些四边形增加了一个突出的效果,其他人在那些变暗的场景之上。 这是用混合模式和对象的颜色来处理的。 在旧版本中,我做的东西效率不高,只是单独绘制每个四元组,根据需要设置混合模式(glBlendFunc)和颜色统一。 我尽可能地分配了类似的东西。 在Unity3D中,而不是有500个精灵游戏对象,哪个国际海事组织将难以管理。 我有一个gameObject与mesh =一个绘制调用。 我使用每顶点颜色属性,而不是统一设置每个四/精灵的颜色。 但我也想通过使用顶点数据来设置每个四元组的混合模式。 我将混合模式作为uv2数据发送。 我发现这个问题。 看到第二个答案: http : //answers.unity3d.com/questions/399074/change-blend-mode-from-outside-shader.html 哪个说你可以做到这一点: Pass { Blend [MySrcMode] [MyDstMode] } 但在示例MySrcMode和MyDstMode是着色器属性(制服),并再次设置整个绘制调用的混合模式。 我想改变它每个四分之一,这将不得不每个片段完成。 我了解GLSL着色器。 他们对我有意义。 但是Unity着色器仍然有点神秘。 统一的文档没有得到我,我找不到任何好的教程真的如何工作,以什么顺序调用什么。 我试过了: Blend [texcoord1.x] [texcoord1.y] 但是这没有用。 (这意味着它没有得到texcoord1的价值。)我的Blend是在Pass{} 。 在Pass移动它是相同的,或者产生错误取决于它的位置。 我的另一个select是做一些像gl_LastFragData东西来获取当前的片段,并做我自己的每个片段混合。 或者,我必须将使用不同混合的四边形拉出到另一个游戏对象中。 这意味着将几何graphics根据其混合模式sorting到游戏对象中,而不是其行为或创建和管理它们的脚本。

读primefaces计数器的最快方法是什么?

我有一个primefaces计数器在我的片段着色器,我的应用程序在每次drawcall后读取。 我目前正在使用GL_MAP_READ_BIT设置GL_MAP_READ_BIT 。 这绝对破坏了我的应用程序的性能。 为了让您了解primefaces计数器读取的频率,每个drawcall包含一百万个顶点。

select哪个方向灯遮蔽哪个对象

假设你有两个指向不同角度的一个球体的方向灯。 你会期望球体投下两个阴影,但事实certificate,这不是默认的行为。 现场第一盏灯是唯一投下阴影的灯。 我希望我所有的黄色球体都能从光线A上获得阴影,但是我希望我所有的蓝色球体都能从光线B而不是A上获得阴影。有没有办法做到这一点? (看起来有一个完整的前景阴影,可以使球体投下两个阴影,如果需要的话,我会尽量弄明白,但是我真的只需要每个球体一个阴影。)

HLSL像素着色器 – 颜色取决于条件

我是新来的着色器,HLSL和我一起在这个裸露的。 我在我的游戏中有一个2D瓦片地图,并且想要创建一个迷你地图,起初我只是将所有数据从一个Sprite批次复制到另一个Sprite批次,并将其渲染到一个较小的相机中。 这显然有一个性能问题。 所以我想制作一个由彩色像素组成的迷你地图,这取决于特定单元格中的内容。 我现在有一个基本着色器,将tex坐标转换为像素位置,但现在我需要一种方法来确定设置它的颜色。 我的即时决定是简单地传递一个二维数组的颜色,并使用像素的x和y坐标来获取颜色,这个崩溃的大声笑。 这是我迄今为止的着色器: sampler s0; // The width and height of the texture being sampled int width, height; float4 PixelShaderFunction(float2 coords : TEXCOORD0) : COLOR0 { float4 color = tex2D(s0, coords); // Covert the tex coordinates to pixel coordinates int2 tc = int2(width * coords.x, height * coords.y); // Here I […]