问题标签 [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 投票
1 回答
131 浏览

unity3d - HLSL:当我将 3x3 矩阵“挤压”成 3x2 矩阵时会发生什么?

最初我认为这只是意味着最后一列被简单地丢弃,但显然当我进行这样的转换时,我得到了不同的结果,而不是仅仅声明一个 3x2 矩阵。

0 投票
1 回答
43 浏览

unity3d - “Stencil Operation”属性设置?

我知道在为着色器声明属性时,有一些类型的“输入”:浮点、范围、颜色、2D。但是当我尝试将模板操作设置为属性时。这个怎么做?我的意思是,我知道 Stencil Operation 是此列表之一(Greater、GEqual、Less、LEqual、Equal、NotEqual、Always、Never),那么如何从编辑器中指出哪个操作。

我看到了这样的一行:

_StencilOp(“模板操作”,浮点数)= 0

那么“0”代表什么?

0 投票
0 回答
147 浏览

unity3d - 如何使用 Unity3d 着色器遮盖另一个两遍着色器?

我正在开发一个游戏,我想在其中可视化用户路径 - 还显示轨道重叠的位置(颜色比正常的“未重叠”轨道更暗)。很久以前,我找到了这个答案,建议使用模板创建两遍着色器。那天很有帮助。

但最近我遇到了一个额外的要求:我想暴露一些不规则区域内的路径(网格的一部分)。对于路径的其余部分,有两个基于运行时用户选择的选项:

  1. 应标有任何其他不同的颜色(例如较深),
  2. 应该根本不可见。

我发现答案是建议在另一个着色器中使用模板,该着色器将被放入某些网格以创建“蒙版”。我做了一些调整,最终得到了这些着色器:

蒙版着色器:

和路径着色器:

正如您在蒙版着色器中看到的那样,我有:

但在路径着色器中,我有 3 个通道:“验证区域外”、“验证区域内 - 没有重叠”、“验证区域内 - 重叠”。

1. Stencil { Ref 0 Comp Equal }

2. Stencil { Ref 3 Comp Equal Pass IncrSat Fail IncrSat }

3. Stencil { Ref 4 Comp Less }

我不完全理解着色器是如何渲染的——我展示的是最接近我目标的解决方案。一般来说,它在一些简单的情况下“有效”:

  1. 此处- 所有轨道可见(有效区域外颜色较暗,如重叠期间),
  2. 在这里-当我从着色器代码中删除负责第一次通过的完整部分时,轨道外部区域被删除-很好,

但有 3 个主要问题我无法解决。

  1. 第一个问题- 当 2 个不同的网格重叠时出现“故障/闪烁”:
  2. 另一个问题- 因为模板 2) 在通过/失败情况下都会增加缓冲区,当用户转过几次时,即使在“有效”区域之外的轨道也会被渲染。
  3. 第三个问题是我不知道如何在运行时在“可见外部轨道”和“不可见外部轨道”渲染选项之间切换。

加起来:

我想要一个网格:

  1. 重叠时呈现不同的效果,
  2. 只能在某些“遮蔽”区域内渲染,
  3. 用户可以动态显示/隐藏遮蔽区域外的网格,外面的可见网格有其他颜色,

但我不知道如何在没有故障和一些奇怪的工件的情况下实现这一目标。

0 投票
0 回答
87 浏览

glsl - GLSL 到 ShaderLab

我尝试将 GLSL 着色器转换为可在 OBS 中使用的 ShaderLab 着色器。我用 OBS 一致性着色器和要转换的着色器制作了一个混合体,数学运算保持不变,但某些结构发生了变化。

我的问题是“混合”着色器无法正常工作,因此它在 OBS 中根本没有显示任何内容,即使我用作指导的文件运行良好。

希望有人能告诉我我必须以什么形状或形式编辑着色器才能使其工作。

以下文件是我对它的尝试以及原始文件。

混合着色器

至于我开始的文件:frag.glsl

还包括一个垂直着色器,但我不知道这是否重要。

vert.glsl

0 投票
1 回答
346 浏览

unity3d - 创建一个隐藏自身的 Unity 透明着色器

我的着色器代码是:

我只能得到这个结果: 在此处输入图像描述

手指向下: 在此处输入图像描述

我真正想要实现的是: 在此处输入图像描述 所以手是透明的,但它并不仅仅显示它背后的对象。我能做些什么?

编辑 1:我尝试将“ZWrite”更改为“On”并重新启动 Unity,但结果相同,手是 Oculus Hands。特别是问题是我有“ZTest Always”,当我删除它时,它已经工作了,但我还需要在固体物体之间可以看到幽灵般的手,所以我不能删除那个部分

0 投票
0 回答
44 浏览

unity3d - unity_LightColor[1] 及以上为空,对象附近有 2 个点光源

我正在编写一个几何着色器,我试图在我的场景中添加对除定向光以外的灯光的支持。在本教程的帮助下,如何为着色器添加对多个灯光的支持,我已经设法向着色器添加了一个点光源,但当我添加第二个时,只有最亮的那个才会显示。我已将问题缩小到只有 unity_LightColor[0] 包含正确的 RGB 光值,但高于此值的任何索引都是空的。

这是我用来计算顶点通道中的光的代码。还不允许嵌入图像,虽然这里是正在发生的事情的 imgur 链接:这里有红点灯unity_LightColor0

但是蓝色不占unity_LightColor1,当改变蓝色点光源的亮度时,会占unity_LightColor0

但红色不会占据unity_LightColor1

任何帮助将不胜感激!

0 投票
1 回答
39 浏览

c# - Unity中如何实现水剪平面

https://youtu.be/0NH9k4zTAqk

我正在使用相机进行水反射。

有没有办法不渲染为低于水位的高度?

就像上面的 youtube 视频一样。

对不起,我的英语不好。