반응형

트리거를 이용하여 특정위치나 캐릭터로 이동했을때 마티네가 발동하도록 손쉽게 구현할 수 있습니다.

또한 마티네가 시작됨과 동시에 주인공 캐릭터를 가리고 마티네가 끝나면 NPC가 사라지도록 하는등 트리거 박스와

레벨 블루프린트를 활용하여 손쉽게 제어가 가능합니다.

 

1. 트리거를 생성하여 발동 위치 정하기



 어디쯤에서 연출이 발동할지 박스 트리거의 크기와 위치로 지정한다.

 

 

2. 레벨 블루프린트를 통해 트리거에 주인공이 닿았을때 마티네 발동하도록 설정하기


OnActorBeginOverlap 명령어를 통해 트리거를 통해 마티네 실행을 제어할 수 있다.

 

 

3. 각 상황마다 NPC 나 주인공을 어떻게 처리할 것인지도 레벨블루프린트에서 정해주면 화면상에 나오는 캐릭터들을 정하고 배치할 수 있습니다.

 

 

위와 같은 설정을 하면 아래와 같이 캐릭터가 특정위치로 갔을때 연출이 발동하도록 할 수 있습니다.

아래 연출 화면은 삼품 7막영상의 마초대 허저의 영상을 언리얼로 간단히 이식한 영상입니다.

연출팀 마티네 교육을 위해 제가 만들었는데, 아직 후처리 전이라 퀄리티가 그렇게 높지는 않은 상황입니다.

 

 

 

 

 

게임 발동후 마초가 허저에게 다가가면 연출이 발동하고 연출이 끝나면 NPC가 사라지도록 설정했습니다.

반응형
반응형

Apex Cloth를 이용하기 위해서는 먼저 ndivia홈페이로 가셔서 개발자 계정으로 회원가입을 한 후

플러그인을 받아야 합니다.

https://developer.nvidia.com/apex-clothing-3dsmax-tutorials

NVIDIA_PhysX_For_Autodesk_3ds_Max_2014_64bit_3.02.01024.04200.msi(자료방에 공유)

라는 파일을 다운받고 설치하면 맥스에 PhysX라는 플러그인이 설치됩니다.


 

-간단한 사용법 튜토리얼

물리를 적용할 캐릭터에  Skin 작업 완료후 Apex를 적용해 줍니다.


 

그리고 Max Distance로 설정하여 Brush Value값을 지정한뒤 시뮬이 적용될 Poly를 칠해줍니다.

 

 

페인트 작업이 끝나면 천이 충돌하는 위치의 Bone들에게 충돌처리를 해줍니다.

Create Kinematic Rig를 실행후 Bone들을 ADD해 줍니다.


 

위 작업을 해주면 지정한 본들의 캡슐이 생성되며 각 캡슐마다 충돌영역을 수정하여 크기를 지정해 줍니다.


 

이제 맥스작업이 마무리되면 언리얼로 넘기기 위해 Export를 해줘야 합니다.

구 버전에는 없지만, 최신버전에는 export를 할 수있는 메뉴가 친절히 내재되어 있습니다.

 

익스포트 완료후 캐릭터FBX파일을 언리얼로 임포트후 생성된 Apx 파일을 추가해 주면 언리얼에서

시뮬을 하기 위한 모든 셋팅이 완료됩니다.

 

 

 

천시뮬이 제대로 들어갔는지 확인하기 위해 페르소나툴의 메시 카테고리에서 바람을 적용해 보면 시뮬레이터 적용을 확인해 볼수 있습니다.

 

 


 

 

 

모든 셋팅이 끝난후 애니메이션을 적용해 보면 천시뮬레이션이 멋지게 적용된 것을 확인하실 수 있습니다.

 

 

테스트하면서 발생했던 에로사항들..

1. 신버전에 대한 제대로된 튜토리얼이 존재하지 않아 혼자서 삽질하며 알아냈습니다. 까페에 글올려도 대답이 없어

혼자서 자문자답했다는..

2. 언리얼상에 임포트가 되지 않아 문제 원인을 찾던중.. 이거 역시 아무리 뒤져도 나오지 않아 혹시나 해서 폴더를

영문으로 바꿨더니 잘 되네요..ㅠ

3. 맥스 작업시 가끔씩 트랜스폼 기즈모가 사라집니다. 자세히 보니 사라지는게 아니고 엄청 작아져서 다시 키워줘야

합니다.

4. 페인트 브러시 크기가 줄어들지 않아 찾느라 엄청 헤맸네요.. 구글 어디에도 답이 없다가 혼자서 이거저거 뒤지다

겨우 알아냈습니다.

 

반응형
반응형

fbx2011로 제작된 데이터를 임포트해왔을 경우

페르소나만 열면 엔진이 꺼져버려 에디팅이 불가한 상태입니다.

아직 마티니에서 시퀀스간 블렌딩하는 방식을 찾아내지못해 페르소나에서 여러가지 해보려 했는데,

새로운 프로젝트를 만들어 언리얼 규약에 맞춰 fbx2014버전으로 다시 뽑아 제작해 봐야할거 같습니다.

 

반응형
반응형

유니티로 구매한 캐릭터들을 언리얼로 이식하는데 성공했습니다.

이식하면서 여러 문제가 발생했는데, 그 문제들을 필두로 리타겟 매니저를 활용하여 다양한 몬스터들의 모션을 한 가지 스켈레톤으로 공유 할 수 있는 방법을 알게 되었습니다. 그 부분에 대해서 자세히 기술하도록 하겠습니다.

리타겟 매니저의 가장 큰 장점은 본의 스케일이 달라도 애니메이션을 공유할수 있다는 점입니다.

 

- 원래 본 스케일이 다를때 모션을 공유하면 아래같이 스킨이 깨지고 늘어나는 현상이 일어납니다.

 

