这款Shadertoy转换器,太牛逼了!

共 13738字,需浏览 28分钟

 ·

2021-10-28 23:22

SSRShaderToyConverter


Shader 作为可以提升游戏表现力的手段,永远是值得学习和使用的技术。

Challenge / 挑战

做一款 转换器,就意味着,对于待转换的对象,以及被转换后的对象,都要有相当程度的了解,否则就很有可能在转换阶段就出现错误。当然有时候即使转换成功,实际使用的效果也可能存在着差异。

转换后的对象 CocosCreator 是单一的目标,这里不是什么大问题,但是待转换的对象,则有多种多样的可能性。

想要将任意特效转化最后的生成产物,已经完全具备了可悲 直接使用 的能力,而不只是 暴力的翻译转换 而已,这是一个很大的挑战。

Choice / 选择

对于这么一个复杂的课题,首先寻找一个切入点进行尝试,是一个很好的选择,在缺乏经验,很难在开始前就做到完美的设计的情况下,直接开干 是个人很喜欢的方式。

对于特效文件的来源,有着各种各样的出处,比如各种游戏引擎 Unity3D GameMaker godot ..... 各种在线特效库 ShaderToy Glsl Sandbox Vertex Shader Art Shaderfrog 等等。

挑选一个对象作为切入点,是第一件要做的事情,这里选择的是 ShaderToy

1.ShaderToy 上的特效代码,都是公开的,在看到好的效果的时候,就可以对源码进行查阅2.ShaderToy 中的效果大都在片断着色器中实现,和顶点着色器没关系,这对于编写转换器起手而言是一个好的简化点3.ShaderToy 作为最为有名的在线先特效库,有着丰富的资源4.ShaderToy 的大部分编写规范已经书写方式和 Cocos Creator还是比较相近的

Freatures / 特性

经过大量的实际特效的分析和反复的尝试,目前的插件基本已经可以对大部分的特效进行一键转换了。除此之外,为了更好的配合 Cocos Creator 的中的使用方式,还增加了一些增强性的解析功能:

1.一键转换 ShaderToy 的特效文件,输出 Creator 可以直接使用的 .effect + .mtl 文件2. 支持引擎版本 >= v2.4.0 及 >=v3.1.03. 导出特效格式,支持基于 builtin-2d-sprite (>= v2.4.0) 及 builtin-sprite / builtin-unlit (>=v3.1.0)4. 支持自动修复 ShaderToy 特效中的 UV 计算,转换为 Creator 的形式5. 支持自动提取 ShaderToy 特效中的各种变量,转换为 Creator 中可以直接使用的导出属性6. 支持自动修复 ShaderToy 特效的透明度问题,使其可以配合各种不规则图片使用7. 支持自动去除 ShaderToy 特效的实体背景,使 程序纹理 类特效可以拥有 透明背景,从而更好的被应用到游戏中8. 支持自动修复 ShaderToy 特效的纹理翻转问题

Attention / 注意

Defect / 缺陷

插件进行了大量的用例测试,但即便如此,还是会有相当一部分特效,至少在当前版本中,还无法做到真正的一键转换,因为 Shader 的写法因人而异,想要做到能够无差别的解析这些特效,还是需要不停的优化,改进,才可能做到。

下面是一些已知的问题和缺陷 ( 当然大部分可以通过手动修正解,当然在后续的版本更新中,作者会寻找更好的解析处理方式 )。

1.和 GLSL 3.0 相关的特性,暂时不支持

这些特效在转换时通常会报错:

........ supported in GLSL ES 3.00 and above only

一些特有函数 texture2DLod

一些特性 位运算变量数组 ,循环次数使用变量数组的初始化复制 等等

2.多 buff 特效,这个因为 Creator 并不支持多 pass 所以无法简单的通过转换来支持这些特效

3. 部分上下文分段的 UV 转换代码,暂时无法准确的一键转换

