标签: blender

Blender:排序器不支持边框渲染

我使用搅拌机编辑视频,当我尝试渲染它时,它出现错误:音序器不支持边框渲染。使用搅拌机2.80

blender

11
推荐指数
3
解决办法
3万
查看次数

如何使用Python获取列表列表中最大列表的索引?

我将Cinema4D中的动画关键帧(使用超棒的py4D)存储到列表列表中:

props = [lx,ly,lz,sx,sy,sz,rx,ry,rz]
Run Code Online (Sandbox Code Playgroud)

我在任意动画中打印出每个属性/轨道的关键帧,它们的长度不同:

track Position . X has 24 keys
track Position . Y has 24 keys
track Position . Z has 24 keys
track Scale . X has 1 keys
track Scale . Y has 1 keys
track Scale . Z has 1 keys
track Rotation . H has 23 keys
track Rotation . P has 24 keys
track Rotation . B has 24 keys
Run Code Online (Sandbox Code Playgroud)

现在,如果我想在Blender中使用这些键,我需要做类似的事情:

  1. 转到当前帧
  2. 设置该关键帧的属性(可以是位置,旋转,缩放)并插入关键帧

到目前为止,我的计划是:

  1. 从0循环到所有属性的最大关键帧数
  2. 循环通过每个属性
  3. 检查它是否为当前密钥存储了值,如果是,则转到Blender中的框架并存储值/插入关键帧

这是最好的方法吗?

这是问题的背景.

首先,我需要找到最大的道具商店列表.我是python的新手,想知道是否有一个神奇的功能可以帮助你.与max()类似,但是对于列表长度.

目前我正在考虑像这样编码:

//after …
Run Code Online (Sandbox Code Playgroud)

python list blender cinema-4d

10
推荐指数
2
解决办法
5846
查看次数

如何在Blender中以编程方式创建逻辑砖?

我想让我的初始化脚本创建交互式Blender应用程序(不一定是游戏)所需的其他传感器/控制器/执行器.这有两个原因:

  • 我可以在多个应用程序中使用此脚本.一遍又一遍地创建通用逻辑是单调乏味的.而且没有其他方法可以导入AFAIK.
  • 让我的Python模块创建逻辑砖对我来说更容易和舒适,因为我是一名程序员.(......代码可以是版本控制,同行评审,易于记录等)

实际上,创建模板文件部分解决了第一个问题.但是我不能为不同的项目混合搭配不同的部分,或者我必须为每种可能性创建一个模板.

我搜索了游戏引擎文档Python API,但找不到任何线索.__init__逻辑砖的方法甚至没有列在那里.

但如果有任何方法可以在Python中动态创建逻辑块,我想尝试一下.

注意:由于我对BGE的了解有限,您不能直接从Python访问按键.需要传感器.

python 3d interactive game-engine blender

10
推荐指数
1
解决办法
3596
查看次数

如何在Blender导出脚本中导出每顶点UV坐标

我正在写一个来自Blender 2.64的python导出脚本.我的想法是我试图以OpenGL VBO友好的方式导出网格数据.所以我在结构布局数组中导出顶点属性.例如,对于具有顶点,法线和1对纹理坐标的网格,vertexAttributeVBO中的每个都将是8个连续的浮点数:

vvvnnntt 
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.问题是,当Blender进行UV映射时,它实际上可以将不同的uv分配给同一个顶点.

也就是说,假设你有一个立方体:你有8个顶点,你有6个面(在这种情况下为四边形).我原以为指数0,1,2,3的面/多边形意味着:

vertex 0, normal 0, uvCoord0 
vertex 1, normal 1, uvCoord1 
vertex 2, normal 2, uvCoord2 
vertex 3, normal 3, uvCoord3 
Run Code Online (Sandbox Code Playgroud)

因此,任何提及索引0,例如,在任何面上,总是意味着顶点0,正常0,uvCoord0元组.好吧,在Blender中,如果我理解正确,一个面可以用uvCoord 0引用顶点0,而另一个面可能用不同的uVCoord引用相同的顶点0.因此,一个face的loop_indices实际上必须用于在objets general data.verticesdata.uv_layers[].data容器中查找向量和uvCoord .

