Я следую этому уроку: https://www.youtube.com/watch?v=CzORVWFvZ28, чтобы преобразовать некоторый код из ShaderToy в Unity.Это шейдер, который я пытаюсь преобразовать: https://www.shadertoy.com/view/Ws23WD.
Я видел, что в этом уроке он смог взять свой оператор fragColor из ShaderToy и вместо этого просто вернуть цвет в Unity.Однако, когда я попытался сделать это с кодом, который у меня есть из ShaderToy, возникла ошибка, связанная с невозможностью неявного преобразования из float3 в float4.Я видел, что моя переменная цвета объявляется как float3, что должно быть причиной проблемы, но мне нужна помощь, чтобы выяснить, как это исправить.
Я также заметил, что у меня есть значение 'a' с переменной fragColor, в дополнение к значениям rgb;я бы использовал 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;
}