[三火推荐] [001]C4D脚本入门

digest [复制链接]
查看2994 | 回复6 | 2019-12-2 01:46 | 显示全部楼层 |阅读模式
本帖最后由 JACKADUX 于 2019-12-2 01:46 编辑

HI大家好,我是JACKADUX ,在这里我会和大家分享如何用python在C4D里写脚本,教大家如何去用C4D的SDK。我并不是编程专业出生,自学了将近两年,首先是javascript在AE中编写了脚本,一年之后又想在C4D写脚本学了python.
所以完全不用担心难度,只要付出,就一定会有收获~

在开始之前需要知道的是:
1.首先你对C4D已经有一定的了解。
2.最好能看懂一些基础的英语
3.懂的python的基础语法(如果不会可以慢慢学,python是非常容易掌握的编程语言)4.如果还有不懂得,可以加我们的插件交流群:619734615
5.要有一台电脑。

20180320-蟒蛇5.JPG ---

通常来说,你想在C4D里创建一个立方体,一般直接点击一次就好了。非常容易。
截图201912020011132920.png
但是如果你想创建10个立方体呢?那就点击10次。
如果你想创建100个呢?如果想创建1000个呢?
这时候你意识到,这是一个重复且无聊的工作,如果能找人帮你点击1000次那就再好不过了,可能只是会花亿点时间。
现在我告诉你:其实C4D里面就住着这样一个机器人(暂且叫它小S),你只要告诉他,他就可以帮你在极短的时间,创建好1000个,甚至更多你想要的个数的立方体。这样你肯定会感到非常高兴!
而这,就是脚本最简单的概念:让机器人小S自动帮我们做无聊繁杂的工作。

你想每次创建一个摄像机的时候就自动加上目标标签,并把摄像机放到空物体下?没问题,告诉小S,它帮你搞定。
你想在多边形物体每个面的中心放置一个空物体?完全没问题。
只要是你能在C4D里做到的,小S都能做到,甚至你没办法做到的,(通过更加复杂的算法)小S也能做到。
所以小S就好比你的C4D小助手,帮你完成很多繁杂重复的工作。

20190613.JPG
只是小S有个问题。它比较笨。
它一般只能做你告诉它的内容。
就好像你要跟日本人交流需要用日语,你需要掌握它的语言-python。
而python只是能让它听懂你的命令的基础。
比如:你想让它去创建1000个立方体。
你要在哪里告诉它?怎么告诉? 怎么让它明白你的命令才是关键!

这时候就是我们的基础工具上场的时候了--C4D脚本编辑器!
截图201912020033276587.png
所有你想让小S做的命令都是在这里进行传达的,就好像微信的聊天窗口,只是与你聊天的人是小S。

如果你打开的窗口上面的文字和我的不一样大可不用担心。我们只需要点击脚本窗口上的:File-New Script 来创建一个新的脚本即可。
截图201912020039386158.png

这样我们就算是解决了第一个问题:在哪里给小S传达我们的命令。√

