如何使用PHP脚本调用Blender呈现文件?

时间:2012-05-02 22:39:57

标签: php permissions executable blender

我正在编写一个基本的Web服务来渲染具有良好光照和阴影的颜色样本,在其“命令行”模式下使用blender,并从php脚本(也处理数据库中的编目样本)调用。在win32上使用apache运行一切,使用php 5.2

一切似乎都运转良好,直到实际呈现某些东西的最后一步都失败了。我已经尝试使用所有不同的php执行命令(exec(),system(),passthru()等)并且都具有相同的结果 - 例如什么都没有。奇怪的是它正在工作,因为如果我将一个格式错误的参数传递给blender,那么php会回复来自blender的正确错误消息,该消息验证它肯定是启动程序。如果我提供正确的参数,则exec()等只是挂起,并且任务管理器中不会出现任何blender进程。

我感觉它是一个文件权限问题,因为Blender需要将一个jpg文件写入web文件夹(它位于默认的apache install目录中,例如:在程序文件中),但我不知道如何设置Windows下的正确权限。

从命令窗口执行我的渲染命令完全应该执行它并输出渲染文件,但PHP中的相同命令失败。

这是我的PHP代码(在这种情况下使用system()但所有其他变体似乎都有相同的结果):

$swatchId = $args->swatchId;
$sql = "SELECT * FROM `colours` WHERE `Id` = ".$swatchId." LIMIT 0, 1 ";
$rows = mysql_query($sql);
$command =  ".\blender\blender -b _swatches.blend ";

while ($row = mysql_fetch_assoc($rows)) {
    $filename = $row["ProductCode"];
    $red = $row["Red"];
    $green = $row["Green"];
    $blue = $row["Blue"];
}

$command = $command."-o ".$filename." -F JPEG -x 1 -f 1";
echo json_encode(array("Command"=>$command));
$result = system($command);

这导致命令:

.\blender\blender -b _swatches.blend -o NPRKGAP -F JPEG -x 1 -f 1

在命令窗口中正确执行,但在php(从Web请求中)调用时则无法执行。

我在PHP中关闭了安全模式,并且增加了脚本可以使用的最大内存,尽管渲染的混合并不是那么苛刻。

如果有人可以提供帮助,我会永远感激。

2 个答案:

答案 0 :(得分:0)

尝试将标志添加到blender命令中。

-noaudio -nojoystick

我正在做类似的事情,除了我正在使用python。

背景故事: 当试图让www-data用户启动blender时,我得到了疯狂的权限问题(你也在做什么)。我查看了George Reith的评论,并在netrender的例子中看到,他们让你把noaudio和nojoystick。所以我随机尝试了它,突然www-data可以运行搅拌器!

答案 1 :(得分:0)

创建一个脚本,并将以下代码放入该文件中,并将其另存为.py

import bpy

bpy.ops.render.render(animation=True)

并更改

$command =  ".\blender\blender -b _swatches.blend ";

使用

$command =  ".\blender\blender -b _swatches.blend " + "Directory\script.py";