1.前端实战:从零到一实现H5拼小游戏(附源码)
2.推荐6个鲜为人知的拼图免费GIF网站
3.卡通渲染——360度脸部SDF光照方案
4.拼图用什么软件
前端实战:从零到一实现H5拼小游戏(附源码)
去年,我开发了一个基于H5、源码JavaScript和CSS3的下载拼图小游戏。这款游戏利用了我自己封装的拼图类Jquery框架Xuery,融合了许多经典的源码JavaScript算法和CSS3特性,对提升大家的下载word doc源码编程能力大有裨益。文章末尾将提供源码获取方式,拼图供大家学习体验。源码
由于这款应用属于H5游戏,下载为了使项目更轻量,拼图我没有使用第三方UI库。源码如果大家想使用基于Vue的下载第三方移动端UI库,我可以推荐几个我之前使用过的拼图靠谱组件库:[此处省略推荐内容]。以上推荐的源码都是社区完善、bug较少的下载组件库,大家可以试试看。
回到我们的小游戏开发,主要考验大家对JavaScript和CSS3的掌握程度。学习完这篇文章后,相信大家对JavaScript和CSS3的编程能力都会有极大的提升。之后,我还会介绍如何使用canvas实现生成战绩海报图的功能。
我们先来看看游戏的预览界面:
本文的算法实现方式在之前的拼拼乐文章中已有说明,这里主要介绍核心算法,至于vue-cli的使用方法,我之前也写过对应的文章,大家可以研究学习一下。vue-cli搭建项目方式如下:[此处省略搭建方法]。js 引擎源码
关于vue-cli3配置实战,可以参考《一张图教你快速玩转vue-cli3》。
目前,我主要整理了以下核心功能,接下来我会一一为大家实现:实现纯JavaScript上传预览、实现拼图分割功能、实现洗牌算法、实现生成战绩海报功能。
1. 实现纯JavaScript上传预览:文件上传预览主要采用FileReader API实现,原理是将file对象传给FileReader的readAsDataURL,然后转化为data:URL格式的字符串(base编码)以表示所读取文件的内容。具体代码如下:[此处省略代码]。
2. 实现拼图分割功能:一般处理拼图游戏时,我们会采用以下方案:使用canvas分割、采用n张不同的切好的切片(方法简单,但会造成多次请求)、动态背景分割。经过权衡,我选择了一种自认为比较优雅的方法——动态背景分割,只需使用1张,然后利用CSS切割,有点像经典的雪碧图。具体实现如下:[此处省略实现方法]。
3. 实现洗牌算法:洗牌逻辑依托于随机算法,结合坐标系,实现一个随机生成二维坐标系的逻辑,然后通过改变每个切片的源码还是压制translate位置,配合过渡动画,即可实现洗牌功能和洗牌动画。具体实现如下:[此处省略实现方法]。
4. 实现生成战绩海报功能:生成战绩海报我采用canvas来实现,对于canvas的api不熟悉的可以查看MDN,讲得比较详细。这里我简单实现一个供大家参考:[此处省略实现方法]。
H5拼图小游戏我已在github开源,感兴趣的朋友可以在我github上学习参考。以上逻辑部分的代码可以直接整合到vue项目中,由于实现比较简单,这里我就不详细介绍了。
如果想学习更多H5游戏、webpack、node、gulp、css3、javascript、nodeJS、canvas数据可视化等前端知识和实战,欢迎在《趣谈前端》一起学习讨论,共同探索前端的边界。
推荐6个鲜为人知的免费GIF网站
寻找免费且优质GIF制作工具?这里为您精心挑选了六个鲜为人知的网站,满足您的需求。
首先,是Piskel,一个免费在线编辑动画与像素艺术的刷社区源码编辑器,无需下载,直接在浏览器中创作与预览动图,并可导出为GIF、PNG等多种格式。您只需点击“Create Sprite”,绘制动画,实时检查,调整帧延迟即可。同时,源代码开源,您可访问GitHub了解更多。官网地址:[piskelapp.com](]()
Giphy是一个在线GIF搜索引擎,搜索互联网上的GIF资源,被称为GIF界的搜索引擎。在搜索框输入关键词即可快速找到所需GIF,GIF大小不得超过MB且时间不超过分钟。官网:[giphy.com]()
然后是Gifntext,一个在线免费的GIF编辑器,让你能直接在GIF上添加文本和图像,功能全面。您只需上传GIF或URL,即可开始编辑。访问:[gifntext.com]()
GIF无限缩放是一个独特网站,提供创建循环动画图像头像的服务,通过上传多张,生成缩放的动画图像,实现动态效果。摇卦源码最高支持x像素,文件大小小于2 MB。访问:[gif-in-gif.com]()
以上推荐的GIF制作工具,操作简易、功能全面且均为免费,助您轻松创建出满意的GIF动图。记得访问官方网站了解详细使用说明与教程,开始您的创意旅程。
卡通渲染——度脸部SDF光照方案
效果展示:
目前实时渲染领域卡通渲染脸部光照主要有两种实现方法:修改法线的方案和使用SDF的方案。关于脸部卡通渲染方案的介绍,可以参考这篇文章。
在修改法线的方案中,虽然模型顶点数有限,例如上面的模型已经很细致,但只有5k个顶点,适合传递球形法线做比较柔和的光照效果,但表现复杂的结构较为困难。修改模型拓扑的方法也不是特别优雅。我个人更倾向于使用法线贴图,自己也在研究将SDF烘培成法线贴图的方法。目前的结果并不满意,但如果有意思的结果,我将分享给大家。
使用SDF的方案目前在市场上使用较为广泛,新出的游戏通常都会采用这种方式。在实现上,SDF的方案并不困难,但使用 Unreal 引擎时,很难优雅地通过改管线方法实现。因此,我更倾向于研究法线贴图方案。
当前SDF方案的主要问题是没有Z轴上的变化,这也是本文主要解决的问题。实现思路很简单,目前的SDF只画了一组水平轴的光照,只需把其他所有轴的光照都画出来即可。我早在两三年前看到原神的SDF方案时就想到这个方法,相信关注卡通渲染的各位也想到过。然而,几年过去了,没有看到任何一篇文章实现了这个方案,大家都觉得把所有方向的光照都画出来工作量太大,不敢尝试。因此,我尝试实现并分享给大家。
以下是实现流程概要:
1. 画好各个角度的光照,我一共画了张图,稍微偷懒可以少画几张。
2. 把画好的光照图转成SDF,然后拼成一张图集。
3. 通过光源角度计算合适的uv,采样4次进行插值。
绘制光照主要依赖手工绘制,我花了大约一周的时间完成这张图。如果有人愿意用美术能力来完成这任务,效果可能会更好。我将光照图画成9行9列,其中第一行和最后一行只有一张图,总共是9x7+2=张。每一行代表平行光从下面的半球从上到下的9种不同的经度投射到脸上,每一列代表9种不同的纬度,第一行和最后一行平行光从正上和正下投射过来,所以只有一张。
在绘制光照图时,我注意涂出了uv的边界,这样生成的SDF在uv边界效果不会出问题。下面是一个反面例子。下面是动画里的光影变化作为参考。
为了将黑白的光照图转为SDF,我使用了8ssedt算法生成的。接下来,把所有的光照图拼成一张图集。
使用插值后的SDF时,必须保证后面的光照覆盖前面的光照,否则无法正确显示光照效果。例如,下面这套SDF图中,光照图的范围从左到右是逐渐增大的。这会导致当光从前方照过来时,整个脸必须是完全亮的,不可能出现脸的后方没被照亮的效果。
下面是另一个例子,当3张图之间没有包含关系时,转成SDF再插值之后的效果是右边这样,看起来就不对劲。
在生成“插值后的SDF”的过程中,确实存在这种问题。如果只做水平轴的SDF,生成“后面的光照范围必须大于前面的光照”的条件其实无伤大雅,且用一张贴图代替了9张SDF,性价比很高。然而,当我们做全角度的SDF光照时,需要做图集,直接用SDF会更好,且不会受上述条件的影响,效果更佳。
我提供了一个小工具,用于转SDF和拼图集操作,方便大家使用,无需重复造轮子。工具和工程文件包含在压缩包中,可以解压后直接双击main.exe打开。工具的使用文档和源代码在GitHub上。工具写得不是很鲁棒,有能力的朋友可以自行修改源码。
在工程中,可以参考具体的操作步骤,包括在蓝图里把角色脸部向前的向量和先左的向量传到角色的材质里。我将这个操作拆开来看,以便更好地理解。
以下是提供的工程和工具的下载链接:
下载链接:pan.baidu.com/s/1_HhgP6... 提取码:
工具GitHub界面:(具体链接需自行搜索或复制粘贴)
参考:
二次元角色卡通渲染—面部篇:
Signed Distance Field:
Unity云消散理论基础:实现SDF的8SSEDT算法:
拼图用什么软件
拼图可以用多种软件完成,如Photoshop、GIMP、PicsArt等。一、Photoshop
Photoshop是一款专业的图像处理软件,它提供了丰富的拼图制作功能。通过图层、裁剪、变换等功能的结合使用,可以轻松实现的拼接。该软件操作相对复杂,但对于有一定图像处理基础的用户来说,能够制作出高质量的拼图效果。
二、GIMP
GIMP是一款开源的图像编辑软件,其功能与Photoshop相似。在GIMP中,用户可以利用其提供的工具进行的裁剪、旋转、调整大小等操作,从而实现拼图的制作。GIMP的优点是免费且开放源代码,适合预算有限或喜欢自定义的用户。
三、PicsArt
PicsArt是一款功能强大的照片编辑软件,除了基础的编辑功能外,还提供了丰富的拼图游戏模式。用户可以选择不同的拼图布局和样式,轻松完成的拼接。该软件操作简便,适合初学者使用。
此外,还有许多其他软件如Adobe Lightroom、Canva等也提供了拼图制作功能。这些软件各有特点,用户可以根据自身需求和技能水平选择合适的软件来完成拼图制作。例如,Adobe Lightroom在色彩管理和调整方面表现优秀,Canva则提供了丰富的模板和设计元素,适合快速制作拼图。