记忆中的像素块褪色了吗?用开源的体素编辑器重新做个 3D 的吧!
本文适合对图形表现有兴趣的美术或者开发人员
本文作者:HelloGitHub-Joey
早期的的显示设备像素颗粒较大,使得显示内容的颗粒感严重,像是由一堆方块组成的。比较好的例子就是 GBA 上的游戏,相信这也是很多朋友宝贵的童年回忆。这种艺术风格一直延续到现在,虽然显示设备的分辨率已经足以显示非常细腻的画面,但还是有不少人偏爱像素风格的游戏与艺术画。
像素(Pixel)的概念对应到 3D 空间中就是体素(Voxel),使用离散的基本单位来表示 3D 空间中的物体,最直白的理解就是一个个小方块,“我的世界”就是一款非常著名的体素游戏。
这里是 HelloGitHub 推出的《讲解开源项目》系列,今天要介绍的体素编辑器 Goxel 就是一款用来创作 3D 体素艺术作品的编辑器。有了它人人都可以尝试自己制作出 3D 像素作品,回味童年的味道。
一、快速开始
Goxel 是一款开源的体素编辑器,提供跨平台支持包括 iOS、Android 与在线网页版。软件内部使用稀疏矩阵存储数据,使得其可以支持非常大规模的场景编辑。完成编辑后,软件支持导出包括 glTF2.0、obj 在内的多种 3D 格式文件,这些格式可在其他软件或者游戏中使用。
1.1 下载安装
项目的官网的下载页中提供了桌面平台和移动平台的下载连接。移动平台是直接到对应商店的链接,iOS 设备可以直接在 App Store 中下载。
在线网页版在首页上方 Web Version,在浏览器内即可体验。
1.2 编译安装
此部分内容针对希望进行编译安装或者在 Linux 系统上使用的朋友,如果其他平台上希望简单体验软件可以直接下载二进制文件使用。
首先需要安装所需的依赖库,可直接使用对应的包管理软件安装。所需的依赖如下(不同系统下软件包名字可能稍有区别):
- scons
- pkg-config
- libglfw3-dev
- libgtk-3-dev
安装完所需依赖后,首先 clone 项目:
git clone https://github.com/guillaumechereau/goxel.git
完成 clone 后进入项目根目录并输入:
make release
即可完成编译。完成后会在根目录生成 goxel 可执行文件,输入:
./goxel
即可使用。
我在测试时发现 Linux 平台上存在严重 bug 会导致无法绘制方块或者无法使用 UI,建议使用 Mac 进行尝试。
二、界面介绍
类似传统的编辑器软件,界面中间区域是进行体素绘制的部分,点击鼠标左键并拖动进行笔刷操作。
2.1 工具栏按钮介绍
工具栏按钮使用红框划出,分为两类:撤销重做与笔刷控制。
撤销重做部分(左边三个按钮)包含了:撤销、重做、清空当前层 三个功能按钮,提供笔刷历史控制,可以以单次左键按下滑动操作为单位的撤销与重做。第三个按钮提供了清空当前图层所有体素的功能。
笔刷控制部分包含右边四个按钮,其中前三个按钮为笔刷模式按钮,第四个按钮用来控制笔刷作用的体素颜色。笔刷模式包括:
- 增加体素模式,鼠标拖动添加当前设定颜色的体素
- 删减体素模式,鼠标拖动删减轨迹上的体素
- 修改颜色模式,鼠标拖动将轨迹上体素的颜色修改为当前设定颜色
2.2 左边栏按钮简介
根据图中标识的序号对各个按钮进行功能简介:
- 工具栏分页,点击后会弹出具体的工具列表,包括笔刷,平面蒙板,模糊选择,颜色拾取,程序化生成等工具
- 色板分页,点击后会弹出常用的预设颜色列表
- 图层管理页,非常类似 Photoshop 中的图层概念,可以在各个图层中单独绘制体素,该分页提供了图层的增删显示控制
- 显示控制,点击后会弹出全局显示控制的选项,此部分仅控制画面显示效果,对编辑不影响
- 材质控制,点击后会弹出全局体素的材质控制选项,包含简单的粗糙度,金属度等属性控制
- 灯光控制,点击后会弹出整体环境灯光的控制选项
- 相机控制,点击后会弹出相机控制的分页,在此分页可以增减相机,并在多个机位间切换。另外也可控制相机的位置朝向,并提供了若干正视视角的预设摄像机角度
- 画幅控制,此部分提供了整体 3D 空间的相对位置与大小控制项
- 渲染,点击此按钮后会开始离线渲染过程,将当前相机视角下的画面使用离线渲染算法渲染出来,具体的效果与上面灯光材质分页中的设置相关联,完成渲染后可保存图片
- 导出分页,此分页中提供了将当前编辑结果导出成其他 3D 格式文件的选项
三、使用建议
我测试了 Linux、Mac、iOS 以及 Web 这四个平台,各平台情况总结如下:
- Linux 平台需要编译安装,编译过程很顺利,但存在严重界面 bug,导致无法使用,不建议
- Mac 平台上使用触摸板手势支持不太完整,若使用鼠标的话体验较为良好
- iOS 平台上个人认为是使用体验最好的,手势支持完整,所见即所得,官网上的宣传视频即是使用 iPad Pro演示
- Web 的菜单栏按钮无法使用,但导出功能可以使用左边栏中按钮完成,不影响使用,是最方便的体验方式
四、作品展示
以下图片来自官网Gallery页
五、最后
曾在各种视频内容中看到过作者在 MC 中创造各种美丽的景观,实现各种有趣的想法,现在使用这款编辑器亦可做到相同的事情,加上编辑器内提供的各种操作工具,能够使创作者们更加方便快捷地去绘制添加体素,更加自由且快速地实现自己的想法。软件支持的导出格式亦可将作品转移到其他 3D 软件中进行进一步加工制作,成为一个完整的 voxel art 作品。
此外,作为一个开源项目,如果如果在使用过程中发现一些可以改进的点且有开发能力的话,也可尝试与项目维护人员沟通交流,确定开发计划并回馈社区,帮助软件改善的同时亦能对自己的简历增加一个亮眼的经历。
记忆中的像素块褪色了吗?用开源的体素编辑器重新做个 3D 的吧!的更多相关文章
- 在HTML中如何把块的边框做成圆角
adius,就是半径的意思.用这个属性可以很容易做出圆角效果,当然,也可以做出圆形效果.原理很简单,“正方形的内切圆的半径等于正方形边长的一半”.下面就做一个红色的圆. 工具/原料 Adobe Dre ...
- java中静态代码块,构造代码块,以及构造方法的执行顺序
写了许久的代码,却把一些基础的东西都给忘了,今天无聊就顺手写了个,然后测试下,发现跟我记忆中的竟然有些出入,作为一个两年的开发,我感觉自己很失败啊. 父类pojo: public class Pojo ...
- java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数
一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构
- Service 中添加同步块防止并发 重复
Service 中添加同步块防止并发 重复. synchronized(this){}
- ORA-00379 缓冲池 DEFAULT 中无法提供 32K 块大小的空闲缓冲区
(一)问题 今天在使用Pl/sql developer查看表空间大小的时候,报错误:ORA-00379 缓冲池 DEFAULT 中无法提供 32K 块大小的空闲缓冲区,具体如下图: SQL> s ...
- 删除外部dwg中指定的块定义
本例实现删除外部图纸中指定的块定义,在外部图纸当前模型空间中是没有该块定义的块参照存在. 代码如下: void CBlockUtil::DeleteBlockDefFormOtherDwg(const ...
- 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例
Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...
- javascript中不存在块级作用域,所以要小心使用在块级作用域中的函数声明所带来的作用域混乱.
在javascript中函数的作用域是一个非常重要的概念. javascript中是没有块级作用域,但是有函数作用域的概念. 我们在开发的过程中,经常会遇到这样的问题, 某个函数我暂时不需要,不想声明 ...
- OpenGL中的像素包装理解
OpenGL中的像素包装理解 像素包装 位图和像素图很少会被紧密包装到内存中.在许多硬件平台上,考虑到性能的原因位图和像素图的每一行的数据会从特殊的字节对齐地址开始.绝大多数编译 器会自动把变量和缓冲 ...
随机推荐
- 精尽Spring MVC源码分析 - HandlerMapping 组件(四)之 AbstractUrlHandlerMapping
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- 3. 搞定收工,PropertyEditor就到这
分享.成长,拒绝浅藏辄止.搜索公众号[BAT的乌托邦],回复关键字专栏有Spring技术栈.中间件等小而美的原创专栏供以免费学习.本文已被 https://www.yourbatman.cn 收录. ...
- Struts2-059 漏洞复现
0x00 漏洞简介 Apache Struts框架, 会对某些特定的标签的属性值,比如id属性进行二次解析,所以攻击者可以传递将在呈现标签属性时再次解析的OGNL表达式,造成OGNL表达式注入.从而可 ...
- 最火的分布式调度系统 XXL-JOB 安装和简单使用
唉,在谈文章之前先说一下自己的情况.原计划是在上周六写完这篇文章的,然而周六的时候打开电脑的,按照平常"惯例",先补一些 "黑色五叶草"/"进巨&qu ...
- PHP连接数据库的方式
1,旧的方式 - mysql(面向过程) 1 <?php 2 //定义连接参数 3 $host = 'localhost'; 4 $user = 'root'; 5 $password = '' ...
- C# Json对象数组复杂JObject 序列化
tatic void Main(string[] args) { //先反序列化看看 string json = "{\"name\": true,\"age\ ...
- winform使用Barcodex控件预览和打印一维码
1.控件下载. http://files.cnblogs.com/files/masonblog/barcodex.zip . 包含barcodex.ocx控件.barcodex帮助文档.两个winf ...
- Tomcat启动web项目静态页面中文乱码问题解决
1 首先查看静态页面在编辑器中是否正常, 如果是eclipse ,需要设置一下项目编码格式为utf-8, 如果是idea , 一般会自动识别, 也可以自己手动检查一下, 检查html上面是否有 ...
- java集合大总结
Java集合大总结 java集合框架简图(API关系图): 虚线框表示接口,实线框表示类. 特点和使用总结: Collection: 单列单值. List: 有序(查询顺序和插入顺序一致),有下标(索 ...
- ESP8288-01S/ESP8288-01使用经验总结
如图:ESP8288-01S/ESP8288-01的区别 超链接 ESP8288-01S/ESP8288-01是乐鑫公司推出的Wi-Fi模块,因为价格便宜迅速占领了市场,它可以做AT指令开发,也可以做 ...