目前的 UV 自动转换虽然能使用于大部分特效,但是还是有无法很好支持的情况,当然通过简单的手动修改是可以做到修正的。这会在后续慢慢的优化代码解析转换的方式。

Suggestion / 建议

不推荐购买的朋友:

1.对 Shader 语法基本没有什么了解,属于纯新手2.很难自行对特效代码进行一些简单的修正3.希望对将所有特效都进行一键转换,直接使用

推荐购买的朋友:

1.有一定的 Shader 语法经验

2. 对转换后的代码,能简单的进行修正

当然对于购买的用户,在转换时遇到任何,都可以随时联系我或者加群,我都会给出修改的解决方案 ( 有问题的特效,至少 90% 特效可以通过简单的修改特效代码来解决 )

How to Use / 使用手册

首先可以看下视频,来直观的感受下实际的使用方式和所能达到的效果:

SSRShaderToyConverter >= v2.4.0

SSRShaderToyConverter >= v3.1.0


Basis / 基础

在开始使用前,首先要明确一个概念,ShaderToy 上的特效种类繁多,千奇百怪,但是其实可以被大致的分为两种类型:

1.Texture FX / 纹理特效

纹理特效,很好理解,给定一些纹理图片 (一个主纹理,多个附纹理),再配合上各种 Shader 代码,给主纹理带来各种特效,如 灰度图扭曲像素化, 模糊 等等。

对于游戏中的实际应用而言,主要有:

1作为屏幕后期特效来使用2. 针对一些游戏对象,个体单独使用特效

 2. Procedure FX / 程序纹理特效

所谓程序纹理,指的是通过 Shader 代码来绘制出各种纹理效果,而不是直接使用纹理图片,比如生成 跳动的爱心四叶草 等各种奇形怪状的效果。同样对于游戏中的实际应用而言,程序纹理特效 可能比较少用,但是适当的挑选一些简单高效且效果好的特效,还是可以给游戏带来一些有趣的效果。


Select FX / 挑选特效

使用插件的第一步,是从 ShaderToy 网站上挑选自己想要运用到 Creator 的特效。

这里要注意的,就是下面的几种类型,是插件所不支持的,因此请不要选择,否则会转换失败。

1.Multi Buffs FX / 多 buff 特效 ShaderToy 上使用到多 buff 的特效,这个就像前面建议中提到的,因为 Creator 暂时无法直接支持这类特效,所以无法正确的转换。

200378bc65f77c2875cf8a264352e689.webp

2. Warnning FX / 报警特效 ShaderToy 上有部分在预览时可以看到 警告标签 的特效,这些特效是无法被正确的转换的。

3678c0dcd0904f088fbf361da1b4f18c.webp


3.Audio FX / 音乐特效 ShaderToy 上有部分特效是需要配合 输入音频 来实现的,这些特效暂时也无法被正确的转换。

981b6bd1762d1f72889cfb314a09db24.webp


除此之外的特效,都可以被用来作为插件转换的对象。

Convert / 转换

挑选好想要转换的特效后,只要将特效内容复制

09fa9edb931ef85292f913abd6b64f05.webp

并粘贴到插件的对应位置即可。然后点击按钮,就可以进行特效的转换了。

b2ecf184260c240f33ad2322eda8a9ac.webp

Apply / 启用

生成的特效和 Cocos Creator 规范的特效格式完全一致,可直接使用。

14656c8fde370a0bdd5f078746d7fbd8.webp


ec3890c33aa2ad4825ab37cab1b28328.webp

Options / 选项

由于特效的内容复杂多变,因此插件提供了一些可选项,来提高转换的准确性,或是提供一些针对 Creator 的支持。

Auto UV Fix / 自动修复 UV

ShaderToy 中几乎所有的特效,采用的 UV 系统都是和 Creator 不一样的,并且还有这千奇百怪,各种各样的写法。该选项会将特效中的这些 UV 计算方式,转换为 Creator 的形式,以确保各种类型的特效都能够在 Craetor 中正常的使用。

