반응형

- 게임모드 제작하여 게임속에 주인공 캐릭터 넣기

 

1. 게임모드 블루 프린트를 만든다.

- 이녀석은 아이콘에 따로 색이 안붙는거 같네요~

 

 

2. 디폴트 창에서 기존에 제작한 캐릭터 블루 프린트 연결하기


- 캐릭터 뿐 아니라 UI와 컨트롤러등도 내가 제작한 걸로 넣을 수 있습니다.

 

 

3. 월드 세팅에서 제작한 게임모드 불러 오기

여기까지 만들면 게임에서 뛰어다니는 주인공을 넣는데 필요한 모든셋팅이 끝났습니다.

 

 

PLAY~~!! 

 

 

근데 아무것도 든거 없이 맨손으로 필드만 뛰어다니니 왠지 심심하네요..

쓰는김에 발사모션 적용하는 방법과 총알에 물리 적용하는거 까지 같이 적어보겠습니다... To Be Continue..

 

반응형
반응형

 

*본 가이드는 4.6때 작성된것으로 최신버전과는 다소 차이가 있을수 있습니다.

**주인공 캐릭터 만들기 2번째

애니메이션 블루 프린트 만들기​



1. 주인공이 사용할 모션을 임포트해 옵니다.

​- 필수적으로 필요한 모션은 이동 모션(상,하,좌,우)과 대기모션과 발사모션입니다.

애니메이션 관련 문서

https://docs.unrealengine.com/latest/KOR/Engine/Animation/Sequences/index.html







2. 캐릭터 블루프린트를 제작하면서 사용된 원본 모델의 스켈레톤을 설정합니다.

블루프린트를 생성하려고 하면 스켈레톤 설정 화면이 나옵니다.

- 애니메이션 블루 프린트 파일. 이 녀석은 특이하게 주황색입니다. 

 

 


3. 주인공의 이동모션에 사용될 앞,,,우 모션을 블렌드 스페이스로 만들어 설정해 준다.


이미지를 클릭하시면 원본으로 보실수 있습니다.


- 필요한 모션들을 드래그앤 드랍으로 블렌드 제어창으로 넣을 수 있습니다. 여기에 필요한 대기, 이동관련 모션들을 넣어줍니다.


 



4. 주인공의 총구겨냥포즈에 사용될 앞,,,우 모션을 Aim Offset으로 만들어 설정해 준다.

 

- AimOffset은 강력한 포즈 저장기능이라 MeshSpace 형식으로 되어 있는 모션만 불러와서 사용할수 있다. 사용할 모션들을 전부 MeshSpace 형태로 바꿔줍니다.


 - 여기서도 필요한 모션들을 드래그앤 드랍으로 블렌드 제어창으로 넣을 수 있습니다. 여기에 필요한 각 방향별 Aim 모션을 불러옵니다.

 



 

5. 위 두가지 제어가 끝나면 다시 애니메이션 블루프린트로 가서 애님 스테이트를 만들어 준다.

(1) 기본 스테이트 머신 추가​

스테이트머신이 만들어진다.

생성 완료후 서로 이어준다.


 

 (2) New State Machine 을 더블클릭후 스테이트머신 제어창으로 들어간다.

- 그러면 비어있는 Entry라는 스테이트 연결고리가 나온다.​


(3) Entry에서 화살표방향으로 마우스를 드래그앤 드랍을 한 후 MOVE 라는 스테이트를 추가한다.


-Move에 대한 스테이트를 제작할거라 Move라고 이름지어줍니다.(이름은 자유입니다~)​



 (4) Move로 제작된 스테이트 머신을 다시 더블클릭해서 스테이트 제어창으로 들어와 위에서 제작했던 블렌드 스페이스와 에임 오프셋을 드래그앤 드랍으로 창에 올려 넣는다.

이미지 클릭하시면 원본으로 보실수 있습니다.



-여기까지 들어오면 이제 스테이트머신에서 모션 연결의 최종단계까지 왔습니다.