这允许每面应用uv贴图.所以你可以有一个立方体,其中每个面都应用了不同的uv纹理,即使两个相邻的面共享一个顶点,顶点也有不同的uv坐标,具体取决于面.

尽管如此,我的网格对于同一个顶点不应该有不同的uv,因为我正在展开相邻的面.这意味着在我的UV地图中,展开的网格是一组相邻的面(例如,如果它是由6个面构成的立方体,则为十字形),在两个相邻面之间,它们的公共顶点应该对应于相同的点在紫外线地图中.

所以鉴于上述情况,我认为这种方法应该有效:

vertexAttributeList = []
    for vertex in mesh.data.vertices:
        vertexAttribute = list(vertex.co)
        vertexAttribute.extend(list(vertex.normal))
        vertexAttributeList.append(vertexAttribute)

    for triangle in mesh.data.polygons:
        for uv_layer in mesh.data.uv_layers:
            for i in triangle.loop_indices:
                lookupIndex = mesh.data.loops[i].vertex_index
                if len(vertexAttributeList[lookupIndex]) == 6:
                    uvCoord = uv_layer.data[i].uv
                    vertexAttributeList[lookupIndex].extend([uvCoord[0], 1 - uvCoord[1]])
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,上面代码中的含义是我将不止一次访问顶点,因为我正在迭代共享顶点的网格面(本例中为三角形).每次我访问一个顶点时,如果它还没有分配它的UV坐标,那么我通过使用三角形的loop_indices查找它们来分配它们.毕竟,我的假设是,在一天结束时,每个顶点都有独特的uv coords.

上面的代码给出了以下布局,例如(我正在显示网格的前6个顶点属性): …

python blender blender-2.61

10
推荐指数
1
解决办法
6598
查看次数

你可以使用python在blender中添加光源吗?

好吧,我对Blender完全不熟悉,我只是在寻找一些关于如何使用python来控制它的好教程.我希望能够通过python方法添加/删除/编辑光源......这可以吗?谢谢你的建议.

python rendering light blender

10
推荐指数
2
解决办法
6665
查看次数

在OpenGL中从blender求解z-Up导出的collada文件

我通过动画将模型从Blender输出到Collada.众所周知,Blender是一个右手系统,所以它的上轴是z,而OpenGL ES2是Y-Up.

对于静态网格物体,我可以围绕x轴旋转对象90度,但是当我将旋转应用于帧的矩阵时,它会产生意外结果.

那我该怎么做呢?

opengl-es blender collada opengl-es-2.0

10
推荐指数
1
解决办法
787
查看次数

Python subprocess.call没有等待进程完成blender

我在blender中有一个python脚本

subprocess.call(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)

接着是许多其他代码,依赖于这个shell脚本来完成.会发生什么事情,它不等待它完成,我不知道为什么?我甚至试过使用Popen 而不是call如图所示:

p1 = subprocess.Popen(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)
p1.wait()
Run Code Online (Sandbox Code Playgroud)

我尝试使用commuincate但它仍然无法正常工作:

p1 = subprocess.Popen(os.path.abspath('D:/Test/run-my-script.sh'),shell=True).communicate()
Run Code Online (Sandbox Code Playgroud)

这个shell脚本在MacOS上运行得很好(在更改路径后)并在使用时等待 subprocess.call(['sh', '/userA/Test/run-my-script.sh'])

但是在Windows上发生了这种情况,我在Blender中运行下面的python脚本然后一旦它到达子进程行Git bash打开并运行shell脚本,而blender不等待它完成它只是Hello在其控制台中打印而无需等待Git Bash完成.有帮助吗?

import bpy
import subprocess
subprocess.call(os.path.abspath('D:/Test/run-my-script.sh'),shell=True)
print('Hello')
Run Code Online (Sandbox Code Playgroud)

python shell subprocess blender git-bash

10
推荐指数
3
解决办法
1万
查看次数

在Blender中,如何将多个形状从一个对象内部拆分/提取为多个对象?

