Blender,Python创建3D柱状图

本文详细记述了,使用Blender创建3D柱状图的过程,来源于

(1/2) Visualize Real-World JSON Data in Blender (3D Chart Animation Nodes Tutorial)

系统:Win10, 版本:Blender 2.83

数据:https://opendata.blender.org/benchmarks/query/?group_by=benchmark点击页面 Download(JSON) 下载,共七条测试数据。下载重命名为opendata.blender_scene_7.json

一.加载数据

  • 打开Blender创建新文件,删除默认Cube和Camera。
  • 左下面板选择Animation Nodes。New,创建Script Node。
  • 右下面板选择Text Editor。 New, 创建My Script。
  • 顶部菜单Window-> Toggle System console,调出python控制台。
  • 点击Text Editor的运行按钮查看数据。

check loaded data

二.生成AN柱形图

  • 创建一个Cylinder。 tab进入Edit mode。调整Median的z为1m。将原点设置为柱子的底部圆心。返回Object mode。

设置median

2.1 创建AN Object, Cylinders

  • AN中,Node Tree去掉Always,勾选其它三个。
  • Script节点,选择My Script.
  • 点击New Output,选择Generic List,命名对应脚本的变量data
  • 鼠标放在节点红色标题栏上,快捷键W,选择“Create Invoke Node”, 创建Invoke Subprogram节点。
  • 创建Object Instancer,连接Data与Instances。再选择Instance下拉框中的Cylinder。勾选“Copy Full Object”, “Deep copy”

生成柱形图

2.2 各个柱子,拉开水平距离

  • Object Instance上按快捷键w,选择“Loop through Objects”。 同时创建“Invoke Subprogram”, "Loop Input".
  • 修改Loop Input中的Objects名为bars。
  • 创建Object Transforms Outputs节点。连接它的Object与bars。
  • 选中Translation的XYZ.
  • 创建Combine Vector。 连接Vector与Location。
  • 再在前面创建Math Float, 连接Index。最后将Result连接Combine Vector的X

X spread

2.3 高度依据数据变化

  • 点击Loop Input中的New Iterator再创建Generic List,再引用循环变量data。
  • 连接Invoke Subprogram的Data到Invoke Subprogram的generic List。 在Loop Input中将generic 改名成data
  • 创建Get List Element。再按N快捷键,打开右侧菜单,选择Item标签页。Change Type按钮,选择Generic List。然后连接Loop Input的data与Get List Element的List。
  • 取数组中的第二个字段对应Scale。再创建一个Convert节点。选择Float类型。连接Element与Old。
  • 再创建combine vector, 连接New 到 Z。
  • 选中Object Transforms Output的scale Z,再连接Vector 到Scale

这时第二个字段的数值已经体现在柱子的高度方向。但是数值都很大,为了使高度比例谐调,所以都除以一个系数。

  • 创建Float Math节点,选择Devide ,系数设置为500 。

  • 选择Loop Input ,在右侧菜单中点击New Generator,选择Object List。创建一个Object List,连接它的Object 到 Object Transforms Output的Object
  • 创建Shade Object Smooth,连接它的输入Objects到Invoke Subprogram的Object List。
  • 隐藏最初创建的Cylinder,同时选中所有其它Cylinder,Shader Smooth。

2.4  创建 Lables

  • Shift+A创建一个样本Texts, 设置Paragraph下的Alignment,Horizontal-> Right, Vetical-> Center
  • 选中Object Instancer,Shift+D复制一个,然后修改其中的Cylinder为新建的Text
  • 再从Get List Length的节点的Length连线到新建的Object Instance的Instances
  • 选中Loop Input节点,点New Iterator左边的+,新建一个Iterator,选择设置为Generic List。将它改名为labels.
  • 这时Invoke Subprogram节点也相应增加输入端口,并相应修改名称为labels List。连接新建的Object Instancer的Objects到labels List。
  • 再复制一个Object Transforms Output节点,选择Rotation Z,清掉Scale Z。设置Rotation Z为90。此时AN已经创建7个Text对象。
  • 连接Loop Input的lables到Object Transform Output的Object输入,此时自动建立Convert节点。
  • 创建一个Vector Math,选择Add。从Location路径的Combine Vector结点输出的Vector再拉一条线,连接它的A输入端。
  • 上面Vector math 的Result输出连接新建的Object Transforms Output结点的Location输入端。设置B的Y为-2.00 .

  • 复制Get List Element, 连接Loop Input的data到List。Index设置为0。因为标题字段位于第一个。
  • 创建一个Convert节点,连接Element到它的Old,选择Text.
  • 创建Text Object Output 节点,插入到Vector Math与Object Transform Output之间。连接Convert的New到它的Text输入。这时标签文本已更新于数据。

2.6 使颜色依照数值变化

  • Outliner中选择样本Cylinder。在Properties中选择Data Data Properties。在Vertex Colors中点+,创建Col。

  • 增加Set Vertex Color节点,连接第一个Object Transforms Output的Object到它的Object输入端。
  • 复制Scale路径的Math节点。将系数设置为1000。再连接前面的to Float Convert节点到它的A输入端。
  • 创建Combine Color节点,选择RGB。将Result连接R,再将Color连接Set Vertex Color的Color输入端。

  • 切换顶部的标签页Shading,选择Material材料。
  • 创建Vertex color,选择Col。
  • 创建Separate RGB,连接Image输入和前面的Color。
  • 创建ColorRamp,设置前后的颜色范围分别为绿色和红色。 连接Fac和前面的R 。再连接Color输出到Principled BSDF的Base Color输入端。
  • Viewport Shading 选择 Material preview mode 。

切换其它的数据集,查看效果。

下载https://opendata.blender.org/benchmarks/query/?device_type=CPU&os=Windows&benchmark=classroom&group_by=device_name,重命名为opendata.blender_CPU_Windows_classroom_groupby_devicename_750.json

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值