6. 블렌드 스페이스와 에임 오프셋에 사용된 변수값을 블루프린트에서도 선언하여 같은 구조로 움직이도록 설정한다.

  

방향, 속도, z축(Yaw),y축(pitch)에 대한 변수를 Float형으로 선언~


- 선언된 변수들을 스테이트창으로 드래그 하여 GET으로 얻어온다.


- 이제 마지막으로 아래 그림처럼 서로 연결해 주면 마무리 된다.




이동속도와 회전 의 변수값을 넣어보면서 캐릭터가 프리뷰창에서 원하는 대로 움직이는지 확인한다.


 

 

 

7. 애님 스테이트 제작이 끝났다면 이벤트 그래프로 가서 캐릭터 블루 프린트 값을 형변환으로 불러와 위치 제어 함수를 블루프린트로 제작해 준다. 

 


- 이동과 회전에 대한 블루프린트

(블루프린트의 제작 공정에 대한 자세한 코멘트는 생략합니다.)

이미지 클릭하시면 원본으로 보실수 있습니다.



- 캐릭트 블루프린트에서 움직임이 일어났을때 방향과 속도에 어떤식으로 영향을 끼칠지에 대한 함수입니다. 속도와 방향을 벡터로 변환해주고 기존에 선언했던 변수들의 값을 얻어온 값으로 SETTING해 줍니다.




- 총구 겨냥에 대한 블루프린트

(블루프린트의 제작 공정에 대한 자세한 코멘트는 생략합니다.)

이미지 클릭하시면 원본으로 보실수 있습니다.


- 캐릭트 블루프린트에서 마우스 회전이 일어났을때 총구 방향에 어떤식으로 영향을 끼칠지에 대한 함수입니다. 여기서도 방향을 벡터로 변환해주고 기존에 선언했던 변수들의 값을 얻어온 값으로 SETTING해 줍니다.

 

 

여기까지 제작후 컴파일후 에러가 없으면 완료된겁니다.

 


8. 애님블루 프린트 제작이 끝나면 캐릭터 블루 프린트에서 사용할수 있도록 디폴트 창을 열어 방금 제작한 애님 블루 프린트를 연결해 준다.

 이미지를 클릭하시면 원본으로 보실수 있습니다.


 

처음 해보시는분은 워낙 절차가 많아서 어렵고 복잡하게 느끼실수 있으실거 같네요..


블루 프린트 설정에 대해서는 언리얼 문서를 참조하시면 많은 도움 받으실거에요~

https://docs.unrealengine.com/latest/KOR/Engine/Animation/AnimBlueprints/index.html

여기까지 애니메이션 블루 프린트의 제작 방식이었습니다.

반응형
반응형

**본 가이드는 언리얼4.6에서 제작한거라 최신버전과는 다소차이가 있을수 있습니다.

 

언리얼엔진의 강력한 기능중 하나가 주인공 캐릭터 제작이 타 엔진보다 간편하다는 점입니다.

하지만, 언리얼엔진을 자주 접해 보지 않은 사람에게는 결코 쉽지 않아 보이기도 합니다.

항상 느끼지만 알기 전까진 어렵다가 알고 나면 쉬운게 언리얼엔진인거 같아요..ㅎㅎ

주인공 캐릭터 제작방식에 대해서 3개의 카테고리로 나눠 살펴보고자 합니다.

**메시 임포트 같은 기본적인 사항은 문서를 참조하도록 하고 넘어가도록 하겠습니다.

**총알 발사나 무기 장착 같은 테크닉에 대해서는 잠시 예외로 하고 추후에 다루도록 하겠습니다.


주인공 캐릭터를 만들기 위해 필요한 파일은 3가지입니다.

  

캐릭터 블루 프린트

 

애니메이션 블루 프린트

 

게임모드 블루 프린트



이 시간에는 주인공 캐릭터를 만들기 위해 가장 뼈대가 되는

캐릭터 블루 프린트 제작 방식 에 대해서 살펴 보겠습니다.



1.주인공으로 사용될 스켈레탈 메시 파일을 임포트 합니다.

