您的位置:首页 > 移动开发 > Unity3D

Unity模拟ShaderToy的默认Shader

2016-09-25 17:42 218 查看

前言

最近发现ShaderToy是个大神们经常出没的地方,经常看到很神奇的效果,一阵阵感慨!因为我所用的引擎是Unity3D,所以很想把上面好的效果移植到Unity中来。

于是一时兴起开起了博客用于记录自己利用这种方法学习的过程与总结,同时也与大家一起分享一起进步。

ShaderToy

在ShaderToy网站上新建一个Shader时默认是这个样子的:

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
fragColor = vec4(uv,0.5+0.5*sin(iGlobalTime),1.0);
}
效果是这样的(这里只是其中一帧的静态图,大家可以去官网去看动态效果):



mainImage函数就是计算每个像素的彩色图像是如何生成的,这个函数在每个像素上将被调用一次。

fragCrood是指屏幕的UV坐标,fragColor就是最终的输出颜色。

Unity

接下来我们来尝试在unity中来建立一个和上面效果一样的默认Shader。
由于ShaderToy上的大部分都是针对屏幕特效,所以我们在unity新建时选择Image Effect Shader。
片断着色器内容:
fixed4 frag (v2f i) : SV_Target
{
<span style="white-space:pre">	</span>fixed4 finalColor=fixed4(i.uv,0.5+0.5*sin(_Time.y),1);
<span style="white-space:pre">	</span>return finalColor;
}
OK,收工。

最后

虽然这个效果一般般,也并没有可以用到的地方,但是通过这次的移植还是学到了一些知识,所以再接再励,希望自己能坚持接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  unity shaderToy shader