制作二维效果时:
- 可以对UI组件(Image)上挂载新的shader材质来实现效果。注意:需要写shader时对UI做一些特殊支持【否则一些UI的特性会覆盖掉,例如mask遮挡无效等。】 可以提取unity默认UI/Default的shader内容来修改。
- 可以通过屏幕后效的方式来实现效果。
方式:
- 相机挂载脚本,实现OnRenderImage(RenderTexture source, RenderTexture destination)函数。在函数里对shader赋值和对纹理的计算等。
- 直接通过shader的GrabPass抓取当前屏幕,直接在shader中处理实现效果。
注意: 通过后效的方式实现的效果一般都是大范围例如全屏的效果。
- 可以通过shader输出一个渲染纹理,将此渲染纹理来赋给RawImage达到效果。
方式: 可以将shader的第一个pass作为画布,即return fixed4(1,1,1,1); 通过在c#脚本里不断调用Graphics.Blit()方法,将通过此shader计算后的结果赋值给新的渲染纹理中,使用此纹理即可。
注意:在对二维效果制作shader时,基本上全是渲染到了一个面片的模型上,即只有四个顶点的平面,这就决定了,在vertex着色器中,可操作空间小(因为只有四个顶点,没办法去插值等),绝大多数是在片元着色器中做一些插值计算的。注意片元的差值计算问题,不要用=符号尽量使用<>来判断边界
- 使用三维来模拟二维效果,即通过改变模型的顶点着色器,实现效果,将镜头打到合适的视角来实现二维效果。
制作3d效果:
3d没什么好说的了,shader学习基本上都是3d的
|