Godot 视觉着色器将代码从片段复制到顶点
Godot visual shader copy code from fragment to vertex
正如标题所言。我什至不知道这是否可能,因为我在互联网上寻找答案。
这是我需要从片段复制到顶点的代码图像。
预先感谢您的回答,我不想从头开始重写。
在你搞砸之前,确保你已经保存了你的着色器的副本。
选项 1: 完全在 Godot 中的解决方法:
- 确定您需要的输入和输出。写下来。
- 打开生成的着色代码(工具箱中的最后一项)。
- 复制相关代码(如果不知道cppy哪部分,考虑去掉其他的,复制fragment shader,然后undo)。
- 转到顶点着色器并添加一个表达式节点。
- 使用您需要的输入和输出配置节点……
- 将您的代码粘贴到此处。
选项 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为[=14=的类别中) ] 在文件开头附近)。
您想用“顶点”替换“片段”。但是,请确保给它们一个与顶点中已经存在的不同的 id,否则在 Godot 中 re-importing 时会出错,并丢失您所做的。请记住,当您切换 windows 时,Godot re-imports 会自动切换到它。
你还会发现一行看起来像这样:
nodes/fragment/connections = PoolIntArray( 3, 0, 0, 1, 4, 1, 0, 0 )
这些是节点之间的 links。每4个数字是一个link。所以这里我们有两个 link。 link的号码如下:
- 源节点 ID
- 源节点的输出索引(0为第一个输出)
- Target Node id(如果为0,表示连接到shader的输出节点)
- 目标节点的输入索引(0为第一个输入)
例如,4, 1, 0, 0
表示我将 ID 为 4
的节点的第二个输出 (1
) 连接到着色器的第一个输出(作为片段着色器, 即反照率).
您必须仔细编辑那些 link(因为请记住,您还必须修改 ID 以避免与顶点着色器中的任何内容发生冲突)。考虑不去写新的 links,而是在 re-importing.
之后连接 Godot 中的节点
如果这导致比在顶点着色器中再次实际创建节点更多的工作,我不会感到惊讶。
选项 3: Change the circumstances of the problem
将visual shader转换为常规shader,然后你可以简单地复制代码(选项在检查器面板中ShaderMaterial的Shader 属性下拉列表的末尾 - 这是默认在右边)。虽然,请注意没有转换回到视觉着色器。
选项 4: Wait for Godot
你可以考虑写一个proposal for Godot on Github。一切顺利,开发人员将选择它添加到新版本的 Godot 中。那你等等。
正如标题所言。我什至不知道这是否可能,因为我在互联网上寻找答案。
这是我需要从片段复制到顶点的代码图像。 预先感谢您的回答,我不想从头开始重写。
在你搞砸之前,确保你已经保存了你的着色器的副本。
选项 1: 完全在 Godot 中的解决方法:
- 确定您需要的输入和输出。写下来。
- 打开生成的着色代码(工具箱中的最后一项)。
- 复制相关代码(如果不知道cppy哪部分,考虑去掉其他的,复制fragment shader,然后undo)。
- 转到顶点着色器并添加一个表达式节点。
- 使用您需要的输入和输出配置节点……
- 将您的代码粘贴到此处。
选项 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为[=14=的类别中) ] 在文件开头附近)。
您想用“顶点”替换“片段”。但是,请确保给它们一个与顶点中已经存在的不同的 id,否则在 Godot 中 re-importing 时会出错,并丢失您所做的。请记住,当您切换 windows 时,Godot re-imports 会自动切换到它。
你还会发现一行看起来像这样:
nodes/fragment/connections = PoolIntArray( 3, 0, 0, 1, 4, 1, 0, 0 )
这些是节点之间的 links。每4个数字是一个link。所以这里我们有两个 link。 link的号码如下:
- 源节点 ID
- 源节点的输出索引(0为第一个输出)
- Target Node id(如果为0,表示连接到shader的输出节点)
- 目标节点的输入索引(0为第一个输入)
例如,4, 1, 0, 0
表示我将 ID 为 4
的节点的第二个输出 (1
) 连接到着色器的第一个输出(作为片段着色器, 即反照率).
您必须仔细编辑那些 link(因为请记住,您还必须修改 ID 以避免与顶点着色器中的任何内容发生冲突)。考虑不去写新的 links,而是在 re-importing.
之后连接 Godot 中的节点如果这导致比在顶点着色器中再次实际创建节点更多的工作,我不会感到惊讶。
选项 3: Change the circumstances of the problem
将visual shader转换为常规shader,然后你可以简单地复制代码(选项在检查器面板中ShaderMaterial的Shader 属性下拉列表的末尾 - 这是默认在右边)。虽然,请注意没有转换回到视觉着色器。
选项 4: Wait for Godot
你可以考虑写一个proposal for Godot on Github。一切顺利,开发人员将选择它添加到新版本的 Godot 中。那你等等。