본문 바로가기

GameDevelopmentDiary

Mobile AOS XR Study - Virtual camera in mobile 1. Virtual camera in mobile 준비 플러그인 - WebM Video Player, Android Camera, GoogleARCore 준비 앱 - 모바일 녹화 앱 방법 카메라 캡쳐 - MediaPlayer 활용, 주요노드 : OpenURL, EnumerateWebcamCaptureDevices 카메라 권한 요청: Camera 권한 요청 변수 = android.permission.CAMERA 모바일 입력으로 카메라 움직임 자동회전: GetInputMotionSlate 터치 회전 및 이동: 터치 입력의 pressed, released, moved, location, fingerIndex 전부 사용 크로마키 머티리얼: 머티리얼 파라미터 생성하고 Chroma key alpha 노드 사용. 컬..
언리얼4 립싱크(Text To Speech) 구현 방법 Part4 (완성) 1. 실시간 OVRLipSyncFrameSequence 생성 이전에 Runtime Audio Importer 플러그인과 RawData 상태의 소리값을 사용해 SoundWave 객체를 만들고 목소리를 들어봤었다. 그리고 이제 또 립싱크를 위해서는 OVRLipSyncFrameSequence 객체가 필요하다. 그런데 OVRLipSyncFrameSequence 객체로 변환하는 방법이 에디터의 콘텐츠 브라우저에서 진행 되었었다. 입력되는 텍스트를 매번 파일로 만들고 에디터에서 다시 변환한다면 매우 비효율적이다(는 주관적 생각). 때문에 해당 플러그인에서 시퀀스 생성 부분을 실행 중에도 사용할 수 있도록 해보자. 시퀀스 생성 노드를 바로 사용할 수 있다면 좋겠지만, 해당 함수는 Private 폴더에 있고 파일을 생..
언리얼4 립싱크(Text To Speech) 구현 방법 Part3 1. Viseme 이전에 텍스트를 목소리로 변환해 보았다. 이제 립싱크를 위해서는 그 목소리에서 특정 값을 추출해야한다. 우리가 추출할 값을 보통 Viseme 값이라고 한다. 위키백과(https://en.wikipedia.org/wiki/Viseme) MS 음성 서비스에서 제공하는 REST API 경우 Viseme 값을 추출하는 기능이 지원되지 않는다. 언리얼에서 사용할 AzureTTS 플러그인은 REST API를 이용하기 때문에 또 다른 플러그인이 필요하다. 2. OVRLipSync 2.1. OVRLipSync - USoundBase to Visemes 처음에 플러그인을 모두 준비했겠지만, 만약 안 되어 있다면 마저 다운받고 실행해주자. 그리고 OVRLipSync 플러그인의 테스트에 사용할 대사파일을 ..
언리얼4 립싱크(Text To Speech) 구현 방법 Part2 1. 텍스트를 소리로 변환해보자. 1.1. AzureTTS Sample Project. 먼저, 빈 프로젝트를 하나 만들고, AzureTTS 샘플을 받아서 프로젝트폴더에 추가하자. UE4(https://github.com/breakstring/AzureTTS) UE5(https://github.com/nedcrow/AzureTTS) 프로젝트를 열어보면 블루프린트가 이렇게 딱 하나 보인다. 블루프린트도 열어보면, 예제 노드들이 촤악 펼쳐져있다. 모두 알아두는게 좋다만, 당장 우리가 사용할 그룹은 딱 두 그룹이다. 1.2. AzureCognitiveService '샘플'을 열어봤으니 일단 Play 부터 눌러보는게 당연지사겠지만, 지금은 Play버튼을 눌러도 아무 소리가 들리지 않는다. 먼저 Subscripti..
언리얼4 립싱크(Text To Speech) 구현 방법 Part1 1. 목적 언리얼 엔진을 사용하여 입력 텍스트에 따라 캐릭터들이 대사를 말하는 모습을 구현. 1.1. 목표 TTS(Text to speech) - AzrueTTS 3D 캐릭터의 립싱크 - 메타휴먼 캐릭터 표정 애니메이션을 다른 애니메이션과 블랜딩 2. 준비 Unreal - 4.26 MetaHuman 캐릭터 에디터에 메타휴먼 가져오는 방법: https://docs.metahuman.unrealengine.com/en-US/HowTos/ExportingMetaHumans/ExportingToUnrealEngine/ 2.4. Plugin 준비 C++로 플러그인 접근 마켓플레이스 플러그인 사용 시, '프로젝트명\Plugins\플러그인명\'경로에 Source 폴더가 있으면 C++로 접근할 수 있다. 없다면 엔진 ..
립싱크 - (메타휴먼, 리얼루전) 테스트1 - 립싱크 맛보기 테스트 매개변수: Text와 음성파일 표현방식: 블랜드 스페이스(BS) 사용 모델: 리얼루전 캐릭터 구현방법: 더보기 1. BS 생성. (기본 입모양 + 세로, 가로로 열린 각각의 입모양) 2. Text를 Letter 객체들로 분리. Letter 객체는 초.중.종성 숫자 파라미터들을 가졌다. (0.0~1.0) 3. 음성 전체 길이는 Letter 객체들이 나눠가진다. (공백 Letter 포함되며, 시간은 일반 자,모음보다 짧다.) 3-1. Letter 내의 시간 길이는 초.중.종시간만큼 다시 나뉜다. 4. 음성파일 실행. 5. 음성 재생동안 Letter들을 이용해서 BS로 연결 된 변수값들을 순차적으로 변형. 5-1. 처음과 끝 Letter 경우 초성, 종성은 무조건 0. 5-2..
Unreal HTML5 빌드 기록 언리얼엔진4(UE4) 에디터는 공식적으로 4.23 버전까지만 HTML5 플렛폼 빌드를 지원하고 있다. 별도로 엔진의 공개 소스를 사용하면 4.24 까지 가능하지만, 23-24 차이가 크지 않다. 반드시 알아야할 정보 HTML5 빌드 방법의 공식문서 https://docs.unrealengine.com/4.26/ko/SharingAndReleasing/HTML5/GettingStarted/ 기본 테스트 이후 몇가지 알아두면 좋은 정보 일반 StaticMesh Vertex 수량이 제한 된다. Skeleton Mesh 경우 Vertex 수량과 Bone 전체 수량, Vertex에 영향을 주는 뼈의 수량도 제한된다. Vertices 수량 < 65000 Bone 수량
공백 Landscape 활용 방법 탐구 머티리얼의 vector 값을 이용해서 Landscape를 왜곡하는 방식으로 층이 있는 월드맵 생성을 하고 싶었다. 선택한 방식은 두 가지였다. 방식 1 브러시 머티리얼 선택해서 맵 모양을 그림. 단점 1 : 맵이 커지면 오래 걸린다. 심하게.. 단점 2 : 브러시의 알파값이 겹치면서 원하는 모양이 안 나올 수 있기에 크기를 설정해야하는데, 귀찮다. 그리고 맵 크기에 따라 어긋날 확율이 많다. 방식 2 브러시 모양을 맵 모양으로 만들어서 한 번만 찍기. 순서 : 텍스쳐 생성 -> 텍스쳐 모양으로 렌더타겟에 그림. Texture 생성은 성공했는데.. 1차 시도 - 브러시 머티리얼의 Texture 파라미터를 텍스쳐로 바꾸기 위해 시도 (해당 파라미터 변경은 UMaterialI..