From 06f091f0ff53868e046d3c6ecfca4715054ff59c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Thu, 24 Sep 2026 18:01:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=B1=82=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E8=A1=A5=E4=B8=8A=20pbr=20=E4=BE=9D=E8=B5=96=E8=B4=B4=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - server-rs/crates/platform-tripo/src/common/validation.rs:validate_generation_options 增加 texture=false 与 pbr=true 的组合拒绝(TripoField::Pbr),直连调用方不用再把这种不会成立的组合拖到 provider 侧才报错;放在 generate_parts 分支之后,不改变该分支原有的归因 - server-rs/crates/platform-tripo/src/common/validation.rs:补用例锁住 texture=false + pbr=true 被拒、texture=true 时放行 --- .../platform-tripo/src/common/validation.rs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/server-rs/crates/platform-tripo/src/common/validation.rs b/server-rs/crates/platform-tripo/src/common/validation.rs index d24e307ba..83faf324f 100644 --- a/server-rs/crates/platform-tripo/src/common/validation.rs +++ b/server-rs/crates/platform-tripo/src/common/validation.rs @@ -206,6 +206,16 @@ pub(crate) fn validate_generation_options( } } + // pbr 依赖贴图:契约里写着「依赖贴图」,api-server 侧也已按同一口径拒绝, + // 这里补上直连调用方这一层,别把「不会成立的组合」拖到 provider 那边才报错。 + if options.texture == Some(false) && options.pbr == Some(true) { + return Err(invalid( + Some(TripoField::Pbr), + TripoValidationReason::InvalidCombination, + "pbr=true requires texture=true", + )); + } + if let Some(face_limit) = options.face_limit { let (minimum, maximum) = face_limit_bounds(family, options); if face_limit < minimum || face_limit > maximum { @@ -469,6 +479,28 @@ mod tests { } } + /// pbr 依赖贴图:`texture=false` 与 `pbr=true` 是自相矛盾的组合,提交前就要拒绝。 + #[test] + fn pbr_requires_texture() { + let mut options = minimal_options(Model3dModelVersion::H31); + options.texture = Some(false); + options.pbr = Some(true); + + let error = validate_generation_options(&options) + .expect_err("texture=false 与 pbr=true 同时给出必须被拒"); + assert_eq!( + rejection(error), + Some(( + Some(TripoField::Pbr), + TripoValidationReason::InvalidCombination + )) + ); + + // 显式带贴图时同一个 pbr 取值合法。 + options.texture = Some(true); + validate_generation_options(&options).expect("texture=true 时 pbr=true 应放行"); + } + /// `quad=true` 只对 v3.x 家族与 P2 放行,其余家族按 Quad 字段拒绝。 #[test] fn quad_is_limited_to_v3_families_and_p2() {