惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
Security Latest
Security Latest
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
H
Help Net Security
T
The Exploit Database - CXSecurity.com
Know Your Adversary
Know Your Adversary
博客园_首页
S
Securelist
S
Schneier on Security
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog
V
Visual Studio Blog
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
有赞技术团队
有赞技术团队
Recent Announcements
Recent Announcements
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
量子位
L
Lohrmann on Cybersecurity
Hugging Face - Blog
Hugging Face - Blog
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
A
Arctic Wolf
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
The Hacker News
The Hacker News
罗磊的独立博客
博客园 - 司徒正美
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 【当耐特】
Microsoft Security Blog
Microsoft Security Blog
K
Kaspersky official blog
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
L
LINUX DO - 热门话题
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
V
Vulnerabilities – Threatpost
AWS News Blog
AWS News Blog
小众软件
小众软件
Project Zero
Project Zero

夜行人

回家路上 第一期的直播演示项目 震动检测器 正能量 在线参观CodeLab Neverland 发布 CodeLab Adapter 3.3.1 DynamicTable 之 纸糊方向盘 CodeLab DynamicTable: 一个可实施的技术方案 CodeLab Insight 发布 Alpha 版 情人节 Home Assistant 周报 && IoT 周报 (02) Joplin: 关注隐私的 Evernote 开源替代软件 浏览器的未来与 Web 传感器 Home Assistant 周报 && IoT 周报 (01) 百宝箱(01) 论自由 介绍 WebThings Home Assistant 周报 && iot 周报 (00) 百宝箱(00) 毛姆读书心得 传世之作 周末徒步 CodeLab Adapter ❤️ Jupyter/Python 航班 躲雨 夏令营途中 [译]思想--作为一种技术 The future of coding 美国之行 三门问题的程序模拟 从Python转向Pharo https://blog.just4fun.site/post/iot/iot-open-source-projects/ Python异步编程笔记 https://blog.just4fun.site/post/iot/iot-open-source-hardware-community/ 万物积木化开发者社区 CodeLab ❤️ Blender Scratch3技术分析之云变量 API(第7篇) [译]对管道(Pipes)的偏爱 [译]提出正确的问题比得到正确答案更重要 蓝牙设备与Scratch3.0 创建你的第一个Scratch3.0 Extension Scratch3技术分析之项目内部数据(第6篇) Scratch3技术分析之社区 API(第5篇) Scratch3技术分析之User API(第4篇) Scratch3技术分析之项目主页API(第3篇) Scratch3技术分析之静态资源API(第2篇) Scratch3.0、micro:bit与Windows7 https://blog.just4fun.site/post/iot/zerynth-vs-micropython/ 核聚变、方所与半宅空间 可视化编程为何是个糟糕的主意 codelab.club周末聚会 关于codelab.club '下一件大事'是一个房间 Hungry Robot - Eat everything 编程作为一种思考方式 今日简史 史蒂夫·乔布斯传 罗素自选文集 https://blog.just4fun.site/post/edx/tianjin-scratch-ai/ https://blog.just4fun.site/post/edx/richie-cms-openedx/ 徒步武功山 WebUSB与micro:bit 夜宿武功山顶 scratch3-adapter接入优必选Alpha系列机器人 https://blog.just4fun.site/post/edx/video-migration-note/ scratch3-adapter重构笔记 https://blog.just4fun.site/post/edx/edx-community-members/ 两种硬件编程风格的比较 使用micro:bit自制PPT翻页笔 柏拉图对话集 scratch3.0 + micro:bit 七月电影放映计划 非营利组织的管理 Screenly--用树莓派让任何屏幕变为可编程的数字标牌 以最佳实践开始你的Django项目 micro:bit与事件驱动 为Scratch3.0设计的插件系统(上篇) OCR应用一例 近两年读过的一些好书 blockly开发之使用python驱动浏览器中的turtle(2) 牛顿新传 文学理论入门 逻辑的引擎 人生的意义 blockly开发之生成并运行js代码(1) blockly开发之hello world(0) micro:bit使用笔记 神器之Termux https://blog.just4fun.site/post/iot/micropython-notes/ Cozmo what is this Scratch的前世今生 下段旅程 我行在远方 爆裂 途中杂记 https://blog.just4fun.site/post/edx/open-edx-startup/ cozmo系列之入门 - 有性格且可编程的机器人 PaperWeekly开发笔记 创业二三事 blockly与结对编程
积木化编程与3D场景
种瓜 · 2018-09-26 · via 夜行人

缘起

近期试着把类似code.org的编程项目移植到3D场景中。

我们最初使用three.js实现了原型,后来发现了Blender和Verge3D,十分称心,便切换到这个技术栈里。

Blender

Blender名声在外,早有听闻,但一直没去试用。

近期在树莓派的项目页面看到3D modelling projects

看了几个学习项目,觉得还不错,这些项目依赖于Blender,便下载试用了Blender,在学习Blender过程中发现许多惊艳的东西,在此做个笔记。

也是在了解Blender过程中,意外地发现Verge3D,觉得这就是我要找的工具,用来构建3D场景的编程教育项目。

最近常在浏览开源项目中意外解决了手头的问题。而且事后发现它们往往是最佳解决方案,原本以为要花上几个月的工作量常常变成了几周或几天。甚至几分钟(如昨天发现的fbs将彻底省下我之后重构scratch3-adapter的时间)

Blender是什么

Blender主页上的介绍是:

Open Source 3D creation. Free to use for any purpose, forever

在阅读介绍之前,我喜欢先把软件下载下来,凭感觉胡乱捣鼓一番,先做个感性的认识,再做知性的了解。

Blender的下载地址为download, 我目前使用的版本是v2.79b

以下内容摘自维基百科词条:Blender

Blender是一套专业的,自由及开放源代码的三维计算机图形软件。由荷兰的一个动画工作室NeoGeo创建。

Blender使用Python语言来创作及制作游戏及工作自动化脚本。这令我们这些python拥趸跃跃欲试,我在还不会使用blender的时候,就先去翻它的python文档。

Blender有个子计划叫Game Blender,用于制作实时交互内容。该游戏引擎使用 C++ 程序语言编写,并支持 Python 脚本和 OpenAL 3D 音频。

Blender的先进功能包括:

  • 在Blender中,物体与数据是分离的,这使其可以快速塑模。
  • 可以将多个场景合并至单一文件(称为".blend"的文件)
  • 所有Blender所生成的".blend"文件均有完善的向前,向后版本的兼容性,同时亦具有完整的跨平台支持。
  • 所有场景,对象,材料,材质,声音,图片,后期制作特效均可集成至最后生成的".blend"动画档里。
  • 可透过".blend"文件来自定义用户界面。

案例

NASA为火星探测车“好奇”着陆三周年纪念日作出了交互web-软件。探测车的动作、摄影机和机械手的操纵是基于 Blender 和 Blend4Web 创造的软件实现的。Blend4Web是用于创建和在网页浏览器中显示交互式三维计算机图形的开源框架。近期NASA将技术栈从Blend4Web迁移到Verge3D。

这是个非常炫酷的项目:opensourcerover

Blender与电影

第一套使用Blender专业视频是蜘蛛侠2,在该片制作中用来绘制分镜脚本。

Blender基金会牵头制作了一些开源电影。

这些通过 Blender 创作出的电影作品,都是根据CC协议(Creative Commons)发表的。因此 DVD 内带有所有电影创作相关 .blend 文件、模型、纹理和其他材料,还有原始剧本、支配表、画面分镜剧本,以及技术细节文档和视频,教你如何使用这些素材,所有人可以下载该作品或其源文件,用于修改后重新发布。

这些开源电影包括:

大家可以看其中的一个例子(辛特尔):

这些例子令人震惊之处在于,创作者所使用的工具全都开源,任何人可以轻松获得,他们把作品的所有细节,从剧本到素材也都开源,你可以看到一个人手握屠龙刀,斩落恶龙的所有细节。这就给人一种希望,只要努力,有朝一日,我们也可能创作出如此惊人的作品。事实上极少人最终走到这一步。有时候,令人难过的是,你本来有机会做出一些令人惊叹的事,外部环境已足够友好,也有前辈尽力予以支持,但却因为自身的原因,不够努力或不够聪明,未能达成目标。

在开源的世界里,无论你想成为一个顶级黑客,还是想建构一个新的虚拟世界,或是用程序操控现实中的万物,屠龙刀都是可以轻易获得的,但屠龙技却得靠自己的努力去习得。

Verge3D

Verge3D是一个用于创建运行于网页的3D交互式体验的实时渲染器和工具套件。

