[Unity] RenderTexutre를 PNG로 저장할때 어두워지는 문제Unity/TroubleShooting2022. 8. 9. 10:54
Table of Contents
렌더텍스쳐를 PNG로 저장하는 작업을 하던 중
첫번째같이 저장돼야 정상인데 아래같이 어둡게 나오는 문제가 있었다.
관련문제로 검색해보니 이미 좀 알려진 문제였다.
텍스쳐를 PNG로 인코딩할때 프로젝트의 컬러스페이스가 Linear라면 이런다고 하는데...
그렇다고 Linear를 포기할순없으니 찾아낸 방법이다.
렌더텍스쳐의 인스펙터에서 sRGB를 체크해주면 해결된다는 글을 봤는데...
여기서 방법은 2가지인데
1. ColorFormat 드롭다운을 열어서 직접 sRGB포맷 찾기
2. 디버그 인스펙터로 바꿔서 sRGB체크해주기
2번 방법이 쉽고 간편하다
인스펙터 오른쪽위 자물쇠 옆 세로점 3개를 클릭해서 메뉴를 연 뒤,
디버그 인스펙터로 진입하면
바로 체크해주고 다시 테스트해보니
이제 유니티에서 보이는 색감 그대로 저장되는 것을 확인할 수 있었다.
RenderTexture To Png 테스트용 코드(URP)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.Rendering;
public class CaptureCamera : MonoBehaviour
{
public Camera cam;
public CustomRenderTexture renderTexture;
private int count = 0;
private void OnEnable()
{
RenderPipelineManager.endCameraRendering += EndCarmeraRendering;
}
private void OnDisable()
{
RenderPipelineManager.endCameraRendering -= EndCarmeraRendering;
}
private void EndCarmeraRendering(ScriptableRenderContext context, Camera camera)
{
if (camera.cameraType != CameraType.Game)
return;
OnPostRender();
}
private void OnPostRender()
{
if (count >= 30)
return;
Texture2D tex = new Texture2D(renderTexture.width, renderTexture.height);
tex.ReadPixels(new Rect(0, 0, tex.width, tex.height), 0, 0);
tex.Apply();
byte[] bytes = tex.EncodeToPNG();
string path = Path.Combine(Application.dataPath, "Resources");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
File.WriteAllBytes(Path.Combine(path, "a" + count.ToString() + ".png"), bytes);
count++;
}
}
'Unity > TroubleShooting' 카테고리의 다른 글
[Unity] Admob사용 시 Screen.Orientation을 건드리면 생기는 문제 (0) | 2023.05.31 |
---|---|
[Firebase] FirebaseAuth 소셜로그인 콜백 주의점 (0) | 2023.05.26 |
[Unity] TCP통신에서 패킷이 누락되는듯한 문제 수정 (0) | 2022.10.18 |
[Unity] GoogleSheetsForUnity 에러수정 (0) | 2022.10.13 |
AssetDatabase.RenameAsset 함수 주의사항 (1) | 2021.10.14 |