此着色器代码片段是否仍会在Unity中转换为i.uv?

时间:2019-02-05 18:08:33

标签: unity3d shader

我正在遵循本教程: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 :(得分:0)

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)用于校正纵横比。如果您使用的是UV映射的方形平面,则无需为此烦恼。

总而言之,这些行等效于:

float2 uv = i.uv - (float2)0.5;