UV 修复是非常重要但也是比较容易出现问题的步骤,虽然特效可以被正常转换但是实际使用时会发现效果有差异。对于这类问题,可以联系作者,来进行一些手动修复的指导

Macro Variables to Uniform / 宏变量转 Shader 变量

ShaderToy 中虽然有 Uniform 关键字,但是很多作者并不会使用,而是习惯用 #define 的方式来进行变量的定义,该选项会尝试将这些变量,转换为标准的 Creator 格式变量,可以在面板中调试也可以在代码中进行直接的控制。

Uniform Variables to Uniform / 原生变量转 Shader 变量

就像上面提到的 ShaderToy 中也有 Uniform 关键字,该选项会尝试将这些变量,转换为标准的 Creator 格式变量。

Global Variables to Uniform / 全局变量转 Shader 变量

除了上述两种类型,ShaderToy 中还会使用 全局变量 的形式来定义变量,该选项会尝试将这些变量,转换为标准的 Creator 格式变量。

有时会存在作者对全局变量进行赋值的操作,这时候开启此选项会造成报错的情况,可以通过关闭该选项来解决,或是手动删除赋值的代码

MainTexture Alpha Fix / 使用主纹理 alpha 通道

ShaderToy 中的大部分特效会使用实色背景,而这些特效如果相结合到游戏中的各种不规则带透明图片使用的话会发生问题,该选项会尝试使用主纹理的透明通道,对这一问题进行修复。

这一选项,主要是配合 Texture FX / 纹理特效 进行使用

Auto Transparent Background / 动态透明背景

ShaderToy 中的大部分 Procedure FX / 程序纹理特效 都会使用实色背景,这些特效如果在游戏中直接使用会出现难以融入到游戏中的问题,该选项会提供一个可调节变量,来只能修复这一问题,达到比较好的透明背景效果。

这一选项,主要是配合 Procedure FX / 程序纹理特效 进行使用

Force UV FlipY / 强制 UV 垂直翻转

ShaderToy 中的部分特效会存在 纹理垂直翻转 的情况,改选项会尝试修复这一问题。


Test / 测试

测试编辑器版本

本次测试的所有特效用例都在 v2.4.6 和 v3.3.0 上进行过完全的测试。

此外,在对比下列版本后发现,v2.4.0 ~ v2.4.6 的 builtin-2d-sprite 特效格式并未改变,v3.1.0 ~ v3.3.2 的 builtin-sprite / builtin-unlit 特效格式同样没有发生改变。

在对下列版本编辑器进行随机取样测试后,所有抽查的特效都可以正常的进行转换并且被使用。

2.4.0
2.4.4
-----
3.1.0
3.1.1
3.2.1
3.3.1
3.3.2

测试特效

本次测试随机挑选了大量的特效来进行转换准确性和各个功能点的测试。

特效的类型主要分为两大类进行测试: Texture FX / 纹理特效 以及 Procedure FX / 程序纹理特效

目前的转换成功率还是比较可以的,部分很复杂的特效暂时还无法直接一键转换成功,但是通过简单的手动修复,就可以正常的运行起来,比如这个比较有名的蜗牛 :



下面是目前的测试用例列表,目前的总数 Texture FX / 纹理特效 + Procedure FX / 程序纹理特效 50 + 50共 100 个特效。

