Как я могу преобразовать эти фрагменты кода fragColor из ShaderToy, чтобы они работали в Unity? - PullRequest
0 голосов
/ 06 февраля 2019

Я следую этому уроку: 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;
        }
...