Verge3D是由以前创建的Blend4Web 框架的核心软件工程师团队创建。 Verge3D使用户能够利用常用的三维设计工具(目前支持 Autodesk 3ds Max 和 Blender )创做3D交互内容,并直接转换到网络浏览器中查看。

Verge3D基于 WebGL 进行渲染,整合了 Three.js 库,并向程序开发人员公开API接口

Puzzles编辑器

Puzzles编辑器是基于Blockly编写的可视化编程环境。Verge3D的程序功能可直接编写代码或使用Puzzles编辑器添加 JavaScript 脚本。 Puzzles主要面向非程序员,使其可通过 拖放 操作快速创建交互场景。

使用Puzzles,非技术用户(如艺术家)可以轻松创作出动态的场景或游戏。步骤是在Blender中导入或创建好3D模型,接着在Puzzles中拼搭积木为3D场景/物体编程。强大而友好得令人震惊!

Verge3D的工作流与主流的WebGL框架有很大的不同,它追求的是一个强大的面向艺术家的方法。开发一个新的Verge3D应用开发通常是从3D对象的建模、纹理和动画开始的,在单一的*.max或*.blend文件中组装模型完成3D场景。然后即可在App Manager调用该文件,作为初始化Verge3D项目的基础。

此外以团队协作的视角来看,通过在程序员和设计师之间分配责任,将提高团队的效率。这个神奇的工具既可用于快速原型制作,也可用于生产。

需要注意的是,Puzzles项目的底层使用了three.js,物体之间的交互逻辑由js控制。所以一个使用python来控制逻辑的.blend项目导入Puzzles后,python逻辑不生效。

Puzzles是对blender内置的逻辑编辑器的替代。

Blender与Python

我们前头提到

Blender使用Python语言来创作及制作游戏及工作自动化脚本。

Blender v2.79b携带的Python版本是3.5.3

这篇教程介绍了如何使用Python与Blender的内置的游戏引擎打交道,快速做一个游戏。文章里的代码直接可用(2012年的文章,可见其兼容性之好)

安装python第三方库

由于Blender支持Python,所以我们可以把Blender接入到更广阔的世界中,让外部世界与Blender虚构的3维空间交互。

在这个过程中我们可能需要安装一些第三方python库,下边是教程,演示如何安装pyserial.

参考Install packages for blender bundled python

1
2
3
4
cd /Applications/Blender/blender.app/Contents/Resources/2.79/python
wget https://bootstrap.pypa.io/get-pip.py
./bin/python3.5m ./get-pip.py --prefix /Applications/Blender/blender.app/Contents/Resources/2.79/python
./bin/python3.5m bin/pip3 install pyserial

我近期会将Scratch3-adapter接入blender中!如此一来就建立了现实世界与虚拟世界的连接,你甚至可以和电影中的角色打交道。很多著名的电影都使用了blender来创作。

一旦scratch3-adapter与Blender连接完成,你可以徒手创作minecraft中的世界(借助leapmotion,而minecraft的资源包社区里已经有了:BLENDER MINECRAFT ADDON)。你也可以使用micro:bit制作的魔法棒与虚拟世界的哈利波特一决高下。

我们之前的演示案例很快将延伸到虚拟世界中。

python api

Blender相关的python API参考Python API

而BGE(Blender Game Engine)相关的api则参考:game_engine

1
2
3
# 移动名为Cube的对象的顶点
import bpy
bpy.data.objects["Cube"].data.vertices[0].co.x += 1.0

一个bge例子

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# car
import bge
cont = bge.logic.getCurrentController()
own = cont.owner
move = cont.actuators["move"]
pressup = cont.sensors["up"]
pressdown = cont.sensors["down"]
speed = move.dLoc[1]

if pressup.positive:
    speed = speed + 0.05
    move.dLoc = [0.0, speed, 0.0]
    cont.activate(move)
    
elif pressdown.positive:
    speed = 0
    cont.deactivate(move)
    move.dLoc = [0.0, 0.0, 0.0]

此外我写了一个简单的完整例子:test_bge.blend

如何运行python脚本

Script Loading

1
2
3
4
# alias blender=/Applications/Blender/blender.app/Contents/MacOS/blender
blender  --python my_script.py # 会打开新的blender窗口
# blender --python --help
blender --python a.py  test_bge.blend # 这种模式下blend编辑器里的输出会在命令行打印出来!

教程

在学习Blender的过程中,发现不少很不错的教程,记录如下:

参考