Skip to content

Commit

Permalink
feat: add output size and face parameters to the avatar renderer stan…
Browse files Browse the repository at this point in the history
…dalone
  • Loading branch information
kuruk-mm committed Nov 20, 2023
1 parent 9a9512b commit ff5c7c1
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
17 changes: 15 additions & 2 deletions godot/src/tool/avatar_renderer/avatar_renderer_helper.gd
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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:
Expand Down
23 changes: 20 additions & 3 deletions godot/src/tool/avatar_renderer/avatar_renderer_standalone.gd
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ 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

[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
Expand Down

0 comments on commit ff5c7c1

Please sign in to comment.