- 하지만, 리타겟 매니저를 사용하면 아래 그림처럼 다른 캐릭터의 스케일과 본 사이즈에 맞춰 자동 조절하여 정상적으로 출력됩니다.(맥스의 바이패드와 같은 기능)

이 부분은 아래 3번에서 자세히 다루도록 하고 순서대로 이슈 정리하겠습니다.

 

 

1. 유니티 구매 캐릭터를 언리얼로 옮기면서 생긴 첫 번째 문제.

- 본 축이 다르다! 리타겟 매니저를 활용해도 축이 다른 문제는 해결이 안됩니다.

그래서 이 부분은 맥스에서 수동으로 축을 재설정하는 작업을 진행했습니다. 실제로 이 작업이 가장 많은 시간이 걸렸

습니다. 자동화로 하려 했으나 스크립트 만드는데만 하루가 더 소요될거 같아 그냥 수동으로 잡았습니다..;;

현재는 스크립트 제작이 완료된 상태입니다.

 

이 작업의 공정

(1) 원본 메시의 스킨값을 저장하고 스킨을 없앤다. 혹은 에디터블 폴리로 통합한다.

(2) 그리고 언리얼과 축이 다른 본들을 언리얼 축과 맞춰 Affect Pivot Only로 축을 조절한다.

(3) 본들의 축을 수정후에 다시 스킨을 주고, 저장했던 스킨값들을 불러온다.

 

- 어셋 스토어 캐릭터들의 팔 축 (X축이 앞뒤, Y축이 좌우)
 

- 언리얼 캐릭터들의 팔 축 (X축이 좌우, Y축이 앞뒤)

 

 

2.  최초로 제작된 유니티 구매 캐릭터들을 언리얼로 불러오면서 기존 제작된 애니메이션을 리타겟하여 맞춘다.

- 스켈레톤을 공유하지 않고 새로 생성된 스켈레톤에 맞춰 애니메이션을 복사해서 새로 붙러온다.

 
(1) 복사할 모션을 전체 선택후 애님애셋리타겟


 

(2) 호환스켈레톤 표시를 체크 해제후 새로 불러온 스켈레톤에 맞춰 애니를 복사해서 넣어줍니다.

이 과정을 마치면 최초 생성된 유니티 캐릭터에게 새로운 애니메이션이 정상적으로 입혀집니다.

 

 

3. 복사된 애니메이션을 리타겟 매니저를 사용하여 다양한 체형의 유니티 캐릭터에게 공통 적용한다.

(1) Show retargeting Options를 체크한다. - 체크해야 리타겟 매니저를 쓸수 있는 옵션이 활성화 된다.

 

 

(2) root를 '스켈레톤의 트랜슬레이션 리타게팅 재귀적설정'으로 변환한다.

-root 아래 본들의 트랜지션을 각 본마다 공유하도록 하는 기능이다.


 

 

(3) 펠비스를 '스케일 적용 애니메이션의 트랜슬레이션 리타게팅 재귀적 설정'으로 변환한다.

- 펠비스 아래 본들이 스케일에 따라 애니메이션이 자동 보정되도록하는 기능이다.

 

 

(4) 창 -> 리타겟 매니저 로 들어와서 스켈레톤을 공유할 모델과 Humanoid에 공유할 본을 지정해 준다.

- 언리얼에서 지정한 본 위치에 불러온 본을 적용해 주는 기능이다.

 

이 과정을 마치고 각 모델들을 불러올때 최초 생성된 스켈레톤을 공유하도록 설정해서 임포트하면 아래 처럼 각 모델들이 서로 다른 체형임에도 같은 애니메이션을 문제없이 공유할 수 있게 된다.

 

 

 

 

앞으로는 다양한 체형의 좀비를 제작해서 다양한 모션을 함께 공유해서 사용하는것이 간편해 질거 같습니다.

 

반응형
반응형

일시 : 2015년 12월 9일

장소 : 판교 메리어트 호텔

 

스팅레이의 발표회에 다녀와서 가장 인상 깊었던 것을 두 가지로 요약하자면..

1. 3DMAX와의 편한 연동 - 맥스와의 카메라 연동등.. 다양한 플래폼에서 연동가능~

영상참조 

2. 언리얼과 많이 흡사하다. 언리얼을 공부한 사람들은 어렵지 않게 엔진에 접근할 수 있을듯~

레이어 구성, 비헤이비어트리, 노드기반 스크립트(블루프린트)등..

 

 

 

세미나 내용 정리

두둥~ 

이사님의 인사말로 시작~! 

오토데스크에서 만든 디자인툴과의 호환성이 아마도 가장 큰 장점이겠죠~ 

이렇게 세가지 버전이 있다고 합니다. 유니티와 언리얼이 무료화가 됐는데 비싸면 안되겠죠^^ 

 

 

세션 1 - Warhammer - End Times : Verminitide 제작 노하우 사례 발표

Fatshark 라는 스웨덴 회사의 대표이신 Rikard Blomberg 님이 스팅레이로 개발한 Warhhamer - End Times의 제작 노하우 발표 시간입니다. 

이쯤에서 어떤게임인지 영상하나 보고 가시죠~ 1인칭 어드벤처 게임입니다. 

 

 

왜 스팅레이를 선택했는가? 친절하게 번역까지 해드림~

- 리스크를 최소화하기 위해(오토데스크와의 확장성)

- 재작업 축소

- 플랫폼의 확장성

- 비용 축소

- 개발 시간 축소

- 그러면서 창의성에 영향을 주지 않고 싶었음..

 

그리고 멋진 게임을 만들기 위해 돈과 시간을 모두 쏟아 부었다 합니다~!

 

PC, XBOX, PS4 플랫폼으로 개발~ (부럽..;;) 

 

스팀에 출시하여 매출 1위~ 높은 평점~ 다양한 수상등 화려한 이력을 자랑하십니다~

 

개발팀 사진입니다~ 기분탓인지 왠지 떳떳해 보이네요~

 

Art팀에서 사용중인 툴 소개~ 한국과 큰 차이 없습니다~

 

