如何使用从PHP脚本调用的Blender渲染文件


How to render a file with Blender called from a PHP script?

我正在编写一个基本的Web服务来渲染具有漂亮灯光和阴影的色板,在其"命令行"模式下使用Blender,并从php脚本调用(该脚本还处理数据库中的色板编目(。一切都在 win32 上的 apache 下运行,php 5.2

一切似乎都运行良好,直到实际渲染某些内容的最后一步,此时一切都失败了。我尝试使用所有不同的 php 执行命令( exec((、system((、passthru(( 等(,并且都有相同的结果 - 例如根本没有。奇怪的是它正在工作,因为如果我将格式错误的参数传递给 blender,那么 php 会从 blender 回显正确的错误消息,从而验证它肯定在启动程序。如果我提供正确的参数,那么exec((等只是挂起,任务管理器中没有出现搅拌机进程。

我有一种感觉,这是一个文件权限问题,因为Blender需要将jpg文件写入Web文件夹(该文件夹位于默认的apache安装目录中,例如:在程序文件中(,但我不知道如何在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 中关闭了安全模式,并增加了脚本可以使用的最大内存,尽管渲染的混合并不是那么苛刻。

如果有人能帮忙,我将永远感激不尽。

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

-noaudio -nojoystick

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

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

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

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

和改变

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

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