开始之前
交互沙盘是美国加州大学戴维斯分校(UC Davis)的开源项目(GNU GPL协议), 项目的官方页面: Augmented Reality Sandbox (以下简称 AR Sandbox)。基于官方提供的教程和开源代码,柴火创客空间的会员们在共进社活动中做了一台出来,并在2015年深港双年展及2016年文博会上展出。
搭建过程中有任何问题可在文章留言或在文章末尾寻找联系方式。
官方页面有详细的软硬件搭建教程,但最复杂的校准调试部分,新版软件有更简单的校准方法。而官网相对繁复的教程针对的是旧版本的软件,且官网搭建教程是英文的,因此翻译了中文版搭建步骤,其中大部分内容源自官网,并加入了一些实际搭建时积累的经验,适合不熟悉Linux系统的小白(如我)阅读。
如阅读本文前未把玩过交互沙盘实物或未看过相关视频,可转至AR Sandbox交互沙盘简介了解。
以下搭建步骤基于AR Sandbox-1.6版本,不保证适用于之后和之前的版本,可以在官方下载页面查看最新的版本。
大致上你需要
- 攒一台显卡中上的PC主机
- 安装Linux系统及AR Sandbox软件
- 搭建支架以安装Kinect及投影仪
- 搭建沙盘及准备沙子
- 校准Kinect及投影仪
- (可选)写一个脚本让沙盘自动运行
1. 物料准备
-
PC主机
\- CPU在I5以上(至少3GHz)
\- 显卡GTX 970以上
\- RAM 2G以上
\- 硬盘 20G以上(固态硬盘当然更好)
沙盘的效果分为等高线着色和水流仿真两部分。等高线就是本文开头那张图的效果,水流仿真见下图那对母子堆出来的海湾里的水流效果。这里用到GTX 970高端显卡主要是为实现水流仿真,实测GTX 750也可以,但水流仿真增多时有明显卡顿。如果只需要等高线着色的效果可以禁用水流仿真,这样可以不配置独立显卡,用中低端的硬件配置即可。
-
Kinect
只支持老版Xbox 360的第一代Kinect,也就是最早的那一版,注意区别于Xbox One的Kinect。
Kinect一代有几个细分的版本,按照官网的说法只要是一代的Kinect都支持。
-
投影仪
官网推荐的投影仪是明基的MX631ST,当然也可以自行选配,但需满足以下条件:最好是短焦投影仪,原始分辨率大于640x480,比例4:3。这里说的原始分辨率在投影仪官方提供的参数里可以查到,也叫真实分辨率,注意区别于投影仪支持的最大分辨率。
Kinect的分辨率只有640×480,因此投影仪的分辨率不必配置过高。Kinect分辨率长宽比是4:3,所以投影和沙盘都相应地配置成统一的长宽比。
-
沙盘
沙盘的长宽比是4:3,具体尺寸和Kinect的放置高度有关,在之后硬件搭建部分阐述。示例中的尺寸是1m×0.75m,内壁深度在15cm左右,沙子的实际深度是10cm,边框比沙平面高出一段防止溢出。这里说的尺寸都是沙盘内壁的尺寸,搭建沙盘用的木板厚度可以自由选择,能保证足够的强度即可。
-
沙
实测普通的黄沙就可以,但为了更好的体验建议选择细腻的白沙,参考投影幕布的颜色。官方推荐的沙据称是无毒专供儿童玩的。实际使用的时候围成圈的小朋友的确喜欢扬沙,细微的沙粒在沙盘上方会悬浮很久(人工雾霾),吸入过多对小朋友身体不好吧.. 还是建议买无毒的。如上所述1m×0.75m的沙盘,10cm深的沙子重约100kg。为了让沙子的可塑性更好,可以在100kg沙子里加入0.25L水。
官网有洗沙的黑科技。
-
周边
在之前实际搭建中还用到了的东西供参考:HDMI线、支撑沙盘的桌子、悬挂投影和Kinect的角铁架(角铁搭起来并不牢固建议用别的材料搭,例如方钢、铝型材都可以尝试)、扎带、调试主机会用到的键鼠和无线网卡(提前调好的主机在布置现场时需要重新校准)、给小朋友准备的玩具沙铲沙耙子、校准用的自制工具(光碟、纸笔、细棍、剪刀、胶水,后文会提到)。
2. 硬件搭建
Kinect
参照官网的示意图,沙盘的长宽尺寸是1m×0.75m,Kinect镜头置于沙平面的正中心上方1m处,镜头竖直向下。由于Kinect的最佳可视距离介于0.8m至4m(但是大于2m之后精度就基本没法忍受了),其垂直可视角度47°,水平可视角度57°,因此Kinect放置的高度和沙盘的大小成比例。意味着如果要做一个更大的沙盘,Kinect需要放置得更高,沙盘要成比例做得更大。
在Kinect高度1m的情况下,水平方向的分辨率约5mm,竖直方向分辨率2.79mm,意即沙子的高度变化大于2.79mm就可以被识别出来。如果做一个2m×1.5m的沙盘,Kinect需要成比例地放置到2m,此时水平和竖直的分辨率会降低到3.12mm和11.16mm,且这是标称的分辨率,不同于刚才高度1m的情况下所说的实际分辨率,实际分辨率一般比标称的更低。
投影仪
部分投影仪自带梯形校正,需要在投影仪设置里关闭梯形校正,因为AR Sandbox软件本身会做梯形矫正,投影仪自带的校正反而会扭曲画面。
投影仪和Kinect保持在同一水平面,镜头竖直向下,意即投影平面平行于沙平面。因为是短焦投影仪所以画面不是等分在镜头中心线两侧,而是如上图所示的偏轴投影,镜头和沙盘边缘基本平齐。调整投影仪和沙盘的位置,使投影仪画面在关闭了梯形矫正的情况下看起来是一个规则的矩形而不是梯形。
确保投影仪工作在原始分辨率,很多投影仪广告宣传的分辨率是最大兼容分辨率,在详细参数里能看到原始分辨率。后文校准的部分会更改分辨率输出,以保证PC输出的分辨率和投影仪的原始分辨率相同。
官网推荐使用HDMI、DVI或者DP线来连接投影仪和主机,注意使用HDMI口时要插到主机独立显卡的HDMI口上,区别于主板自带的HDMI口。
支架
支架的搭建属于自由发挥的部分,能满足沙盘、Kinect和投影仪在正确的位置即可。
官网给出了一些搭建案例(看视频要番强)。主流的搭建方式有两种:
[图片上传失败...(image-a7005-1518358721624)]
一种是支架和沙盘底座一体。例如官网自己搭建的,这样即使底座因围观人群的推搡发生了位移,沙盘和顶部两个镜头的相对位置没变,则无需重新校准镜头。实际上只要顶部两个镜头之间的相对位置不变,哪怕沙盘被移动了也很容易修正。但顶部镜头如果移动了,就需要重新来一遍整个校准流程。
第二种就是支架和沙盘分离。高端的搭法是从天花板直接垂下固定柱来固定投影仪和Kinect,但是这样得提前确定好固定位置。而实际调试的过程中需要一边观察投影画面一边调整Kinect位置,Kinect视野最好和投影画面重合,同时投影的画面最好和沙平面重合。意即Kinect和投影仪的固定底座最好是可以调节位置的。而像前文双年展上那样用角铁加扎带的荒野求生式搭法性价比高但稳定性不够。
3. AR Sandbox软件安装
软件安装涉及到Linux系统的一些简易操作及常见命令,没接触过Linux系统也可以按照步骤直接复制粘贴指令,请确保不要遗漏空格和回车。以下任何指令在执行过程中报错,或者没出现预期的画面可能是Linux系统设置问题,更大可能是网络的问题。安装过程是联网进行的,在之前就遇到过番强才能顺利安装的情况。
Linux系统
这里说的系统是安装在实际机器上的,不要用虚拟机跑。理论上说主流的Linux系统都可以运行AR Sandbox。官网推荐安装Linux Mint Mate,已经测试可行的版本是17.3-MATE,64-bit。详细的安装步骤不在此赘述,可以参考怎样安装Linux Mint 17 MATE,也可以参考官网录制的教程视频——包含了整个Linux Mint安装和AR Sandbox安装的过程。在安装之前可能需要用U盘刻录一个安装盘,可以参考U盘安装Linux的第一页。
上述安装教程里在安装过程中有设置无线网卡的过程,实际安装时可以忽略。安装时系统语言尽量选择英文,没有测试过选择中文是否会影响AR Sandbox运行。安装时设置密码尽量简单,在之后校准时会多次用到管理员密码,配置好的主机是不用联网就能运行AR Sandbox的,所以不用担心被黑。记住自己设置好的用户名。如果配置的硬盘只给沙盘使用,尽量不要去折腾和Windows的双系统,在安装过程中直接选择
清除磁盘并安装Linux Mint
。
系统设置
Linux系统安装好之后需要更改一些设置,先将系统连上网络,网络只在设置和安装AR-Sandbox过程中需要,调试完毕的沙盘可以断网工作。
禁用休眠。在Linux Mint桌面左下角的Menu里打开Control Center,找到Screensaver,关闭Active screen when computer is idle
和Lock screen when screensaver is active
。打开Power Management,将Put computer to sleep when inactive for:
和Put display to sleep when inactive for:
都改成Never。
设置一个全屏快捷键。在Control Center里找到Keyboard Shortcuts,找到Toggle fullscreen mode双击,设置一个快捷键,下图里设置成了F12。
更新显卡驱动。在Control Center里找到Driver Manager,默认的显卡驱动应该是xserver-xorg-video-nouveau,请更改成nvidia-352或者更新的版本,然后点击Apply Changes。下载安装驱动会需要一会,之后选择重启系统来使新的驱动生效。重启后最好再次打开驱动安装页面,确认已经使用了最新的驱动。
软件安装
打开终端,快捷键Ctrl+Alt+T
,复制以下指令到终端。在终端里右键菜单里可以选择粘贴,粘贴完之后记得加回车,可以多行一起复制。
cd ~
wget http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Build-Ubuntu.sh
bash Build-Ubuntu.sh
运行一半的时候会要求输入管理员密码。运行成功之后会看到一个旋转的地球,如下图:
如果运行中途报错或者没有反应了的话可以尝试先番强再重来一遍,以及之后的步骤如果报错了想重来都是从运行上面的三条指令开始。记得在重来之前,在文件管理器里把之前的src文件删除。
Tip:在终端里按方向键上可以重现已经执行过的命令
关掉地球的窗口回到终端执行
cd ~/src
wget http://idav.ucdavis.edu/~okreylos/ResDev/Kinect/Kinect-2.8-002.tar.gz
tar xfz Kinect-2.8-002.tar.gz
cd Kinect-2.8-002
make
make install
make installudevrule
这一部分也会要求输入管理员密码。
cd ~/src
wget http://idav.ucdavis.edu/~okreylos/ResDev/SARndbox/SARndbox-1.6.tar.gz
tar xfz SARndbox-1.6.tar.gz
cd SARndbox-1.6
make
至此AR Sandbox安装完毕。主机插上Kinect,注意Kinect也要插电源,然后在终端中执行
~/Vrui-3.1/bin/KinectUtil getCalib 0
可以借助RawKinectViewer工具来测试整个安装过程是否成功。将Kinect镜头对准要测试的区域(随意),执行
cd ~/src/SARndbox-1.6
~/Vrui-3.1/bin/RawKinectViewer -compress 0
如果一切顺利应该会看到窗口一边是真实镜头成像,另一边是景深图,物体离镜头远近呈现不同颜色,如下图:
4. 校准
在实际操作之前建议熟悉一遍官网录制的校准流程视频,大致上的步骤是:
- 获取整个沙平面的平均深度(沙面离Kinect镜头的距离)。这个深度会被设定为陆地和海平面交界的基准高度(海平面),意即高于此高度的为陆地,反之为海洋
- 获取沙平面四个顶点的坐标,从而确定沙面的边界
- 通过自制的校准工具配合校准程序,提供空间中不同位置和深度的参考点信息,让校准程序计算出一个坐标转换矩阵
空间中的某一点相对于投影镜头和Kinect镜头的坐标是不同的。比如某点A,由Kinect获取的空间坐标是(x,y,z),需要通过投影仪在这个点投影指定的颜色,而对于投影镜头来说这个点的坐标是(a,b,c)。程序根据转换矩阵将(x,y,z)转换成(a,b,c),也就实现了所谓的校准。
在校准开始之前需将沙面推平整。调节Kinect的位置,借助上图里的测试工具RawKinectViewer(左边是景深图,右边是真实图),使Kinect可以看到沙盘的四个边框。调节投影位置,借助XBackground工具,使投影画面和沙平面的边界重合。在终端中执行
~/Vrui-3.1/bin/XBackground
XBackground会投影一个类似于电视调试的画面,如下图。命令运行后按下之前设置好的全屏快捷键可以消除边框,并以此图来拟合沙平面。
调整好Kinect和投影的视角之后,接下来就是软件端的校准。首先要进行平均深度的测量和边界定位,即让AR-Sandbox软件确定沙平面的平均深度。同时确定沙盘四个顶点的坐标,从而获取沙盘的边界。
同之前运行Kinect的测试工具RawKinectViewer一样,在终端中输入
cd ~/src/SARndbox-1.6
~/Vrui-3.1/bin/RawKinectViewer -compress 0
RawKinectViewer工具和后面会用到的校准工具都有一套特别(qípā)的操作方式,一个工具打开之后可以实现很多功能,但每一个功能在使用之前要先分配一个用户自定义的快捷键,分配之后按快捷键才能使用这个功能,举个:
比如测量平均深度,需要在RawKinectViewer程序里按住一个键,这个键是可以自定义的(“Z”和“Shift”除外),这里我们以数字键“1”为例。按住“1”,会出来一个菜单如下图
将鼠标指针悬停在Extract Planes
上,松开“1”,这样“1”就被设定为了Extrat Planes
的快捷键(不会有任何提示设置成功),之后要进行Extract Planes
的操作按“1”就行。Extract Planes
直译为提取平面,即选取一个沙盘的深度图上的一个区域作为基准,算出这个区域的平均深度,并以此作为基准平面。
由于深度图的采集是实时的,在RawKinectViewer左边的深度图也能看到画面是一直变化抖动的,为了让提取平面可以进行,需要让画面先固定下来,即需要用到Average Frames
。点击鼠标右键,选择Average Frames
,会弹出一个对话框,之后画面会静止,如下图。
接下来可以提取平面了,将鼠标指针停留在沙盘的左上角,按住之前设置好的Extract Planes
快捷键,比如按住“1”,用鼠标画一个恰好能覆盖住沙盘的矩形,松开“1”。矩形的边界不用特别精准地贴合沙盘,因为提取的是平均深度。
这里获取的平均深度会显示在终端里,结果分为两行如下图。需要用到的是第二行,也就是Camera-space plane equation
,把这个结果截图或者拍照保存。
接下来需要确定四个顶点的坐标以定位边界,先把让固定住的画面恢复活动。右键,取消选择Average Frames
。按住任一自定义快捷键,比如“2”,光标悬停Measure 3D Positions
,松开“2”。右键,选择Average Frames
,让画面固定。
接下来需要依次选择深度图里沙盘的四个顶点,前后顺序不可颠倒,依次是左下角、右下角、左上角、右上角,也就是镜像的字母Z。具体方法:鼠标悬停左下角,点击Measure 3D Positions
的快捷键,可以在终端里看到对应点的输出坐标。在顶点处多半是沙平面和沙盘边框的交界处,会在深度图里看到深浅不同的颜色,注意选择顶点时需要在沙平面上,而不要选择到边框上。
在选择顶点时如需要放大可使用鼠标滚轮,按住字母“Z”来平移,不要使用鼠标左右键(会导致画面旋转)。
以上在终端里可以获得四行数据,也就是四个顶点的坐标,现在需要把这四个坐标以及之前获得的平均深度值写入到BoxLayout
文件里。打开文件管理器(桌面左下角图标像文件柜),打开路径~/src/SARndbox-1.6/etc/BoxLayout.txt
,如果没有此文件可自行新建,格式如下图
将刚才获得的Camera-space plane equation
以及四个顶点的坐标,一共5行数据,按照BoxLayout
文件里5行数据的格式替换之。注意第一行的Camera-space plane equation
在终端里的格式和在BoxLayout
文件里的格式不同,后面四个坐标的格式是相同的,可以在终端里高亮后右键Copy
,复制到BoxLayout
里。确认格式无误后,点击文本编辑器的“Save”保存。
BoxLayout文件里第一行最后一个数据代表海平面的基准高度,单位是厘米,即沙面平整时Kinect镜头离沙平面的距离。若实际运行中发现沙面平整时出现黄红色(如下图)或者全是海洋的颜色,表明基准高度有误,可以手动更改这个数据使得沙平面呈现蓝绿色交错,即海陆交界的状态。
接下来需要校准Kinect和投影仪,即用CalibrateProjector工具获取一个坐标转换矩阵,使得投影仪“知道”沙面各点相对于投影镜头的坐标并投影对应的颜色。在校准之前需要自制一个校准工具,用A4纸剪一张和CD大小一样的圆片,画两条互相垂直的直径,粘在CD上,背面用细木棍/铁丝/锥子等固定,如下图
关闭之前所有已经启动的工具再启动CalibrateProjector,在终端中输入
cd ~/src/SARndbox-1.6
./bin/CalibrateProjector -s 1024 768
以上指令默认投影仪的原始分辨率是1024×768,需根据实际使用的投影仪原始分辨率修改。之后会看到黑色的画面有两条十字相交的白线,按下之前设置好的全屏快捷键。
在开始校准之前需先确定自制的十字圆片是可被识别的,将十字圆片放至沙盘和Kinect之间,如果出现一个和CD等大小的绿色圆出现则表明识别成功,如下图。反之如果出现的是黄色则表明十字圆片没被识别到,需要将CD背面固定的木棍等支撑物做得更细。也可以如下图在CD下面放支撑物(不推荐,因为实际校准时需要改变CD的高度)。
接下来需要设置两个快捷键,这里还是使用“1”和“2”举例。按住“1”,鼠标悬停Capture
,等待会话框出现,点击“2”。
校准的方法是用自制的十字圆片提供参考点,使圆片的圆心和投影出来的白色十字线交点重合(线不必重合),实际操作时尽量保持十字圆片水平。在确定两个十字线交点重合后点击“1”,则这个点的数据已经被采集了,投影的十字线会跳到下一个点,用同样的方法校准接下来的点。
每一轮校准会由左下至右上依次采集多个点,一轮校准完毕后十字线会自动回到左下进行新一轮的校准,且会出现一个自动跟踪的红色十字线,如果校准得很理想,红色十字线交点可以准确地跟踪十字圆片的圆心。
可以进行多轮校准,程序获得的参考点越多计算出来的校准矩阵越精准。校准时十字圆片的高度需要有变化,尽量不要在同一高度校准所有的点,但也不要放置过高,建议最大高度略高于沙子能堆出的最大高度。
如果红色十字线已经能很好地跟踪十字圆片了,可以改变沙平面形状,但改变形状之后需要先点击“2”,程序会重新扫描沙平面,之后可继续校准。十字圆片可以放在低于海平面的高度,比如挖一个很深的坑。
在各种高度和地形都校准完毕之后,按Esc
退出,接下来可以进行实际的测试了。
运行沙盘,在终端中输入
cd ~/src/SARndbox-1.6
./bin/SARndbox -uhm -fpv
不要激动,先按下全屏快捷键,首先看投影的画面是否和实际的沙盘边界贴合,如果不是重来整个校准流程。然后看沙面平整时是否是陆地海洋的交界面即海平面(前文有提及)。观察等高线的分布是否和实际沙面形状一致,或者可以在沙平面上用手指戳一个洞,观察洞周围程序所绘制的线是否和洞拟合,如果觉得不够精准可以重来转换矩阵的校准。
标准的1m×0.75m沙盘,识别精度在1mm。如果沙盘尺寸太大,Kinect识别精度下降(具体下降程度前文有提及),则有可能等高线很难和实际地形匹配。
如果以上都没问题,恭喜.. 但是现在你的沙盘肯定没有下面这个酷炫,所以继续看吧哈哈哈,写这么长换做我看到这里已经吐了。
在运行沙盘之后可以设置两个快捷键,一个用来蒸发游客制造的积水,水流太多显卡会很吃力,需要定时清理。另一个就如下图,全世界降雨,小朋友们玩着玩着突然出现这个就会齐声“哇~~~~~”
沙盘运行后,按住你想设定的快捷键,比如“1”,鼠标悬停Manage Water
,松开“1”,等待会话框弹出,点击另一个快捷键,比如“2”,这样“1”和“2”就被设定成了蒸发积水和全世界下雨,顺颂显卡身体健康。
如果觉得GTX 970价位比较凶残,可以考虑禁用水流仿真,只保留等高线效果,这样不配独显也可以。运行沙盘时在命令后面增加参数-ws 0.0 0
,即
cd ~/src/SARndbox-1.6
./bin/SARndbox -uhm -fpv -ws 0.0 0
还有一些参数可以自定义各种功能,例如可以把等高线也去掉,只保留颜色分层;或者设定积水的自动蒸发率;详细的参数设置翻译见AR Sandbox 运行选项参数设置。
在做好的沙盘旁边放一张宣传海报教路人玩法还是很有必要的,特别是遮手造雨的过程,有的路人甚至以为这是固定不动的沙盘只敢看不敢动手,所以你可能需要这个
这个没有高清分辨率的原图,所以只能参考做一个。主要就是介绍了等高线的知识,雨是怎么来的,以及降雨的玩法。另外建议在海报末尾加上无私开源了软件的作者及其学院的介绍信息,具体格式见后文GNU GPL协议部分。
5. 自动运行(可选)(以下维护中.. 2016/5/12)
至此官网关于沙盘调试的教程已经结束了,但是我们在实际参展中遇到一些问题。每一次启动主机之后,运行沙盘需要以下步骤:
1 打开主机和投影
2 在终端里输入指令让沙盘运行
3 按下全屏组合键
4 设置“蒸发雨水”和“全屏降雨”的快捷键
5 每过一段时间按下“蒸发”来清理过多的海水以防止显卡过载
6 在指定时间关机
假设展会场地每天早上9点开展,下午6点结束,整个展会周期有几个月。不可能每天都安排工作人员过去进行开关机、一系列设置以及每隔几十分钟“蒸发”一下海水,也就需要用脚本来实现无人值守。我也是脚本初学者所以以下内容只保证能用,但是代码臃肿不规范什么的就不要在意了哈哈哈。
大致的流程是用一个软件来模拟键盘和鼠标的按键,设置好它需要按哪些键,然后让它开机自动执行。首先需要安装模拟按键的软件xdtool,连接网络,在终端中执行
sudo apt-get install xdotool
输入密码,等待安装成功。然后将这个脚本/改成github自动下载放到桌面。然后设置自动启动,在桌面左下角点Menu
,打开Control Center
,找到Startup Applications
。点击add
,弹出对话框,按照下方填写
Name: Sandbox (随意填)
Command: sh ~/Desktop/sandbox_auto.sh
点击Save
保存,最后选中新建的这个启动项使之生效(在以上的示例里叫Sandbox)。
最后关于脚本需要修改一些基本信息才能使用,在桌面双击sandbox_auto.sh
打开,修改以下内容:
//第2行
sleep 7
/*
sleep后面的数值是指开机之后等待多少秒开始运行这个脚本,
不同的电脑从进入桌面到完全“准备”好可以使用需要的时间不同。
这里设置的等待时间越长越保险例如60,也就是一分钟,
以免开机后出现“什么反应也没有”。
*/
//第15、16、17行
xres=1024
yres=768
full_screen_key="ctrl+F5"
/*
1024和768改成你使用的投影仪分辨率的长宽比,
1024×768是默认的分辨率。
full_screen_key是你设置的全屏快捷键,
这里是ctrl+F5
*/
//第20行
username=ar-sandbox
//ar-sandbox改成安装系统时设置的用户名
//第28、29行
clean_water=1
add_water=2
//1和2是设置的蒸发水分和全屏降雨快捷键
//第32行
shutdown_time="18:00"
/*
设置自动关机时间,这里是下午6点。
也可以改成距开机后多少小时关机
格式如第33行,即 +多少小时。
*/
关于开源协议GNU GPL
GNU GPL协议对于了解的人就不用看本段了。对于小白(如我)来说,我的理解就是:你可以对作者开源的代码进行使用、修改、发布,甚至商业化都没问题。重点是不能把作者的代码“据为己有”,而且由作者的代码修改的部分也要基于GPL协议开源出来。是的你可以拿修改后的代码去卖钱,但是也得向买家开源代码,很神奇的逻辑是吧?都开源了谁还会买,但Linux的各种商业发行版公司就是这么赚钱的,他们提供的是服务,而不是开源代码本身。另外作者在官网嘱咐,尽量在做好的沙盘旁边放上原作者的logo和作者学校的logo(以下),不是强制性的,但,感谢作者的辛苦劳动吧。
以及感谢柴火共进社一起搭建沙盘的小伙伴们,和营造了美妙氛围的柴火创客空间。
最近和小伙伴们成立工作室了,叫做 白墨工作室。主要做类似交互沙盘的有意思的装置,之后会更新别的装置的教程。
有合作意向请邮箱联系:[email protected]。 或个人微信:doudot。