4 changed files with 7584 additions and 0 deletions
-
308examples/matRenderTest.php
-
BINsceneTemplate/map/environment.env
-
BINsceneTemplate/map/shendoEnv.exr
-
7276sceneTemplate/map/shendoEnv.hdr
@ -0,0 +1,308 @@ |
|||||
|
<?php |
||||
|
|
||||
|
|
||||
|
|
||||
|
namespace Blobt\Luxcore\scene; |
||||
|
|
||||
|
use Blobt\Luxcore\scene\lights\Emission; |
||||
|
use Blobt\Luxcore\scene\lights\env\HdrImage; |
||||
|
use Blobt\Luxcore\scene\materials\Disney; |
||||
|
use Blobt\Luxcore\scene\materials\Matte; |
||||
|
use Blobt\Luxcore\scene\objects\Objects; |
||||
|
use Blobt\Luxcore\scene\render\Batch; |
||||
|
use Blobt\Luxcore\scene\render\effect\BackgroundImg; |
||||
|
use Blobt\Luxcore\scene\render\effect\CammaCorrection; |
||||
|
use Blobt\Luxcore\scene\render\effect\NoiseReducerOIDN; |
||||
|
use Blobt\Luxcore\scene\render\effect\Pretreatment; |
||||
|
use Blobt\Luxcore\scene\render\effect\Synthesis; |
||||
|
use Blobt\Luxcore\scene\render\effect\ToneMapLinear; |
||||
|
use Blobt\Luxcore\scene\render\FileSaver; |
||||
|
use Blobt\Luxcore\scene\render\Film; |
||||
|
use Blobt\Luxcore\scene\render\Filter; |
||||
|
use Blobt\Luxcore\scene\render\Image; |
||||
|
use Blobt\Luxcore\scene\render\LightStrategy; |
||||
|
use Blobt\Luxcore\scene\render\Native; |
||||
|
use Blobt\Luxcore\scene\render\OpenCL; |
||||
|
use Blobt\Luxcore\scene\render\Path; |
||||
|
use Blobt\Luxcore\scene\render\RenderEngine; |
||||
|
use Blobt\Luxcore\scene\render\Sampler; |
||||
|
use Blobt\Luxcore\scene\texture\mapping\Mapping; |
||||
|
use Blobt\Luxcore\scene\texture\procedural\ImageMap; |
||||
|
use Blobt\Luxcore\utils\MatHelper; |
||||
|
use GuzzleHttp\Client; |
||||
|
use GuzzleHttp\RequestOptions; |
||||
|
|
||||
|
include dirname(dirname(__FILE__)) . "/vendor/autoload.php"; |
||||
|
|
||||
|
const OPEN = true | 1; |
||||
|
const CLOSE = false | 0; |
||||
|
/** |
||||
|
* 标准材质长宽 |
||||
|
*/ |
||||
|
const MAT_STANDARD_SIZE = 1000; |
||||
|
const UNIT_CONVERSION_MM_TO_M = 0.001; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
$client = new Client(); |
||||
|
$response = $client->get("deep3d.backend-api.dev.com/test/render-task"); |
||||
|
$resContents = $response->getBody()->getContents(); |
||||
|
$result = json_decode($resContents,false); |
||||
|
$taskData = $result->data; |
||||
|
$taskScene = $taskData->scene; |
||||
|
$taskModel = $taskScene->model; |
||||
|
$taskCamera = $taskScene->camera; |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 创建 Luxcore 材质 |
||||
|
*/ |
||||
|
function createLuxcoreMat($matOriginal, $textureScaleU, $textureScaleV, $cacheFileDir, $scene){ |
||||
|
switch($matOriginal->renderType){ |
||||
|
case 1: |
||||
|
return MatHelper::createMatOfDisney($matOriginal, $textureScaleU, $textureScaleV, $cacheFileDir, $scene); |
||||
|
case 2: |
||||
|
return; |
||||
|
case 3: |
||||
|
return; |
||||
|
case 4: |
||||
|
return; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// 创建一个场景;
|
||||
|
$scene = new Scene(); |
||||
|
$sceneTemplatePath = dirname(dirname(__FILE__)) . "/sceneTemplate"; |
||||
|
|
||||
|
|
||||
|
// 一、创建光场:
|
||||
|
|
||||
|
// 8、创建环境光
|
||||
|
$light = new HdrImage([ |
||||
|
'gain' => "1 1 1", |
||||
|
'transformation' => "-1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1", |
||||
|
'file' => "./map/shendoEnv.exr", |
||||
|
'gamma' => 1, |
||||
|
'storage' => "float" |
||||
|
]); |
||||
|
$light->id = 0; |
||||
|
$scene->registerLight($light); |
||||
|
|
||||
|
// 9、创建地面模型
|
||||
|
$mapping = new Mapping(); |
||||
|
$mapping->useUVMapping2d(0, "0", "0.4 -0.966", "0.3 0.983"); |
||||
|
$texture = new ImageMap([ |
||||
|
'file' => "./map/方形阴影遮照.png", |
||||
|
'gain' => 0.6, |
||||
|
'gamma' => 1, |
||||
|
]); |
||||
|
$texture->mapping = $mapping; |
||||
|
$scene->registerTexture($texture); |
||||
|
$material = new Disney([ |
||||
|
'shadowcatcherEnable' => OPEN, |
||||
|
'photongiEnable' => CLOSE |
||||
|
]); |
||||
|
$material->setBaseColor('1 1 1'); |
||||
|
$material->setTransparencyFront($texture); |
||||
|
$material->setTransparencyBack($texture); |
||||
|
$scene->registerMaterial($material); |
||||
|
$obj = new Objects(); |
||||
|
$obj->ply = './ply/ground.ply'; |
||||
|
$obj->setMaterial($material); |
||||
|
$scene->registerObjects($obj); |
||||
|
|
||||
|
|
||||
|
// 二、添加要渲染的模型
|
||||
|
foreach($taskModel->childsParams as $childParams){ |
||||
|
$cacheFileDir = $sceneTemplatePath.'/cacheFiles'; |
||||
|
$material = null; |
||||
|
$matOriginal = (function ($childParams){ |
||||
|
if(is_object($childParams->customMat)){ |
||||
|
return $childParams->customMat; |
||||
|
}else if(is_object($childParams->fixedMat)){ |
||||
|
return $childParams->fixedMat; |
||||
|
}else if(is_object($childParams->defaultMat)){ |
||||
|
return $childParams->defaultMat; |
||||
|
} |
||||
|
})($childParams); |
||||
|
|
||||
|
if(is_object($matOriginal)){ |
||||
|
$textureScaleU = $taskModel->uvScale*(MAT_STANDARD_SIZE/$matOriginal->width); |
||||
|
$textureScaleV = $taskModel->uvScale*(MAT_STANDARD_SIZE/$matOriginal->height)*-1; |
||||
|
$material = createLuxcoreMat($matOriginal, $textureScaleU, $textureScaleV, $cacheFileDir, $scene); |
||||
|
}else{ |
||||
|
$material = new Disney(); |
||||
|
$material->setBaseColor('1 1 1'); |
||||
|
} |
||||
|
$scene->registerMaterial($material); |
||||
|
|
||||
|
$plyFileSavaPath = $cacheFileDir.'/'.basename($childParams->childPlyFile); |
||||
|
$plyFileHandle = fopen($plyFileSavaPath, "w"); |
||||
|
(new Client())->get($childParams->childPlyFile, [RequestOptions::SINK => $plyFileHandle]); |
||||
|
$obj = new Objects(); |
||||
|
$obj->ply = $plyFileSavaPath; |
||||
|
$obj->setMaterial($material); |
||||
|
$scene->registerObjects($obj); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// 三、创建相机
|
||||
|
$position = $taskCamera->position; |
||||
|
$position->x = $position->x * UNIT_CONVERSION_MM_TO_M; |
||||
|
$position->y = $position->y * UNIT_CONVERSION_MM_TO_M; |
||||
|
$position->z = $position->z * UNIT_CONVERSION_MM_TO_M; |
||||
|
$target = $taskCamera->target; |
||||
|
$target->x = $target->x * UNIT_CONVERSION_MM_TO_M; |
||||
|
$target->y = $target->y * UNIT_CONVERSION_MM_TO_M; |
||||
|
$target->z = $target->z * UNIT_CONVERSION_MM_TO_M; |
||||
|
$upVector = $taskCamera->upVector; |
||||
|
$camera = new camera\Perspective( |
||||
|
[ |
||||
|
'autovolumeEnable' => 0, |
||||
|
'lookatOrig' => "{$position->x} {$position->y} {$position->z}", |
||||
|
'lookatTarget' => "{$target->x} {$target->y} {$target->z}", |
||||
|
'up' => "{$upVector->x} {$upVector->y} {$upVector->z}", |
||||
|
'screenwindow' => "-1 1 -1 1", |
||||
|
'autofocusEnable' => 0, |
||||
|
'fieldofview' => $taskCamera->fov, |
||||
|
'cliphither' => 0.1, |
||||
|
] |
||||
|
); |
||||
|
$camera->bokeh->blades = 0; |
||||
|
$scene->registerCamera($camera); |
||||
|
|
||||
|
|
||||
|
// 四、设置渲染参数
|
||||
|
// gpu 渲染
|
||||
|
$render = ''; |
||||
|
$renderEngine = new RenderEngine(); |
||||
|
$render .= $renderEngine; |
||||
|
|
||||
|
$openCL = new OpenCL(); |
||||
|
// $openCL->cpuUse = OpenCL::CLOSE;
|
||||
|
// $openCL->nativeThreadsCount = 0;
|
||||
|
$render .= $openCL; |
||||
|
|
||||
|
$lightStrategy = new LightStrategy(); |
||||
|
$render .= $lightStrategy; |
||||
|
|
||||
|
$path = new Path(); |
||||
|
$render .= $path; |
||||
|
|
||||
|
$sampler = new Sampler(); |
||||
|
$render .= $sampler; |
||||
|
|
||||
|
$filesaver = new FileSaver(); |
||||
|
$render .= $filesaver; |
||||
|
|
||||
|
$batch = new Batch(); |
||||
|
$batch->haltspp = 4000; |
||||
|
// $batch->halttime = 2000;
|
||||
|
$render .= $batch; |
||||
|
|
||||
|
$sceneCfg = new render\Scene(); |
||||
|
$render .= $sceneCfg; |
||||
|
|
||||
|
|
||||
|
// // cpu 渲染
|
||||
|
// $render = '';
|
||||
|
// $renderEngine = new RenderEngine();
|
||||
|
// $renderEngine->type = RenderEngine::TYPE_PATHCPU;
|
||||
|
// $render .= $renderEngine;
|
||||
|
|
||||
|
// $native = new Native();
|
||||
|
// $render .= $native;
|
||||
|
|
||||
|
// $lightStrategy = new LightStrategy();
|
||||
|
// $render .= $lightStrategy;
|
||||
|
|
||||
|
// $path = new Path();
|
||||
|
// $render .= $path;
|
||||
|
|
||||
|
// $sampler = new Sampler();
|
||||
|
// $render .= $sampler;
|
||||
|
|
||||
|
// $filesaver = new FileSaver();
|
||||
|
// $filesaver->renderengineType = FileSaver::TYPE_PATHCPU;
|
||||
|
// $render .= $filesaver;
|
||||
|
|
||||
|
// $batch = new Batch();
|
||||
|
// $batch->haltspp = 200;
|
||||
|
// // $batch->halttime = 2000;
|
||||
|
// $render .= $batch;
|
||||
|
|
||||
|
// $sceneCfg = new render\Scene();
|
||||
|
// $render .= $sceneCfg;
|
||||
|
|
||||
|
|
||||
|
// 图像输出设置
|
||||
|
$imageOutDir = $sceneTemplatePath.'/imageOut'; |
||||
|
$film = new Film(); |
||||
|
|
||||
|
$filter = new Filter(); |
||||
|
$filter->type = Filter::TYPE_GAUSSIAN; |
||||
|
$filter->gaussianAlpha = 1; |
||||
|
$filter->width = 1; |
||||
|
|
||||
|
$film->filter = $filter; |
||||
|
$film->width = 4096; |
||||
|
$film->heigth = 4096; |
||||
|
|
||||
|
$img = new Image(); |
||||
|
$img->effect = [new Pretreatment(),new ToneMapLinear(),new CammaCorrection()]; |
||||
|
$film->addImage($img, $imageOutDir); |
||||
|
|
||||
|
$film->addImage(new Image(['type' => Image::TYPE_OBJECT_ID]), $imageOutDir); |
||||
|
$film->addImage(new Image(['type' => Image::TYPE_RGBA]), $imageOutDir); |
||||
|
|
||||
|
$img = new Image(); |
||||
|
// $img->effect[] = new NoiseReducerOIDN();
|
||||
|
$img->effect[] = new Pretreatment(); |
||||
|
$img->effect[] = new ToneMapLinear(); |
||||
|
$img->effect[] = new Synthesis(); |
||||
|
$img->effect[] = new BackgroundImg( |
||||
|
[ |
||||
|
'file' => "./map/纯白242.png" |
||||
|
] |
||||
|
); |
||||
|
$img->effect[] = new CammaCorrection(); |
||||
|
$film->addImage($img, $imageOutDir); |
||||
|
$render .= $film; |
||||
|
|
||||
|
|
||||
|
// 五、输出场景文件 scene.scn,及渲染文件 render.cfg
|
||||
|
$cfgPath = $sceneTemplatePath . "/render.cfg"; |
||||
|
$scenePath = $sceneTemplatePath . "/scene.scn"; |
||||
|
$logPath = $sceneTemplatePath . "/log/render.log"; |
||||
|
|
||||
|
echo $scene; |
||||
|
$handle = fopen( $scenePath,'w+'); |
||||
|
fwrite($handle,$scene); |
||||
|
fclose($handle); |
||||
|
|
||||
|
echo $render ; |
||||
|
$handle = fopen( $cfgPath,'w+'); |
||||
|
fwrite($handle,$render); |
||||
|
fclose($handle); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
// 六、启动渲染器
|
||||
|
$cmd = "luxcoreconsole -o " . $cfgPath . " -f " . $scenePath . " 1>" . $logPath . " 2>&1"; |
||||
|
echo "\n".$cmd."\n"; |
||||
|
$output; |
||||
|
$returnVar; |
||||
|
exec($cmd,$output,$returnVar); |
||||
|
|
||||
|
if( $returnVar == 127 ){ |
||||
|
throw new \Exception("Please install the luxcorerender bin file in the system directory correctly,Or add to the system environment variable"); |
||||
|
} |
||||
|
|
||||
|
?>
|
7276
sceneTemplate/map/shendoEnv.hdr
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue