Super Kawaii Cute Cat Kaoani '연구/Blender' 카테고리의 글 목록

연구/Blender 11

[Blender] Faceit : Facial Expressions And Performance Capture 살펴보기

서로 다른 형태의 shape key를 가진 model을 호환시켜야할 필요성이 생겨, 방법을 찾아보다가 Faceit이라는 blender addon을 발견하게 되었다. 아직 사용해보진 못했지만..제공하는 주요기능들을 정리해보면 해당 기능을 필요로 하는 분들이 도움을 받을 수 있을 것 같아 정리해보게 되었다. https://blendermarket.com/products/faceit Faceit : Facial Expressions And Performance Capture Faceit - With Faceit you can ready your character model for high quality Animation in minutes! Safe weeks of work! blendermarket.com ..

연구/Blender 2024.03.12

[Blender] Armature(뼈대)에 Mesh 연결하기

blender에서 Armature(뼈대)에 Mesh를 연결하는 방법을 알아보자. 아래의 그림에서 왼쪽의 skeleton이 Armature(뼈대)에 해당하며, 오른쪽 아래의 사람 모양이 Armature에 연결하고자 하는 Mesh이다. 아래의 그림은 Object Mode에서 보았을때의 화면을 캡쳐한 것으로, Armature가 rest pose를 취하고 있지 않아 Mesh의 pose와는 차이가 있는 상태이다. Edit Mode에서의 화면을 보면, 위와 같이 Mesh와 Armature의 모양이 잘 일치하는 것을 볼 수 있다. 이러한 상황에서, 이 둘을 연결하는 방법을 알아보자. 1) 다시 Object 모드로 돌아가서, Mesh를 클릭해준 다음, shift 키를 누른 상태로 armature를 선택하여 Mesh와 ..

연구/Blender 2024.02.27

[Blender] matrix, matrix_basis, matrix_local, matrix_world관계

blender에서는 다양한 종류의 matrix를 사용하고 있다. Posebone.matrix, Posebone.matrix_basis, bone.matrix_local...등 다양한 종류의 matrix가 등장하는데..각각의 의미와 이들간의 관계에 대해서 알아보자. Posebone.matrix: armature space에서의 bone의 transformation을 의미한다. 만약 object가 rest pose를 취하고 있다면 Posebone.matrix의 값은 bone.matrix_local의 값과 동일하다. Posebone.matrix_basis: bone space(rest pose에 대해 표현한다는 의미)에 대한 bone의 transformation 값을 담고 있다. bone.matrix_loca..

연구/Blender 2024.02.19

[Blender] blender에서 skeleton joint orientation 구하기

1) parent joint에 대해 표현된 joint orientation obj = bpy.data.objects['원하는 오브젝트 이름'] pb = obj.pose.bones['원하는 posebone이름'] rotation_matrix = (pb.bone.matrix_local @ matrix_basis @ pb.bone.matrix_local.inv()).to_3x3() 위의 코드를 거치면 blender 상에서 joint의 orientation을 구할 수 있다. opengl 상에서의 orientation을 구하고 싶다면, def blender_to_opengl(mb): mb = np.array(mb) mo = np.array([ [mb[0, 0], mb[0, 2], -1 * mb[0, 1]], [m..

연구/Blender 2024.02.16

[Blender] blender에서 skeleton bone position 구하기

1) armature space에서의 position global_location = bpy.data.objects['원하는 오브젝트'].bones['원하는 bone'].head 를 통해 접근하면 joint의 armature space에서의 position(bone의 head global position)를 바로 구할 수 있다. armature space가 world space와 같다면 이 값은 global joint를 의미한다. 2) global space에서의 position obj = bpy.data.objects['원하는 오브젝트'] global_location = obj.matrix_world @ obj.pose.bones['원하는 bone'].head

연구/Blender 2024.01.29

[Blender] viewport에서 시점 변경 python script로 구현하기

blender를 실행시키면 가장 먼저 나오는 화면인 viewport에서의 시점을 변경하는 법(pan, oribit 기능)을 python script로 어떻게 구현할 수 있을지 알아보자. 1) target 지점 변경: pan 현재 viewport view location이 (0, 0, 0)으로 세팅되어있다. 이 경우에는 viewport가 원점을 바라보게 된다. 이 값(viewport에서 바라보는 지점)을 변경하기 위해선 다음과 같은 코드를 사용하면 된다. # 현재 활성화된 3d viewport를 찾기 for area in bpy.context.screen.areas: if area.type == 'VIEW_3D': break # 3d viewport의 정보 가져오기 space_data = area.spac..

