python 画任意函数曲线_用Blender来学习Python创意编程,实现傅里叶级数可视化

本文介绍了如何使用Blender和Python进行创意编程,特别是通过Blender的Grease Pencil功能来绘制傅里叶级数,详细阐述了如何在Blender 2.80中设置Python环境,以及Grease Pencil的使用方法,提供了相关资源链接和代码示例。
摘要由CSDN通过智能技术生成

前言的前言:

如果你的技能点选择了 Python,恭喜,现在 Python 赶上了 AI 热潮。而如果恰好还想做 Creative Programming,苦于漫天教程大多集中在 Processing、Unity、OpenFrameworks、vvvv 等平台,真青年不要慌,Python 大法依然香,往下看。



前言:

【编程德鲁伊】系列是我的横向编程练习笔记,每期围绕一个主题(数学物理电子图形声音...),用几种程序语言分别实现。战法牧贼同时修,能抗能打能奶能开溜。

(老乡别走,干货后面有)


编程德鲁伊 - 数学篇 - 傅里叶级数可视化

Blender + Python 实现

本章做傅里叶级数可视化,已经分别练习了 JavaScript (React) 版:d1b8058a5bae38a217308db5b0da9079.gif

以及 Unity 版:

11692a5fb3cc63cad274d31593f5e906.gif

这一节又轮到 Python 了。


Playground 的选择

在上一章三角函数主题里(Python三角函数可视化),Python 的开发环境或者 Playground ,我用的是 Jupyter Notebook 。它是一个 Web 版的在线 Python 开发环境,可以基本做到实时编程,边写边看运行结果,还可以代码和文档混编。

4ceb2eec6ed1bd1a14a89984b11cd14f.png

这样会相对容易一些,不用考虑如何搭建合理的本地 Python 环境、如何可视化图形渲染等问题。先把注意力集中在 Python 代码编写上,直接在浏览器里就可编写并查看运行结果。(老乡别走,干货后面还有)

30b94fc66601517440fd8ed5c36669e1.png

Jupyter 虽好,但仍不够野,如果想做更丰富的可视化效果,而非仅仅把公式曲线画出来,那用 Jupyter 来跑 Python 就稍有点限制。

我需要一个不用太操心图形渲染底层实现,并且渲染效果又强悍粗暴的 Python 运行环境。Blender 和 TouchDesigner 是两款看上去符合条件的软件。

Blender

62f0993359fa0ecba36232eb3de5c06f.png

Blender 是一款开源的 3D 内容创作软件,核心功能可以类比 3D Max、Maya 等,体积短小精湛却又功能粗暴,横跨多操作系统,详细介绍见其官网:https://www.blender.org/

558d7a3a04cee1fb0018a6f87b52b4d1.png

Blender 的生态基于 Python 而建,插件、扩展以及高级定制功能,都可以用 Python 来编写。(其实也可以做实时交互的游戏,这一点有点像 Unity,当然 Blender 更偏重 3D 内容的制作。)

TouchDesigner

920ea155ba405b8a1065dbd77b87e4a5.png

TouchDesigner 是一款图形化编程工具,可以类比其他连连看工具如 MaxMSP 、 vvvv 等。TouchDesigner 的扩展脚本语言,也是 Python。

对我来说,目前用 MaxMSP 连连看完全够用,等何时 TouchDesigner 火了我再来蹭热点。

所以本次我用 Blender 作为 Python 编程练习的运行环境

(老乡别走,干货后面还有)


Hello World

首先在 Blender 官网下载 2.80 版的安装文件,Mac、Windows、Linux都支持。

2.80 版起,Blender 有了巨大的更新,究竟有多大,我也不太清楚,因为我上一次用 Blender 是十多年前了,当时还是 2.4x 版,用 Python 试了试参数化建筑生成。反正 2.80 版我当新软件用就对了。

2.80 版安装后启动:

fab987459a87b2338adbc39f06297f5a.png

它的功能很多,建模、贴图、动画、渲染等都有,反正我跟十多年前一样仍然不太会用,推荐查阅官方教程。

本文直接切到 Scripting 来跑 Python。

e80568f12723af3cabf604b98708418d.png

在 Scripting 里有一个 Console,开箱即用,直接在里面输入 Python 代码即可。百年传统,hello world:

fa4461f01efd39eec31bedc81a71664a.png

仅在 Console 里写是很不方便的,点选图中的 Text,这实际上是一个代码文本编辑器,点击新建(New)开始玩耍:

67c2e3dc60c07fa282c8f24dd36519e1.png

继续用 hello world 试试:

print ("hello world from Text Editor")

1ff123b0e5ecec4d0bd77b2e1e42455e.png

输入代码,点击 Run Script 后,可以发现左侧的自带Console区域里,并没有打印 "hello world from Text Editor" 字样。

(老乡别走,干货后面还有)