기본적으로 메쉬, 피직스 에셋, 스켈레톤 세개의 파일이 생성됩니다.


스켈레탈 메시 임포트에 대한 언리얼 문서 -

https://docs.unrealengine.com/latest/KOR/Engine/Content/FBX/SkeletalMeshes/index.html


2.주인공 스켈레탈 메시를 제어할 캐릭터 블루프린트를 생성해 줍니다.

파일을 생성할 창에서 오른쪽 마우스 -> 블루프린트-> 캐릭터로 들어가 생성후 보기 편한 이름으로 지정해 줍니다.



이 예제에서는 여자주인공을 사용하기 때문에 Women_BP 라는 이름으로 설정합니다.

프리뷰에서 색깔별로 어떤 에셋인지 구분하도록 되어 있습니다.

블루프린트는 이름답게 파란색으로 되어 있네요~





 


3. 블루프린트 -> 컴포넌트 에서 사용할 메쉬와 카메라를 설정해 줍니다.


(1) 캐릭터 설정

​- 메시에 대상 캐릭터를 선택후 화살표 버튼을 눌러서 넣어줍니다.


- 메시가 바운더리 박스와 같은 위치에 있도록 위치값을 맞춰 줍니다.

- 메시가 Arrow(하늘색 화살표 방향)와 일치하도록 회전해 줍니다.



(2) 카메라 설정

컴포넌트 추가 -> 스프링 암

스프링암을 부모로 하여 하위에 카메라를 연결해 줍니다.

스피링암 추가후 카메라 추가


-  일반 카메라를 넣어도 되고 스프링 암 카메라를 넣어도 되지만, 스프링 암 컴포넌트는 부모와 자손에 일정한 거리를 유지해주며 충돌이 생기면 벽을 뚫고 나가는 것을 방지해주는 컴포넌트입니다.


- 카메라의 위치값을 설정하여 주인공을 바라보는 뷰를 정해 줍니다.



수치로 설정해 주면 되는데 실시간으로 화면을 보면서 설정하고 싶다면, 현재까지 설정한 캐릭터 블루 프린트 파일을 컴파일 후 저장한 다음 레벨(씬)에 올려 실시간으로 카메라 위치를 변경할 수 있습니다.


 

 


4. 편집 -> 프로젝트 셋팅 -> 입력으로 가서 키보드입력에 대한 설정을 해줍니다.

​- 입력에 대한 정보를 얻어 오기 위해 키보드 입력을 직접 설정할 수 있습니다.

-MoveForward의 Scale 값은 캐릭터의 움직이는 값입니다.



- 전부 만들기 힘들다면 다른 프로젝트에서 구성된 입력을 익스포트하여 임포트로 불러와서 사용해도 무방합니다.



5. 블루프린트 코딩 - 아래 그림을 참조하셔서 코딩해 줍니다.


 

전진버튼을 누르면 Action Mappings의 입력제어에 캐릭터의 새로운 벡터값을 구해 무브먼트를 설정하는 구조.


 


마우스를 회전하면 Axis Mapping의 축 변환에 따라 캐릭터의 새로운 로테이션값을 구해 무브먼트를 설정하는 구조.

 

오른쪽 마우스를 눌렀을때 화면이 변경하도록 하는 설정 - 바이오하자드 방식을 따라했습니다.



스마트폰 화면 터치 입력 - 모바일 컨트롤러 지정 

터치를 실행하기 위해서는 회전과 전진에 대한 Float형 변수를 먼저 선언해야 합니다.




 그 외에 총알 발사나 무기 변경 같은 함수도 캐릭터 블루 프린트에서 지정할수 있지만, 그 부분에 대해서는 마지막 시간에 다뤄보도록 하겠습니다.


여기까지 캐릭터 블루 프린트의 제작방식이이었습니다.

다음에는 애니메이션 블루프린트 제작에 대해서 살펴보겠습니다.  To be Continue..

 

반응형
반응형

캐스케이드는 언리얼에서 제공하는 이펙트 전용 툴입니다.