接下来就是第二个问题:怎么告诉它?
这个部分就开始真正有趣了起来。
一般情况下我们是在界面里,移动鼠标,放到立方体的图标,再点击鼠标按钮,C4D就创建好了一个立方体。
但是在脚本的世界里并不是这样的,小S并没有办法看到界面上的东西或者移动鼠标来点击。我们可以想象,所有C4D里的这些东西就好像真实的物体一样,储存在电脑的某个位置,就好像C4D是一个工厂,小S可以进入它,而立方体也在这个工厂的某个地方,虽然我们从界面可以直接找到立方体,但是小S不行,我们必须确切的告诉它这个立方体在什么位置。这就是有趣的部分了,用电脑的视角来看这个储存的地址只是一串0和1,所以为了让我们和小S能交流并且确定这些物体的位置,制作C4D的工程师们,提前写好了一些规则,或者说把这些地址东西都命名好,以便我们查找使用。这就是C4D官方SDK(点击会打开网站
软件开发工具包(缩写:SDK、外语全称:Software Development Kit)
截图201912020059515308.png
我知道这个页面看上去非常吓人,实际上他也有很多东西,你可以把它当成C4D的字典。不过不用担心,我们不需要完全了解它才能用,我们可以像查字典一样遇到问题,然后去查就可以了,而这个教程的目的也是教会大家如何去查。

接下来会稍微有些抽象:
回到立方体的问题,在C4DSDK的分类中,立方体是属于BaseObject这个类(这里类的概念是python中类的概念,不过也可以当成日常所理解的类:比如狗猫都属于动物这个类)而BaseObject又属于c4d这个类,所以我们想创建立方体就要这么写:
cube1 = c4d.BaseObject(c4d.Ocube)

就这一行,我们相当于让小S帮我们创建了立方体
我们可以理解为:我们要创建一个叫cube1的立方体,而这个立方体在 c4d这个工厂的BaseObject这个房间里,它的种类(ID)是c4d.Ocube.
在我们确定最后的ID之前(就是BaseObject后面括号里的c4d,Ocube),这个cube1可能是任何其他东西,完全依赖于括号中的ID是什么,cube1只是一个名字而已,(更专业的叫法是:cube1只是一个变量名。) 如果我们把c4d.Ocube改成c4d.Osphere,我们就创建了一个球体,c4d.Onull就是空物体等。
截图201912020125513953.png
而这个创建只是在C4D的内部创建了出来,我们需要把这个创建的立方体放到物体管理窗口。
用的是这一句:
doc.InsertObject(cube1)

这一句可以理解为:在当前文档doc中导入物体cube1
完整的代码是:
import c4d
# Main function
def main():
    cube1 = c4d.BaseObject(c4d.Ocube)
    doc.InsertObject(cube1)
# Execute main()
if __name__=='__main__':
    main()
    c4d.EventAdd() #刷新

截图201912020133471206.png
然后我们点击右下角的执行按钮,就可以看到电脑为我们创建了一个立方体。为了创建100个立方体我们只需要写一个循环就好了~(循环属于python的基础语法 可在网上自行查看)
import c4d
# Main function
def main():
    for i in range(100):
        cube1 = c4d.BaseObject(c4d.Ocube)
        doc.InsertObject(cube1)
# Execute main()
if __name__=='__main__':
    main()
    c4d.EventAdd()


非常高兴能完成你的第一个脚本!我相信如果你是新手,可能没怎么听懂,但是只要有大致的了解即可,接下来我们就正真开始脚本之旅~

截图201912020114423200.png
截图201912020113479463.png

最近访客

  • c4d_b13fe5fc5e
    2023-06-14
  • qq_qzuser_EBa
    2023-04-30
  • LUOMU
    2023-03-07
  • c4d_845a506413
    2022-11-15
  • 白方格子
    2022-09-23
  • 九月萤
    2022-02-25
  • qq_2021_r07
    2022-02-10
  • 1152166245
    2022-02-07
  • Marley
    2022-02-06
回复 呼我投币

使用道具 举报

平台游客| 2019-12-3 08:21
强大
回复 投币

使用道具

头纹字B | 2019-12-3 10:05 | 显示全部楼层
虽然不会 但是牛逼!
点评回复 呼我投币

使用道具 举报

宁王 | 2019-12-10 15:43 | 显示全部楼层
666666666666666666666666
点评回复 呼我投币

使用道具 举报

yydown | 2020-3-10 19:03 | 显示全部楼层
大佬牛批了
点评回复 呼我投币

使用道具 举报

注册后的第一句留言就留在这里吧,大佬你好
点评回复 呼我投币

使用道具 举报

kjlly | 2021-1-5 17:36 | 显示全部楼层
牛币
点评回复 呼我投币

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

3

主题

13 小时

在线时间

147

C币

初级设计师

Rank: 2

积分
163
注册时间
2019-11-27

专栏分享作者

QQ