Будет ли этот фрагмент кода шейдера преобразовываться в Unity как i.uv? - PullRequest
0 голосов
/ 05 февраля 2019

Я следую этому уроку: https://www.youtube.com/watch?v=CzORVWFvZ28, чтобы преобразовать некоторый код из ShaderToy в Unity.Это шейдер, который я пытаюсь преобразовать: https://www.shadertoy.com/view/Ws23WD.

Я прошел учебник и заметил, что одно из изменений, которое нужно сделать, - это взять fragCoord.xy / iResolution.xy 'и используйте вместо этого «i.uv».Но что, если у меня были «fragCoord.x / iResolution.x» и «fragCoord.y / iResolutiony»?«I.uv» заменяет оба этих утверждения?

Вот как это выглядит в моем коде:

float2 uv = float2(fragCoord.x / iResolution.x, fragCoord.y / iResolution.y);
uv -= 0.5;
uv /= float2(iResolution.y / iResolution.x, 1);

1 Ответ

0 голосов
/ 07 февраля 2019

iResolution.x и iResolution.y относятся к пиксельным размерам окна рендеринга.В единстве у вас есть _ScreenParams.x и _ScreenParams.y для размеров экранного пикселя, но вам нужно беспокоиться об этом, только если вы визуализируете эффекты экранного пространства.Если вы хотите визуализировать это как эффект на плоскости, вы используете i.uv.x и i.uv.y вместо этого для той же цели.FragCoord / iResolution имеет целью дать вам положение фрагмента в диапазоне 0-1 на вашем экране, что фактически эквивалентно UV-координате.Вычитание на 0,5 дает диапазон от -0,5 до 0,5.

Последняя строка, uv / = float2 (iResolution.y / iResolution.x, 1), предназначена для корректировки соотношения сторон.Если вы используете квадратную плоскость с УФ-отображением, вам не нужно беспокоиться об этом.

Подводя итог, эти строки эквивалентны:

float2 uv = i.uv - (float2)0.5;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...