gpt4 book ai didi

glsl - 如何在 ALBEDO 上传递着色器颜色

转载 作者:行者123 更新时间:2023-12-04 07:45:24 36 4
gpt4 key购买 nike

ALBEDO 是 vec3 而 COLOR 是 vec4 .. 我需要在 Godot 上将 COLOR 传递给 ALBEDO .. 这个着色器适用于 shadertype itemscanvas 但不适用于空间 Material ..

shader_type  spatial;
uniform float amp = 0.1;
uniform vec4 tint_color = vec4(0.0, 0.5,0.99, 1);
uniform sampler2D iChannel0;
void fragment ()
{

vec2 uv = FRAGCOORD.xy / (1.0/VIEWPORT_SIZE).xy;// (1.0/SCREEN_PIXEL_SIZE) for shader_type canvas_item

vec2 p = uv +
(vec2(.5)-texture(iChannel0, uv*0.3+vec2(TIME*0.05, TIME*0.025)).xy)*amp +
(vec2(.5)-texture(iChannel0, uv*0.3-vec2(-TIME*0.005, TIME*0.0125)).xy)*amp;
vec4 a = texture(iChannel0, p)*tint_color;

ALBEDO = a.xyz; //the w channel is not important, works without it on shader_type canvas_item but if used this on 3d spatial the effect no pass.. whats problem?

}

最佳答案

对于 ALPHA 和 ALBEDO: ALBEDO = a.xyz;是正确的。对于 a.w ,通常你会这样做:ALPHA = a.w; .然而,在这种情况下,似乎a.w总是 1。所以没有意义。
我会选择其余的代码。请记住,我不知道它应该是什么样子,也不知道 sampler2D 的纹理。 (我猜是噪声纹理,无缝)。

检查您的渲染模式。 来自ShaderToy,您有机会想要render_mode unshaded; ,这将使灯光不影响 Material 。见 Render Modes .

为便于使用,您可以使用提示 .特别是,像这样写色调颜色:

uniform vec4 tint_color: hint_color = vec4(0.0, 0.5,0.99, 1);
因此 Godot 在着色器参数中为您提供了一个颜色选择器。见 Uniforms .
您也可以使用 hint_range(0, 1)amp .但是,我不确定这一点。

仔细检查您的坐标。 我怀疑这个 FRAGCOORD.xy / (1.0/VIEWPORT_SIZE).xy应该是 SCREEN_UV (或 UV ,如果它应该留在具有 Material 的对象中)。
原来是这样的:
vec2 i_resolution = 1.0/SCREEN_PIXEL_SIZE;
vec2 uv = FRAGCOORD.xy/i_resolution;
正如我在 prior answer 中所说的, 1.0 / SCREEN_PIXEL_SIZEVIEWPORT_SIZE .代替它。我们有:
vec2 i_resolution = VIEWPORT_SIZE;
vec2 uv = FRAGCOORD.xy/i_resolution;
排队:
vec2 uv = FRAGCOORD.xy/VIEWPORT_SIZE;
正如我在之前的回答中所说, FRAGCOORD.xy/VIEWPORT_SIZESCREEN_UV (或 UV 如果您不希望 Material 依赖于屏幕上的位置)。代替它。我们有:
vec2 uv = SCREEN_UV;
即使这不是您想要的,它也有利于测试。
尝试移动相机。那是你要的吗?不?试试 vec2 uv = UV;反而。事实上,在这一点上很难证明一个变量是合理的。

关于glsl - 如何在 ALBEDO 上传递着色器颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67223897/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com