问题标签 [shaderlab]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2912 浏览

arrays - 如何在统一着色语言中为数组提供一组初始值?

我试图找到一种方法来为统一着色器中的数组提供一组初始值。我基本上想这样做:

这似乎相当直截了当,但团结仍然抱怨。通常我会用谷歌搜索这个,但谷歌充斥着对如何将数组传递给着色器而不是初始化它们感兴趣的人。

有人知道如何在着色器中创建最终数组吗?

0 投票
0 回答
432 浏览

unity3d - 如何将两个透明对象渲染为一个连续对象?

我现在正在努力解决透明度问题,以使两个对象重叠并作为一层工作。理想情况下,我只会在天空盒上方有一个大的红色区域,但我会在某些时刻增加透明度。有没有有效的方法解决这个问题?

我希望它看起来像什么(从各个角度):http: //imgur.com/sN8SOtZ

它的样子(从你看到它们相交的角度):http: //imgur.com/Q7an21V

当前着色器代码:

编辑:刚刚接近解决问题,但没有真正了解如何解决。Unity 的内置粒子/添加剂已经解决了这个问题。

0 投票
1 回答
710 浏览

unity3d - 如何在 Shader 中获取 Light's Range 值?

我正在尝试编写一个简单的片段/垂直着色器,根据它是否在灯光范围内,它将从“点亮”纹理或“未点亮”纹理绘制适当的颜色。

因此,我需要将灯光之间的距离与灯光的范围进行比较。我一直在谷歌上搜索各种各样的东西,但我似乎找不到访问灯光范围值的方法。有没有办法这样做?如果没有,是否有某种派生数据可以用作替代方案?

更新

我能够在这里找到这种方法,这似乎是迄今为止最有希望的方法,但是在玩了一会儿之后,我似乎仍然无法得到我需要的东西。有人说_LightMatrix0没有人口。任何人都可以确认吗?

更新 2

unity_LightAttenUnity Shader Variables文档中找到了该变量。但是,这仅用于 Vertex Lit 着色,这并不完全理想,尤其是考虑到缺少控制台支持。有没有办法将这个变量传递给正向渲染?

0 投票
1 回答
1005 浏览

unity3d - Unity3d Shader 不会使颜色的 Alpha 通道生效

所以我设法将这个着色器放在一起,它将渲染对象的轮廓并以一定的透明度渲染对象的其余部分。这是整个代码:

除了在最终通道中为主纹理着色的颜色的 alpha 完全没有影响之外,这一切都很好。色调本身有效。

0 投票
2 回答
3514 浏览

c# - Unity Shaderlab——从屏幕空间到世界空间的变换

我正在制作一个需要世界空间坐标的后处理着色器(统一)。我可以访问某个像素的深度信息,以及该像素的屏幕位置。如何找到该像素对应的世界位置,就像函数 ViewportToWorldPos() 一样?

0 投票
1 回答
2940 浏览

unity3d - Unity将多个纹理(数组)传递给着色器?

现在在我的着色器中,我有 5 个纹理,

有没有可能我可以把它变成一个数组,这样我就不需要声明这么多纹理了?

0 投票
1 回答
528 浏览

unity3d - Unity shader如何存储uv参数?

在我的着色器中,我通过将 vertex.position 乘以某个矩阵来计算 uv。如果我不移动我的对象,这看起来很好,但是一旦我移动我的对象或缩放对象,顶点位置就会改变并且 uv 会出错。

如果shader有办法存储参数,像这样,那么我只能在第一次计算uv,然后我就使用那个uv值。

0 投票
1 回答
1222 浏览

user-interface - Unity Shader:重叠两个具有相同模板值的图层

我正在尝试为统一编写一个着色器,它将删除底层对象的所有重叠片段。我为这个问题找到了不同的解决方案,这真的很有帮助。

对我来说,这个链接(Unity 着色器突出显示重叠)是最有用的。

但现在我有另一个问题。在图片中,您可以看到 6 个通常具有相同大小和透明背景的按钮。如果这些按钮之一被选中,它会与它的邻居重叠。

下图显示了使用自定义着色器的外观。我已经通过在背景上切一个洞来显示图像解决了这个问题,但是现在我想在这些按钮上添加一个文本;如果我再做同样的事情,文本会看起来很乱。

菜单按钮正确

以下代码向您展示了我如何通过在透明框中切一个洞来解决我的问题:

这张图片显示了没有删除重叠部分的自定义着色器的情况。在这张图片中,您还可以看到,透明背景的模板值通常为 0,当它重叠时,该值变为 1。问题是背景上的图像也有一个模板值 1。所以如果我将删除模板值为 1 的所有对象,我将删除透明背景上的所有图像。顺便说一下,图像和背景包含相同的着色器。

目前看来

你能帮我解决这个问题,而不是在透明盒子上开一个洞吗?穿透选项有问题,如果我有圆形图像,其中有一些透明像素,背景会非常明亮。

非常感谢您的帮助。

0 投票
0 回答
907 浏览

unity3d - 使用 Grabpass 对错误对象进行高斯模糊(在 Unity ShaderLab 上)

我正在尝试对平面应用高斯模糊,这样平面后面的任何物体都会变得模糊,而平面前面的任何物体都不会模糊。

我的着色器的代码如下:

然而,虽然这成功地模糊了飞机后面的物体,但飞机前面的物体却有一种奇怪的发光效果: 奇怪的发光效果

放大以便看得更清楚:放大 的球体版本

我已经为此苦苦挣扎了一段时间,任何帮助将不胜感激!

0 投票
2 回答
2571 浏览

unity3d - Unity3d - 在运行时从图像中删除白色背景

我正在为儿童开发统一应用程序。

这个想法是孩子们在白色表面上绘制图像(如鱼),然后将其作为图像文件存储在文件夹中。应用程序必须在运行时导入这些,然后在二维空间中移动它们。我无法控制图像的绘制方式或在什么表面上绘制,因为这部分是由第三方 Web 应用程序完成的。我只是将它们作为共享文件夹中的图像文件接收。

问题是白色背景。如何将白色部分动态更改为透明?我正在使用 Unity 中的当前着色器,并注意到如果我手动导入具有白色背景的图像并分配类型为“粒子/乘法”的着色器,白色部分将被移除,但图像看起来也比它应该的暗得多,就像颜色不完全正确。如何在运行时使用代码执行此操作?这也是唯一的方法吗?因为我不希望图像失去颜色。

简而言之,如何动态删除白色背景?另外,值得一提的是,只有外部背景应该被移除,所以如果鱼有白色的眼睛,那不应该变成透明的。所以检测外部对我来说也是问题的一部分。

提前致谢

编辑:我开始使用不同的着色器和着色器代码,并取得了一些进展。所以我导入了一个精灵,在上面添加了一些默认的精灵着色器,在着色器代码中,添加了这一行:混合零 SrcColor 在附加图像中可见,它产生了去除白色背景所需的效果。唯一的问题是,现在鱼也有点透明了。我要做的就是让鱼像左图一样正常,但像右图一样删除背景!

图片:在精灵着色器上使用混合