微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Godot 视觉着色器将代码从片段复制到顶点

如何解决Godot 视觉着色器将代码从片段复制到顶点

正如标题所说。我什至不知道这是否可能,因为我在互联网上到处寻找答案。

enter image description here

这是我需要从片段复制到顶点的代码的图像。 在此先感谢您的回答,我不想从头开始重写。

解决方法

在您搞砸之前,请确保您已保存着色器的副本。


选项 1:完全在 Godot 内部的解决方法:

  1. 确定您需要的输入和输出。写下来。
  2. 打开生成的着色代码(工具箱中的最后一项)。
  3. 复制相关代码(如果您不知道要 cppy 的部分,请考虑删除其他所有内容,复制片段着色器,然后撤消)。
  4. 转到顶点着色器并添加一个表达式节点。
  5. 使用您需要的输入和输出配置节点......
  6. 将您的代码粘贴到那里。

选项 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 不同的 id,否则在 Godot 中重新导入时会出错,并丢失您所做的。请记住,当您将窗口切换到 Godot 时,它会自动重新导入。

您还会发现如下所示的一行:

nodes/fragment/connections = PoolIntArray( 3,1,4,0 )

那些是节点之间的链接。每4个数字是一个链接。所以这里我们有两个链接。链接的编号如下:

  • 源节点 ID
  • 源节点的输出索引(0为第一个输出)
  • Target Node id(如果为0,表示连接到shader的输出节点)
  • 目标节点的输入索引(0为第一个输入)

例如,4,0 表示我将 ID 为 1 的节点的第二个输出 (4) 连接到着色器的第一个输出(作为片段着色器,即是反照率)。

您必须仔细编辑这些链接(因为请记住,您还必须修改 id 以避免与顶点着色器中的任何内容发生冲突)。考虑不去写新链接,而是重新导入后连接Godot中的节点。

如果这导致比在顶点着色器中再次实际创建节点需要更多的工作,我不会感到惊讶。


选项 3: Change the circumstances of the problem

将视觉着色器转换为常规着色器,然后您可以简单地复制代码(该选项位于检查器面板中ShaderMaterial的Shader属性下拉列表的末尾 - 默认情况下在右侧) .不过,请注意,没有转换回可视化着色器。


选项 4: Wait for Godot

您可以考虑编写一个 proposal for Godot on Github。一切顺利,开发人员将挑选它添加到新版本的 Godot 中。那你等着吧。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。