Lua를 메인 스크립트로 사용하는 점이 매우 특이합니다..

 

스팅레이가 제공하는 컴포넌트들인데 뭐 이건 언리얼이나 유니티나 도찐개찐

 

렌더링 파이프라인으 최근 트렌드를 충실히 따라가고 있네요~

 

하지만, Lua를 쓰는게 어떻게 작용하게 될지 미지수입니다. 플머들 사이에선 한물간 용어로 인식되던데..

하지만, 게임코드와 엔진코드를 따로 관리하기때문에 유지보수가 매우 편하다는 부분을 계속 강조했습니다.. 하지만 써봐야 알듯..

 

애니메이션과 피직스의 강력함을 강조했습니다~ 이것도 써봐야 알듯..

 

리소스 핸들링이 편한 부분 강조~

 

스팅레이의 화면 구성입니다. 

 플레이 화면입니다. 플레이시 캐릭터의 복식이나 행동양식을 편하게 에디팅할 수 있습니다.

영상 보시죠~ 

 

 

 

 

언리얼의 Behaviour와 비슷하면서 많이 다릅니다.

 

네브메쉬, 스마트 오브젝트, 비헤이비어 트리등을 활용하여 아래와 같은 연출이 가능합니다~ 영상참조

 

 

 

 

 

편리한 물리 적용~ 영상참조 

 

 

 

세션 2 - Stringray Game Engine / Art & Technology

다음 세션입니다~ 박종태 차장님께서 좀더 다각적으로 설명해 주셨습니다.

이번 세션에는 스케일폼 적용과 루아 스크립트에 관련된 내용이 많았습니다.

이러이러한 장점들이 있습니다~ 첫 세션 내용과 동일

오토데스크의 아트툴과 엔비디아의 피직스를 지원합니다~

런쳐 화면도 언리얼과 굉장히 흡사합니다.

레벨과 어셋브라우저도 언리얼 판박이

스케일폼 적용하는것을 시연해 주십니다.

영상 시연 

 

 

맥스와의 편한 연계성 - 라이브 카메라 적용 영상

 

 

세션 3 - Stingray 유저 사용후기 발표

스피커 - 이승훈 교수님(영산대학교)

 

 

 

 

 

 

 

반응형
반응형

캐릭터가 굴곡진 곳이나 불균형적인 곳을 다닐때 발이 땅을 뚫고 들어가는 것을 방지하도록 하는 기능입니다.

비대칭 지역을 다리가 알아서 인식하여 짝다리를 해주는 기능..ㅎㅎ

간단한 용어 설명

- IK(Inverse Kinematics)란?

일반적인 애니메이션은 아래 그림처럼 정방향 운동을 합니다. 하위 본에 로테이션을 주며 한개의 본만 영향을 끼치도록

애니를 줄수 있습니다.  

하지만 발끝등에 IK 체인을 걸어 IK 셋팅을 해주면 체인을 이용한 포지션 애니를 줌으로써 함께 IK셋팅이 되어 있는 모든

본이 동시에 애니가 적용되게 되며 발끝을 기점으로 애니메이션이 알아서 계산됩니다.

 

 

이 기능을 넣기 위해서는 캐릭터 블루 프린트와 애니메이션 블루 프린트 두 곳에 셋팅을 해줘야 합니다.

먼저 스켈레톤을 열어 바닥을 인식하게 할 위치에 소켓을 박아 줍니다.

 

 

