解决大模型贴图卡住的问题
This commit is contained in:
1 parent
9008e27d93
commit
ccd621f0b1
1 file changed
+17
-30
+17
-30
@@ -1151,25 +1151,12 @@ bool MeshTexture::ListCameraFaces(FaceDataViewArr& facesDatas, float fOutlierThr
|
|||||||
// continue;
|
// continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// 已有的过曝判断保留
|
|
||||||
float brightnessPerceptual = (0.299f * pixel.r + 0.587f * pixel.g + 0.114f * pixel.b) / 255.0f;
|
float brightnessPerceptual = (0.299f * pixel.r + 0.587f * pixel.g + 0.114f * pixel.b) / 255.0f;
|
||||||
if (brightnessPerceptual > 0.95f)
|
// printf("brightnessPerceptual=%f\n", brightnessPerceptual);
|
||||||
|
|
||||||
|
if (brightnessPerceptual>0.95f)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
float Y = 0.299f * pixel.r + 0.587f * pixel.g + 0.114f * pixel.b;
|
|
||||||
float maxChan = MAXF(pixel.r, MAXF(pixel.g, pixel.b));
|
|
||||||
float minChan = MINF(pixel.r, MINF(pixel.g, pixel.b));
|
|
||||||
float saturation_approx = (maxChan > 0) ? (maxChan - minChan) / maxChan : 0.0f;
|
|
||||||
|
|
||||||
// 只两个条件:极亮 + 低饱和
|
|
||||||
bool isSpecular = (Y > 240.0f) && (saturation_approx < 0.12f);
|
|
||||||
|
|
||||||
if (isSpecular) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// if (!(scene.mesh.invalidFacesRelative.data.contains(idxFace) && scene.is_face_visible_relative(idxFace)))
|
// if (!(scene.mesh.invalidFacesRelative.data.contains(idxFace) && scene.is_face_visible_relative(idxFace)))
|
||||||
// if (false)
|
// if (false)
|
||||||
{
|
{
|
||||||
@@ -10321,11 +10308,11 @@ void MeshTexture::GlobalSeamLeveling3()
|
|||||||
ASSERT(idxPatch0 < idxPatch1);
|
ASSERT(idxPatch0 < idxPatch1);
|
||||||
const MatIdx rowA((MatIdx)coeffB.size());
|
const MatIdx rowA((MatIdx)coeffB.size());
|
||||||
|
|
||||||
// ★ 新增:如果亮度差太大,说明一个是高光一个是暗区,跳过这个约束
|
// // ★ 新增:如果亮度差太大,说明一个是高光一个是暗区,跳过这个约束
|
||||||
const float lum0 = GetLuminance(color0); // 或者用 Y 通道
|
// const float lum0 = GetLuminance(color0); // 或者用 Y 通道
|
||||||
const float lum1 = GetLuminance(color1);
|
// const float lum1 = GetLuminance(color1);
|
||||||
if (std::abs(lum0 - lum1) > 50.0f) // 阈值可调
|
// if (std::abs(lum0 - lum1) > 50.0f) // 阈值可调
|
||||||
continue; // 不添加这个接缝约束,避免传播高光
|
// continue; // 不添加这个接缝约束,避免传播高光
|
||||||
|
|
||||||
coeffB.Insert(color1 - color0);
|
coeffB.Insert(color1 - color0);
|
||||||
ASSERT(ISFINITE(coeffB.back()));
|
ASSERT(ISFINITE(coeffB.back()));
|
||||||
@@ -10436,15 +10423,15 @@ void MeshTexture::GlobalSeamLeveling3()
|
|||||||
|
|
||||||
const Color col(RGB2YCBCR(Color(v)));
|
const Color col(RGB2YCBCR(Color(v)));
|
||||||
|
|
||||||
// ★ 新增:如果已经很亮且调整量是正向的,跳过提亮
|
// // ★ 新增:如果已经很亮且调整量是正向的,跳过提亮
|
||||||
if (col[0] > 210.0f && a[0] > 0.0f) {
|
// if (col[0] > 210.0f && a[0] > 0.0f) {
|
||||||
// 已经够亮了,不再加亮度(但允许降亮度,也允许调色度)
|
// // 已经够亮了,不再加亮度(但允许降亮度,也允许调色度)
|
||||||
clamped_a[0] = 0.0f;
|
// clamped_a[0] = 0.0f;
|
||||||
} else {
|
// } else {
|
||||||
clamped_a[0] = CLAMP(a[0], -maxAdjY, maxAdjY);
|
// clamped_a[0] = CLAMP(a[0], -maxAdjY, maxAdjY);
|
||||||
}
|
// }
|
||||||
clamped_a[1] = CLAMP(a[1], -maxAdjC, maxAdjC);
|
// clamped_a[1] = CLAMP(a[1], -maxAdjC, maxAdjC);
|
||||||
clamped_a[2] = CLAMP(a[2], -maxAdjC, maxAdjC);
|
// clamped_a[2] = CLAMP(a[2], -maxAdjC, maxAdjC);
|
||||||
|
|
||||||
const Color acol(YCBCR2RGB(Color(col + clamped_a)));
|
const Color acol(YCBCR2RGB(Color(col + clamped_a)));
|
||||||
for (int p = 0; p < 3; ++p)
|
for (int p = 0; p < 3; ++p)
|
||||||
|
|||||||
Reference in new issue
Block a user