ShaderToy
我们都知道它是一个神奇的网站,在上面有着许多炫酷的特效,各路大神集聚。但是里面shader都是GLSL写的。
如果我们想把ShaderToy上的特效移植到Unity中就需要我们手动去修改代码,修改方法无非就是:
定义一系列宏来和ShaderToy中的GLSL衔接
,如下模板:
Shader
"Shadertoy/Template"
{
Properties
{
iMouse
(
"Mouse Pos"
,
Vector
)
=
(
100
,
100
,
0
,
0
)
iChannel0
(
"iChannel0"
,
2D
)
=
"white"
{
}
iChannelResolution0
(
"iChannelResolution0"
,
Vector
)
=
(
100
,
100
,
0
,
0
)
}
CGINCLUDE
#include
"UnityCG.cginc"
#
pragma
target 3.0
#
define
vec2 float2
#
define
vec3 float3
#
define
vec4 float4
#
define
mat2 float2x2
#
define
mat3 float3x3
#
define
mat4 float4x4
#
define
iGlobalTime _Time.y
#
define
mod fmod
#
define
mix lerp
#
define
fract frac
#
define
texture2D tex2D
#
define
iResolution _ScreenParams
#
define
gl_FragCoord
(
(
_iParam
.
scrPos
.
xy
/
_iParam
.
scrPos
.
w
)
*
_ScreenParams
.
xy
)
#
define
PI2 6.28318530718
#
define
pi 3.14159265358979
#
define
halfpi
(
pi
*
0.5
)
#
define
oneoverpi
(
1.0
/
pi
)
fixed4
iMouse
;
sampler2D
iChannel0
;
fixed4
iChannelResolution0
;
struct
v2f
{
float4
pos
:
SV_POSITION
;
float4
scrPos
:
TEXCOORD0
;
}
;
v2f
vert
(
appdata_base
v
)
{
v2f
o
;
o
.
pos
=
mul
(
UNITY_MATRIX_MVP
,
v
.
vertex
)
;
o
.
scrPos
=
ComputeScreenPos
(
o
.
pos
)
;
return
o
;
}
vec4
main
(
vec2
fragCoord
)
;
fixed4
frag
(
v2f
_iParam
)
:
COLOR0
{
vec2
fragCoord
=
gl_FragCoord
;
return
main
(
gl_FragCoord
)
;
}
vec4
main
(
vec2
fragCoord
)
{
return
vec4
(
1
,
1
,
1
,
1
)
;
}
ENDCG
SubShader
{
Pass
{
CGPROGRAM
#
pragma
vertex vert
#
pragma
fragment frag
#
pragma
fragmentoption ARB_precision_hint_fastest
ENDCG
}
}
FallBack Off
}
但是也有点太麻烦了,此时我们就可以借助
GitHub上的这个工具自动转换
,方便太多了。
下面就简单介绍一下使用方法:
一:首先克隆该项目到本地,用Unity打开
里面有一些例子:
三:在Unity 打开 Window —> ShaderMan,并且copy刚才的代码到输入框里,点击转换即可在ShaderToy文件夹下找到转换后的shader文件
4万+

被折叠的 条评论
为什么被折叠?