1부에서 제작한 불 쉐이더를 이용하여 이펙트를 제작했습니다.

불 이펙트에 사용된 인자는 아래와 같습니다.


사용된 인자를 순차적으로 살펴보겠습니다.

 

1. Required

사용할 메터리얼과 그 메터리얼에 대한 설정을 변경할 수 있습니다.


 

 

2. Spawn

- 이미터 파티클의 스폰개수 / 속도에 영향을 끼치는 모듈.

 

 

3. LifeTime

- 스폰시 파티클의 초기 수명을 설정하는 데 사용되는 모듈입니다.

 

 

4. Size

? 파티클 수명상의 여러 지점에서 그 크기에 영향을 끼치는 모듈입니다.

   (1) Initial Size - 파티클 수명상의 여러 지점에서 그 크기에 영향을 끼치는 모듈입니다.

 

(2) Size Scale - 파티클의 사이즈를 BaseSize에다 지정된 스케일 인수를 곱한 값으로 설정하는 모듈입니다. 주의할 점은 해당 프레임에서 이 모듈 이전의 모든 크기 조절을 덮어쓰는 모듈이라는 겁니다.

 

 

4. Parameter

- 머터리얼 같은 다른 부분을 제어할 수 있도록 파티클 시스템 외부로 데이터를 전달하는

모듈입니다.

(1) Dynamic - 모듈에 대한 동적 파라미터 배열입니다.


 

 

5. Velocity

? 다양한 방법으로 파티클의 속도를 조절하는 모듈입니다.

(1) Initial Velocity ? 파티클의 초기 속도를 설정하는 모듈입니다.

 

 

6. Location

- 파티클 수명상의 여러 시점에서 파티클의 위치에 영향을 끼치는 모듈입니다.

(1) Initial Location ? 파티클의 스폰시 초기 위치를 설정하는데 사용되는 모듈입니다.


 

(2) Cylinder - 원통형 모양 내에서 파티클의 초기 위치를 설정하는데 사용되는 모듈입니다.

 

(3) Pivot Offset - 방향성을 어떻게 할지 설정하는 모듈입니다.


 

7. SubUV

? 다수의 개별 프레임격자 배치되는 SubUV텍스처를 파티클에 활용할 수 있도록 해 주는 모듈입니다.

(1) Subimage Index ? 플로트 분포에 따라 사용할 서브이미지를 선택하는 모듈입니다. 현재 서브 이미지는 왼쪽에서 오른쪽, 위에서 아래 순입니다.

 

8. Color

- 방출된 파티클의 색에 영향을 끼칩니다.

** Color 모듈은 이미터에 사용되는 머티리얼이 Particle Color 머티리얼 표현식을 사용하여 모듈에서 머티리얼로 색을 전하도록 해야 합니다.

(1) Initial Color

-스폰시 파티클의 색을 설정하는 모듈입니다. 다른 컬러 모듈이 덮어쓰지 않는 한 파티클은 수명에 걸쳐 이 색을 유지하게 됩니다. 다음과 같은 멤버가 포함됩니다:

psys_initial_color.gif

 

(2) Color Over Life

-파티클의 수명에 걸쳐 그 색을 설정하는 모듈입니다.

psys_color_life.gif

 

 

위 그림과 같이 설정을 하면 아래 영상과 같은 불 이펙트가 출력됩니다. 

 

반응형
반응형

**  이펙트 쉐이더 제작 **

다이내믹 파라미터를 사용하여 파티클과 연동해주면 쉐이더를 캐스케이더에서 편집이 가능하게 해줍니다..

다이내믹 파라미터는 파티클 에미터가 네개의 값을 전해 어떤 식으로든 사용할 있도록 주는 통로입니다. 값은

캐스케이드에서 ParameterDynamic 연결되서 사용됩니다.

여기서 사용된 이펙트는 세개의 다이내믹 파라미터를 캐스케이드와 연결하여 사용됐습니다.

 