지정한 소켓밑으로 오브젝트가 있는지 검사하여 충돌을 체크해주는 기능을 블루프린트를 통해 코딩해줍니다.
(문서 참조 - https://docs.unrealengine.com/latest/KOR/Engine/Animation/IKSetups/index.html)

IK Foot Trace라는 커스텀 함수를 제작하여 발 밑에 오브젝트가 있는지 검사합니다.

 

  

이렇게 제작된 캐릭터 블루프린트의 함수를 애니메이션 블루프린트에 형 변환후 변수로 호출하여 셋팅해 줍니다.

 

마지막으로 애님 그래프를 통해 오브젝트가 발생시에는 트레이스를 계산하여 발밑 연산을 해주고 평평한 평지에서는 원래 애니로 돌아오도록 설정해 줍니다.

 

위 셋팅이 끝나면 아래 그림처럼 발밑에 오브젝트를 계산하여 알아서 발위치를 잡아주게 됩니다.

 

반응형
반응형

언리얼4에는 블렌딩 스페이스, 몽타주, 에임오프셋 이 세가지의 강력한 모션 믹싱 기능이 내장되어 있습니다.

이 세가지만 잘 숙지하고 사용이 가능해 진다면 디자이너가 직접 캐릭터 움직임을 설정할 수도 있을거 같습니다.

하지만, 아직까지 버그가 좀 있고 프로그램의 기본적인 로직을 알아야 구성 가능하므로 협업이 반드시 필요할 거

같습니다. 저도 프로그래머의 도움으로 한 단계 한 단계 알아가고 있습니다..;; 혼자서는 불가능..ㅠ

 

 

1. 블렌딩 스페이스


- 각 모션별로 알아서 블렌딩 해줘서 방향과 위치별로 모션을 지정하고 수치값을 넣어주면
자동으로 블렌딩해주는 시스템입니다.
앞뒤 좌우 움직임 총 4종의 모션만 있으면 전진, 후진, 45도 우로 전진, 45도 좌로 전진, 45도 백좌로 후진, 45도 백우로 후진, 우측전진, 좌측 전진 총 8종의 모션을 알아서 블렌딩 해줍니다. 아래 동영상 참조.


이렇게 제작해준 블렌드 스페이스 파일을 애니메이션 블루 프린트에서 불러와 애니 스테이트 머신에 연결해 준후
방향과 속도값에 대한 변수 설정후 이벤트 그래프에서 설정하면 사용할 수 있습니다.
움직임을 줄 캐릭터에게는 입력값에 대한 움직임에 대해 블루프린트나 c++에서 코딩후 사용할 수 있습니다.

 

2. 몽타주


- 본을 슬롯으로 지정해 이름을 정한 후 다양한 모션에서 원하는 본의 애니만 넣어줄 수 있다.
가령 예를 들어 무기를 장전하는 애니에서 상체에만 애니를 주고 뽑은후 몽타주로 지정을 해주면
다리는 뛰거나 앉거나 하면서 상체는 장전하는 애니가 나올수 있다.
여기서 몽타주로 지정한 슬롯 이름이 'UpperBody'일 경우 몽타주내에서 지정한 슬롯 이름이 'UpperBody'로
설정한 몽타주들은 다 공통으로 사용할 수 있다.


아래 동영상은 뛰기 모션에서 총을 장전하는 모션과 칼질하는 모션을 몽타주를 이용하여 믹싱한 영상이다.
몽타주 파일 역시 캐릭터 블루 프린트와 애니메이션 블루 프린트에서 간단한 설정후에 사용할 수 있다.

 

 

 

 

3. 애임 오프셋

- Aim Offset, 에임 오프셋은 캐릭터의 무기 조준시 도움이 되는 블렌딩가능 포즈 시리즈가 저장된 애셋입니다.

 

애니메이션 도중, 에임 오프셋 결과를 달리기, 걷기, 점프 등과 같은 다른 모션과 블렌딩하여 캐릭터가 어느 방향을 보더라도 부드럽게 보이도록 만드는 것입니다.

에임 오프셋 배후의 핵심 개념은, 기존 애니메이션 위에 애디티브(더하기식) 블렌딩할 수 있도록 디자인된 것입니다.

예를 들어 에임 오프셋을 사용해서 캐릭터가 무기 조준을 하고자 한다면, 그 애디티브 모션이 캐릭터의 다른 모션에

방해받지 않도록 할 수 있습니다.(블렌드스페이스보다 강력하게)

다른 말로 하자면, 달리기, 빈둥거리기, 점프 등의 동작을 할 때 팔 부분은 에임 오프셋을 통해 더하기식으로 제어할 수 있도록 비교적 엄격하게 다뤄집니다.

여러가지 면에서 에임 오프셋은 BLend Space(블렌드 스페이스)와 비슷합니다. 블렌드 스페이스는 모션위주 블렌딩

이라면 에임오프셋은 포즈위주의 블렌딩으로서 캐릭터가 벽에 기대거나 특수 포즈를 취한다고 하더라도 에임오프셋에

기억되어있는 메시 스페이스를 기억해주는 특수한 기능입니다.

따라서 에임오프셋으로 설정할 모션들은 메시스페이스로 설정해줘야 합니다.(보통은 전부 로컬스페이스로 설정되어

있음)

메시 스페이스는 애니메이션 시퀀스의 프로퍼티로 설정됩니다. Additive Settings (애디티브 세팅) 카테고리 아래

Additive Anim Type (애디티브 애님 타입) 프로퍼티가 있습니다.

이것을 Mesh Space (메시 스페이스)로 설정하면 설명한 대로 메시 좌표계가 활용됩니다. 이 블렌딩은 비용이 꽤

들기 때문에, 일반적으로 에임 오프셋처럼 일정한 방향으로 계속해서 움직이는 애니메이션이 필요한 블렌드

스페이스 유형에만 사용해야 할 것입니다.

 

 

 

아래는 위 세가지 시스템을 사용하여 간략히 제작해 본 모션 시스템입니다.

 

 

 

반응형
반응형

제작 방식.

1. 시뮬레이션에 적용 될 본에는 공통적으로 Rigid Body와 Collider 를 달아줘야 합니다.

Rigid Body는 시뮬레이션이 사용될 캐릭터에 반드시 들어가야할 컴포넌트이고, Collider는 시뮬레이션오브젝트가 충돌이 일어날 부분에 넣어주게 됩니다. 


 

2. 시뮬레이션이 적용된 자식 본들에는 Character Joint 컴포넌트를 셋팅해 줘야 합니다.

Connected Body에는 자신의 부모본을 넣어줍니다.

 

프로퍼티: 기능:
Connected Body 조인트가 의존하는 Rigidbody에 대한 옵션의 참조. 설정하지 않으면, 조인트는 월드에 연결합니다.
Anchor 조인트가 그 주변에서 회전하는 GameObject의 로컬 공간에서의 점.
Axis 트위스트 축. 오렌지색의 기즈모 원추로 표시됩니다.
Auto Configure Connected Anchor If this is enabled, then the Connected Anchor position will be calculated automatically to match the global position of the anchor property. This is the default behavior. If this is disabled, you can configure the position of the connected anchor manually.
Connected Anchor Manual configuration of the connected anchor position.

Swing Axis 스윙 축. 녹색 기즈모 원추로 표시됩니다.
Low Twist Limit 조인트의 하한 값을 나타냅니다. 아래를 참조하세요.
High Twist Limit 조인트의 상한 값. 아래를 참조하세요.
Swing 1 Limit 정의된 Swing Axis 주변의 하한 값. 아래를 참조하세요.
Swing 2 Limit 정의된 Swing Axis 주변의 상한 값. 아래를 참조하세요.
Break Force 조인트가 제거되도록 하기위해 필요한 힘의 크기를 나타낸다.
Break Torque 조인트가 제거되도록 하기위해 필요한 토크(torque)의 크기를 나타낸다.
Enable Collision 이 조인트가 분해하는 데 적용되어야 하는 토크.
Enable Preprocessing Disabling preprocessing helps to stabilize impossible-to-fulfil configurations.

 

상세정보

캐릭터 조인트는 유니버설 조인트의 경우와 마찬가지로, 움직임을 제한하는 많은 기능을 제공합니다.

트위스트 축(오렌지색 기즈모로 표시)에 따라 상한과 하한(한계 각도는 시작 위치로 측정됩니다)을 도(degree)로 명시함으로써, 제한의 대부분을 제어할 수 있습니다. Low Twist Limit->Limit에서의 ?30 값 및 High Twist Limit->Limit에서의 60은, ?30°와 60° 사이로, 트위스트 축(오렌지색 기즈모) 주변에서 회전을 제한합니다.

Swing 1 Limit 은 스윙 축(녹색 축) 주변에서의 회전을 제한합니다. 한계 각도는 대칭적입니다. 따라서, 예를 들면 30의 값은 ?30과 30 사이에서 회전을 제한합니다.

Swing 2 Limit 축에는 기즈모는 없지만, 이 축은 다른 두 축에 대해 직각입니다. 앞서 말한 축처럼 제한이 대칭이기 때문에, 예를 들어, 40의 값은 ?40과 40 사이에서 회전을 제한합니다.

For each of the limits the following values can be set:

프로퍼티: 기능:
Bounciness A value of 0 will not bounce. A value of 1 will bounce without any loss of energy.
Spring 스프링 힘은 두개의 오브젝트 간의 거리를 유지하기위해 사용된다.
Damper 저항력(damper force)은 스프링 힘을 약화시키기위해 사용된다.
Contact Distance Within the contact distance from the limit contacts will persist in order to avoid jitter.

 

 

3. 시뮬레이션이 적용된 본에는 애니메이션 키 값이 있으면 안된다.

stay1 모션에서 시뮬레이션 본들에게 시뮬레이션이 적용되기 위해서는 키 정보를 지워줘야 정상적으로 출력됩니다.

아마도 키 프레임이 있을경우에는 우선적으로 키 프레임이 출력되도록 강제 셋팅되어 있는거 같습니다.


 

완료영상

 

 

반응형
반응형

참고 자료

[데브루키/141206 박민근] 유니티 최적화 테크닉 총정리

http://www.slideshare.net/agebreak/unite2015-47100325?related=1

 

유니티 그래픽 최적화, 어디까지 해봤니

http://www.slideshare.net/ozlael/graphics-opt-ndc?related=2

 

최적화 내용 간단 정리

** 가장 중요한 것은 병목 지점 파악~(메모리인지, 콜인지, CPU인지, 버텍스연산인지.. 아니면 다함께..)

** 리소스 아껴 쓰기

** 드로우콜 관리하기

** 모바일 사운드는 모노로 사용하기~

** 가비지 컬렉터 관리~~

** 스크립트 함수에 무거운 함수 쓰지 않기~

** 셰이더에 무거운 함수 사용 줄이기~

** 물리 사용은 최소로~

 

1. 프로그램 최적화

* 스크립트 최적화

--- 유니티 객체들을 변수에 저장하고, 캐싱해서 사용하는 것이 좋다.

--- FindObject 계열 함수들은 매우 느리다. (미리 찾아서 캐싱)

--- Update 함수 보다는  Coroutine을 활용한다.

--- 박싱과 언박싱은 부하가 큰 작업이다.

--- 나눗셈보다 곱셈이 몇십배 빠르다.

--- 삼각함수의 값은 상수로 저장하고, 사용하는 것이 좋다.

--- 문자열은 readonly 혹은 const 키워드를 사용하여, 가비지 컬렉션으로부터 벗어나도록 한다.

* 문제의 원인 : 가비지 컬렉터

--- Mono의 동적 메모리 관리 때문에, 메모리 해제를 위해 GC가 자동 호출 된다.

--- GC는 언제 일어날지 모른다.

--- 오브젝트(or 프리팹)의 동적생성과 해제는 부하가 크다.

--- 오브젝트 풀링 사용은 선택이 아닌 필수!

--- 문자열 병합은 StringBuilder

--- foreach 대신에 for문 사용 (foreach는 한번 돌때마다 24Byte의 쓰레기 메모리를 생성)

--- 태그 비교에는 compareTag() 사용

--- 데이터 타입에는 Class 대신 구조체 사용

--- 즉시 해체할 때는 Dispose 수동 호출

--- 임시 객체들을 만들어내는 API들을 조심하라.

* C++ <-> C# 오버헤드

--- 객체의 변경 사항을 캐싱

--- 컴포넌트 참조를 캐싱

--- 빈 콜백 함수는 제거

 

 

2. 그래픽 최적화

* 텍스쳐 최적화

--- 권장 압축 사용하기 : 아이폰 -> PVRTC   ,  안드로이드(Tegra) -> DXT , 안드로이드(Adreno) -> ATC , 안드로이드(공통) -> ETC1 / ETC2

--- 텍스쳐 사이즈는 무조건 2의 제곱이어야 한다. POT(Power of Two) 아닐 경우 무조건 POT로 강제 변환함

--- 텍스쳐는 묶어서 사용하는게 이득이다. 한 화면에 나오는 것끼리~ 같은 재질의 오브젝트끼리~ 알파가 있는것과 없는것끼리

--- 32bit 텍스쳐보다는 16bit를 큰 텍스쳐로 쓰는게 이득이다.

--- 모바일뷰에서 가장 최적화된 해상도를 찾는데 주력한다. 이거저거 다해봐도 개개의 소스를 절약하는 방식이 최고임.

* 메쉬 최적화

--- Import시에 언제나 "Optimize Mesh" 사용 - 버텍스 캐쉬를 최적화 해준다.

--- 언제나 Optimize Mesh Data 옵션을 사용한다. 사용하지 않는 버텍스 정보들을 줄여준다.

--- 사용하지 않는 버텍스 정보들을 줄여 준다.

* 드로우 콜

--- 적절한 DP 는 100이하를 추천, 보통 70~100 정도가 일반적

* CULLING

---- 각 Layer 별로 컬링 거리를 설정해 준다. 중요도가 낮은 오브젝트의 컬링커리를 짧게 설정한다.

---- 오클루젼 컬링을 활용하여 카메라 밖은 잘라내도록 한다.

* 오브젝트 통합

---- 성질이 동일한 오브젝트들은 하나의 메쉬와 재질을 사용하도록 통합

*Batch

---- 스태틱 배치와 다이내믹 배치의 적절한 조합

* 라이팅

---- 라이트맵과 라이트렌더 모드 활용

* OverDraw

--- 한 픽셀에 두 번 이상 그리게 되는 경우 OVERDRAW 문제가 발생한다.

--- 기본적으로 앞에서 뒤로 그린다. Depth testing으로 인해서 오버드로우를 방지한다. 알파 블렌딩이 있을경우 소팅 문제 발생

--- 반투명 오브젝트의 개수의 제한을 건다. 뒤에서 앞으로 그려야 함. 반투명 오브젝트 갯수가 늘어날수록 퍼포먼스 직결~!

 

 

3. 사운드 최적화

--- 모바일에서 스테레오 사용은 퍼포먼스에 큰 영향을 끼친다. -> 되도록이면 모두 92 kb, 모노로 인코딩

--- 사운드 파일을 임포트하면 디폴트로 3D 사운드로 설정 -> 2D 사운드로 변경

--- 압축 사운드(mp3. ogg) , 비압축 사운드(wav) 구별.    압축 사운드-> 순간적인 효과음, 이펙트등..      비압축사운드 -> 배경 음악 

 

 

4. 폰트 리소스 최적화

--- Packed Font - R,G,B,A channel에 각각 글자의 형태를 저장하는 방법. 메모리 용량을 1/4로 절약

--- 리소스 기타 - ResourceLoadAsync() 함수는 엄청 느리다.

 

5. 셰이더 최적화

--- 기본 셰이더를 사용할 경우, 모바일용 셰이더 사용 Movile -> VertexLit 가장 빠른 셰이더

--- pow, exp, log, cos, sin, tan 같은 수학 함수들은 고비용이다.

--- 텍스쳐 룩 업 테이블을 만들어서 사용하는 것도 좋다.

--- 알파 테스트 연산(discard)은 느리다. 무조건 최소로..

--- 라이트맵 활용은 필수.

* 실수 연산

--- float : 32bit -> 버텍스 변환에 사용, 아주 느린 성능 (픽셀 셰이더에서 사용은 피함)

--- Half : 16bit -> 텍스쳐 uv에 적합, 대략 2배 빠름

--- fixed : 10bit -> 컬러, 라이트 계산과 같은 고성능 연산에 적합, 대략 4배 빠름]

 

