Blog Content

    티스토리 뷰

    [WIP] 의상에 물리엔진을 넣어보기 - 기초편

    시작하기에 앞서

    얼마 전 Pearl님께서 HDT 강좌를 쓰는걸 권하셨습니다.

    얼마전까지만 해도 HDT의 기본 개념도 모르던 제가 BDO Pack 1.0을 준비하면서 Pearl님께 HDT를 배워 의상에 적용을 해보기 시작한게 엊그제 같은데 강좌글을 쓰고 있으니 뭔가 아직 어색하네요. 처음 쓰는 강좌글이라 미숙하지만 이걸 보고 많은 분들이 HDT에 도전 하셨으면 합니다.





    목차

    1. Requirements

    2. Create Bone

    3. Create Ragdoll

    4. Ragdoll's Constraint Space

    5. Skeleton Link

    6. Bone Weight

    7. Preview

    8. Export XML

    9. Export Mesh

    10. Mesh Edit

    11. XML Edit






    1. Requirements

    * 3DS MAX 2012 

    * Max Nif Script

    * Havok Engines Tools

    * HDT Autopilot

    HDT 스크립트가 2013 이하 버전에서만 작동이 됩니다.)





    2. Create Bone



    우선 HDT를 적용할 의상을 뼈대와 함께 불러온 뒤 시점을 Perspective에서 Orthographic(단축키 U) 으로 바꿔주셔야 합니다.

    Perspective로 그대로 둔 채 Bone(이하 본)을 넣을 시 본의 위치가 자신이 원하는 곳이 아닌 엉뚱한 곳에 들어가게 됩니다.

    저의 경우는 Orthographic 상태를 유지하며 좌측에서 바라보는 시점인 Left로 두고 본을 넣었습니다.




    우측 상단의 메뉴에서 다음 사진과 같이 Create -> System -> Bones을 클릭합니다.

    이 때 주의할점은 IK Solver 항목은 IKHISolver값을 가져야 하며, Bone Object의 넓이와 깊이는 2.5값을 유지하여야 합니다.




    그런 뒤 자신이 넣고 싶은 메쉬의 모양에 맞춰 본을 넣어주면 됩니다. 이 때 넣는 본의 1번은 Keyframe(이하 키프레임)이라 하여 움직임을 제한하는 용도로 사용이 됩니다. 본을 넣는 방법은 . 관절을 생각하면 간단합니다.


    이 망토의 경우 망토 위 장식, 망토, 망토 아래쪽에 장식, 그리고 그 밑으로 딸려내려온 망토 이렇게 네 부분으로 구성되어 있습니다.

    다음 그림과 같이 망토 위의 장식은 바디에 붙어 모양을 유지하는 편이 보기 좋기 때문에 이 부분이 본1이고

    2번은 망토, 3번은 망토아래 장식, 4번은 장식 아래 망토와 같이 본을 만들어주었습니다.




    마지막 본을 만든 뒤 마우스 오른쪽 버튼을 한 번더 눌러주면 작은 본이 하나 더생깁니다. 이본은 따로 선택한 뒤 삭제해주시면 됩니다.




    그 뒤 Rotate와 Move를 이용해 본의 위치를 최대한 넣으려는 의상과 맞추어 줍니다.

    반대 쪽 또한 똑같이 만들어줍니다. 이 때에는 상단에 Mirror 기능을 이용하면 쉽습니다만 이건 반드시 아래에서 다룰 Ragdoll(랙돌)을 생성하기 이전에 하셔야 합니다.







    3. Create Ragdoll





    위 과정을 모두 마친 뒤 상단 메뉴에서 Max Script를 선택 한 뒤 Run Script를 누릅니다.



    그 뒤 HDT Autopilot 폴더 안의 Autopilot.ms 스크립트를 실행한 뒤 가장 상단의 Create Nub and RB Chain을 선택해줍니다.




    Ragdoll(이하 Ragdoll)을 생성해 주려는 뼈대를 선택해 줍니다.

    이 때 가장 상위에 위치한 본을 더블클릭하면 해당 본에 종속된 모든 본이 함께 선택이 되어 편리합니다


    다음그림과 같이 값을 정해주는데

    중요한 값 몇가지를 설명드리겠습니다.

    Friction : 서로 다른 물체가 부딪힐 시, 어느정도 달라붙을 지를 결정하는 수치입니다. 수치가 높을수록 마찰력이 약해집니다.

    Restituion : 서로 다른 물체가 부딪힐 시, 다시 원상태로 돌아가는 회복력을 나타냅니다. 수치가 높을수록 회복이 빠르게 됩니다.

    Damping : 오브젝트가 운동 중일 때 서서히 운동성을 잃는데, 이 값이 높은 값일 수록 운동성을 잃는 속도가 느려집니다.




    아래 사진과 같이 설정해 준 뒤 반드시 아래에 Delete max bones afterwards 의 옵션을 해제 해 주어야합니다.

    이유는 아래에서 설명드리겠습니다.






    반대 쪽도 L을 R로 바꿔 같은 과정을 진행해줍니다.








    4. Ragdoll's Constraint Space




    래그돌은 이어진 두 본 사이의 운동 정보를 담고 있습니다..


    해당 래그돌을 클릭하면 우측 Modifier(이하 모디파이어) 항목에 그 래그돌이 가지는 설정값들이 나타납니다.

    기초편에서는 래그돌의 형태 변화는 다루지 않을것이기 때문에 이번편에서 다룰 것은 Constraint Space와 Properties 뿐입니다.




    Properties의 값들은 이 래그돌이 어떻게, 얼마나 움직일것인지를 정합니다.

    그런데 래그돌을 보면 Constraint Space (해당 래그돌의 운동 공간으로 이 이외의 공간은 움직임이 제한됩니다.) 의 방향이 이상하게 되어있어 이것을 3번에서 만든 본을 이용해 바로잡아 주어야 합니다. 그렇기 때문에 3번 마지막에 Delete max bones afterwards 옵션을 해제 하라 한것입니다.




    Constraint Space 항목을 선택한 뒤 상단의 Reference Coordinate System (피벗의 위치)를 Local로 바꿔줍니다.

    그 뒤 상단 메뉴의 Align(정렬) 기능을 선택 한 뒤, 해당 래그돌의 본을 클릭하고 다음과 같이 설정해줍니다.





    키프레임이 되는 본1과 본2를 연결하는 첫번째 래그돌을 제외한 다른 래그돌 또한 위 과정을 거쳐줍니다. 

    n번째 래그돌은 n번째 본에 정렬해 주면 됩니다.


    또 한 이과정이 끝난 뒤 처음에 생성한 맥스 뼈대(하얀색 뼈대)는 제거하셔도 좋습니다. (Preview를 보기 전에만 제거하면 됩니다. 이 때 깜박하셨어도 크게 문제도지 않습니다.)




    5. Skeleton Link




    새롭게 만들어진 뼈대는 독립적으로 존재하기 때문에 이대로 만든다면 정상적으로 적용하지 않습니다.

    그렇기 때문에 기존에 존재하는 스카이림의 본에 종속시켜주어야 합니다.



    이 때 종속 될 본은 새롭게 생선한 뼈대를 넣으려는 오브젝트가 가장 크게 영향을 받는 본(가장 본웨이트의 수치가 큰 본)으로 지정해 주시는 것이 대부분 의 경우에는 가장 움직임이 자연스럽니다. (귀고리라면 헤드, 어깨에 메는 망토라면 어깨, 허리춤의 장식이라면 골반)


    이 망토는 척추 쪽에 달려있는 망토이기 때문에 경추에 해당하는 본인 Spin2에 종속시켜 주었습니다.

    가장 상위의 본인 본1(래그돌을 생성하며 함께 생성된 노란색 본)만을 선택한 뒤 상단의 Link 기능을 이용하여 종속시켜 주면 됩니다.

    반대쪽 또한 같은 방법으로 진행하시면 됩니다.








    6. Bone Weight




    본웨이트를 넣기 앞서 본웨이트를 넣을 때 시야에 방해가 되는 오브젝트는 하이드 해줍니다.





    그런 뒤 새롭게 만든 본을 넣어줄 오브젝트를 선택 한 뒤, Skin 모디파이어 항목에서 아래 사진과 같이 본을 추가 해줍니다.

    이 때에 키프레임이 되는 1번 본들은 제외하고 L2,3,4 R2,3,4만을 추가합니다.




    그 뒤 Edit Envelopes 항목을 누른 뒤 직접 본웨이트를 넣어주면 됩니다. 본 웨이트를 넣는 과정은 동영상을 참고하시면 이해하기 편합니다.




    자연스런 움직임을 보기 위해서는 본웨이트의 수치를 잘 주어야만 하는데 유의사항은 다음과 같습니다.

    1. 본웨의 간격과 격차가 되도록 균일해야한다.

    2. 반드시 일정 형태를 유지해야만 하는 경우 (장신구 등, 해당 의상에서는 망토 중간에 달린 철구) 되도록 모두 같은 값의 본웨이트를 준다.

    3. 종속되는 본이 있을 경우, 상위본에서 먼저 큰 값으로 웨이트를 준 뒤, 종속 되는 본의 웨이트를 칠해야 한다.



    즉 이 경우에는 본2를 먼저 웨이트를 준 뒤, 본3, 본4 순으로 진행을 해야 합니다.

    이유는 본웨이트는 하나의 버텍스가 경우 0~1의 값을 가집니다. 이때 각각의 본에 대해 0~1이 아닌 모든 본을 합쳐 0~1의 값을 가집니다. 즉

    백분율로 환산하면 몇%만큼이나 이 본의 운동에 영향을 받을지를 결정하는 수치입니다. 그렇기 때문에

    종속되는 본에 위치한 오브젝트라 하여 상위본에 본웨를 주지 않을 경우 움직임이 굉장히 보기 흉해집니다.


    양 쪽 모두 같은 과정을 진행해주며, 같은 형태의 오브젝트이기 때문에 본 웨 또한 똑같이 주면 됩니다.

    웨이트 미러기능을 이용하면 편하지만 기초편이기 때문에는 핑계고... 제가 한쪽은 동영상을 찍고 한쪽은 스크린샷을 찍는 용도로 진행해서 이번에는 모두 직접 본웨이트를 지정해 주었습니다.





    7. Preview




    이제 맥스에서 할 HDT의 과정이 대부분 끝났습니다.

    하지만 익스포트 한 뒤 게임에 들어가서 확인하면 너무 번거롭기 때문에 익스포트에 앞서 프리뷰를 통해 정상적으로 잘 움직이는지 확인해줍니다.


    좌측 메뉴에서 export를 누른 뒤 다음 사진과 같이 설정해주세요.

    Preview 항목은 직접 만드셔야 하며 그 항목에 들어갈 탭들 또한 직접 좌측에서 찾아 추가해야 합니다.



    크리에이트 스켈레톤 탭에서는 Clear를 눌러 준 뒤 Add를 통해 Npc Root [Root]를 선택해줍니다.






    두번째 크리에이트 스켈레톤은 위와 같은 방식으로 진행하 되, 새롭게 만들어준 래그돌을 선택해줍니다. 이 때 모두 한번에 선택하며 안되고 하나씩 가장 상위의 래그돌을 하나씩 선택하여 모두 넣어주어야합니다. 이 의상에는 좌, 우 두개의 뼈대가 있으니 같은과정을 2번 진행하면 됩니다.




    이후 크리에이트 맵핑에서 스켈레톤A는 Npc Root를 스켈레톤B는 래그돌을 추가한 뒤

    Define Mappings를 누릅니다.



    Mapping Source와 Unlocked Bones 모두 가장 앞의 Auto를 선택한 뒤 OK를 누릅니다.



    마지막으로 Run Configuration을 누르면 이제 프리뷰 창이 뜹니다.





    프리뷰는 다음 영상과 같이 중력의 축을 바꿔주며 확인 하시면 됩니다.

    이 때 래그돌의 크기가 엄청 큰걸 볼 수 있는데 이것은 래그돌의 쉐이프를 따로 지정해주지 않고 기존값으로 두었기 때문입니다.

    래그돌의 쉐이프는 JFF 툴과 함께 심화편에서 다루겠습니다.










    8. Export XML



    프리뷰를 확인 해 본 뒤 문제가 있으면 다시 수정해주고, 문제가 없다면 이제 익스포트를 진행할 차례입니다.

    또한 익스포트 전 세이브를 반드시 세이브를 한 번 해주셔야 합니다.

    메쉬 익스포트에 앞서 XML을 익스포트 해야만 합니다. XML은 새롭게 만든 래그돌의 운동정보나 형태 등이 담긴 스크립트로

    이것이 있어야만 HDT가 적용이 됩니다.


    Auto Pilot 스크립트를 다시 실행 시켜 준 뒤, 5번째 항목인 Ready all RB to expot를 선택합니다.



    이 항목을 선택하면 다음과 같이 맥스에서 구분하기 위해 임시로 붙여놓은 래그돌의 이름이 스카이림에 적용 될 수 있도록

    바뀝니다. 그렇기 때문에 이 과정을 진행하면 아주 번거로운 과정을 거치지 않고서는 프리뷰를 더 이상 볼 수 없습니다.

    그렇기 때문에 익스포트 전에 저장을 한 번 해주어야 합니다.

    또 한 이때에 모든 래그돌이 선택이 되는데 되도록 선택 된 채로 두시는게 다음 과정에서 편리합니다.



    이제 프리뷰에서 하셨던것과 같이 Export를 눌러줍니다.



    다음 사진과 같이 설정해 줍니다.



    Create Ragdoll 항목에서 Use Physics Systems -> Default Physics System을 선택해줍니다.





    이제 xml 익스포트입니다. xml이 익스포트 될 경로와 이름을 정해 준 뒤, 다음 사진과 같이 항목이 되어 있는지 확인 한 뒤

    Run Confirguration을 눌러줍니다. 



    Errors는 0개, Warnings는 3개가 뜹니다. Warnings의 여러 이유가 있지만 이 경우에는 좌우의 각 본이 너무 가까워 운동 중 서로 부딪히기 때문입니다. 이 때 서로 부딪히면 움직임이 매우 부자연스럽게 부르르 떨립니다.

    이것은 래그돌의 쉐이프와 jff에딧을 통해 손쉽게 교정할 수 있으며, 심화편에서 다루도록 하겠습니다.







    9. Export Mesh


    프리뷰를 끝낸 뒤 선택이 되어있던 모든 래그돌을 삭제해줍니다.

    그리고 다음 사진과 같이 메쉬를 익스포트합니다.

    엑스트라본이 제거될 경우 hdt본이 날라가고, 웰드를 그대로 둘 경우 본웨이트가 정상적으로 적용이 안됩니다.



     




    10. Mesh Edit




    이제 이 메쉬가 xml을 스크립트를 불러 올 수 있도록 지정해주어야만 합니다.

    nif파일을 연 뒤 Scene Root를 우클릭 한 뒤 Node -> Attach Extra Node -> NiStringExtraData(스크린샷을 잘못찍었습니다. 그 위에 있는 Strings가 아니라 String을 선택하셔야 합니다.)



    그 뒤 Name 항목은 HDT Havok Path로

    String Data는 xml의 경로를 지정해 줍니다.

    xml의 경로는 보통 메쉬와 함께 두는 것이 좋습니다.

    이 때 주의할 점은 반드시 경로는 meshes부터가 아닌 data부터 시작하여야 하며 끝에 xml스크립트 또한 확장자포맷인 .xml을 적어주어야만

    스카이림에서 인식을 합니다.






    11. XML Edit




    그 뒤 아까 익스포트한 XML을 불러 온 뒤 만 아래 hkpPhysicsSystem에 있는 name 수치를 

    가장 상단에 있는 toplevelobject에 덮어씌워 줍니다.

    이 과정은 jff 에딧을 할 경우에는 무시하셔도 좋습니다.







    이제 모든 과정이 끝났습니다.

    오늘 작업한 결과물은 다음과 같습니다.

    심화편에서 다시 뵙겠습니다.



    음.. JFF 에딧을 안만져줬더니 부딪힐때마다 드르륵거리네요..

    'Modding Lecture' 카테고리의 다른 글

    [WIP] 의상에 물리엔진을 넣어보기 - 기초편  (4) 2017.07.19

    4 Comments

    • 메쉬멜 2017.07.19 18:14 신고 Modify/Delete | Reply

      엊그제 배웠다면 저도 노력해서 배울수 있다는 희망이..
      저도 리젠봇님 글보고 의상 색상 수정하고 저장해본게 엊그제 같습니다. 리젠봇님처럼 질감이나 그런건 표현못하지만 색상 바꾸는 정도로 만족중입니다.

      아무튼 이런 글을 원했어요. 한글로된 강좌...

      문제는 맥스랑 이것저것 필요하단건데.. 학생때 배운 기초 기억을 삼아 노력해야겠네요.

      지금 쓰고 있는 헤어에 이것이 적용가능할지.. dint님 같은 물리는 이 강좌랑은 조금 틀리겠죠.


    • LiVingHP 2017.07.20 02:12 신고 Modify/Delete | Reply

      역시 텍스쳐, 메쉬, HDT 작업까지 다 된 의상들의 작업량은 엄청나군요
      모더분들 한테 넘나 고마울따름


    • 메쉬멜 2017.07.21 00:24 신고 Modify/Delete | Reply

      버텍스 선택이 안될경우
      http://www.autodesk.co.kr/adsk/servlet/item?siteID=1169528&id=17946029
      http://www.autodesk.co.kr/adsk/servlet/item?siteID=1169528&id=17590909

      설치하세요. 여러분


    • 사이다 2017.09.04 13:16 신고 Modify/Delete | Reply

      자....잠깐....
      마지막 동영상에서 연어초밥을 본것 같은데.....?
      배고픈 저의 착각이겠죠?


    Leave a comment