﻿WEBVTT

00:00:00.641 --> 00:00:03.016
嗨，欢迎来到"艺术家的脚本"

00:00:03.694 --> 00:00:06.789
这是一个关于Blender脚本的系列视频教程

00:00:07.550 --> 00:00:11.305
它针对的是那些不一定想成为进程员的人

00:00:11.735 --> 00:00:15.290
但对他们来说，脚本可能是有所帮助的

00:00:15.290 --> 00:00:18.235
而且它可以在很多事情上都很有用

00:00:18.235 --> 00:00:19.915
我们很快就会看到

00:00:19.915 --> 00:00:23.510
在我们开始之前，让我先介绍一下我自己

00:00:23.510 --> 00:00:25.240
我的名字是Subren Stuvel

00:00:25.240 --> 00:00:27.190
我是一名核心Blender开发者

00:00:27.190 --> 00:00:29.225
我曾在Blender研究所工作过

00:00:29.225 --> 00:00:31.355
我有在艺术家身边工作的经验

00:00:31.355 --> 00:00:33.525
我曾在Blender Cloud本身工作过

00:00:33.525 --> 00:00:35.605
也曾在Flamenco做过tractor

00:00:35.605 --> 00:00:38.425
我还有一个计算机动画专业的博士学位

00:00:38.425 --> 00:00:41.085
期间我在Blender游戏引擎上工作过

00:00:41.085 --> 00:00:44.060
之后，我开始在Blender研究所这里工作

00:00:44.060 --> 00:00:47.005
这个系列的内容是关于Blender的脚本编写

00:00:47.385 --> 00:00:50.015
基本上就是让Blender自己按按钮

00:00:50.585 --> 00:00:53.420
如果你曾做过任何需要大量点击

00:00:53.420 --> 00:00:55.555
和大量重复的“猴子”工作

00:00:57.123 --> 00:00:59.953
这可能是可以帮助到你的系列教程

00:00:59.953 --> 00:01:02.198
脚本编写的例子会很有用

00:01:02.198 --> 00:01:04.993
我们对骨骼或对象进行批量命名

00:01:06.092 --> 00:01:09.712
或者在某个目录下喧染10000个OBJ文档

00:01:10.128 --> 00:01:13.188
有一点要记住的是，计算机是愚蠢的

00:01:14.313 --> 00:01:16.343
他们只会按照要求去做

00:01:16.358 --> 00:01:19.078
一行一行，一个字一个字地去做

00:01:19.078 --> 00:01:21.433
而不会真正去思考你的意思

00:01:21.855 --> 00:01:25.915
所以说，一定要谨记字面意思，这是很好的

00:01:26.286 --> 00:01:28.651
那麽这个系列的介绍就到这里了

00:01:29.322 --> 00:01:32.432
我们先去用Blender本身做一些实用的东西

00:01:33.588 --> 00:01:36.058
然后就可以用Python来编程了

00:01:36.378 --> 00:01:40.553
那是一门相当不错的语言，读起来相当容易理解

00:01:40.891 --> 00:01:44.576
而且，它还可以让你在交互式地玩弄它

00:01:44.829 --> 00:01:48.809
所以，让我们深入到Blenders的"python控制台"中

00:01:48.809 --> 00:01:51.519
在我切换完之后，就是这样子了

00:01:52.050 --> 00:01:54.410
所以这里是默认的启动文档

00:01:55.332 --> 00:01:58.337
我们可以把时间线换成Python控制台

00:02:00.091 --> 00:02:02.436
因为我们现在不需要时间线

00:02:02.436 --> 00:02:07.916
我们来做一些计算，3×4=12，2加3×4=14

00:02:12.383 --> 00:02:15.643
因为乘法和除法都是先于加法和减法

00:02:19.029 --> 00:02:24.124
所以如果要先做加法，就要用小括号，(2加3)×4=20

00:02:27.650 --> 00:02:31.140
我们去看看能不能对那个默认的立方体做一下

00:02:31.158 --> 00:02:33.828
如果我们在3D窗口中按N键

00:02:35.096 --> 00:02:37.371
可以看到x y z的位置

00:02:38.553 --> 00:02:40.898
让我们把它移到别的地方去

00:02:41.178 --> 00:02:44.438
所以如果把鼠标悬停在位置输入框上

00:02:44.438 --> 00:02:46.108
可以看到Python信息

00:02:46.112 --> 00:02:50.072
bpy.data.objects.cube.location.0

00:02:50.706 --> 00:02:54.651
这基本上是指从Blender界面的点得到物体的数据

00:02:57.704 --> 00:03:01.284
有对象，从这些对象中，我要有cube

00:03:01.284 --> 00:03:04.014
cube有一个位置，而位置有几个分量

00:03:04.268 --> 00:03:08.123
X是分量0，Y是分量1，Z是分量2

00:03:11.242 --> 00:03:15.102
我们可以把它复制到我们的Blender Python控制台中

00:03:15.467 --> 00:03:18.272
bpy.data.objects["Cube"]，location[0]

00:03:22.692 --> 00:03:24.877
这样就可以得到X的位置

00:03:26.488 --> 00:03:31.233
而location 1就可以得到Y的位置，当然2就可以得到Z

00:03:35.288 --> 00:03:37.918
另外，你也可以用字母来表示

00:03:38.842 --> 00:03:42.427
所以实际上有一个".X"，做同样的事情

00:03:43.051 --> 00:03:45.901
我比较喜欢那些稍微有点好的名字

00:03:45.901 --> 00:03:48.581
如果你只给它们取名X Y和Z

00:03:50.990 --> 00:03:53.535
会让你的脚本更容易读懂一点

00:03:53.535 --> 00:03:57.100
这并不局限于读取，我们还可以写到它

00:03:57.100 --> 00:03:59.530
所以我们可以把".Z"设置为0

00:03:59.530 --> 00:04:04.040
然后cube会回到0点，或1，或者加=，表示增量

00:04:07.017 --> 00:04:09.877
增量0.1，我们就可以继续使用

00:04:12.596 --> 00:04:16.931
我在控制台按下向上箭头键，它给出了前面的命令

00:04:16.931 --> 00:04:21.196
然后按回车键，这样就不用再用手输入所有的内容了

00:04:23.777 --> 00:04:25.957
我们还可以直接指定位置

00:04:26.426 --> 00:04:28.636
而不是单独指定每个组件

00:04:30.446 --> 00:04:32.541
通过删除最后一个组件

00:04:33.154 --> 00:04:35.994
然后在括号里给它分配三个数字

00:04:36.764 --> 00:04:40.194
比如象这样，然后我们同时设置X Y Z

00:04:44.006 --> 00:04:45.781
这对Scale也是有效的

00:04:56.346 --> 00:04:58.031
对Rotation也是如此

00:05:02.981 --> 00:05:07.211
只是在 Python 的方面，旋转总是与 Radiance 一起工作

00:05:08.790 --> 00:05:12.830
而不是与你在 UI 中可能看到的 Degrees 一起工作

00:05:13.713 --> 00:05:16.408
所以这可能需要一点时间来适应

00:05:16.913 --> 00:05:20.078
还有一件事可能会让事情更容易打字

00:05:20.735 --> 00:05:23.645
那就是Python控制台支持自动完成

00:05:25.001 --> 00:05:27.566
所以你可以先输入bpy.da

00:05:27.566 --> 00:05:30.716
然后按Ctrl加Space，自动补全data

00:05:30.716 --> 00:05:35.266
再输入.ob，ctrl加空格，补全object，["Cube"]你要自己打

00:05:35.266 --> 00:05:38.956
但是.ro，ctrl加空格补全後再来个euler

00:05:38.956 --> 00:05:42.996
所以这个是用Ctrl加空格完成的，可以很好用

00:05:42.996 --> 00:05:46.246
也可以帮你搞清楚有什麽东西要打字

00:05:48.056 --> 00:05:50.441
所以这里就有一整张清单了

00:05:52.853 --> 00:05:55.918
顺便说一下，你可以在文档中找到

00:05:55.918 --> 00:05:59.103
如果你去帮助，然后Python API 参考

00:05:59.103 --> 00:06:01.283
你就会得到所有这些信息

00:06:01.283 --> 00:06:03.423
但我们稍后会讲到这一点

00:06:03.423 --> 00:06:05.758
让我们来看看其他一些东西

00:06:05.758 --> 00:06:09.643
我们可以在Blender用户手册中找到关于Python的信息

00:06:09.643 --> 00:06:12.248
我们已经看到了现有对象的这些属性

