Skip to content

Commit

Permalink
git subrepo pull (merge) addons/vrm
Browse files Browse the repository at this point in the history
subrepo:
  subdir:   "addons/vrm"
  merged:   "4ebfd8b"
upstream:
  origin:   "https://github.com/V-Sekai/godot-vrm.git"
  branch:   "only-addon"
  commit:   "1e1ea8a"
git-subrepo:
  version:  "0.4.6"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "110b9eb"
  • Loading branch information
fire committed Dec 29, 2023
1 parent 1bcd553 commit 53898d1
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 14 deletions.
2 changes: 1 addition & 1 deletion addons/vrm/.gitrepo
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[subrepo]
remote = https://github.com/V-Sekai/godot-vrm.git
branch = only-addon
commit = 411bb5e764c2fc0edcde86517a8906d9ed283a5c
commit = 1e1ea8aecf0cfed7f3436979ecb990b56fb8108f
parent = 26b998531939bc966c096cfc3adbd3865837a61c
method = merge
cmdver = 0.4.6
3 changes: 2 additions & 1 deletion addons/vrm/1.0/VRMC_materials_mtoon.gd
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ func _export_post(state: GLTFState) -> Error:
return OK


func _vrm_get_texture_info(gstate : GLTFState, vrm_mat_props: Dictionary, unity_tex_name: String) -> Dictionary:
func _vrm_get_texture_info(gstate: GLTFState, vrm_mat_props: Dictionary, unity_tex_name: String) -> Dictionary:
var gltf_images: Array = gstate.get_images()
var gltf_textures: Array = gstate.get_textures()
var texture_info: Dictionary = {}
Expand All @@ -285,6 +285,7 @@ func _vrm_get_texture_info(gstate : GLTFState, vrm_mat_props: Dictionary, unity_
texture_info["scale"] = Vector3(offsetScale[2], offsetScale[3], 1.0)
return texture_info


func _vrm_get_float(vrm_mat_props: Dictionary, key: String, def: float) -> float:
return vrm_mat_props["floatProperties"].get(key, def)

Expand Down
6 changes: 2 additions & 4 deletions addons/vrm/vrm_extension.gd
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ const vrm_utils = preload("./vrm_utils.gd")

var vrm_meta: Resource = null


enum DebugMode {
None = 0,
Normal = 1,
Expand Down Expand Up @@ -69,7 +68,7 @@ func _process_khr_material(orig_mat: StandardMaterial3D, gltf_mat_props: Diction
return orig_mat


func _vrm_get_texture_info(gstate : GLTFState, vrm_mat_props: Dictionary, unity_tex_name: String) -> Dictionary:
func _vrm_get_texture_info(gstate: GLTFState, vrm_mat_props: Dictionary, unity_tex_name: String) -> Dictionary:
var gltf_images: Array = gstate.get_images()
var gltf_textures: Array = gstate.get_textures()
var texture_info: Dictionary = {}
Expand All @@ -92,8 +91,7 @@ func _vrm_get_float(vrm_mat_props: Dictionary, key: String, def: float) -> float
return vrm_mat_props["floatProperties"].get(key, def)


func _process_vrm_material(orig_mat: Material, gstate : GLTFState, vrm_mat_props: Dictionary) -> Material:

func _process_vrm_material(orig_mat: Material, gstate: GLTFState, vrm_mat_props: Dictionary) -> Material:
var gltf_images: Array = gstate.get_images()
var gltf_textures: Array = gstate.get_textures()

Expand Down
3 changes: 3 additions & 0 deletions addons/vrm/vrm_secondary.gd
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,9 @@ func tick_spring_bones(delta: float) -> void:

update_centers(skel_transform)

for spring_i in range(len(spring_bones_internal)):
spring_bones_internal[spring_i].pre_update()

for collider_i in range(len(colliders_internal)):
colliders_internal[collider_i].update(skel_transform, center_transforms[colliders_centers[collider_i]], skel)
for spring_i in range(len(spring_bones_internal)):
Expand Down
5 changes: 5 additions & 0 deletions addons/vrm/vrm_spring_bone.gd
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@ func ready(ready_skel: Skeleton3D, colliders_ref: Array[vrm_collider.VrmRuntimeC
colliders = colliders_ref.duplicate(false)


func pre_update():
for i in range(len(verlets)):
verlets[i].pre_update(skel)


func update(delta: float, center_transform: Transform3D, center_transform_inv: Transform3D) -> void:
if verlets.is_empty():
if joint_nodes.is_empty():
Expand Down
22 changes: 18 additions & 4 deletions addons/vrm/vrm_spring_bone_logic.gd
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ var current_tail: Vector3
var prev_tail: Vector3

var initial_transform: Transform3D
var global_pose: Transform3D


static func from_to_rotation_safe(from: Vector3, to: Vector3) -> Quaternion:
Expand All @@ -34,6 +35,14 @@ func get_local_pose_rotation(skel: Skeleton3D) -> Quaternion:
return get_global_pose(skel).basis.get_rotation_quaternion()


func get_global_pose_cached() -> Transform3D:
return global_pose


func get_local_pose_rotation_cached() -> Quaternion:
return global_pose.basis.get_rotation_quaternion()


func reset(skel: Skeleton3D) -> void:
skel.set_bone_global_pose_override(bone_idx, initial_transform, 1.0, true)

Expand All @@ -49,15 +58,20 @@ func _init(skel: Skeleton3D, idx: int, center_transform_inv: Transform3D, local_
length = local_child_position.length()


func pre_update(skel: Skeleton3D) -> void:
global_pose = get_global_pose(skel)


func update(skel: Skeleton3D, center_transform: Transform3D, center_transform_inv: Transform3D, stiffness_force: float, drag_force: float, external: Vector3, colliders: Array[vrm_collider.VrmRuntimeCollider]) -> void:
var tmp_current_tail: Vector3 = current_tail
var tmp_prev_tail: Vector3 = prev_tail
var global_pose_tr: Transform3D = get_global_pose(skel)
var global_pose_tr: Transform3D = get_global_pose_cached()
var local_pose_rotation: Quaternion = get_local_pose_rotation_cached()

var tmp_external: Vector3 = center_transform * external

# Integration of velocity verlet
var next_tail: Vector3 = tmp_current_tail + (tmp_current_tail - tmp_prev_tail) * (1.0 - drag_force) + center_transform.basis.get_rotation_quaternion() * (get_local_pose_rotation(skel) * bone_axis * stiffness_force + external)
var next_tail: Vector3 = tmp_current_tail + (tmp_current_tail - tmp_prev_tail) * (1.0 - drag_force) + center_transform.basis.get_rotation_quaternion() * (local_pose_rotation * bone_axis * stiffness_force + external)

# Limiting bone length
var origin: Vector3 = center_transform * global_pose_tr.origin
Expand All @@ -77,9 +91,9 @@ func update(skel: Skeleton3D, center_transform: Transform3D, center_transform_in
current_tail = next_tail # center_transform_inv * next_tail

# Apply rotation
var ft = from_to_rotation_safe(get_local_pose_rotation(skel) * (bone_axis), center_transform_inv.basis * (next_tail - origin))
var ft = from_to_rotation_safe(local_pose_rotation * (bone_axis), center_transform_inv.basis * (next_tail - origin))
if typeof(ft) != TYPE_NIL:
# ft = skel.global_transform.basis.get_rotation_quaternion().inverse() * ft
var qt: Quaternion = ft * get_local_pose_rotation(skel)
var qt: Quaternion = ft * local_pose_rotation
global_pose_tr.basis = Basis(qt)
skel.set_bone_global_pose_override(bone_idx, global_pose_tr, 1.0, true)
8 changes: 4 additions & 4 deletions addons/vrm/vrm_utils.gd
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ static func skeleton_rename(gstate: GLTFState, p_base_scene: Node, p_skeleton: S
if bind_bone_name.is_empty():
#bind_bone_name = node.get_bone_name(skin.get_bind_bone(i))
if skin.get_bind_bone(i) != -1:
break # Not using named binds: no need to rename skin.
break # Not using named binds: no need to rename skin.
var bone_name_from_skel: StringName = p_bone_map.find_profile_bone_name(bind_bone_name)
if not bone_name_from_skel.is_empty():
skin.set_bind_name(i, bone_name_from_skel)
Expand Down Expand Up @@ -294,10 +294,10 @@ static func apply_mesh_rotation(p_base_scene: Node, src_skeleton: Skeleton3D, ol
var bone_idx: int = attachment.bone_idx
if bone_idx == -1:
bone_idx = src_skeleton.find_bone(attachment.bone_name)
var adjust_transform: Transform3D = src_skeleton.get_bone_global_rest(bone_idx).affine_inverse() * old_skeleton_global_rest[bone_idx];
adjust_transform = adjust_transform.scaled(global_transform_scale_local);
var adjust_transform: Transform3D = src_skeleton.get_bone_global_rest(bone_idx).affine_inverse() * old_skeleton_global_rest[bone_idx]
adjust_transform = adjust_transform.scaled(global_transform_scale_local)

var child_nodes: Array[Node] = attachment.get_children();
var child_nodes: Array[Node] = attachment.get_children()
while not child_nodes.is_empty():
var child: Node3D = child_nodes.pop_back() as Node3D
if child == null:
Expand Down

0 comments on commit 53898d1

Please sign in to comment.