6. 물리 엔진 최적화

--- FixedUpdate()는 Updata와 별도로 주기적으로 불리며, 주로 물리 엔진 처리

--- Default는 0.02초, 게임에 따라 0.2초 정도로 수정해도 문제 없음

--- 물리 엔진이 적용되지 않는 오브젝트는 Static으로 설정

--- 리지드 바디가 없는 고정 충돌체를 움직이면, CPU 부하 발생 - 물리 월드 재구성 - 이럴경우 isKinematic 옵션 사용

--- Maximum Allowed timestep 조정하여 물리 계산을 건너뛸 수 있는 부분은 무조건 건너 뛴다.

--- EDIT -> Project Setting -> Physics 에서 Solver Iteration Count 조정. 높을수록 정교하므로 낮게 설정한다.

--- Sleep 조절 -> 리지드 바디의 속력이 설정된 값보다 작을 경우, 휴면상태에 들어감.

--- Physics.Sleep() 함수를 이용하면, 강제 휴면 상태로 만듬.

--- 래그돌 사용 최소화

--- 태그 대신 레이어 활용 - 물리처리에서 레이어가 훨씬 유리, 성능과 메모리에서 장점을 가진다.

--- 메쉬 콜리더는 절대 사용 금지.

--- 레이캐스와 Sphere Check 같은 충돌 감지 요소를 최소화

