Code Monkey home page Code Monkey logo

cms_development_issues's Introduction

CMS 개발 이슈

Zero Density 플러그인 개발 이슈

Zero Density는 C++ 빌드가 안된다.
문제는 현재 일에서는 C++ 플러그인을 꼭 써야 한다.
원래 언리얼 엔진에서 플러그인을 쓰려면 둘 중 하나다.

1. 프로젝트에 플러그인이 존재한다.
2. 엔진 내부에 플러그인이 존재한다.

그런데, Zero Density는 프로젝트 안에 있는 Plugins 폴더의 C++ 플러그인을 전혀 인식하지 못했다.
그러므로 엔진 내부에 플러그인을 넣어주는 법으로 해결해야 한다.

방법은 다음과 같다.

1. 언리얼 엔진으로 플러그인과 함께 프로젝트를 빌드한다.

Zero Density와 같은 버전의 언리얼 엔진을 설치하고 플러그인을 해당 언리얼 엔진으로 빌드한다.

2. Zero Density 설치 경로에 넣어 준다.

Zero Density 설치 경로 C:\Program Files\Zero Density\Reality[Version Name]\Engine\Plugins 에 들어간다.

3. 플러그인의 모듈 ID를 바꿔준다.

Zero Density 플러그인 안에 있는 Marketplace 플러그인의 Marketplace\Substance\Binaries\Win64 의 UE4Editor.modules 파일에 접근하여 Build ID를 복사하고 개발한 플러그인에도 같은 경로에 들어가 UE4Editor.modules에 복사한 ID를 붙여넣는다.

점프 현상 이슈

Zero Density에서 Camera Actor를 움직였을 시에, 플레이 중간에 점프 현상이 일어나 마치 카메라가 순간이동하는 모습이 보이는 이슈.

이유

현실에서 사용하는 촬영용 카메라의 주사율이 60fps일 때, Zero Density Reality Editor의 fps가 60 미만이면 일어나는 현상이다. (ex : 40~55fps에서 발생)
엔진에서 현실의 카메라와 싱크를 맞춰주기 위해서, 인게임 플레이의 무결성을 포기하고 점프 현상으로 차이난 시간을 보정하는 것으로 추정된다.
문제는, 점프가 일어나는 동안 Input을 받지 않은 상태인데도 Input을 받은 듯하게 행동하므로 보는 사람 입장에서는 비정상적인 수준으로 이동한 걸로 보이게 된다.

해결 방안은 다음과 같다.

1. 컴퓨터를 바꾼다.

더 좋은 컴퓨터를 사용한다.
더 좋은 컴퓨터에서 현실 카메라 주사율과 똑같은 수준의 fps를 유지할 수만 있다면 문제가 해결된다.
문제는, 버추얼 프로덕션에서 사용하는 그래픽 카드는 Quadro다. 이 문서를 쓰고 있는 시점 기준 해당 그래픽 카드 A6000의 가격은 한화 약 690만원~ 이상이다.

2. 현실 카메라의 주사율을 낮춘다.

만약, Editor의 fps가 40 정도가 나오는 정도라면, 현실의 카메라를 30fps로 바꾸면 Editor에서 30 고정 fps를 충분히 줄 수 있으므로 해결된다.
Editor의 fps를 조절해도 현실 카메라의 주사율을 따라가야 하므로 의미 없는 방법이다. Editor 자체 fps를 조절하지 않도록 한다.

3. 최적화를 진행한다.

여기서 말하는 최적화는 코드 최적화가 아니라 렌더링 최적화다.
오브젝트 개수를 줄이거나, 텍스쳐 품질을 줄이거나, 라이트 무버블을 스태틱으로 바꾸거나, 혹은 메쉬의 폴리곤 수를 줄이거나 하는 등의 작업을 한다.
가장 효과적인 방법은 텍스쳐의 LOD Bias의 값을 건드려 텍스쳐 품질을 에디터에서 조절하는 것이다.
보통 fps가 낮은 프로젝트의 경우 오브젝트가 엄청 많거나, 텍스쳐 품질이 4K였다. 텍스쳐 품질을 1K급으로 줄이면 어느 정도 해결이 될 것이다.

4. 액터의 행동들을 매우 느린 수준을 유지하거나 혹은 움직이지 않게 한다.

무슨 말이냐면, 초당 0.01cm 움직이는 정도로 매우 느리게 움직인다면 점프가 발생해도 움직이는 정도가 매우 낮으므로 점프 현상이 일어나도 우리 눈으로는 알 수가 없다는 뜻이다.
카메라가 움직일 일도 없고, 움직이는 액터가 없거나 혹은 매우 느린 움직임이면 점프 현상은 별 상관 없을지도 모른다. 다만 이는 해결 방법은 아니고 문제를 무시하는 방법이니 좋은 선택은 아니다.

