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

问题描述 投票:0回答:2

我正在编写一个基本的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中关闭了安全模式,并提高了脚本可以使用的最大内存,尽管所呈现的混合并不是那么苛刻。

如果有人能帮助我,将永远感激不已。

php permissions executable blender
2个回答
0
投票
尝试将标志添加到您的Blender命令中。

-noaudio -nojoystick

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

背景故事:当试图让www-data用户启动Blender时,我遇到了疯狂的权限问题(您也在做什么)。我查看了乔治·赖斯(George Reith)的评论,并在netrender示例中看到它们使您放了无声音和无操纵杆。所以我随机尝试了一下,突然www-data可以运行Blender了!


0
投票
创建脚本并将以下代码放入该文件,并将其另存为.py

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

和更改

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

with

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

© www.soinside.com 2019 - 2024. All rights reserved.