我正在遵循本教程:https://www.youtube.com/watch?v=CzORVWFvZ28,将一些代码从ShaderToy转换为Unity。这是我尝试转换的着色器:https://www.shadertoy.com/view/Ws23WD。
我在教程中看到,他能够从ShaderToy中获取他的fragColor语句,而只是在Unity中返回一种颜色。但是,当我尝试使用ShaderToy的代码执行此操作时,弹出一个关于无法将其从float3隐式转换为float4的错误。我看到我的颜色变量被声明为float3,这肯定是导致该问题的原因,但是我需要一些帮助来弄清楚如何解决此问题。
我还注意到除了rgb值外,我还有一个带有fragColor变量的'a'值;我会用float4来获取(r,g,b,a)值吗?
fixed4 frag (v2f i) : SV_Target
{
//float2 uv = float2(fragCoord.x / iResolution.x, fragCoord.y / iResolution.y);
float2 uv = float2(i.uv);
uv -= 0.5;
//uv /= float2(iResolution.y / iResolution.x, 1);
float3 cam = float3(0, -0.15, -3.5);
float3 dir = normalize(float3(uv,1));
float cam_a2 = sin(_Time.y) * pi * 0.1;
cam.yz = rotate(cam.yz, cam_a2);
dir.yz = rotate(dir.yz, cam_a2);
float cam_a = _Time.y * pi * 0.1;
cam.xz = rotate(cam.xz, cam_a);
dir.xz = rotate(dir.xz, cam_a);
float3 color = float3(0.16, 0.12, 0.10);
float t = 0.00001;
const int maxSteps = 128;
for(int i = 0; i < maxSteps; ++i) {
float3 p = cam + dir * t;
float d = scene(p);
if(d < 0.0001 * t) {
color = float3(1.0, length(p) * (0.6 + (sin(_Time.y*3.0)+1.0) * 0.5 * 0.4), 0);
break;
}
t += d;
}
//fragColor.rgb = color;
return color;
//fragColor.a = 1.0;
}