그래픽 API에 따라서 안드로이드 빌드시 쉐이더가 깨질 수 있습니다.

 

저는 Vulkan API가 기본 API로 되어 있었습니다.

기본인 VulkanAPI로 빌드 했더니 Forge에서 예제로 준 파일과 Forge로 작업 했던 쉐이더가 깨지는 현상이 생겼었습니다.

 

그래픽 API를 확인해 보세요.

 

OpenGL3로 안드로이드 빌드 했을때

Forge 예제 쉐이더는 정상적으로 작동이 되었으나 Forge로 만든 작업물은 쉐이더가 깨져서 보이지 않았습니다. 

 

OpenGL2로 안드로이드 빌드 했을 때  

Forge 예제 쉐이더와 Forge로 만든 작업물 쉐이더 모두 정상적으로 작동 했습니다. 

 

 

 

 

커뮤니케이션이 잘못되어 작업하던 파이프라인은 레거시 파이프라인이지만 URP 쉐이더 그래프로 작업물을 받았다.

(명칭이  생각나지 않아 URP 이전 파이프라인은 레거시 파이프라인이라 지칭하겠다)

소통의부재의 잘못은 일단 그렇다 치고 아무튼 상황을 해결하기 위해 의논을 했고 상황 정리를 해봤다.

 

받은 작업물은 게임에서 핵심요소이다. 그리고 우리팀에는 쉐이더 코드를 짤 수 있는 사람이 없다. 따라서 쉐이더 그래프를 보고 코드를 짜는 것은 불가능. 그렇다고 진행하고 있던 프로젝트를 전부 다 URP로 업그레이드 하는건 매우 비효율적이다.

하지만 작업물 자체를 레거시 파이프라인에 맞추는것이 제일 나은 방법이였다.

 

 

URP 파이프 라인에서 쉐이더 그래프로 만든 작업물을 레거시 파이프라인으로 적용시킬 방법을 생각해봤다.

그렇게 3가지 방법을 모색했다

 

해결 방안 ( 최고의 방법순으로 나열함 )

  1. 쉐이더 그래프를 코드로 변환하는 기능을 찾아서 레거시 파이프라인 적용시킨다.
  2. 이전 버전에 쉐이더 그래프 플러그인이 있던게 기억났다. 레거시파이프라인의 쉐이더 플러그인으로 재작업을 한다.
  3. 기획을 생략해서 그냥 메테리얼을 경우의 만큼 준비해서 바꿔치기한다.

 

 

 

 

1번 방법 : 쉐이더 그래프를 코드로 변환하는 기능

1. 레딧글에 대충 안된다는 내용 근데 2년전 내용

https://www.reddit.com/r/Unity3D/comments/9oq7ij/can_i_convert_shader_graph_shader_into_shader/e7wrdcn/

2. 대충 된다는 1년전 내용   

https://forum.unity.com/threads/converting-shader-graphs-to-editable-usable-shader-code.709007/  

 

 

 

 

 

그대로 해봤음

 

 

생성 된 코드 표시를 통해 코드를 있었다.

 

 

코드는 보이는데 포럼의 한 부분이 신경쓰인다.. 

 

 

 

안될거같긴 한데…

 

 

 

레거시 파이프라인으로 해봤는데 안된다.

 

 

이럴수가... 

1번 방법은 역시 무리였다. 

 

다음! 

2번 방법 : 이전버전에 쉐이더 그래프 적용

에셋스토어에서

키워드 검색 : Graph

에셋 1 :

https://assetstore.unity.com/packages/tools/utilities/graph-development-interface-72081#content

 

키워드 검색 : shader graph

기존 URP 쉐이더 그래프 확장 플러그인 밖에 없음

이럴수가

…....... 없다

 

 

 

에셋스토어 외의

 

에셋스토어에서는 시간이 지나면서 예전 에셋들은 정리하는 경향이 있었다.

그래서 예전에 유용하게 쓰던 에셋이 스토어에서 내려갔지만 예전에 다운받아놨던 에셋을 가져와서 사용했던 기억이 있다.

 

따라서 에셋스토어에서 찾으면 안됨

 

구글링을 통해 쉐이더 그래프가 나오기 이전인 2013~2016년을 기간 범위를 잡아 키워드를 유니티 쉐이더 그래프로 검색을 해봤다.

 

그러다

https://sites.google.com/site/unity3dstudy/home/test2/shader 이곳을 찾았는데

 

 

 

뭔지는 모르겠는데 New Graph라는걸 찾았음

 

쉐이더그래프 플러그인거같았다.

 

그리고 Stumpy 알아보다 대마왕 교수님 블로그에서

https://chulin28ho.tistory.com/210

 

그래프가 2 있다는걸 알았다.

 

 

스트럼피는 굉장히 별로고

Forge PBR 지원을 한다는 글이다.

 

그렇다면 Forge 써야할거같아서 Forge 찾아봤다. 

 

 

Forge로 개발이 가능한가? 

 

2018년에 유니티에서 공식으로 쉐이더 그래프를 지원해주면서 Forge 무료로 오픈소스로 풀렸고

https://xysterxx.tistory.com/168

 

누가 2018버전에 호환되게 만든 깃허브가 있었다.

https://github.com/jackisgames/ShaderForge

 

2018버전을 2020 버전 프로젝트로 불러와봤는데

 

이런식으로 예제로 들어있던 쉐이더는 호환을 해서 되는 모습을 보여줬지만

 

 

 

그래프를 띄우는건 불가능 했다.

 

