Browse Source

新增两个灯光类文件、一个天光缓存类文件、一个世界类文件,其他有一小部分类文件有小改动

master
yuanjiajia 3 years ago
parent
commit
b7765fa316
  1. 2
      .vscode/launch.json
  2. 7
      examples/printScene.php
  3. 24
      src/scene/Scene.php
  4. 19
      src/scene/light/LigthBase.php
  5. 26
      src/scene/lights/LightBase.php
  6. 127
      src/scene/lights/Sky.php
  7. 2
      src/scene/lights/Visibility.php
  8. 2
      src/scene/materials/MaterialsBase.php
  9. 2
      src/scene/render/cache/LightStrategy.php
  10. 2
      src/scene/render/cache/PhotonGI.php
  11. 74
      src/scene/render/cache/VisibilityMapCache.php
  12. 14
      src/scene/texture/mapping/Mapping.php
  13. 2
      src/scene/texture/procedural/ImageMap.php
  14. 105
      src/scene/world/WorldDefault.php

2
.vscode/launch.json

@ -11,7 +11,7 @@
"name": "Launch currently open script", "name": "Launch currently open script",
"type": "php", "type": "php",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/examples/PrintScene.php",
"program": "${workspaceFolder}/examples/printScene.php",
"cwd": "${workspaceFolder}", "cwd": "${workspaceFolder}",
"port": 9055 "port": 9055
} }

7
examples/printScene.php

@ -70,6 +70,13 @@ $scene->registerMaterial($colorGlass); //将玻璃材质注册到 Scene
$obj->setMaterial($colorGlass); //将玻璃材质赋值到模型的材质属性 $obj->setMaterial($colorGlass); //将玻璃材质赋值到模型的材质属性
$scene->registerObjects($obj); //将模型添加到场景中 $scene->registerObjects($obj); //将模型添加到场景中
$default = new world\WorldDefault();
$default->setDefaultVolume($ClearVol);
$scene->registerWorld($default);
echo $scene; echo $scene;

24
src/scene/Scene.php

@ -1,8 +1,8 @@
<?php <?php
namespace Blobt\Luxcore\scene; namespace Blobt\Luxcore\scene;
use function PHPSTORM_META\type;
//use function PHPSTORM_META\type;
use Blobt\Luxcore\utils\StringHelper;
class Scene extends BaseCfg class Scene extends BaseCfg
{ {
@ -37,6 +37,11 @@ class Scene extends BaseCfg
*/ */
private $cameras = []; private $cameras = [];
/**
* @var array 世界对象数组
*/
public $world = [];
/** /**
* 为每个需要存到Scene的实例化对象生成一个唯一的ID * 为每个需要存到Scene的实例化对象生成一个唯一的ID
*/ */
@ -116,6 +121,21 @@ class Scene extends BaseCfg
$this->cameras[$id] = $camera; $this->cameras[$id] = $camera;
} }
/**
* @param object $camera 接收一个相机类对象,为其颁发一个注册信息,并将其存到Scene
*/
public function registerWorld(&$world)
{
foreach( get_object_vars($world) as $key => $value )
{
if($value != null)
{
$key = implode(".", array_map('strtolower', StringHelper::camelStrToArray($key)));
$this->world[$key] = $value;
}
}
}
} }
?> ?>

19
src/scene/light/LigthBase.php

@ -1,19 +0,0 @@
<?php
namespace Blobt\Luxcore\scene\ligth;
use Blobt\Luxcore\scene\BaseCfg;
use Blobt\Luxcore\scene\Scene;
use Blobt\Luxcore\core\Base;
class LightBase extends BaseCfg
{
public function __construct($config = [])
{
$this->id = Scene::createID();
Base::__construct($config);
}
}
?>

26
src/scene/lights/LightBase.php

@ -0,0 +1,26 @@
<?php
namespace Blobt\Luxcore\scene\ligths;
use Blobt\Luxcore\scene\BaseCfg;
class LightBase extends BaseCfg
{
/**
* @var string 灯光类型
*/
public $type;
/**
* @var integer 当前灯光的ID号(取值:大于0的整数)
*/
public $id;
/**
* @var string TODO:储存个由Scene类颁发的注册信息,后期会屏敝此参数的输出
*/
public $registerId;
}
?>

127
src/scene/lights/Sky.php

@ -0,0 +1,127 @@
<?php
namespace Blobt\Luxcore\scene\ligths;
use Blobt\Luxcore\scene\Scene;
use Blobt\Luxcore\core\Base;
use Blobt\Luxcore\scene\render\cache\VisibilityMapCache;
class Sky extends LightBase
{
/**
* 天光
*/
const TYPE_SKY2 = 'sky2';
//以下参数值可以接收一个太阳光实例对象相同参数替换
/**
* @var string 增益,分两种情况:1、当色彩模式开启,色温模式半闭时,这里的参数是一组小数形式RGB三通道的HDR色值,这个色值是由 UI界面中
* 色彩模式的色值、UI界面中曝光参数(如果开启)、与UI界面中增益倍数的计算结果。
* 2、当色彩模式关闭,色温模式开启时,这里的参数就是色温的倍数,这个倍数是由 UI界面中曝光参数(如果开启)、
* 与UI界面中增益倍数的计算结果。
*/
public $gain = "2e-05 2e-05 2e-05";
/**
* @var float 色温模式,开关状态与色彩互斥,1、当取值为0-13000的小数时,色温模式开启,色彩模式关闭。
* 2、当取值为-1时,色温模式关闭,色彩模式启。
*/
public $temperature = -1;
/**
* @var bool 是否将色温模式下的色温值规格化为小数形式的RGB色值(固定取值:flase)
*/
public $temperatureNormalize = self::CLOSE;
/**
* @var float 浑浊度,(取值:0-30的小数)。空气不清洁度,当空气中的尘埃越多,太阳光谱中有更多蓝色光谱被阻挡,因此天光趋向暖色,
* 当空气中的尘埃越少,太阳光谱中有更多蓝色光穿透大气,因此天光趋向冷色。
*/
public $turbidity = 2.2;
/**
* @var string 大地向天实反射回的颜色,一小数形的色值。
*/
public $groundalbedo = "0.5 0.5 0.5";
//以上参数值可以接收一个太阳光实例对象相同参数替换
/**
* @var bool 是否使用一个纯色替换天空球体的下半部分。如果场景中有阴影捕捉器,则应设置为黑色。
*/
public $groundEnable = self::CLOSE;
/**
* @var string 替天空球体的下半部分的颜色,如果$groundEnable参数为关闭状态,此项参数不起作用,反之亦然
*/
public $groundColor = "0.5 0.5 0.5";
/**
* @var bool 是否自动缩放大地
*/
public $groundAutoscale = self::OPEN;
/**
* @var integer TODO:分配宽度,具体作用尚未明确
*/
public $distributionWidth = 512;
/**
* @var integer TODO:分配高度,具体作用尚未明确
*/
public $distributionHeight = 256;
/**
* @var string 目标方向
*/
public $dir = "0 0 1";
/**
* @var string 一个由16个数据组成模型的空间位置参数,包抱位置坐标,旋转参数,缩放参数
*/
public $transformation = "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1";
/**
* @var bool 是否使用天光缓存
*/
public $visibilitymapcacheEnable = self::CLOSE;
/**
* @var object 一个天光缓存对象
*/
public $envLightCache;
/**
* @param array $config 接收一个数组,可以初始化当前实例化对象的各种属性
*/
public function __construct($config = [])
{
$this->type = self::TYPE_SKY2;
$this->id = Scene::createID();
Base::__construct($config);
}
/**
* 打开天光缓存
*/
public function openCache()
{
$this->visibilitymapcacheEnable = self::OPEN;
$this->envLightCache = new VisibilityMapCache;
}
/**
* 关闭天光缓存
*/
public function closeCache()
{
$this->visibilitymapcacheEnable = self::CLOSE;
$this->envLightCache = null;
}
}
?>

src/scene/materials/emission/Visibility.php → src/scene/lights/Visibility.php

2
src/scene/materials/MaterialsBase.php

@ -2,7 +2,7 @@
namespace Blobt\Luxcore\scene\materials; namespace Blobt\Luxcore\scene\materials;
use Blobt\Luxcore\scene\BaseCfg; use Blobt\Luxcore\scene\BaseCfg;
use Blobt\Luxcore\scene\Scene;
use Blobt\Luxcore\scene\ligths\Visibility;

2
src/scene/render/cache/LightStrategy.php

@ -8,6 +8,8 @@ use Blobt\Luxcore\core\Base;
class LightStrategy extends render\LightStrategy class LightStrategy extends render\LightStrategy
{ {
//直接光缓存类
/** /**
* @var float 光照阈值,(取值:0-1的小数) * @var float 光照阈值,(取值:0-1的小数)
*/ */

2
src/scene/render/cache/PhotonGI.php

@ -7,6 +7,8 @@ use Blobt\Luxcore\core\Base;
class PhotonGI extends BaseCfg class PhotonGI extends BaseCfg
{ {
//全局光缓存类
/** /**
* @var float 最大光子计数,(取值:大于等于1百万) * @var float 最大光子计数,(取值:大于等于1百万)
*/ */

74
src/scene/render/cache/VisibilityMapCache.php

@ -0,0 +1,74 @@
<?php
namespace Blobt\Luxcore\scene\render\cache;
use Blobt\Luxcore\scene\BaseCfg;
class VisibilityMapCache extends BaseCfg
{
//天光缓存类
/**
* @var integer 缓存品质(默认取值:1)
*/
public $mapQuality = 1;
/**
* @var integer 缓存宽度(默认取值:0),0表示与渲染输出的图像尺寸同步
*/
public $mapTilewidth = 0;
/**
* @var integer 缓存高度(默认取值:0),0表示与渲染输出的图像尺寸同步
*/
public $mapTileheight = 0;
/**
* @var integer 缓存采样计数(默认取值:1)
*/
public $mapTilesamplecount = 1;
/**
* @var integer TODO:具体作用尚未明确(默认取值:0)
*/
public $mapSampleupperhemisphereonly = 0;
/**
* @var integer 可见的最大采样数(默认取值:1048576)
*/
public $visibilityMaxsamplecount = 1048576;
/**
* @var integer 可见的光子深度,(取值:3-64的整数)
*/
public $visibilityMaxdepth = 4;
/**
* @var float TODO:具体作用尚未明确(默认取值:0。99)
*/
public $visibilityTargethitrate = 0.99;
/**
* @var integer TODO:具体作用尚未明确(默认取值:0)
*/
public $visibilityRadius = 0;
/**
* @var integer TODO:具体作用尚未明确(默认取值:25)
*/
public $visibilityNormalangle = 25;
/**
* @var bool 是否储存天光缓存文件
*/
public $persistentSafesave = self::OPEN;
/**
* @var string 储存光子缓存文件的路径及文件名,如果字符串为空,则表示不储存光子缓存文件
*/
public $persistentFile = "./Untitled.env";
}
?>

14
src/scene/texture/mapping/Mapping.php

@ -36,6 +36,16 @@ class Mapping extends BaseCfg
*/ */
const TYPE_UVMAPPING3D = 'uvmapping3d'; const TYPE_UVMAPPING3D = 'uvmapping3d';
/**
* 随机种子类型
*/
const TYPE_OBJECT_ID_OFFSET = 'object_id_offset';
const TYPE_TRIANGLE_AOV = 'triangle_aov';
/** /**
* @var string 铺贴类型 * @var string 铺贴类型
*/ */
@ -51,12 +61,12 @@ class Mapping extends BaseCfg
//当铺贴类型属于随机时,以下参数才可设以置和输出 //当铺贴类型属于随机时,以下参数才可设以置和输出
/** /**
* @var string 随机种子类型,当铺贴类型为随机时,参数才可设以置和输出
* @var string 随机种子类型,当铺贴类型为随机时,参数才可设以置和输出,当随机种子类型为 triangle_aov时,有一个生成1个多余ply文件的Bug
*/ */
public $seedType; public $seedType;
/** /**
* @var integer 当随机种类型为 object_id_offset时,可以设置为大于等于的整数,否则只能为0,当铺贴类型为随机时,参数才可设以置和输出
* @var integer 当随机种类型为 object_id_offset时,可以设置为大于等于的整数,否则只能为0,当铺贴类型为随机时,参数才可设以置和输出
*/ */
public $objectidoffsetValue; public $objectidoffsetValue;

2
src/scene/texture/procedural/ImageMap.php

@ -31,7 +31,7 @@ class ImageMap extends TextureBase
public $gamma = 2.2; public $gamma = 2.2;
/** /**
* @var bool 是否随机重复
* @var bool 是否随机重复,当此项参数状态为打开时,有一个成生两个多余图像文件的Bug
*/ */
public $randomizedtilingEnable = self::CLOSE; public $randomizedtilingEnable = self::CLOSE;

105
src/scene/world/WorldDefault.php

@ -0,0 +1,105 @@
<?php
namespace Blobt\Luxcore\scene\world;
class WorldDefault
{
/**
* @var object 一个体积对象
*/
public $volumeDefault;
//以下属性暂时注释,因为还没有发现 World存在以下这些默认的对象
// public $materialDefault;
// public $cameraDefault;
// public $lightDefault;
// public $textureDefault;
// public $objectsDefault;
/**
* @param object $volume 接收一个体积对象,设置为世界默认的体积
*/
public function setDefaultVolume($volume)
{
$this->volumeDefault = $this->judgeAttribute($volume);
}
//以下函数暂时注释,因为还没有发现 World存在以下这些默认的对象
// /**
// * @param object $material 接收一个体积对象,设置为世界默认的体积
// */
// public function setDefaultMaterial($material)
// {
// $this->materialDefault = $this->judgeAttribute($material);
// }
// /**
// * @param object $camera 接收一个体积对象,设置为世界默认的体积
// */
// public function setDefaultCamera($camera)
// {
// $this->cameraDefault = $this->judgeAttribute($camera);
// }
// /**
// * @param object $light 接收一个体积对象,设置为世界默认的体积
// */
// public function setDefaultLight($light)
// {
// $this->lightDefault = $this->judgeAttribute($light);
// }
// /**
// * @param object $texture 接收一个体积对象,设置为世界默认的体积
// */
// public function setDefaultTexture($texture)
// {
// $this->textureDefault = $this->judgeAttribute($texture);
// }
// /**
// * @param object $objects 接收一个体积对象,设置为世界默认的体积
// */
// public function setDefaultObjects($objects)
// {
// $this->objectsDefault = $this->judgeAttribute($objects);
// }
/**
* @param object $value 接收的是一个 由自身set函数 所接收到的值,本函数可以被这些类set函数调用,
* 并判断set函数接收到值是否合法,合法则返回$value,否则抛出一个异常
*/
protected static function judgeAttribute($value)
{
if( is_object($value) )
{
if( $value->registerId != null )
{
return $value->registerId;
}
else
{
throw new \Exception("You use an unregistered ".$value->getInstanceClassName()." object for the current property");
}
}
else
{
return $value;
}
}
}
?>
Loading…
Cancel
Save