【发布时间】:2021-04-24 05:49:33
【问题描述】:
【问题讨论】:
【问题讨论】:
在搞砸之前,请确保已保存着色器的副本。
选项 1: 完全在 Godot 内部的解决方法:
选项 2: Godot 之外的解决方法:
将您的视觉着色器保存为“.tres”文件。这些是文本资源(因此是扩展名)。您可以使用文本编辑器打开它们。
.tres 文件看起来像一个 INI 文件。每个类别(用括号中的标题定义)都是一个资源。第一个定义着色器文件,不用管它。
在第一行之后,您会找到显示“sub_resource”的类别,每个类别都是一个节点。你也不需要碰那些。
最后,您找到了一个显示“资源”的类别。最后,您会发现如下所示的值:
nodes/frament/3/node = SubResource( 4 )
nodes/frament/3/position = Vector2( 356, 417.037 )
这就是告诉你片段着色器有一个id为3的节点在图中的位置( 356, 417.037 )(该节点的信息在文件开头附近的id为4的类别中) .
您想将“片段”替换为“顶点”。但是,请确保为它们提供与已经在顶点中的不同的 id,否则在 Godot 中重新导入时会出错,并丢失你所做的。请记住,当您将窗口切换到 Godot 时,它会自动重新导入。
您还会发现如下所示的一行:
nodes/fragment/connections = PoolIntArray( 3, 0, 0, 1, 4, 1, 0, 0 )
这些是节点之间的链接。每4个数字是一个链接。所以这里我们有两个链接。链接的编号如下:
例如,4, 1, 0, 0 表示我将节点的第二个输出 (1) 与 id 4 连接到着色器的第一个输出(作为片段着色器,即 Albedo)。
您必须仔细编辑这些链接(因为请记住,您还必须修改 id 以避免与顶点着色器中的任何内容发生冲突)。考虑不要费心编写新链接,而是在重新导入后连接 Godot 中的节点。
如果这导致比在顶点着色器中再次实际创建节点更多的工作,我不会感到惊讶。
选项 3: Change the circumstances of the problem
将视觉着色器转换为常规着色器,然后您可以简单地复制代码(该选项位于检查器面板中ShaderMaterial的Shader属性下拉列表的末尾 - 默认在右侧) .但请注意,没有转换回视觉着色器。
选项 4: Wait for Godot
您可以考虑写一个proposal for Godot on Github。一切顺利,开发人员将选择它添加到新版本的 Godot 中。那你就等着吧。
【讨论】: