유니티(Unity)에서 렌더텍스처(RenderTexture) 활성화 및 해제(active, release) 사용예시
유니티(Unity)에서 렌더텍스처(RenderTexture) 활성화 및 해제(active, release) 사용예시
렌더 텍스처(RenderTexture)는 렌더링할수있는 텍스처(textures that can be rendered to)로써 3D 장면을 텍스처로 렌더링할 수 있는 특별한 종류의 텍스처입니다. 주로 3D 장면을 특정 렌더 텍스처로 렌더링하고 결과를 텍스처로 저장하는데 사용합니다.
https://docs.unity3d.com/ScriptReference/RenderTexture.html
렌더텍스처(RenderTexture) 활성화 및 해제
//RenderTexture 생성
RenderTexture rt = new RenderTexture(256, 256, 24);
rt.Create();
//RenderTexture를 활성화
RenderTexture.active = rt;
//카메라로 씬을 RenderTexture로 렌더링
Camera.main.targetTexture = rt;
Camera.main.Render();
//활성화된 RenderTexture로부터 텍스처 데이터 읽기
Texture2D texture = new Texture2D(rt.width, rt.height, TextureFormat.RGB24, false);
texture.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
texture.Apply();
//RenderTexture를 비활성화
RenderTexture.active = null;
Camera.main.targetTexture = null;
//사용이 끝난 RenderTexture 해제
rt.Release();
RenderTexture.Create
실제로 렌더 텍스처를 생성합니다(RenderTexture 생성자는 실제로 하드웨어 텍스처를 생성하지 않습니다) 기본적으로 텍스처는 처음 활성화될 때 생성되는데(RenderTexture.active) Create를 호출하면 미리 생성할 수 있습니다(텍스처가 이미 생성되어 있으면 Create는 아무 작업도 수행하지 않음)
https://docs.unity3d.com/ScriptReference/RenderTexture.Create.html
RenderTexture.active = rt;
RenderTexture.active는 현재 활성화된 렌더 텍스처를 지정하는 정적 프로퍼티입니다. 새로 생성한 렌더텍스처를 현재 활성화된 렌더텍스처로 설정합니다.
https://docs.unity3d.com/ScriptReference/RenderTexture-active.html
Camera.main.targetTexture = rt;
카메라의 대상 텍스처 속성(Camera.main.targetTexture)에 렌더 텍스처를 설정하면 카메라가 화면에 렌더링하는 대신 해당 렌더텍스처로 렌더링합니다.
Camera.main.Render();
카메라를 수동으로 렌더링합니다.
https://docs.unity3d.com/ScriptReference/Camera.Render.html
RenderTexture.active = null;
현재 활성화된 렌더 텍스처를 해제합니다.
rt.Release();
렌더 텍스처를 해제합니다. 렌더 텍스처는 네이티브 엔진 객체(native engine object)로써 가비지 수집되지않음으로 사용이 끝나면 해제하는것이 중요합니다.
https://docs.unity3d.com/ScriptReference/RenderTexture.Release.html