好的,在观看教程时,我愚蠢地错过了必须在对象模式下添加形状以创建新对象的部分.那么我现在在一个对象中有5个形状,并且不能以不同的方式着色它们.如果我不是那么远,我会重新创建它们,但如果有人知道如何将它们提取到新对象或分解我拥有的单个对象,我将非常感激.

从UV Sphere创建的对象,并在该对象内添加了3个其他UV球体和一个圆柱体.

我正在使用Blender 2.5,如果这很重要的话.

在等待答案的同时,我找到了另一种方法来使它们成为不同的对象.我进入了对象模式,其他4次复制了我的对象,并删除了每个复制中除了一个形状之外的所有形状...允许我为每个对象创建一个形状.

注意:如果他们能够真正告诉我是否有办法将一个对象分成多个,我仍会给予任何人一定的回答.

blender

9
推荐指数
1
解决办法
2万
查看次数

将3D模型转换为SceneJS JSON,包括纹理

动机
我正在尝试使用WebGL创建一个小型演示应用程序.我选择使用SceneJS,因为它似乎是一个简单的框架,并且足以满足此目的.

我已经下载了几个.blend模型(Amy Rose等)并使用Blender将它们导出为Collada(.dae)文件.然后我使用scenejs-pycollada将它们转换为json模型.

我只花了几个小时让scenejs-pycollada转换器工作.如果您以前从未使用过Python,那么显然让这些Python依赖项在Windows中运行并不容易.;)

问题
但现在我被困(再次).我的问题是模型没有任何纹理或材料.

我使用了SceneJS 的Seymour Plane示例.我转换的模型几乎看不到.它是黑色的,似乎不响应场景中的灯光.如果我将平面和模型加载在一起,我可以看到模型被加载,因为它的手臂和腿伸出了飞机.

现在我按照了几个教程,让我将纹理导出为PNG图像.然后我修改了JSON模型中的纹理文件名以匹配文件名,但它没有帮助.

所以我希望有人可以帮我找到一种方法将Blender模型(或其他常见的3D模型)导出为SceneJS使用的JSON格式,包括纹理.

只要它工作,在SceneJS中加载模型的任何其他方法也会这样做.

如果有一个免费下载身体/图形JSON模型的链接,这将有助于现在,但我宁愿了解它是如何工作的.:)

我正在使用

  • Windows 7家庭高级版64位
  • Python 2.7(Windows 32位)
    我之所以选择32位版本,是因为对图书馆和更多可用安装程序的支持似乎更好.起初,我用了32位和64位,它给我带来麻烦,但现在一切似乎工作(除了纹理,这是).
  • 搅拌机2.59
  • SceneJS 0.8.0

我的工作流程
在Blender中,我将模型导出到Collada(*.dae)文件,然后使用scenejs-pycollada将它们转换为Raw JSON.这给了我一个JSON文件,里面有两个对象.第一个似乎是场景,第二个是模型.我保留第二个并将其放在SceneJS示例代码中使用的Javascript变量中.该模型以, "type": "library", "parent": "Scene"我需要从代码中删除的属性结束,以使其加载.

json textures blender scenejs

9
推荐指数
1
解决办法
4706
查看次数

我如何用Python在Blender中读出自定义属性?

我想在Blender本身中使用脚本模式读出Blender对象的自定义属性.到目前为止,我发现只能读出您在脚本模式下自己创建的自定义属性.但是我想读出我自己用手标记的自定义属性.这意味着我没有要使用的局部变量.

我希望它在以下上下文中:我有一个循环遍历所有对象:

for obj in bpy.data.objects:
if not 'Camera' in obj.name and not 'Lamp' in obj.name and not 'Armature' in obj.name:
    #here I get the location of the current Object
    loc.append(obj.location)
Run Code Online (Sandbox Code Playgroud)

现在什么是完美的,将是这样的:

obj.getCustomProperties
Run Code Online (Sandbox Code Playgroud)

有没有办法用Blender Python模式做到这一点?

谢谢,丹尼尔

python blender

9
推荐指数
1
解决办法
4759
查看次数