첫째는 Alpha Erosion

  • (혹은 연기) 특유의 일렁이는 효과를 주기 위한 노드

  • 다이내믹 파라미터를 이용하여 캐스케이드에서 수치를 조절할 있도록 설정했다.

 

둘 째는 Random 0-1 per particle

  • 0~1 수치 사이에서 다양한 형태로 패닝 되도록 설정

  • 이 수치 역시 다이내믹 파라미터를 이용하여 캐스케이드상에서 수치 조절할 수 있도록 설정

 

셋 째는 Distortion Amount

  • 일그러짐 효과를 주기 위한 노드

  • 다이내믹 파라미터로 구성

 

 

최종 쉐이더

 

 

 

다이내믹 파라미터를 최소화하여 간단히 만들기

  • Alpha Erosion 효과만 다이내믹으로 설정하고 나머지는 기본 셋팅만 해줘도 출력품질에 큰 차이는 나지 않습니다. 모바일에서는 이 방식을 쓰는걸 추천합니다.

 

 

**모바일에서 알파가 정상적으로 빠지게 하는 방법

기존 구매한 쉐이더에서는 아래 그림처럼 알파가 잘 안빠집니다.

 

모바일에서 정상적으로 알파가 빠지는 설정을 하려면 Opacity값으로 설정해 줘야 합니다.

(알파 텍스쳐를 추가하지 않고 Lerp를 이용하여 나오는 마스크이미지를 사용했습니다.)

 

그러면 아래그림처럼 정상적으로 알파가 빠짐

 

 

쉐이더 설정에 대한 가이드가 끝났습니다.

이어서 캐스케이드 설정에 대해서..(내일 올리겠습니다.)

 

반응형
반응형

시네마가 나올때는 UI가 사라져야 하는데, 간단한 구현 방법입니다.

 

 

반응형
반응형

제작한 UMG를 화면에 띄우고 싶으실땐 아래 함수를 레벨 블루프린트에

추가해 주시면 PLAY시에 UMG가 출력됩니다~ 참고하세요~

 

반응형
반응형

상하체 분리 애니 적용시 상체가 중심축의 로테이션 값이 먹어 애니가 제대로 적용되지 않는 문제가 있었습니다.

그래서 담당 프로그래머 분이랑 같이 본 구조도 바꿔보고... 블렌드가 아닌 애디티브도 써보고 별짓을 다했는데아래처럼 정면을 제대로 바라보지 못하면서 모션이

 출력습니다.

 

 

 


이때 '본 마다 레이어로 블렌드 합니다'의 속성에서 아래 부분을 체크인 해줘야 합니다.

 

체크인 하면 아래처럼 정면을 바라보며 정상적으로 출력됩니다.

 

옵셔체크하나면 해결될 일이었는데, 문서공유되어 있는게 없어 한참을 헤맸네요..ㅠ

잊어버릴까봐 메모해 둡니다~

 

반응형
반응형

언리얼 튜토리얼에 올라온 비헤이비어 트리 쿽스타트 가이드를 토대로

평소에는 천천히 돌아 다니다가 주인공을 만나면 속도를 내서 달려올수 있도록 함수를 추가해 봤습니다.

https://docs.unrealengine.com/latest/KOR/Engine/AI/BehaviorTrees/QuickStart/index.html

 

 

블루프린트 함수 추가 내용

1. AI 캐릭터 추가 내용 - 일반 속도를 60으로 규정하는 함수 추가. speed rate 값을 캐싱하여 속도 조절 가능

 

2. 일반이동 BTT 추가내용

-문서에서는 기본으로 제공하는 노드로 구성되어 있는데, 그 부분을 제거하고 아래 내용을 추가해주면 됩니다.

원본 - https://docs.unrealengine.com/latest/KOR/Engine/AI/BehaviorTrees/QuickStart/12/index.html

 

 

3.  주인공을 만났을때의 BTT 추가내용

원본 - https://docs.unrealengine.com/latest/KOR/Engine/AI/BehaviorTrees/QuickStart/10/index.html