编号FX全局函数全局变量宏定义宏变量宏函数多纹理纹理翻转UV 修复
1Animated Glow[1]------
2Thermal Visual[2]------
3Grayscale[3]-------
41-bit Noise[4]-------
5Points Hatching[5]------
6Gaussian Blur[6]-----
7RGB Split[7]------
8Glitch[8]------
9Teal & Orange[9]--------
10Sketchy Stippling[10]-----
11Colorize Posterize[11]------
12Radial Flare[12]-----
13Simple dissolve[13]------
14Simple Edge Detector[14]-------
15Bokeh Blur[15]------
16HatchingCircles[16]-------
17TrichromiePoints[17]-------
18Dot/Line/Dither[18]-----
19Raining On Your Screen[19]----x-
20Sketch Book[20]--xx
21Sinethresholder[21]-------x
22CeramicGlassMosaic[22]------
23Earlybird Filter[23]-------
24Speckle Cross Fade[24]-----
25Portal 2 Box Flip Rotation[25]---
26texture flip[26]-------
27Page Curl Effect[27]-----
28Curl noise Image transition[28]-----
29basic film burn[29]-----
30Simple colorization[30]--------
31The Matrix color filter[31]--------
32Photoshop Glowing Edges[32]--------
33Filter Effects[33]-------
34Scatter Blur[34]-------
35Luma Fade[35]-----
36B&W blur filter[36]-----
37RGB separate filter[37]--------
38Melting snow filter[38]----
39Level filter[39]------
40Color Zebra[40]-------
41Scanline(ish) filter[41]------
42Simple 2D Cel Shading[42]-----
43Color Reduction[43]-------
44Filter: Solarization[44]-----
45Stained Glass Filter[45]-----
46Ripple filter fork for Oil stan[46]------
47Rainbow filter[47]-----
48Probabilistic quadtree filter[48]-----
49Night vision[49]------
50cartoon video - test[50]-----











编号Procedure全局函数全局变量宏定义宏变量宏函数多纹理纹理翻转UV 修复
1TBOS[51]-------
2Sphere Tracing[52]------
3Ball Of Fire[53]------
4Combustible Voronoi[54]------
5Geyser (Fast Water)[55]-----
6Pyroclastic fireball[56]---
7Heart - 2D [57]------
8Total Noob[58]-------
9Bubbles[59]-------
10Noise animation - Electric[60]----
11Planetary gears[61]-----
12Shiny Circle[62]------
13Foamy water[63]-----
14Blobs[64]-----
15Flakes[65]--------
16NEON LOVE [66]-----
17Electric Sinusoid [67]-------
18The Blue Flame [68]----
19A Spiral of Circles [69]------
20Clover[70]-------
21Interstellar [71]-----
22Snow[72]-------
23301's Fire Shader - Remix 3[73]-----
24Flame in the wind[74]-----
25The cat is a glitch[75]---
26Color Grid[76]-------
27Bokeh Paralax [77]------
28Sakura Bliss[78]----
29Wind Experiment[79]-----
30multicolored 2D metaballs[80]------
31D2 Style Portal[81]-----
32Electro[82]------
33Electric Ball[83]-----
34space rings[84]------
35Radial Energ[85]------
36Colourful Squares[86]------
37Squares Background[87]-----
38heart G[88]-----
39Another Galaxy[89]------
40Fall Guys Menu Background[90]-------
41minimalist starfield[91]----
42Topologica[92]------
43rays shader[93]------
44FakeLightMove[94]-----
45Circular noise movement[95]------
46Star Rider[96]------
47Tiled rainbow explosions[97]------
48Blocky tile[98]------
49Airy Disk[99]-----
50Heart of Fire[100]-----










Summary / 总结

SSRShaderToyConverter 是一个非常有趣同时也是作者话费了很多心血的插件项目,不仅可以帮助更多的开发者把更多的特效带到 Creator 中,方便的使用,同时也能够为开发者节省大量的特效移植时间。虽然这个项目现在还只能称得上是个 半自动 插件,但是相信随着后续的不断优化,它的自动化程度会一点一点的提高。

如果有需要的朋友,欢迎支持这个项目,购买插件后,记得加我的 QQ: 453951749 或是加群, 对于使用插件再转换过程中碰到的任何问题,都可以随时找我,我都会尽最大可能来帮助解决问题,同时也近一步完善这个插件。


References

