processing创意图形代码_Blender中的创意编程:⼊门【原创
翻译,持续更新】
原⽂来⾃:杰⾥⽶·贝伦德 在2018年2⽉21⽇的Medium论坛⽂章。该作者在Medium上还有⼀些其他的 Blender,Processing, ⽣成艺术编程相关的内容,有兴趣的性学可以⾃⼰前往观看。
作者本⼈有⽣成艺术相关的专栏,以往使⽤Processing的Python模式探讨了⽣成艺术,物理仿真,游戏设计等话题,对于相关领域有着⼀定的经验。在翻译本⽂时,最⼤程度使得翻译易读。
原⽂链接
原⽂⽬录:
--------配置Blender进⾏脚本编写--------
从命令⾏运⾏Blender
脚本布局
学习Blender API的⼯具
--------静态⼏何--------
格⽹
球体
--------动画⼏何--------
正弦波
旋转球
MetaBall
--------未完待续--------
以下是正⽂:
本教程旨在⿎励创意编码领域的同学将Blender视为创作3D艺术作品的平台。Blender可能很难学习,因此本⼊门⼿册是为那些曾经尝试过创意编码但希望扩展⾃⾝能⼒的⼈编写的。我们将编写⼀些Python脚本来对⼏何图形进⾏动画处理,并使⽤Open Shading 语⾔ 向这些模型中添加纹理。
本教程是使⽤Blender 2.79版编写的。
配置Blender进⾏脚本编写
与专注于创造性编码的环境(例如Processing)不同,Blender是⼀把瑞⼠军⼑。动画师,雕塑家和纹理艺术家将对Blender进⾏不同的配置以进⾏其⼯作。对于任何给定的任务,在Blender中通常有两种或三种⽅法可以执⾏该任务:快捷键,菜单,⿏标单击或脚本执⾏。这部分的步骤并不是开始时候必须的,但是⼀旦我们在Python脚本编写的过程中遇到问题,它就会很⼤程度地帮助我们。
从命令⾏运⾏Blender
从Windows PowerShell运⾏Blender
在调试脚本时,如果我们希望阅读脚本中print所提供的诊断信息,则需要从命令⾏打开Blender。在PC上,我们可以使⽤命令提⽰符或PowerShell。在Mac上,我们将使⽤Terminal。
命令⾏界⾯(CLI)需要⼀些习惯于那些习惯于图形⽤户界⾯(GUI)的⽤户。与我们的⽬的相关的是命令包括:ls,该命令列出⽬录(⽂件夹)和cd更改所在路径(cd ..向上移动)。按下Tab后cd可以滚动浏览当前⽬录中通过路径名⾃动补全所到的可⽤⽂件和⽂件夹。这应该⾜以使我们到达安装Blender的位置。我们也可以将Blender和Python添加到我们的系统路径中,以避免此步骤(命令⾏中的路径切换)。
脚本布局
选择脚本布局
Blender允许我们通过从每个编辑器的左下⾓的下拉菜单中选择来实现在编辑器⾯板之间的切换。
其顶部信息栏上的菜单中提供了⼏个预设窗⼝布局 。(建议使⽤)Scripting布局 包括控制台和⽂本编辑器以及3D视图,以直观地确认脚本的结果。
学习Blender API的⼯具
为了更好地了解使⽤Blender GUI时会发⽣什么,我们可以做两件事。⾸先,如果要转到选项卡File > User Preferences下的Interface,请选中Python Tooltips。这将为我们提供有关单击按钮时调⽤的⽅法名称的信息。其次,如果我们下拉信息编辑器,我们可以看到我们的函数调⽤历史记录。
在“⽤户偏好设置”中启⽤“ Python⼯具提⽰”
交互式控制台
下拉信息栏以查看命令历史记录。
在上图中,调⽤历史记录表明我们已经选择了场景中的所有项⽬,删除了它们,创建了⼀个多维数据集,添加了地下修改器并更改了该修改器的属性。
交互式控制台使我们能够⾃动完成探索Blender应⽤程序编程接⼝(API)。通过键⼊⼀个关键字,然后Ctrl-Space单击,我们可以看到我们感兴趣的任何类的可⽤⽅法,⽅法的参数列表,甚⾄是简短的描述。在上⾯的⽰例图⽚中,显⽰了⽤于向Blender场景添加新灯光的信息。注意:也可以从上⾯的链接下载基于浏览器的参考。
静态⼏何
通过定向,我们可以尝试创建⼏何。
⽹格
我们从⽅格⼦⽹格开始。
【相关代码太长,请⼿动跳转到其链接:Git链接 】
我们必须在概念上将⼀个⼩⽅块在⽹格中的序号与其在实际坐标中的位置分开。例如,⼀个⼩⽅格可能位于⽹格中的第⼆⾏,第三列和第七层,但基于⽹格坐标的平移,旋转和放缩,它的坐标实际位于场景中的(50、25、100)。在这种情况下,我们通过将抽象位置转换为百分⽐,在真实世界和抽象坐标之间进⾏转换,加上真实世界范围的下限(-extents),然后乘以范围的上限减去其下限(extents - (-extents)或extents * 2)。另外,当for循环嵌套在for循环中时,我们必须注意最⼩化计算。例如,由于我们可以在i循环中发现⼀个⼩⽅块的z坐标,那么即使我们在k循环中创建多维数据集之前也不会使⽤它。js脚本编程入门
⼀个关键区别:在Blender中,编辑对象的平移,旋转和缩放属性,与变换组成对象的顶点,⾯和边不同。现在,我们将创建单独的对象,但是请记住,创建单个对象是⼀种选择。我们总是可以将⽹格中的所有⼩⽅格在事后转换为⼀个对象,⽅法是全部选中它们, 然后按键Ctrl-J将它们合并。
球体
【相关代码太长,请⼿动跳转到其链接:Git链接 】
接下来,我们将代替球⾯坐标系,⽽不是根据笛卡尔坐标系来布置点。⽆需将空间位置转换为红绿蓝(RGB)颜⾊,⽽是将经度映射为⾊相。
使⽤这个坐标系统,要求我们从math库中导⼊⼀些三⾓函数:pi,sin以及cos。为了⽀持RGB和⾊相
饱和度(HSV)颜⾊之间的转换,我们可以使⽤该colorsys库。我们以欧拉⾓将⽴⽅体定向到球体的表⾯。请记住,z轴在上,我们更改每个⽴⽅体的螺距以匹配球⾯的纬度;我们更改每个⽴⽅体的旋转以匹配其在球体的经度。
动画⼏何
⼀旦准备好编写动画脚本,就可以从⾃定义布局中受益。例如,在左侧的屏幕截图中,我们添加了图形编辑器和涂料表。前者让我们可视化和调整通过脚本创建的正弦波运动。后者为我们提供了放置在多维数据集属性上的所有关键帧的概述。时间轴编辑器是上⾯未显⽰的图⽚,但有助于在场景的各个帧中来回浏览。即使没有时间轴,我们也可以通过按Alt-A来开始和停⽌动画。起始和结束范围可以在Properties编辑器中更改。
正弦波
为了演⽰将其他类似编程环境中的动画迁移到Blender中,我们仿写⼀个Daniel Shiffman 的 作品:cube wave in p5.js 。
Blender中的⼯作流程与交互式实时引擎之间的最⼤区别是,我们通常使⽤⼀定数量的帧。在这些帧的范围内,我们插⼊关键帧以标记变化(例如,平移,旋转或缩放的更改)。在关键帧之间的帧中,Blender将会⾃动对给定属性内插中间值。
【相关代码太长,请⼿动跳转到其链接:Git链接 】
我们将时间作为第四维,由嵌套在x和y循环中的for循环表⽰。我们将关键帧放置在场景的第⼀帧。在循环中的每次迭代之后,我们添
加fincr以在帧范围内均匀分布关键帧。
旋转球
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论