00:06:12.297 --> 00:06:16.757
让我们看看我们是否可以删除或许创建一些新的对象

00:06:16.757 --> 00:06:18.877
这是用operators来完成的

00:06:18.877 --> 00:06:21.327
operators是Blender将某些功能

00:06:21.327 --> 00:06:24.352
绑定到界面中的菜单项或按钮的方式

00:06:27.741 --> 00:06:31.651
所以我们可以做的就是将鼠标悬停在Button上

00:06:31.851 --> 00:06:34.461
然后你就会看到operators命令

00:06:34.461 --> 00:06:36.326
你甚至不需要记住它

00:06:36.326 --> 00:06:38.791
你只需按Ctrl加C键复制

00:06:38.944 --> 00:06:43.109
然后按Ctrl加V键粘贴到控制台，就可以了

00:06:43.942 --> 00:06:46.927
所以，现在我们已经删除了一个对象

00:06:46.927 --> 00:06:49.027
我们来看看创建一个对象

00:06:49.027 --> 00:06:50.382
你按Shift加A

00:06:50.382 --> 00:06:53.132
然后在一个操作项上悬停鼠标

00:06:53.732 --> 00:06:57.177
你看到bpy.ops.mesh.primitive_uv_sphere_add()

00:06:59.476 --> 00:07:01.356
那麽再按Ctrl加C

00:07:02.347 --> 00:07:07.427
然后在控制台中按Ctrl加V键，输入，就有了你的球体

00:07:08.255 --> 00:07:10.430
这个有点无聊，是默认的

00:07:10.909 --> 00:07:13.654
让我们来看看能不能做一些事情

00:07:14.397 --> 00:07:15.387
不要害怕

00:07:15.387 --> 00:07:19.807
如果你还不了解这些选项，我稍后会给你一些数据

00:07:20.358 --> 00:07:23.028
你可以在这里找到它们的具体作用

00:07:23.722 --> 00:07:25.637
那麽，让我们在(1，2，3)的位置

00:07:28.312 --> 00:07:31.282
创建一个大小等于0.10的小球

00:07:35.204 --> 00:07:38.009
在那里，你有一个非常小的球体

00:07:38.899 --> 00:07:42.609
让我们在不同的位置创建一个大一点的球体

00:07:49.679 --> 00:07:50.849
就这麽简单

00:07:52.355 --> 00:07:56.015
我们已经在Blenders用户手册中找到了不少信息

00:07:57.114 --> 00:07:59.529
但也有Blenders的API文档

00:08:00.314 --> 00:08:04.139
你可以在这里找到Blender，Python API参考

00:08:05.894 --> 00:08:08.109
它为你打开浏览器的信息

00:08:09.094 --> 00:08:11.654
你可以再用那个复制粘贴的技巧

00:08:12.213 --> 00:08:16.878
所以我们来看看，Shift加A，mesh UV sphere，Ctrl加C

00:08:19.433 --> 00:08:23.543
然后我到浏览器里，在快速搜索里粘贴进去

00:08:26.365 --> 00:08:30.500
点击第一个链接，在那里就有什麽是什麽的解释了

00:08:32.692 --> 00:08:35.692
另一个不错的信息来源是Python标准库

00:08:37.606 --> 00:08:40.246
那麽到当前为止，我们看到了什麽？

00:08:40.246 --> 00:08:44.346
我们知道计算机很笨，只是把命令一个个做出来

00:08:45.994 --> 00:08:49.029
我们已经看到了如何使用Python控制台

00:08:49.592 --> 00:08:53.227
以及如何创建对象、移动对象和修改现有对象

00:08:55.609 --> 00:09:00.084
我们已经看到了如何从Blenders用户界面复制信息的方法

00:09:01.795 --> 00:09:04.365
而且它还指向了一些信息来源

00:09:05.290 --> 00:09:07.735
你可以在这里找到更多的东西

00:09:07.735 --> 00:09:12.095
所以，在下一个视频中，我们将看看名称和对象

00:09:12.558 --> 00:09:13.578
因为输入

00:09:13.706 --> 00:09:17.931
bpy.data.objects.cube.something.something.something

00:09:19.778 --> 00:09:22.738
过一段时间後，就会变得非常无聊

00:09:22.738 --> 00:09:24.428
在下一个视频中见

00:09:24.455 --> 00:09:25.195
再见