This commit is contained in:
2026-10-03 05:40:26 +08:00
parent faf799837f
commit 7bcbcc69ea
7 changed files with 96 additions and 44 deletions
+5 -12
View File
@@ -30,17 +30,13 @@ const FACE_SYNC_INITIAL_DELAY := 1.0
@export_group("画布")
@export var canvas_size: int = 512
## 与两个原始贴图的背景/头部底色完全相同:RGB(137,179,255)。
## 与模型身体贴图的底色一致(FaceRig 启动时会从 mat_body 的 BaseColor 左上角自动读出来)。
## 只给画布和缩略图垫底用,不参与 3D 着色。
@export var skin_color: Color = Color(0.537255, 0.701961, 1.0, 1.0)
@export_group("脸部 UV")
## 脸部矩形在 body_mesh 的 UV 上占的范围(实测自当前模型:头部孤岛是 u 0.695~0.996 / v 0.682~0.996)。
## 它必须整块落在头部那块 UV 孤岛里;模型重导后 UV 一变,表情就会画歪或跑到别的部位上。
@export var face_uv_min: Vector2 = Vector2(0.695, 0.682)
## 脸部矩形的 UV 边长
@export var face_uv_size: Vector2 = Vector2(0.301, 0.314)
## 头部 UV 的 v 越往上越大,而贴图第 0 行在上边 —— 不翻就在脸上上下颠倒
@export var face_uv_flip_y: bool = true
## 表情画在哪 / 多大 / 正不正,全部写在 face_paint.gdshader 顶部的「调表情就改这一段」里
## (face_center / face_size / face_flip_y)。**FaceRig 故意不传这三个 uniform**,
## 免得脚本里的值把 shader 里调好的值盖掉。
var mesh: MeshInstance3D
var material: ShaderMaterial
@@ -88,9 +84,6 @@ func _ready() -> void:
material.set_shader_parameter("body_tint", body_material.albedo_color)
material.set_shader_parameter("surface_roughness", body_material.roughness)
material.set_shader_parameter("surface_metallic", body_material.metallic)
material.set_shader_parameter("face_uv_min", face_uv_min)
material.set_shader_parameter("face_uv_size", face_uv_size)
material.set_shader_parameter("face_uv_flip_y", face_uv_flip_y)
material.set_shader_parameter("paint_tex", painter.texture)
mesh.set_surface_override_material(surface_index, material)