- 3-0) 유니티 에디터 -> Live2D 모델 -> 움직임이 안되는 버그(?)
- 그냥, 빌드한번 하고 나면... (뭔가가 재조정 되는지) 그후엔 잘됨.
- 3-1) 캔버스 UI 한 곳으로 모으기
- Canvas 오브젝트의 "Render Mode" 를 'World Space' 으로 하니...
- 응??? "Screen Space - Camera" 으로 ???
- 하위의 UI 오브젝트들에 Canvas 컴포넌트 추가하여~ 우선순위 셋팅.
- 3-2) 비디오 및 오디오 재생
- 1안 : VideoPlayer vid 및 RawImage raw -> raw.texture = vid.texture -> vid.Play()
- 2안
- Video Player 오브젝트 : "Render Mode" 를 'Texture' 으로 && "Audio Output" 을 'Audio Source' 으로
- Texture 에셋 : 하나 생성한다. (wrap 등등 제공되는 옵션 활용가능!)
- Audio Source 오브젝트 : 연결 및 튜닝
- Raw Image 오브젝트 : 연결 및 튜닝
- 3-3) Update 와 LateUpdate
- https://docs.unity3d.com/kr/2021.3/Manual/ExecutionOrder.html
- ...
- 3-4) 타임 클래스
- https://docs.unity3d.com/ScriptReference/Time.html
- Time.time=상대시간?, Time.deltaTime=프레임간 상대시간,Time.timeScale=상대시간 속도,
- Time.unscaledTime=절대시간, Time.unscaledDeltaTime=프레임간 절대시간,
- Time.fixedDeltaTime=..., Time.fixedDeltaTime=TimeManager->FixedUpdate 호출주기,
- 물리 효과와 다른 "고정 프레임율" 를 위한 업데이트 호출 ???
- Time.timeSinceLevelLoad = 씬을 불러올때마다 초기화
- Time.smoothDeltaTime = 과부하 -> 프레임 드랍 -> 델타커지는 현상을 스무스하게 해주는 !!!
- Time.realtimeSinceStartup = 현실시간 (시스템 타이머로 계산되어~ 게임 비활성에도 흐름)
- Time.frameCount
- 3-5) timeScale 과 fps
- x1 : (0) (1) (2) (3) (4) (5)
- x2 : (0)(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)
- fps 30 : [*] [*] [*]
- fps 60 : [*] [*] [*] [*] [*] [*]
- 즉, 2배 빨리하고 & 프레임을 2배 더 쌤플링하면~ 똑같은 절대시간동안에 2배 더 가져올수있다!
- 3-6) 각종 Wait ...
- https://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
- yield return null : 다음 프레임까지 대기
- yield return new WaitForSeconds(flaot) : 지정한 초 만큼 대기
- yield return new WaitFixedUpdate() : 다음 FixedUpdate 까지 대기
- yield return new WaitForEndOfFrame() : 모든 랜더링 작업이 끝날 때까지 대기
- yield return startCoroutiune(string) : 다른 코루틴이 끝날 때까지 대기
- yield return new www(string) : 웹 통신 작업이 끝날 때까지 대기
- yield return new AsyncIoeration : 비동기 작업이 끝날 때까지 대기 (씬 로딩)
- 서로다른 코루틴에서 WaitForEndOfFrame 할때, 한쪽이 밀리면? 다른쪽도 영향을 받는다?
- StartCoroutine(aaa()) -> aaa loop -> StartCoroutine(bbb()) : bbb() 가 느린게 왜? 영향을 주지???
- bbb() ccc() ddd() ... -> ccc, ddd, ... 들은 자기할일 다하고 대기중 -> bbb 는 계속일중 이라면,
- -> bbb 가 다 끝날때 까지~ 전체블락? 화면 랜더링이 안되는 식으로... 전체 LifeCycle 이 멈춤?
- https://docs.unity3d.com/ScriptReference/WaitForEndOfFrame.html
- 3-7) 일시정지
- https://bluemeta.tistory.com/3
- https://nanalistudios.tistory.com/11
- 3-8) batchmode resolution
- https://docs.unity3d.com/2021.3/Documentation/Manual/PlayerCommandLineArguments.html
- 게임설정과 상관없이... 640 x 360 으로 고정되나 ???
- Standalone Player 실행에서 -screen-width -screen-height 등의 옵션이 안먹이나...
- 옛날엔 왜 해상도가 적용안되는 이슈를... 어떻게 해결했었다고 생각했던거지???
- 3-9) Transparent Background Capture2
- https://gamedevbeginner.com/how-to-capture-the-screen-in-unity-3-methods
- 메인 카메라 셋팅으로~
- Culling Mask 에서 필요한 것들을 선택?
- Clear 에서 DepthOnly 를 해라고 하는데... 잘안되 -> Color 한뒤~ 백그라운드를 직접 투명으로 함.
- 여기에서도 "Unity Recorder" 는 editor 에서만 돌아가는데... 오히려 화면관련 작업에는 player 보다 더 좋다고 함!!
- (왜냐면 실게임시에는 오히려! 다른 퍼포먼스도 고려해야 해서, 화면관련 작업에 특화 시킬수없는거 같다고)
- Movie 으로 손쉽게 녹화 해도되고, Image Sequence 으로 더 원천적인 접근을 해도 됨.
- 끝으로~ 다른 대안 : https://www.wildmagegames.com/ultimate-screenshot-creator-unity-3d-asset 등등등
- https://gamedevbeginner.com/how-to-capture-the-screen-in-unity-3-methods
- 3-10) Unity Recorder
- https://docs.unity3d.com/2021.3/Documentation/Manual/EditorCommandLineArguments.html
- 음... 진짜 녹화를 전문적으로 할것이면, editor 으로 처리하는게 맞는듯! ㅎㄷㄷ
- webm 등등 영상관련 다양한 기능 다 제공될듯?!
- https://rainyrizzle.github.io/en/AdvancedManual/AD_UnityRecorder.html
- https://matthewminer.com/2022/03/13/custom-encoder-for-unity-recorder
- https://docs.unity3d.com/2021.3/Documentation/Manual/EditorCommandLineArguments.html
- 3-11) ScreenShot
- https://docs.unity3d.com/ScriptReference/ScreenCapture.html
- https://docs.unity3d.com/ScriptReference/Time-captureDeltaTime.html
- CaptureScreenshot : captureDeltaTime 을 사용해, 편하게 연사 가능? -> 투명배경처리 안되나?
- CaptureScreenshotAsTexture : Texture2D 를 손쉽게? 최적화된?
- CaptureScreenshotIntoRenderTexture : 이미지가... 뒤짐힘!? (단순 TextureFormat.ARGB32 RGBA32 실수?!)
- (https://gist.github.com/unitycoder/9fbd682f7d250c016d6cc0d306290966 같이 픽셀계산은 너무 느렸음...)
- 3-12) 비동기 프레임 캡쳐 처리를 위한 고민...
- https://medium.com/google-developers/real-time-image-capture-in-unity-458de1364a4c
- https://light11.hatenadiary.com/entry/2021/01/18/203431
- .ReadPixels() 자체가 오래걸림 (C# Async File I/O 큰의미 없다?)
- CopyTexture() 활용 -> 잘안됬음....
- AsyncOperation 은 -> 음... 이건 아닌가?
- AsyncGPUReadback 활용 -> 음... Request() 호출자체가 느림 -> 이게 무신 비동기 ??? ㅎㅎ;;;
- //RenderTexture textureR = new RenderTexture(Screen.width, Screen.height, 24, RenderTextureFormat.ARGB32);
- RenderTexture textureR = RenderTexture.GetTemporary(Screen.width, Screen.height, 24, RenderTextureFormat.ARGB32);
- ScreenCapture.CaptureScreenshotIntoRenderTexture(textureR);
- AsyncGPUReadback.Request(textureR, 0, TextureFormat.RGBA32, AsyncReadAndWrite);
- ...
- ;;;
3-13) Frame By Frame Capture
- n배속으로 동시에 여러게의 어플리케이션 띄우기 -> 렌더링 과부화가 일어나면서? 프레임드랍 이슈가 나지 않을까?
- 그래서 안전하게... 프레임 단위로~ "프레임 대기 -> 일시정지 -> 캡쳐 -> 재개" 식으로 생각 했는데...
-
IEnumerator Speak(JObject sentence) { float duration = (float)sentence["duration"]; float silence = (float)sentence["silence"]; // (4.12 + 0.5) * 30fps = 138.6장 int totalFrames = (int)((duration + silence) * 30); for (int i = 0; i < totalFrames; ++i) { // 한 프레임 확보? yield return new WaitForEndOfFrame(); Pause(); yield return StartCoroutine(Capture(i)); Resume(); } yield break; } IEnumerator Capture(int i) { Texture2D textureDD = ScreenCapture.CaptureScreenshotAsTexture(); byte[] bytes = textureDD.EncodeToPNG(); string path = string.Format("{0:D4}", i) + ".png"; File.WriteAllBytes(path, bytes); Texture2D.Destroy(textureDD); yield return new WaitForEndOfFrame(); yield return new WaitForEndOfFrame(); // 왜 두번하면 잘되는 느낌일까 ??? yield break; }
- ...
3-13) Frame By Frame Capture2
-
void Pause() { //Debug.Log("Pause() : frameCount=" + Time.frameCount); Time.timeScale = 0.0f; Time.fixedDeltaTime = 0.0f; //AudioListener.pause = true; audioSource.Pause(); audioSource.pitch = 0.0f; audioSource.UnPause(); } void Resume() { //Debug.Log("Resume() : frameCount=" + Time.frameCount); Time.timeScale = 1.0f * speed; Time.fixedDeltaTime = 0.02f * speed; //AudioListener.pause = false; //audioSource.Pause(); audioSource.pitch = 1.0f * speed; //audioSource.UnPause(); }
- "일시정지 -> 재개" 반복을 하다보면... 오디오가 밀릴는 버그가 없을까?
- audio 기능으론... Pause() 및 UnPause() 및 pitch = 0.0f 있었음! (pitch = -1.0f 하면 역재생 ㅎㄷㄷ)
- 비디오 프래임 갯수를 정해놓고 처리하는 방식이라... 오디오 렌더링의 측면으로 영향을주는것 일까?
- 결과적으로 너무 비효율적임! 이 아이디어는 실패!!!
-
- 3-14) Time-Scaled Frame Capture
- 렌더링 과정에서 Texture2D 로 가져오게되면... 무조건 느리게 됨!!!
- 즉, List<Texture2D> buffer; 를 쓰면 -> 딱 2배속 까지 렌더링 되는 수준
- 그래서 RenderTexture 를 바로 메모리에 적제 하는식으로 코딩 해야함 -> 결과적으로 30배속도 된다고 함! ㅎㄷㄷ
- 이후~ List<RenderTexture> buffer; 처리까지 빨리 해야됨
- convert() -> Texture2D : ???
- encode() -> PNG : UniTask 으로 병렬처리?
- ...
-끝-
'게임' 카테고리의 다른 글
unity4 (0) | 2023.05.22 |
---|---|
Live2D Cubism Components (0) | 2023.03.15 |
Live2D Cubism SDK (0) | 2022.10.28 |
Live2D Cubism (0) | 2022.08.28 |
Ready Player ME (0) | 2022.08.27 |