From d86658aa1248eed891705023291527b0ac2a41eb Mon Sep 17 00:00:00 2001 From: yuanjiajia <1139393632@qq.com> Date: Thu, 13 Jul 2023 15:32:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=B2=E6=9F=93=E6=B5=8B=E5=BC=8F=20?= =?UTF-8?q?=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/MatHelper.php | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/utils/MatHelper.php b/src/utils/MatHelper.php index 8f50268..40515a7 100644 --- a/src/utils/MatHelper.php +++ b/src/utils/MatHelper.php @@ -264,6 +264,12 @@ class MatHelper{ $material->setInteriorIor($matOriginal->matParams->refractionIor); $material->setUroughness($matOriginal->matParams->roughness); $material->setVroughness($matOriginal->matParams->roughness); + if($matOriginal->matParams->isFilmEnabled === self::OPEN){ + $material->setFilmthickness( + $matOriginal->matParams->filmthickness / 2 + ); + $material->setFilmior($matOriginal->matParams->filmIor); + } //创建一个铺贴对象,使用"uvmapping2d"类型的铺贴对象 @@ -363,6 +369,31 @@ class MatHelper{ $material->setBumptex($normalTexture); } + // 加载镀膜材质纹理 + if($matOriginal->matParams->isFilmEnabled === self::OPEN && $matOriginal->matParams->filmTexture){ + $textureUrl = $matOriginal->matParams->filmTexture; + $textureSavaPath = $cacheFileDir.'/'.basename($textureUrl); + $textureSavaHandle = fopen($textureSavaPath, "w"); + (new Client())->get($textureUrl, [RequestOptions::SINK => $textureSavaHandle]); + + $fileName = preg_replace('/(\.[^\.]+)$/','',basename($textureSavaPath)); + $extension = preg_replace('/^('.$fileName.')+/','',basename($textureSavaPath)); + // 从镀膜材质纹理中 分离 红色通道 作为 镀膜材质强度纹理 + $filmIntensityTextureSavaPath = $cacheFileDir.'/'.$fileName.'_filmIntensity'.$extension; + $imagick = new Imagick($textureSavaPath); + $imagick->separateImageChannel(Imagick::CHANNEL_RED); + $imagick->setImageCompressionQuality(100); + $imagick->writeImage($filmIntensityTextureSavaPath); + $filmIntensityTexture = new ImageMap( + ['file' => $filmIntensityTextureSavaPath] + ); + $filmIntensityTexture->gamma = 1; + $filmIntensityTexture->mapping = $mapping; + $scene->registerTexture($filmIntensityTexture); + + //TODO: 从镀膜材质纹理中 分离 绿色通道 作为 镀膜材质厚度纹理, 待后续完善 + } + return $material; }