원본BTT에 아래 내용만 추가하면 됩니다.

 

 

4. 원본에서 비헤이비어 트리 구조 변경

원본에는 기본 트리를 사용하기 때문에 여러가지 조건문이 붙지만, 함수안에 이동 조건을 걸어놨기 때문에

필요없는 부분들이 생겼습니다.

원본 구조 - https://docs.unrealengine.com/latest/KOR/Engine/AI/BehaviorTrees/QuickStart/12/index.html

변경 구조


 

 

완료영상

 

 

반응형
반응형

스켈레탈 메시를 처음 생성하면 피직스 에셋이 자동 생성됩니다.

자동 생성이 안됐어도 스켈레탈 메시를 누르고 피직스 추가를 하면 피직스를 새로 만들수 있습니다.

 

자동 생성된 피직스는 모양과 크기가 제대로 설정되어 있지 않아 시뮬레이션 결과가 엉망으로 나옵니다.

처음 생성했을때의 피직스 모양 - 모양과 크기가 엉망입니다..

피직스 셋팅이 안된 상태의 시뮬레이션 영상 -  아 흉해라.. 

 

이 상태로 게임에 쓸수 없기에 각 관절마다 피직스 셋팅을 해줘야 합니다.

 

설정가이드

1. 각 관절이 전부 Sphyl 형태로 되어 있는데, 계산이 많이 필요한 허벅지나 양쪽 팔등만 설정하고 나머지는 Box 형태로

설정해 줍니다.

 

2. 관절형태를 설정후 크기 및 방향등을 재설정해 줍니다.

-각 관절이 겹치게 될경우 물리 계산이 꼬이게 되므로 서로 겹치지 않도록 하고 사이즈가 너무 크지 않고 설정해 줍니다.

 


3. 각 관절별 사이즈 조절이 끝나면 컨스트레인트 각도 설정을 해줘야합니다.

- 관절 사이즈보다 컨스트레인드 각도와 위치가 더 큰영향을 끼치게 되므로 많은 테스트가 필요한 부분입니다.

여기서 각 관절이 얼마만큼 꺽이도록 할것인지 설정하고, 방향은 어느 쪽으로 향하는지 등을 설정할 수 있습니다.

여기서 주의할 점은 컨스트레인트는 한번 삭제하면 복구하기가 굉장히 까다롭기 때문에(거의 다시 만들어야함..)

삭제할때 신중을 기해야 합니다.

 

4. 새로 셋팅된 피직스형태

 

 

위와 같이 셋팅을 마치고 나면 아래처럼 시뮬레이션이 출력됩니다. 아직 완벽하진 않지만, 점점 좋아질것을 기대하며.. 

 

오늘 처음 해본거라 아직 셋팅이 완벽하지 않아 여전히 부족한 부분이 있지만, 앞으로 많은 테스트를 거치다 보면

이쁜 결과물을 충분히 만들어 낼수 있을거라 기대합니다.

앞으로 배포될 APK에 일단 주인공만 포함될 예정이며 좀더 연구해 본후 몬스터에도 적용시킬지 검토중입니다.

 

반응형
반응형

 

 

 

 

 

 

 

언리얼 파츠 작업시 유의사항

- 스켈레탈 메시인경우 맥스에서 여러개의 모델로 디테치가 되어 있어도 언리얼로 임포트를 하면 메시가 전부 컴바인되어 임포트 됩니다.(스태틱 메시는 나뉘어서 부르는게 가능)

따라서 파츠를 나눌 부분은 맥스에서 익스포트시 따로 선택하여 익스포트 한후 언리얼로 임포트 해 올때 원본 모델의 스켈레톤과 피직스를 공유 받으면 파츠별로 붙혔다 뗐다가 가능해 집니다.

- 그리고 모델링 주실때 링크 구조로 주셨는데, 모델링은 링크 구조 없이 주셔야 문제가 없습니다.

스켈레탈 메시를 링크구조로 익스포트 하면 제일 상위 메시만 익스포트 되고 나머지는 익스포트 되지 않습니다.

 

 