--- Tilemap Collision Mesh -- 2D 게임에서 타일맵의 Collison Mesh를 최적화 하라.

 

반응형
반응형

루트 모션 사용하기

1. 루트 본 설정하기

- 기존과 동일하게 임포트 한 후 애니메이션을 등록할때 RootNode를 설정해 주면 됩니다.

 

2. 루트 모션의 특성을 지정한다.

Tramsform 이나 특정 축에 따라 어떤 방식으로 할지 정할 수 있습니다.

Original로 할 경우 원래 방향성을 유지하게 되고 Root Node Position으로 할 경우 지정된 루트 노드의 방향성과

위치값을 그대로 따라가게 됩니다. (Bone001을 루트 노드로 설정하면 무조건 Bone001을 따라가게 됨)

평면축에서만 루트 모션을 사용하고 싶을때는 마지막에 있는 Root Transforrm Position(XZ) 만 루트 노드를 따라가게 하면 됩니다.

  

3. 설정이 완료되면 루트모션이 적용됩니다.

캐릭터 발 아래의 둥근 원이 루트 모션이 사용될 Root Node 입니다.(루트 모션 적용이 안되면 아래 원이 따라다니지 않습니다.)

 

반응형
반응형
반응형
반응형

http://acegikmo.com/shaderforge/

CG 스크립트 없이 쉐이더 편집을 가능하게 해주는 플러그인

최근 교육 받고 있는데 언리얼 쉐이더와 맞먹을정도로 편하네요~

홈페이지를 가보면 쉐이더를 눈으로 쉽게 알수 있도록 구성해 놨습니다.

쉐이더 공부하기에 매우 좋은 사이트~!

반응형
반응형

1. Sebastien LagardePBS -> 언리얼4 물리기반의 기초가 되는 이론

2. Ambient Light의 이해

  • a가 물체 A에 부딪혀, 반사되어진 빛 a가 물체 B에 다시 부딪혔을 때, a는 물체 B에 대하여 환경광(Ambient Light)라고 할 수 있다.

    이런 빛을 다른 말로 간접광이라고도 하는데, 물체 B에게 빛 a는 간접적인 빛이기 때문이다. 이런 특성으로 인하여, 한 물체에 환경광은 복잡하게 부딪히게 되며, 여러 방향에서 발견되어 진다.  어찌보면 물체의 전반적인 부위에 평균적인 환경 광량 만큼 물체에 부딪히게 되는 것이다.

    http://nizainar.tistory.com/tag/3ds%20max

     

