问题标签 [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.
unity3d - unity mesh 有黑点
您好,我在 YouTube 上关注了 Sebastian League 制作的关于程序生成的视频系列,并且我关注了他的整个视频系列,但就我而言,网格中有黑点,仅在水域。我正在为那些想知道的人使用全局模式,也使用统一 2019.4.6f1。我想摆脱那些试图构建和运行的黑点,而黑点就在那里。
他的系列链接是:https ://www.youtube.com/watch?v=wbpMiKiSKm8&list= PLFt_AvWsXl0eBW2EiBtl_sxmDtSgZBxB3 我已经在 GitHub 上下载了他的项目,他的 GitHub 页面似乎没有问题:https:// github.com/SebLague/Procedural-Landmass-Generation 这里还有一张图片->这里
我正在为地形创建自己的自定义着色器,在这里
unity3d - 试图修改着色器,使颜色是垂直的而不是水平的
这个着色器(复制如下)使材质有点像径向渐变。我正在尝试修改它以使着色器效果类似于垂直/线性渐变,就像这样。我不相信它创建的是真正的渐变,而是添加颜色并在它们之间添加 alpha。它基于这个很棒的项目。
这是我目前使用此着色器并打开效果的scanlines
效果图片:https ://imgur.com/a/At0ATB5
这是我需要效果的图片:https ://imgur.com/a/aTtLhoN
这是当前编辑着色器的图片:https ://imgur.com/a/5hxMZtt (这似乎是径向的,不是吗?)
我尝试修改方向,尝试应用蒙版,但到目前为止没有任何效果。如果有人有任何建议,我将永远感激不尽。
performance - 在着色器中有效地将给定区域的像素着色为多边形
在我的应用程序中,我将屏幕划分为不同的区域。这些由多边形边界给出。一旦这个分区在 CPU 中发生,着色器现在应该给每个像素一个与其所在区域相对应的值。
目前,我正在对每个像素进行多边形点测试,这当然很慢。为了加快速度,我还计算了每个多边形的边界框以进行第一次预检查。
原则上是否有更快的方法来做到这一点?我研究了一些洪水填充算法,但它们似乎不适合在着色器中使用。
或者,如果我必须对每个像素进行多边形点检查,是否有一种算法可以计算原始多边形中包含的简化多边形,以进一步提高性能?对于像素位于边界框中但不在简化多边形中的少数情况,这只会让我对原始多边形进行多边形点检查。
unity3d - 如何将 ZWrite 通道添加到透明着色器图?
我一直在尝试使用 ShaderGraph (Unity 2019.3.0f3)从 Tim-C(这一切似乎都已经过时,甚至评论中发布的修复)实现这种效果,但据我所知,你不能做到这一点ShaderGraph,所以在查看了 ShaderLab 文档上的这个页面后,我想出了以下使用我制作的着色器图的着色器。
使用这个着色器可以很好地显示着色器图:
所以我尝试添加一个 ZWrite 通道,但这个着色器将什么都不显示(但场景视图中的轮廓仍然像它在那里一样工作):
除了我在这里写的以外,我对 ShaderLab 的经验或知识很少,那么我可以做些什么来制作我需要添加UsePass
的 pass 的工作?ZWrite
unity3d - 着色器饱和()在不应该时创建渐变
为 Unity 编写着色器,我不明白这里发生了什么。我有一个附有材料的球体。材质附加了一个着色器。着色器非常简单,它会生成一些单纯形噪声,然后将其用作球体的颜色。
着色器代码:
单纯形噪声函数来自Keijiro 的 Github。
非饱和版本(版本 A)正如预期的那样。通过将单纯形噪声乘以 10 倍,结果是一系列白色和黑色斑点。饱和(版本 B)理论上应该只是在 1 处切掉所有白色斑点,在 0 处切掉黑色斑点。但它似乎正在创建一个全新的渐变,我不知道为什么。
我假设我遗漏了一些关键假设,但我不清楚那会是什么,因为数学似乎是正确的。
unity3d - 将着色器中的 float2/vector2 属性公开给 Unity 材质检查器
在 Unity shaderlab 着色器中,您可以在编辑器中向材质检查器公开着色器属性。这可以通过将要公开的属性放置在Properties
部分中来完成,如下所示
Unity 在此处的文档中定义了一个属性列表。
但是,这不包括任何形式的 float2 或 vector2,只是单个Float
或Vector
由xyzw
.
我尝试将属性类型设置为float2
And Vector2
两者都返回错误Parse error: syntax error, unexpected TVAL_ID at line 7
Vector
或试图通过只设置一半的成员来减少一半
返回错误Parse error: syntax error, unexpected ')', expecting ','
我可以只使用 Vector 类型并且只使用它xy
,但这会导致 UI 不清楚,因为检查器中现在有两个未使用的元素,并且找不到HideInInspector
允许您隐藏zw
值的 Property Attribute 或 Drawer(例如)检查员。
那么有没有办法使用属性类型公开 float2 ?或者,您可以在编辑器中将两个浮动属性彼此相邻放置,例如平铺/偏移抽屉是标准2D
属性类型(可能类似于[EditorGUILayout.BeginHorizontal][2]
)?
unity3d - 如何在 Unity 运行时创建 Shader?
我想在 Unity 的运行时创建着色器。有什么办法吗?我发现文章在 Unity3D 的运行时创建 GLSL 着色器,
但这不再有效,因为 Unity 不接受
new Material({shader_code_here});
它需要new Material(Shader.Find("{Shader name in project}");
任何帮助表示赞赏,谢谢。