diff --git a/godot/src/tool/avatar_renderer/avatar_renderer_helper.gd b/godot/src/tool/avatar_renderer/avatar_renderer_helper.gd index 784ee91a6..3df0b1884 100644 --- a/godot/src/tool/avatar_renderer/avatar_renderer_helper.gd +++ b/godot/src/tool/avatar_renderer/avatar_renderer_helper.gd @@ -49,7 +49,14 @@ class AvatarJson: class AvatarEntry: - var dest_path + var dest_path := "" + var width := 2048 + var height := 2048 + + var face_dest_path := "" + var face_width := 256 + var face_height := 256 + var face_zoom := 25 var avatar: AvatarJson static func from_json(value): @@ -58,7 +65,13 @@ class AvatarEntry: return var ret := AvatarEntry.new() - ret.dest_path = value.get("destPath") + ret.dest_path = value.get("destPath", "") + ret.width = value.get("width", 2048) + ret.height = value.get("height", 2048) + ret.face_dest_path = value.get("faceDestPath", "") # optional + ret.face_width = value.get("faceWidth", 256) + ret.face_height = value.get("faceHeight", 256) + ret.face_zoom = value.get("faceZoom", 25) ret.avatar = AvatarJson.from_json(value.get("avatar")) if ret.dest_path is String and ret.avatar != null: diff --git a/godot/src/tool/avatar_renderer/avatar_renderer_standalone.gd b/godot/src/tool/avatar_renderer/avatar_renderer_standalone.gd index aa985c9cd..8da71096a 100644 --- a/godot/src/tool/avatar_renderer/avatar_renderer_standalone.gd +++ b/godot/src/tool/avatar_renderer/avatar_renderer_standalone.gd @@ -79,14 +79,31 @@ func update_avatar(index: int): func _on_avatar_avatar_loaded(): + var payload = payload_to_process.payload[current_payload_index] RenderingServer.set_default_clear_color(Color(0, 0, 0, 0)) + + # full body fov 90, y=1 + %SubViewport.size = Vector2(payload.width, payload.height) + %Camera3D_Perpective.set_fov(90) + %Camera3D_Perpective.position.y = 1.0 + await get_tree().process_frame await get_tree().process_frame await get_tree().process_frame - + var img := sub_viewport.get_texture().get_image() - img.save_png(payload_to_process.payload[current_payload_index].dest_path) - + img.save_png(payload.dest_path) + + if not payload.face_dest_path.is_empty(): + # face = fov 20, y=1.7 + %SubViewport.size = Vector2(payload.face_width, payload.face_height) + %Camera3D_Perpective.set_fov(payload.face_zoom) + %Camera3D_Perpective.position.y = 1.75 + await get_tree().process_frame + + var face_img := sub_viewport.get_texture().get_image() + face_img.save_png(payload.face_dest_path) + if current_payload_index >= payload_to_process.payload.size() - 1: get_tree().quit(0) else: diff --git a/godot/src/tool/avatar_renderer/avatar_renderer_standalone.tscn b/godot/src/tool/avatar_renderer/avatar_renderer_standalone.tscn index ef635f481..6ac9e1d5c 100644 --- a/godot/src/tool/avatar_renderer/avatar_renderer_standalone.tscn +++ b/godot/src/tool/avatar_renderer/avatar_renderer_standalone.tscn @@ -25,6 +25,7 @@ offset_right = 1276.0 offset_bottom = 722.0 [node name="SubViewport" type="SubViewport" parent="SubViewportContainer"] +unique_name_in_owner = true handle_input_locally = false size = Vector2i(2048, 2048) render_target_update_mode = 4 @@ -32,6 +33,7 @@ render_target_update_mode = 4 [node name="Avatar" parent="SubViewportContainer/SubViewport" instance=ExtResource("2_4dvmo")] [node name="Camera3D_Perpective" type="Camera3D" parent="SubViewportContainer/SubViewport"] +unique_name_in_owner = true transform = Transform3D(-1, 0, 0.000663193, 0, 1, 0, -0.000663193, 0, -1, 0, 1, -1.645) current = true fov = 90.0