Shader学习笔记(1)- ShaderToy着色器输入参数

来源:互联网 发布:python subprocess pid 编辑:程序博客网 时间:2024/05/20 14:27

最近小弟我研究unity,学习了shader之后,发现图形学真的是很有意思,于是就想深入学习。
碰巧又知道了ShaderToy,这个网站直接帮我们搭好了写shader的平台,直接编辑Pixel Shader(或者叫Fragment Shader),就能够实现一些酷炫的效果。
小弟我打算从零开始研究一些shader的实现方法,把它当成一个读书笔记。

uniform vec3 iResolution; // viewport resolution (in pixels)
uniform float iGlobalTime; // shader playback time (in seconds)
uniform float iTimeDelta; // render time (in seconds)
uniform int iFrame; // shader playback frame
uniform float iChannelTime[4]; // channel playback time (in seconds)
uniform vec3 iChannelResolution[4]; // channel resolution (in pixels)
uniform vec4 iMouse; // mouse pixel coords. xy: current (if MLB down), zw: click
uniform samplerXX iChannel0..3; // input channel. XX = 2D/Cube
uniform vec4 iDate; // (year, month, day, time in seconds)
uniform float iSampleRate; // sound sample rate (i.e., 44100)

虽然在变量声明后有注释,但是有的注释比较让人摸不着头脑。

  • iResolution : 当前显示屏幕的分辨率。拿我自己的电脑(显示屏分辨率为1920*1080)举例,例如现在的显示窗口处于全屏状态,那么iResolution.xiResolution.y 就分别为1920和1080,以像素为单位。
  • iGlobalTime:当前shader开始运行的时间,以秒计时。
  • iTimeDelta:每帧渲染时间,以秒计时。
  • iFrame:shader回放帧(这个不是很明白),具体举一个例子就是:我们要播放一个图形移动动画,并且动画有100帧,那么将iFrame/100,能够得到一个0~1的值,可以把它认为是我们动画播放的速度,在这个基础上对图形坐标移动,那么就可以做出图形位移的效果。(参考例子)
  • iChannelTime[4]:针对于我们四个输入通道,每个通道的回放时间,以秒计时。
  • iChannelResolution[4]:四个输入通道的分辨率,以像素为单位。
  • iMouse:获取鼠标位置,xy分量取得当鼠标浮动的坐标位置,zw获得鼠标点击时的坐标位置。
  • iChannel0..3:获得四个通道对应的输入。
  • iDate:xyzw分别对应年月日时间,以秒为单位。
  • iSampleRate:音源采样率。