연구/Blender 2024.01.18

[Blender] Python script로 음악 재생 및 현재 재생 시점 알아내기

python script로 aud.Sound object를 생성하고 재생시킨 뒤 python script로 현재 재생하고 있는 음악의 시점을 알아내는 방법이다. (매우 간단한데 구글링했을 때 너무 안나와서 고생을 좀 했다..) 1. 오디오 재생 import aud device = aud.Device() aud 라이브러리를 Import 해준 뒤 오디오를 재생할 디바이스를 생성해준다. audio_file_path = "오디오 파일 경로" sound = aud.Sound(audio_file_path) 오디오 파일 경로를 이용하여 aud.Sound object도 생성해준다. controller = device.play(sound) # 음악 재생을 멈추고 싶을 때는 controller.stop() 위와 같이 음악..

연구/Blender 2023.10.04

blender에서 keyframe들 scaling 시키기 (Timeline 창, 코드 이용)

blender에서 keyframes들을 일정한 비율로 늘리거나 줄여 keyframe 총 개수를 바꾸는 방법이다. 방법1: Blender 창에서 하는 방법 1) Timeline 창 띄우기 위와 같이 창을 띄우면 animation 정보가 Timeline 창에 나타난다. 키보드 A를 누르면 모든 animation 전체가 클릭된다. 2) scaling 시키기 참고로 현재 frame을 기준으로 scaling 된다. 보통의 경우 current frame을 첫번째 frame으로 맞춰놓고 사용하면 된다. 키보드 S 버튼을 누르면 기준 frame(현재 frame)을 기준으로 마우스 커서의 위치에 따라 원하는 만큼 scaling 시킬 수 있다. 커서를 이리저리 옮기면서 원하는 만큼 keyframe들이 scaling 되었다..

연구/Blender 2023.07.18

blender bvh load 관련 알아낸 사실 정리 (2)

blender에 한달 가까이 고통받고, bvh load하는 코드까지 뜯어내면서 알아낸 "blender bvh load 관련" 알아낸 사실들을 세세하게 정리하고자 한다. 시작! 1) armature coordinate에서 rest pose에 대한 정보는 matrix_local에 담겨있다! blender에서 각 pose.bone에 대한 회전값을 생성할때 rest pose에 대해 계산을 하기 때문에 각 bone의 rest pose에 대한 정보가 필요하다. armature coordinate에 대해서 표현된 rest pose는 다음과 같이 확인할 수 있다. bpy.data.armature["object 이름"].bones[i].matrix_local pose.bone.matrix에는 armature coordi..

연구/Blender 2023.04.18

Blender bvh load 관련 알아낸 사실 정리

File > import > bvh 를 하면 bvh가 import 된다. import 된 모션 데이터를 확인하기 위해서는 bpy.data.actions에서 해당되는 인덱스의 action을 뽑아와야한다. 나의 경우 'aiming1_subject1.bvh'를 import 했기 때문에 action = bpy.data.actions['aiming1_subject1'] 을 하면 내가 import한 bvh의 motion data가 action이라는 변수에 저장되게 된다. action은 여러 정보들로 구성되어있는데 내가 원하는 정보는 매 frame마다 root의 position이 어디에 위치하는지, 그리고 각 관절의 rotation 값은 어떻게 되는지였다. 이를 알기 위해서는 뽑아낸 action에서 fcurves 값..

연구/Blender 2023.03.20
728x90
728x90