파츠 분리 익스포트 방식

1. 메인 바디가 될 부분을 먼저 익스포트 한다.

 

 

2. 파츠로 나뉘어질 모델과 메인 바디와 똑같은 본을 선택후 각각 익스포트 한다.

 


 

3. 메인 바디를 언리얼로 임포트 한다.

-원본 모델이므로 스켈레톤과 피직스를 새로 생성한다.

 

-임포트후 생기는 파일들 : 메시, 스켈레탈, 피직스, 메터리얼

 

 

4. 그리고 파츠모델들을 각각 임포트해 온다.

-임포트시 기존에 생성된 메인 바디와 스켈레탈과 피직스를 상속받도록 설정한후 임포트한다.

 

5. 그렇게 불러진 파츠 모델들은 아래 그림처럼 몸에 붙혔다 뗐다 하는것이 가능해집니다.


 

 

반응형
반응형

스켈레톤을 교체하게 된 원인 - 문제가 발생했던건 prop1의 위치였습니다,

발사 모션을 할때 Spine 본 아래로만 모션이 들어가도록 설정했는데,

prop1 본이 스파인본 보다 상위에 있어 발사 모션을 할때 총이 따라오지 않는 문제가 발생했습니다.

 

원본데이터를 바꿔버리면 쉽지만, 내부망에 이미 등록되어 있는 주인공 데이터의 원본 모델링 소스를 바꿔버리면

여기저기 미싱이 나기 때문에 스켈레톤만 교체하는 방법에 대해 공유합니다.

 

 

1. 맥스에서 다시 본위치를 설정후 메쉬와 애니메이션을 전부 다시 뽑습니다.


 

 

2. 그 후 뽑힌 모델링 파일의 이름을 원본이름과 다르게 설정해서 임포트 해 줍니다.

- 여기서 중요한 것은 애니 이름은 그대로 뽑고 원본 모델 소스 이름만 다르게 해줍니다.


 

3. 새로 뽑은 모델링 FBX 데이터(pawn_women2)를 언리얼에 임포트해 오면 세가지 파일이 생깁니다.

- 여기서 스켈레톤외의 파일들은 전부 제거해 줍니다. 필요없기 때문에...

 

 

4. 기존 원본 모델링 FBX 데이터(pawn_women)의 스켈레톤을 새로 뽑아서 생성된 스켈레톤 데이터로

다시 할당해 줍니다.


 

5. 새로 할당후 반드시 리임포트를 해줘야 정상적으로 변환됩니다.

- 리임포트를 해야 정상적으로 나온다는것을 뒤늦게 알게 되어 엄청 헤맸네요..ㅠㅠ

**여기서 중요한 사항은 기존에 임포트했던 원본 FBX 파일이 기억되어 있으면 새소스를 불러올수 없으니

기존 원본 fbx는 반드시 삭제해 줍니다.


 

6. 모델링 임포트가 끝나면 적용된 애니메이션들도 전부 리임포트 해줘야 정상적으로 모션이

출력됩니다.

- 리임포트를 해주지 않으면 모션이 전부 미싱나거나 깨져서 나오게 됩니다.

 

 

위 작업은 외부망에서 테스트 할때는 문제되는 내용이 아니지만, 내부망에서 프로그래머들과 협업시

원본 모델링 소스가 바뀔 경우 많은 데이터에 오류가 발생하므로 원본 모델링 데이터를 바꾸지 않고

스켈레톤을 바꾸기 위한 방법이었습니다.

쉽게 바꿀수 있을거라 생각하고 접근했다가 반나절을 날려 보냈네요..ㅠ

잊어버릴까봐 메모해 둡니다~

 

반응형
반응형

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

또한 마티네가 시작됨과 동시에 주인공 캐릭터를 가리고 마티네가 끝나면 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에 공유할 본을 지정해 준다.

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

 

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

 

 

 

 

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

 

반응형
반응형

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

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

간단한 용어 설명

- 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를 최적화 하라.

 

반응형

+ Recent posts