3. Phong 쉐이딩의 이해

  • 1975년 퐁 뷰이통에 의해 개발된 기술이다. 3차원 그래픽에서 각각의 화소 컬러에 조명에 기초하여 음영이 있는 표면을 계산한다. 퐁 쉐이딩은 면 단위가 아닌 화소 단위로로 오브젝트를 렌더링 하므로 텍스쳐의 질감, 반사 투명도, 범프등의 효과를 정교하게 반영한다. 폴리곤으로 구성되어 있는 각진 면을 부드럽게 처리하는데 효과적이다.

  • 고러드 쉐이딩의 업그레이드 버전. 정점들 사이의 표면 노말들을 하나의 표면 노말로 분해하여 면의 모든 픽셀에 대한 노말을 계산

  • http://cglink.com/terms/1085

     

4. 램버트 쉐이더의 이해

  • 퐁쉐이더는 사물에는 좋지만, 사람에게 쓰이기엔 부족한게 많은 쉐이더이다.

    그래서 등장한 것이 램버트 쉐이더이다. 밸브에서 개발했으며 하프라이프에 처음 사용되었다.

  • Dot(L,N)이 됩니다. L은 라이트 벡터, N은 법선 벡터를 말합니다. 이 둘을 dot프로덕트하면 램버트 라이팅이 된다. 법선 벡터(노말맵)가 곱해지면서 표면에 굴곡진 라이팅이 생성됐습니다.

  • 이 쉐이더의 가장 큰 문제점은 명암차가 너무 뚜렷하다는 것입니다.

  • 이러한 단점을 처리한 것이 바로 하프 램버트입니다. 램버트에 0.5를 곱해 평준화 시킨 다음 0.5를 더해서 x축으로 들어 올리는 겁니다. Dot(L,N) *0.5f + 0.5f

  • 하지만, 하프 램버트에도 단점이 있다. 명이 너무 넓고 암이 너무 좁습니다. , 음영 콘트라스트가 거의 없습니다. 이것을 해결하기 위해 추가된 것이 계수입니다.

    하프 램버트를 몇 번 제곱해서 콘트라스트를 올려 주는 겁니다.

    Pow((dot(L, N) *0.5f + 0.5F, n)   스몰n은 임의의 계수이며 일반적으로 4이다.

    http://donggas90.blog.me/100133823753


--------------------------- 아래부터 물리 기반 렌더러의 이론들--------------------------- 


5. Oren-Nayar 조명 모델이란..(물리 기반 렌더링에서 가장 중요한 이론!!)

http://www.gamedevforever.com/93  a반드시 필독요망!!!

  • Lambertdiffuse model은 모든 방향에서 같은 복사량을 취하게 된다는 가정을 깔고 있으며, 플라스틱이나 모래와 같이 반들반들한 표면을 가진 재질에 적합하다고 할 수 있습니다. 하지만, 현실세계에서 거친 표면을 가진 재질들이 많이 있지요.

  • Oren-Nayar Model의 공식을 유도할 때 사용되는 거친 표면(roughbess Surface)이라는 것은 서로 다른 각도를 가진 Torrance Sparrow에 의해 제안된 미세면(microfacet)들의 집합으로서 설명될 수 있습니다.

    여기에서 미세면의 표면은 길고 대칭적인 V 자 형태의 굴곡(cavity)으로 구성된다고 가정합니다. 또한, cavity는 두 개의 평면의 면으로 구성됩니다.

    면의 거친 정도는 경사진 면의 분산을 위한 확률 함수로 결정되는데, 보통 Gaussian distribution 이 사용됩니다.

 

6. 프레넬(Fresnel)에 대한 이해 (물리 기반 렌더러에 사용되는 이펙트 효과)

  • 투명하게 반사되는 물질이라 하더라도 시야각이 얕으면 투명함이 사라지는 효과를 말합니다.(광택이 되어 있는 마루바닥..?) 수학적으로는 되게 복잡한 이론인데 간단히 설명하면 물이 깨끗한 호수가에 서서 바로 아래를 내려다 보면 바닥이 다 보입니다. 하지만 멀리서 바라보면 호수물이 거울 반사처럼 반사됩니다. 이것이 프레넬 효과

  • 스마트폰을 비스듬하게 볼때와 정면에서 볼때의 차이점을 이해하자.

    http://www.gamedevforever.com/35

 

7. Blinn-Phong Specular (물리기반 렌더러에 사용되는 스펙큘러)

    http://ikpil.com/641

    http://blog.naver.com/tepet/140064908839

    http://blog.naver.com/imalone1/70088285161

    짐 블린이 시그라프 98에서 발표한 블린 퐁 쉐이딩.

    쉽게 말해 퐁 방정식과 블린 방정식을 합쳐서 장점만 취한 쉐이딩

 

8. 각 물체 별 거칠기와 미세 표면(Oren-Nayar의 수식을 뒷받침하는 물리기반 렌더러에 기초적인 이론)

    각 물체에는 거칠기와 미세표면이 존재한다.

    그것들을 수식화하여 표현하는 것이 물리기반 렌더링

http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=14&ved=0CFQQFjAN&url=http%3A%2F%2Fjournal.kap.or.kr%2Finc%2Fdownload.php%3Fpubyear%3D2006%26volume%3D44%26issue%3D4%26f_name%3Dkap44-4-9.pdf%26convert%3DY&ei=H7lyVejBEc3h8AX9z4GAAw&usg=AFQjCNEnjYKatrxb_5f3BzaGe_Tn5mU9lQ&bvm=bv.95039771,d.dGc&cad=rjt

  • 참고 문헌(티타늄의 미세표면 구조 논문)


9. Image Base Lighting(물리 기반 렌더러의 라이트 방식)

주로 프리렌더링에서 gi용으로 사용하는 hdri를 생각하면 쉽게 이해할 수 있다.(멘탈레이.. 브이레이..등등)

베이스로 삼는 이미지의 색상만이 아니라 밝기 자체를 광원으로 처리하는 방식이다.

멘탈레이, 브이레이 등등..을 생각하면 이해가 빠를 듯 합니다.

 

10. 에너지 보존 법칙 -> 매우 중요!!(물리 기반 렌더링의 기본이 되는 이론)

  • 열역학 제 1법칙. 물리기반 렌더링의 근간이 되는 법칙.

  • http://www.kmlee.com/bbs/view.php?id=free&no=1117

  • 에너지 보존은 PBR렌더링 솔루션에서 중요한 역할을 합니다. 이것은 표면에 의해 반사되는 빛의 총 량은 이 것이 받는 빛의 총 량보다 작다고 주장합니다. 다른 말로, 표면에서 반사되는 빛은 절대로 표면에 충돌하기 전의 빛보다 강할 수 없다는 말입니다.

    아티스트로서 우리는 에너지 보존을 컨트롤할 걱정은 하지 않아도 됩니다. 에너지 보존이 쉐이더에 의해서 알아서 된다는 사실은 PBR의 좋은 측면 중 하나입니다. 이것은 물리기반 모델의 부분 중 하나이며 우리에게 물리보다 아트에 집중할 수 있게 해줍니다.

11. 디퍼드 렌더링이란?(참고만 하세요~시험 안나옴)

  • 디퍼드 라이트는 라이트와 그림자에 특화된 렌더링 패스입니다.

  • 모든 라이트가 퍼 픽셀로 계산되며, 이것은 그것들이 노말맵 등등과도 인터렉티브하게 작동된다는 것을 의미합니다.

  • 단점 : 리얼안티알리아싱이 지원 안됨. 반투명 오브젝트는 제어 안됨. 블린 봉 라이트만 지원. 모든 라이트는 같은 방법으로 계산되어 버린다. 각각의 오브젝트를 드라마틱한 다른 라이팅 모델로 계산할 수 없다.

  • 황군 사이트 참조 http://hwanggoon.tistory.com/18

     

12. 물리 기반 렌더링에 도움 받기 위한 참고 사이트(빨간색 부분들만 잘 보셔도 이해가 빠를거에요~)

http://www.slideshare.net/jalnaga/ndc13ndc-2013-udk-19999169

  • 물리 기반 렌더러의 기본 이론정리(카페가입 필수 및 강추)

http://cafe.naver.com/unrealfx/7128

  • 2014 NDC 발표 자료

http://www.slideshare.net/jooeunpark501/ndc2015-1

  • 쉐이더의 기본 이론(김포프)

http://kblog.popekim.com/2011/11/01-part-1.html

 


13. 쉐이더의 발전 흐름 계보

퐁 쉐이더 ?> 램버트 쉐이더(하프라이프) = 블린 퐁 쉐이더(98년 시그라프) -> 물리기반 쉐이더   --> 기억해 주심 좋을 듯^^

시대가 흐를수록 쉐이더가 좋아졌다고 하기 보다 기존 쉐이더들의 장점을 극대화 시켜 물리기반으로 정확히 계산하는 오차를 줄여왔다고 할 수 있다.

다시 한번 얘기하지만, 물리 기반 렌더러가 완벽한 렌더는 아니다. 실사 기반에서와 콘솔 게임(PC게임)에서는 톡톡히 역량을 발휘하지만, 카툰식이나 모바일에서는 아직 제 역할을 기대하기 힘든 수준이다. 그러나 항상 콘솔 -> PC게임 -> 모바일로 기술이 계승 되듯이 언젠가는 모바일의 물리 기반 렌더링 기술이 급속히 발달할 것이라 예상되며 언리얼도 모바일에서 다이렉트 라이트등 물리기반의 효과를 극대화 하기 위해 무단히 노력 중에 있다. 

 

반응형
반응형

 

 

2009년도에 '동물행동학 기반 동물 애니메이션' 석사논문 준비하면서 만들었던 애니메이션~

논문 링크 -

http://academic.naver.com/view.nhn?doc_id=50890396&dir_id=0&page=0&query=%EB%8F%99%EB%AC%BC%ED%96%89%EB%8F%99%ED%95%99%20%EA%B8%B0%EB%B0%98%20%EB%8F%99%EB%AC%BC%20%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98&ndsCategoryId=10208

고양이와 개 두 동물의 관절구조가 비슷하면서도 체형과 움직임의 느낌이 워낙 달라서 그 특징을 연구해보고자 작업해 보았습니다.

동물 애니메이션은 하면 할 수록 재미있는 작업인거 같습니다.

 

반응형

'Animator > PersonalWork' 카테고리의 다른 글

남자 애니 모음  (0) 2015.12.10
반응형

 


광개토 태왕의 부루

모든 저작권은 (주)엔도어즈에 있습니다.

 

 

반응형
반응형


삼국지를 품다 - 관우

모든 저작권은 (주)엔도어즈에 있습니다.

 

 

반응형
반응형


삼국지를 품다에서 사용된 호랑이

모든 저작권은 (주) 엔도어즈에 있습니다.

 

반응형
반응형

한창 동물애니에 빠져있던 시절~


모든 저작권은 (주)엔도어즈에 있습니다.

 

반응형
반응형

한창 동물애니에 빠져있던 시절 재밌게 작업했던 추억이..


모든 저작권은 (주)엔도어즈에 있습니다.

 

반응형
반응형

지금은 영웅의 군단으로 출시했지만, 예전 아카2로 개발하던 시절..

주인공의 필드 동작을 연구하며 초안으로 작업던 동작들이다.


활 주인공 모션



뛰기, 걷기, 앉기등..


점프, 뒤로 걷기

 

반응형

+ Recent posts