要调试打印 Text Editor 的代码,需要打开操作系统自带的 Console。这里有官方 Tips :https://docs.blender.org/api/current/info_tips_and_tricks.html#use-the-terminal

对 Blender Windows 版,直接在 help 菜单里开启系统 Console 即可。

对 Mac 版,要先开系统 Terminal/终端(如果已打开 Blender 可以先关闭),在 Terminal 里打开 Blender:

  • 打开 Terminal 或终端

  • 在应用程序里右键点击 Blender(.app),选择 “Show Package Contents” 或“查看包内容”

  • 找到 Contents->MacOS->Blender

  • 将 'Blender' 拖拽到 Terminal 窗口中

  • 回车

b8c99abc742e68e6f8d6bac1ce8e0019.png

开启系统 Terminal 后,重新在 Blender Scripting 的 Text 中输入print ("hello world from Text Editor") 然后 Run Script,便可在 Terminal 中看到打印的信息:

549e5d7a68f38066c78de84a75fc9e23.png


Grease Pencil

Grease Pencil 是 Blender 2.80 版的新功能,它是一种特殊的 Blender object,允许你在 3D 空间里绘制 2D 图形,制作传统 2D 动画,剪切,动效,甚至制作故事版等。

9797b6941bae399270c90f116d315423.png

An example of a Grease Pencil object in the 3D environment

前边说过,Blender 是深度结合 Python 的软件,基本上所有软件操作,都有对应的 Python API 供使用。所以铺垫了那么多,现在终于可以总结为:

在 Blender 里用 Python 调用 Grease Pencil API 进行 2D 图形绘制。

有点像在 Processing 和 P5js 里用代码画图的形式,但同时可以使用 Blender 强大的软件功能,比如直接使用功能菜单,去修改代码所画物体的贴图、材质等等,这一点上,又有点像 Unity 的操作。

Grease Pencil 要展开的话这篇就越跑越远了,先把参考资源列在这里(老乡别走,干货后面还有):

  • Grease Pencil 官方介绍(直接通过软件菜单来操作):https://docs.blender.org/manual/en/latest/grease_pencil/introduction.html

  • Blender Python 官方文档:https://docs.blender.org/manual/en/dev/advanced/scripting/introduction.html

  • Blender & Grease Pencil API 官方文档:https://docs.blender.org/api/current/

  • Blender 2.8 Grease Pencil Scripting and Generative Arthttps://towardsdatascience.com/blender-2-8-grease-pencil-scripting-and-generative-art-cbbfd3967590

注意上边加粗的资源 Blender 2.8 Grease Pencil Scripting and Generative Art,其作者将常用的绘制功能做了封装,在下面节选一部分,详情可点击上方原文查看。

如封装一个 draw_line 函数,用来从两点之间画线:

b432e3d4a6e0ee3946bbd6337bd35181.png

进而画圆、画曲线等:

f7a3ace69929b92920cb887c6718cdb7.png

然后借助 Blender 本身看家的 3D 功能,给画的物体上材质

b4905d0e4ca4ca7b8583d0b5dfa7adf8.png

6e2b61fd908322163871940268838065.png

甚至还可以结合 Blender 的 Animation 功能:

f475737b6ea2bfb001c731e1c35c09ff.gif



(老乡别走,干货后面还有)

傅里叶级数

终于回到正题了……

再回顾一下傅里叶级数的简化公式:

7bf306061053e808ba072bb595ac29ae.png

有关傅里叶级数的数学知识学习笔记,可见 JavaScript (React)傅里叶级数可视化 。

用 Python 编写公式逻辑,以及调用 Blender Grease Pencil API 进行绘制渲染:

7fa2fa4dc4c7fef3e1f4474180cbb6f7.png

完整代码可见后文。

最终效果:

fb195417d14168dbc9f104bf8ec9ade3.gif

还记得么,Grease Pencil 其实是在 3D 空间里画 2D 图形:

88f39331fd2a4e07d33d2ab7af1dbd74.gif

参考资源
  • 【编程德鲁伊 - 数学篇】Python 三角函数可视化

  • 【编程德鲁伊 - 数学篇】JavaScript (React)傅里叶级数可视化

  • Grease Pencil 官方介绍

  • Blender Python 官方文档

  • Blender & Grease Pencil API 官方文档

  • Blender 2.8 Grease Pencil Scripting and Generative Art


Talk is cheap. Show me the code!

本例及【编程德鲁伊】系列大部分代码都开源在这里:https://github.com/avantcontra/coding-druid

请猛戳下方赞赏喜欢作者buy me a coffee!您的金钱鼓励是我前进的动力。

欢迎在Patreon上订阅(英文版),获取更多会员特供的高级内容。您也可以直接在Gumroad商店获取demo和源代码。

网站: floatbug.com微信公众号/知乎专栏:实验编程

Cheers~

Contra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值