따라서

 

이전 버전으로 만든 쉐이더 자체는 호환이 가능하나 2020 프로젝트에서는 그래프 에디터를 없다.

=> 따라서 2018 프로젝트에서쉐이더를작업해서작업물만 2020 프로젝트로올리면되지않을까? 생각을해봤다.

 

 

그래서 2018 가장 최신을 받아봤는데

 

오류가

 

 

 

 

해당 오류를 찾아보니 유니티에서 제공하는 시스템이 바뀌어서 레퍼런스를 못잡는거같다.

아마 같은 2018이였지만 처음에 버전 업그레이드를 하겠냐는 창이 떠서 2018에서 세부적인 버전을 찾아야 되는거같다.

 

그래서 깃허브에 올라온 Forge 2018 프로젝트의 버전을 알아내서 진행했다. 

 

2018.1.02f 였고

 

해당 프로젝트에서는 열렸다.

 

 

그럼 Forge 만든 쉐이더가 2018에서 현재 버전인 2020 호환이 되는가?

 

 

예제 쉐이더 하나를 간단하게 익스포트 해봤다.

 

그리고 패키지를 가져와봤는데

 

 

2020프로젝트 에서도 잘 임포트 되었다!

 

 

 

 

 

그리고 그래픽 개발자님께 Forge로 개발이 가능하냐고 여쭤봤고 가능하다고 하셔서 해당 이슈는 일단락 되었다.

쉐이더를 대충이라도 공부해서 해당 이슈가 무엇때문에 문제였고 해결방안을 찾을 수 있어서 정말 다행이다.

 

 

 

 

 

 

 

프로젝트중 TTS 음성을 통해 게임 진행을 안내하는 부분이 있었다. 게임에서 이 부분은 꽤나 큰 비중을 차지했고 그만큼 파일의 수 또한 많았다. 이 파일들을 효율적으로 설정하고 관리하는 방법을 이 포스팅에서 다룰 생각이다.

 

 

 

전체 목차

0. 프로젝트 상황 <-

1. TTS 음원 파일의 문제점 <-

2. 음원 파일을 자동으로 수정하고 관리 문서(Json)를 만드는 툴 만들기

3. 해당 음원과 관리 문서 Json 파일을 유니티에서 읽어들이기

4. 읽어들인 데이터를 활용하기

 

 

 

 


0. 프로젝트 상황

 

기획자분께 대사가 적힌 엑셀파일을 가져와서 작업한다.

작업 했던 엑세파일 그대로 예시로 들 수 없어서 예시로 나무위키에 있던 페이커 소개글로 채워 넣었다. 

형식은 똑같다. 이 글을 쓰는 동안 담원이 우승했다 담원으로 쓸껄 담원! 담원! 담원!

 

해당 엑셀파일에서 대사를 긁어서 타입캐스트에 넣어줍니다.  

 

그리고 해당 대사를 아래 처럼 받습니다.  

 

 

그럼 아래와 같은 형식으로 파일을들 받게 됩니다. 

이때 문제점들이 있었습니다. 

 

 

 

 


1. TTS 음원 파일의 문제점

 

문제점은 크게 3가지가 있습니다.

  1. 파일 이름이 한글이다.
  2. 해당 파일이 어떤 대사를 가지고 있는지 알아야 한다.
  3. 순서가 int취급이 아닌 String취급을 받아 0다음에 10으로 된다.
1. 파일 이름이 한글이다.

문제점 :

파일 이름이 한글이기 때문에 분명 이름이 꺠질 가능성이 있다. 파일을 이름명으로 가져 왔을 때 파일 이름이 깨졌기 때문에 불러오지 못하는 현상이 생길 수 있다. 따라서 한글이름을 제거해줘야 한다.

 

해결방안 :

유니티에서 가져오고 나서 한글은 모두 지우긴 하지만 파일 자체 이름을 바꾸는건 아니다. 따라서 위험성은 여전하다.

따라서 새로운 툴을 만들어 한글을 없애는 툴을 만들어야 한다..

 

 

2. 해당 파일이 어떤 대사를 가지고 있는지 알아야 한다.

문제점 :

1번의 문제를 해결하면 해당 파일이 어떤 대사였는지 파악하기 힘들다.

다른 외부 문서로 관리...를 하면 좋겠지만 대사 스크립트가 생각보다 많고 시간도 많이 없다.

 

해결방안 :

그럼 자동으로 문서를 만들자.

해당 파일 이름을 txt 파일로 index 번호와 스크립트를 추출한다.

그리고 파일의 이름은 인덱스값만 가지고 있는다.

 

그리고 유니티에서 해당 txt 파일을 읽어온다.

그리고 (AudioClip clip , int index , string Script ) 클래스를 만들어 관리한다.

 

(clip , 22 , "아이템을 획득했구나") 이런식으로 될것이다.

 

이러면 직관적으로 관리가 가능할것이다.

3. 순서가 0 다음에 10으로 된다.

아래 이미지 처럼 숫자가 String으로 취급되서 정렬이 괴상해집니다. 

하지만 2번 문제를 통해 파일이름이 인덱스만 된다면 해당 문제는 자연스럽게 해결될것입니다. 

 

 

즉! 파일들을 관리하는 툴을 만들 필요성이 생겼다. 

 


 

WPF로 툴을 만드는 것은 nichi72.tistory.com/37 에서 계속 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

아나가 Yield Return 키워드고 꿀잠자는 맥크리가 코루틴 함수라고 생각하면 된다. 

+ Recent posts