보통은 3번 방법으로 해결이 된다. 3번으로 해결이 힘들다면 2번으로 해결하고, 그거도 안된다면 1번처럼 컴퓨터를 바꿔야한다.

Pivot 문제

Zero Density 템플릿으로 개발 시, 카메라 기본 Pivot 위치가 Actor 위치랑 다르다.
이는 높이 변화가 별로 없는 Level은 상관 없는데, 계단이나 꺾이는 듯한 경사를 오르락 내리락 할 때배경을 뚫고 들어간다.
Camera Modifier? 의 X 값을 +350쯤으로 정하면 Pivot 위치가 Actor와 같아진다.

크로마 키 문제(외부 공간)

스튜디오와 다르게 부스 같은 외부에서 세팅하면 키가 잘 안빠지거나 크로마 배경 안에 들어온 사람에 노이즈가 생길 수 있다.
이는 천장에 있는 많은 조명들이 간섭해서 생기는 현상이다.
애초에 제대로 세팅된 환경이 아니라면 키를 깔끔하게 빼는게 불가능하다.(예시 : 전시회 부스)
그러니 키를 깔끔하게 빼라는 요청이 있다면 불가능하다고 강하게 어설션하길 바람.

마우스가 뷰포트에 먹히는 현상 해결법

마우스를 뷰포트를 클릭하여 먹히는 현상은, InputGameOnlyMode 등의 이유로 마우스가 인게임에 먹히는 현상이다.
이는 당연히 인풋 모드를 바꾸거나 PlayerController의 Show Mouse Cursor를 설정하면 되는 간단한 문제다.
가장 쉬운 방법은 PlayerController를 새로 만드는 것인데, Zero Density는 ZDGameMode로 된 게임모드에서만 올바르게 동작한다.
즉, PlayerController를 새로 만들어서 쓰려면 GameMode를 만들어 지정해야 하는데, Zero Density에서 사용하려면, ZDGameMode를 상속받은 GameMode를 만들어야 하는 것을 잊지 말아야 한다.

Pixotope에서 플러그인 사용법

Pixotope도 언리얼 엔진을 커스텀한 버추얼 프로덕션 프로그램이다.
Zero Density처럼 플러그인을 따로 만들어야하는데, 다행스럽게도 Pixotope는 C++ 빌드가 가능하다.

윈도우즈 10 환경 기준, Pixotope와 Visual Studio가 설치되어 있어야 한다.
Visual Studio는 .NET, C++ 데스크톱 개발, C++ 게임 개발 워크로드가 총 3가지 설치되어 있어야 한다. (이는 언리얼 C++ 개발 세팅과 똑같다.)

Pixotope SDK는 Pixotope 런처에서 다운받을 수가 있다.
'''Pixotope SDK 버전은 Pixotope의 버전과 맞춰야 한다.''' Pixotope 버전은 런처에서 Help 들어가면 확인할 수 있다.

SDK는 6기가 Zip 파일인데, 압축을 풀면 25기가 정도 되는 큰 SDK다.
이 SDK를 Pixotope Editor 폴더를 찾아서 붙여넣으면 된다. (사실상 덮어쓰기)

그 후, Pixotope Editor\Engine\Binaries\Win64\UE4Editor.exe 를 실행하여 C++ 프로젝트를 만들고 플러그인을 Pixotope 버전으로 빌드하면 된다.
사실 언리얼 바닐라 버전 플러그인도 동작은 하는데, 혹시나 생길 오류의 가능성 때문에 Pixotope에서 빌드를 하는 것을 추천한다.

그리고, 정작 빌드해서 다른 프로젝트에 넣었는데 동작이 제대로 안될 가능성도 있다.
왜냐하면 언리얼 4.26버전으로 만든 Pixotope가 여러 버전이 있어서, SDK 버전이 다르면 다른 문제가 생기기 때문이다.
확인한 바로는, 언리얼 바닐라 버전 플러그인에서 특이한 동작을 하는 것이 아닌 이상 보통은 잘 동작한다고 한다.

Zero Density에서 Event Trigger하기

이벤트 Trigger할 때, Collision 기반이면 Trigger와 Actor끼리 반응하는 Collision을 넣고 서로 닿았을 때 이벤트가 동작하면 된다.

Zero Density의 Actor는 사실 바꿀 수 있다. Zero Density의 Template의 Actor를 다른 BP로 대체하면 된다.

다만, 몇가지 알아야 하는 것이 있다.

  1. Zero Density Actor에는 ZDActor 라는 Component가 필요하다.
  2. 이 Actor를 프로젝트 세팅 -> reality -> exports에 들어가서 해당 Actor를 등록한다.
  3. 등록한 내용 기반으로 Reality Hub에서 노드를 생성하면 언리얼 엔진에서도 Actor가 생성된다. 그리고 Template에 있던 Actor를 완전 대체하면 된다.

cms_development_issues's People

Contributors

kym0761 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.