yuanjiajia
3 years ago
14 changed files with 381 additions and 27 deletions
-
2.vscode/launch.json
-
7examples/printScene.php
-
24src/scene/Scene.php
-
19src/scene/light/LigthBase.php
-
26src/scene/lights/LightBase.php
-
127src/scene/lights/Sky.php
-
2src/scene/lights/Visibility.php
-
2src/scene/materials/MaterialsBase.php
-
2src/scene/render/cache/LightStrategy.php
-
2src/scene/render/cache/PhotonGI.php
-
74src/scene/render/cache/VisibilityMapCache.php
-
14src/scene/texture/mapping/Mapping.php
-
2src/scene/texture/procedural/ImageMap.php
-
105src/scene/world/WorldDefault.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); |
|||
} |
|||
|
|||
} |
|||
|
|||
?>
|
@ -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; |
|||
|
|||
} |
|||
|
|||
?>
|
@ -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; |
|||
} |
|||
} |
|||
|
|||
?>
|
@ -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"; |
|||
|
|||
} |
|||
|
|||
?>
|
@ -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; |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
?>
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue