Articles of 着色器

统一 – 用一个不透明的部分遮挡生成的网格的透明部分

我正在制作一个程序化的由块组成的体素世界。 一些块具有非立方体形状(坡道),并且一些块是透明的(水)。 所有的块都是同一个网格的一部分。 网格由两个子网格构成,两个网格都使用统一的标准着色器,一个使用不透明渲染模式,另一个使用透明模式。 我想允许水块在与斜坡相同的位置渲染,水正确地出现在地面上。 这里是一个水块旁边的斜坡块的图像: 但是,当我结合他们,我得到以下效果: 我已经设置透明着色器写入到Z缓冲使用: meshRenderer.materials[1].SetInt("_ZWrite", 1); (否则只有水块可见) 这是我的渲染网格的代码: filter.mesh.Clear(); filter.mesh.vertices = meshData.vertices.ToArray(); filter.mesh.subMeshCount = 2; filter.mesh.SetTriangles(meshData.triangles.ToArray(), 0); filter.mesh.SetTriangles(meshData.transparentTriangles.ToArray(), 1); filter.mesh.uv = meshData.uv.ToArray(); filter.mesh.RecalculateNormals(); meshData.triangles包含不透明块的三角形,而meshData.transparentTriangles包含透明块的三角形。 为了避免在同一个位置有两个三角形,我尽量略微偏移了水块,并且几乎给了我想要的效果,除了某些原因,不透明的块变得透明,即使它的三角形是由不透明的着色器: https:// i.stack.imgur.com/zlSKl .png (该链接很奇怪,因为它不允许我发布第三个图像链接,因为我没有足够的声望,请删除空格) 任何帮助解决这个问题将不胜感激。 谢谢。

突出显示着色器,但使用触摸点/鼠标

我已经使用GLSL完成了以下高亮着色器。 我想要做的是获得鼠标坐标,并从这一点“开始”突出显示。 那可能吗 ? 什么是math或背后的想法呢? https://youtu.be/8etJho4agpg

为什么着色器的性能比简单的Color.Lerp();更糟?

所以我做了一个基于瓦片的游戏,目前正在研究战争迷雾,我听说正确的方法是使用着色器。 经过几次尝试,使其正常工作,我想testing的性能,看看是否有足够的收益来追求这个解决scheme…但令我惊讶的是,我得到了30FPS的性能打击,现在我想知道为什么发生这种情况,我应该怎么做,简单的C#/ monogame代码或HLSL? 编辑:地图大小= 300 x 300 现在我的代码:C# protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); spriteBatch.Begin(transformMatrix: Camera.GetViewMatrix()); for (int i = 0; i < bord_height; i++) { for (int j = 0; j < bord_width; j++) { else if (Players[PlayerID].UncoveredMap[tiles[i, j]] == Types.MapVisibility.NotWatched) { else if (drawingIndex == 1) { switch (tiles[i, j].HeightType) { case […]

着色器:如何在“添加”着色器的边缘添加模糊/发光效果

我正在尝试在红色边缘周围添加一个发光/模糊效果,如下图所示: 红线使用线渲染渲染,设置如下所示: 使用粒子/添加剂着色器的材质如下所示: 我的问题是如何在红线边缘添加发光/模糊效果,同时保持透明效果? 是否有任何现有的着色器脚本,我可以使用? 任何帮助将深表感谢!

在Unity中只让一个物体的一面受光

所以我想在我的游戏中达到一个看起来像这样的视觉效果 意思是我不想让我的地下城墙的外部受到光线的影响。 现在我知道这是可能的,如果对象itslef是用2种材料创建的,这样我可以使背部材料变成黑色。 但是我想知道是否有一个简单的方法来实现这个着色器。

着色器投射阴影,不会收到阴影,也不会渲染任何纹理/模型?

一个奇怪的位,但我在这种情况下,我需要着色器本质上没有渲染和投下阴影! 我发现这虽然有一些谷歌search,但可悲的投下阴影本身是不可取的。

如何在Unity中的MRT着色器中制作自定义的类似GrabPass的sampler2D?

我只知道编写着色器的基础知识,所以我不知道如何才能做出与Unity的Grabpass类似的function,因为当前只能写入的RenderTexture可以更改为只读,并在着色器中用于sampler2D。 我为我的相机设置了两个渲染目标,在一个着色器中写入两个目标,但在另一个着色器中,我只写入一个,但需要从另一个着色器读取。 我尝试设置我需要从材质属性读取的rendertexture,但即使第二个着色器当前没有触及rendertexture,我相信rendertexture仍然是只写,因为从它读取什么都不返回。 我最初使用GrabPass,但它不适用于不同的相机视口reflection,以及虽然它工作,但对我来说没有多大意义,因为我不仅写作rendertextures而不是“屏幕”(GrabPass是应该让一个屏幕区域的采样器即将被绘制,即使我没有直接写在屏幕上),但我使用了2个rendertextures作为目标,但它只能从一个,第一个我必须改变rendertextures的顺序,以便GrabPass采样器从正确的第一个rendertexture抓取。 此外,如果可能的话,我想避免GrabPass的假设成本,因为我不认为我需要做一个新的纹理,只是暂时使一个rendertextures只读,并使用它在sampler2d,但我知道几乎没有关于这一点。 1)我使用rendertextures new RenderTexture(Screen.width,Screen.height, 24); 2) public Material lighting; … Camera.SetTargetBuffers ( new RenderBuffer[2] { shadedTexture.colorBuffer, worldTexture.colorBuffer, }, shadedTexture.depthBuffer ); lighting.SetTexture("_World", worldTexture);" 3) _World ("World", 2D) = "white" {} sampler2D _World; tex2D(_World, screenUV); 在其他着色器中,这是碎片返回结构 struct PixelOutput { fixed4 shaded : SV_Target0; fixed4 world : SV_Target1; };

绽放辉光的替代品?

我正在做一个安卓游戏。 移动电话的graphicsfunction通常非常有限,所以我不希望使用标准的后期处理,因为性能上的缺陷。 不过,我确实希望游戏中的某些物体能够像爆炸,珠宝等一样发出光芒,就像过去在N64和PS1这样的旧硬件上一样。 什么方法和做法是常见的,以获得所需的外观?

如何基于角色视线网格和着色器创建一场雾战?

我有一个使用透视图的3D游戏,通过光线投射,我创建了一个代表角色视线的网格。 我正在寻找一种让这个网格外面的整个区域“变暗”的方法(比如老派的战争迷雾 – 未探测到的=黑色的,探索的,但是没有看到=变暗的),最好使用着色器? 在场景之上的黑色网格与透视摄像机+网格不一样,因为它们是基于相机而不是单元创建的。 (即,我希望着色器在人物视线上行事,而不是像摄像机看到的角色视线 – 否则单位可以看到墙后)。 任何人有任何关于如何实现这一目标的指针? 在下面的图片中,白色区域是由光线投射创建的网格,我想创建一个雾化的着色器,使屏幕空间中的LoS网格之外的所有东西变暗。 结果应该和你在老roguelikes中看到的相似,我认为这叫做“阴影投射”,但是在3D中。

使用网格在地形上绘制网格 – Shader Depth和Z-Buffer

我想要实现的是在地形上渲染一个(巨大的)网格。 为此,我正在使用四边形生成的网格,其中每个图块的顶点Y值与地形相同,以便像地形一样“塑造”这个网格。 我的问题是,这个网格应该总是呈现在地形,保持每个其他对象呈现在这个网格的顶部。 正如你应该猜到的,我是着色器编程的初学者。 所以这里有一些上限: 使用简单的不亮透明着色器 (使用ZTest,ZWrite和Cull值)渲染网格: 正如你所看到的那样,z格斗有问题,当格子总是被画在最上面的时候。 因为地形有很多的“峰”,四边形应该是有很多顶点的平面才能够跟随地形(或者上升很多的网格会使它漂浮在地形)。 将ZTest更改为始终 : 在这里我遇到了这样的问题:山背后的瓦片在不应该的时候仍然被绘制出来,这是因为它忽略了z-sorting,因此也渲染了其他物体。 我已经尝试使用另一个着色器通道首先写入到z缓冲区,以避免在山背后渲染瓦片没有成功。 我想我错过了与地形着色相关的东西,但我不知道它是什么。 任何帮助都感激不尽。