[1] Animated Glow: https://www.shadertoy.com/view/7t2GDy
[2] Thermal Visual: https://www.shadertoy.com/view/4dcSDH
[3] Grayscale: https://www.shadertoy.com/view/4sV3zd
[4] 1-bit Noise: https://www.shadertoy.com/view/NdjSRD
[5] Points Hatching: https://www.shadertoy.com/view/fdf3zM
[6] Gaussian Blur: https://www.shadertoy.com/view/3ltGz2
[7] RGB Split: https://www.shadertoy.com/view/NdlGW7
[8] Glitch: https://www.shadertoy.com/view/lsfGD2
[9] Teal & Orange: https://www.shadertoy.com/view/XdfXRB
[10] Sketchy Stippling: https://www.shadertoy.com/view/ldSyzV
[11] Colorize Posterize: https://www.shadertoy.com/view/XdXBzf
[12] Radial Flare: https://www.shadertoy.com/view/3lXcW8
[13] Simple dissolve: https://www.shadertoy.com/view/ttcczf
[14] Simple Edge Detector: https://www.shadertoy.com/view/4sf3W8
[15] Bokeh Blur: https://www.shadertoy.com/view/3lBBWz
[16] HatchingCircles: https://www.shadertoy.com/view/wl3fWN
[17] TrichromiePoints: https://www.shadertoy.com/view/3tcBzS
[18] Dot/Line/Dither: https://www.shadertoy.com/view/tdBSRc
[19] Raining On Your Screen: https://www.shadertoy.com/view/4dXSzB
[20] Sketch Book: https://www.shadertoy.com/view/ldlcWs
[21] Sinethresholder: https://www.shadertoy.com/view/Xd33D8
[22] CeramicGlassMosaic: https://www.shadertoy.com/view/XlSGWt
[23] Earlybird Filter: https://www.shadertoy.com/view/XlSyWV
[24] Speckle Cross Fade: https://www.shadertoy.com/view/4lfGW4
[25] Portal 2 Box Flip Rotation: https://www.shadertoy.com/view/ltBcD3
[26] texture flip: https://www.shadertoy.com/view/MslyDN
[27] Page Curl Effect: https://www.shadertoy.com/view/XlX3RS
[28] Curl noise Image transition: https://www.shadertoy.com/view/tdj3W3
[29] basic film burn: https://www.shadertoy.com/view/ltlBzn
[30] Simple colorization: https://www.shadertoy.com/view/ldBfRR
[31] The Matrix color filter: http://www.shadertoy.com/view/Ndy3Dt
[32] Photoshop Glowing Edges: http://www.shadertoy.com/view/7tlXDN
[33] Filter Effects: http://www.shadertoy.com/view/3sKfzz
[34] Scatter Blur: http://www.shadertoy.com/view/XtsBz8
[35] Luma Fade: http://www.shadertoy.com/view/Ms3GzH
[36] B&W blur filter: http://www.shadertoy.com/view/Mdc3W7
[37] RGB separate filter: http://www.shadertoy.com/view/lsGXWW
[38] Melting snow filter: http://www.shadertoy.com/view/tt3XDf
[39] Level filter: http://www.shadertoy.com/view/MdcSD4
[40] Color Zebra: http://www.shadertoy.com/view/Xsl3z8
[41] Scanline(ish) filter: http://www.shadertoy.com/view/Mdd3Rr
[42] Simple 2D Cel Shading: http://www.shadertoy.com/view/4slSzl
[43] Color Reduction: http://www.shadertoy.com/view/Ml33Dl
[44] Filter: Solarization: http://www.shadertoy.com/view/ll2GWc
[45] Stained Glass Filter: http://www.shadertoy.com/view/MsfXzB
[46] Ripple filter fork for Oil stan: http://www.shadertoy.com/view/WsSXRh
[47] Rainbow filter: http://www.shadertoy.com/view/MdffDS
[48] Probabilistic quadtree filter: http://www.shadertoy.com/view/wslcWf
[49] Night vision: http://www.shadertoy.com/view/Xsl3zf
[50] cartoon video - test: http://www.shadertoy.com/view/ldl3WM
[51] TBOS: https://www.shadertoy.com/view/3tscz7
[52] Sphere Tracing: https://www.shadertoy.com/view/4dG3RK
[53] Ball Of Fire: https://www.shadertoy.com/view/lsf3RH
[54] Combustible Voronoi: https://www.shadertoy.com/view/4tlSzl
[55] Geyser (Fast Water): https://www.shadertoy.com/view/4lBGzt
[56] Pyroclastic fireball: https://www.shadertoy.com/view/MtXSzS
[57] Heart - 2D : https://www.shadertoy.com/view/XsfGRn
[58] Total Noob: https://www.shadertoy.com/view/XdlSDs
[59] Bubbles: https://www.shadertoy.com/view/4dl3zn
[60] Noise animation - Electric: https://www.shadertoy.com/view/ldlXRS
[61] Planetary gears: http://www.shadertoy.com/view/MsGczV
[62] Shiny Circle: http://www.shadertoy.com/view/ltBXRc
[63] Foamy water: http://www.shadertoy.com/view/llcXW7
[64] Blobs: http://www.shadertoy.com/view/lsfGzr
[65] Flakes: http://www.shadertoy.com/view/4d2Xzc
[66] NEON LOVE : http://www.shadertoy.com/view/WdK3Dz
[67] Electric Sinusoid : http://www.shadertoy.com/view/XdXXzr
[68] The Blue Flame : http://www.shadertoy.com/view/lsjcRt
[69] A Spiral of Circles : http://www.shadertoy.com/view/Md2yWR
[70] Clover: http://www.shadertoy.com/view/XsXGzn
[71] Interstellar : http://www.shadertoy.com/view/Xdl3D2
[72] Snow: http://www.shadertoy.com/view/Mdt3Df
[73] 301's Fire Shader - Remix 3: https://www.shadertoy.com/view/4ttGWM
[74] Flame in the wind: https://www.shadertoy.com/view/4tXXRn
[75] The cat is a glitch: http://www.shadertoy.com/view/XljBW3
[76] Color Grid: http://www.shadertoy.com/view/4dBSRK
[77] Bokeh Paralax : http://www.shadertoy.com/view/4s2yW1
[78] Sakura Bliss: https://www.shadertoy.com/view/ts33DX
[79] Wind Experiment: https://www.shadertoy.com/view/tssGW8
[80] multicolored 2D metaballs: https://www.shadertoy.com/view/ltj3D3
[81] D2 Style Portal: https://www.shadertoy.com/view/ldKGDh
[82] Electro: https://www.shadertoy.com/view/4scGWj
[83] Electric Ball: https://www.shadertoy.com/view/WdBSWR
[84] space rings: https://www.shadertoy.com/view/MsGBz3
[85] Radial Energ: https://www.shadertoy.com/view/ltcyzS
[86] Colourful Squares: https://www.shadertoy.com/view/Xd3BWH
[87] Squares Background: https://www.shadertoy.com/view/ls3XDX
[88] heart G: https://www.shadertoy.com/view/ssSSDG
[89] Another Galaxy: https://www.shadertoy.com/view/sdXSz7
[90] Fall Guys Menu Background: https://www.shadertoy.com/view/Wsdyzs
[91] minimalist starfield: https://www.shadertoy.com/view/wlKBWm
[92] Topologica: https://www.shadertoy.com/view/4djXzz
[93] rays shader: http://www.shadertoy.com/view/XtfcWH
[94] FakeLightMove: http://www.shadertoy.com/view/3lXGRB
[95] Circular noise movement: http://www.shadertoy.com/view/ttjGDz
[96] Star Rider: http://www.shadertoy.com/view/fsfGWM
[97] Tiled rainbow explosions: http://www.shadertoy.com/view/wl23zR
[98] Blocky tile: http://www.shadertoy.com/view/WllXzl
[99] Airy Disk: http://www.shadertoy.com/view/4dBXW3
[100] Heart of Fire: http://www.shadertoy.com/view/3sSXRt

浏览 52
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报