作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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_SIZE
是
VIEWPORT_SIZE
.代替它。我们有:
vec2 i_resolution = VIEWPORT_SIZE;
vec2 uv = FRAGCOORD.xy/i_resolution;
排队:
vec2 uv = FRAGCOORD.xy/VIEWPORT_SIZE;
正如我在之前的回答中所说,
FRAGCOORD.xy/VIEWPORT_SIZE
是
SCREEN_UV
(或
UV
如果您不希望 Material 依赖于屏幕上的位置)。代替它。我们有:
vec2 uv = SCREEN_UV;
即使这不是您想要的,它也有利于测试。
vec2 uv = UV;
反而。事实上,在这一点上很难证明一个变量是合理的。
关于glsl - 如何在 ALBEDO 上传递着色器颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67223897/
我是一名优秀的程序员,十分优秀!