유니티에서 Texture을 복사하는 방법에는 2가지 방법이 있습니다.
- Graphics.CopyTexture()
- Graphics.Blit()
Graphics.CopyTexture()는 텍스처 간의 간단하고 효율적인 데이터 전송에 더 좋으며, Graphics.Blit()은 복사하는 동안 데이터에 셰이더를 적용하거나 텍스처 데이터를 크기에 맞게 조정해야 할 때 사용됩니다.
Graphics.CopyTexture
주로 효율적인 데이터 전송에 초점을 맞춘 함수입니다. CPU에서 작업을 하지 않고 GPU에서 직접 작업을 수행하여 CPU와 GPU 간 데이터 전송으로 인한 성능 저하를 줄여줍니다.
Graphics.CopyTexture()는 한 텍스처에서 다른 텍스처로 '정확한' 데이터를 복사해야 하는 상황, 즉 텍스처의 변경 및 스케일의 변화가 없는 상황에서 사용합니다.
Texture2D srcTexture = /* your source texture */
Texture2D destTexture = new Texture2D(srcTexture.width, srcTexture.height, srcTexture.format, false);
Graphics.CopyTexture(srcTexture, destTexture);
Graphics.Blit
Bit Block Transfer의 약자로, 렌더 텍스처를 복사하고 스케일을 조정하는데 사용됩니다. 특히 셰이더를 incorporate하는 기능에서 빛을 발휘합니다. 즉, 셰이더 호환성 및 스케일링 기능을 통해 완전히 '새로운' 수준의 시각적 처리 및 효과를 구현할 수 있는 함수입니다.
RenderTexture srcTexture = /* your source RenderTexture */
RenderTexture destTexture = /* your destination RenderTexture */
Material yourEffectMaterial = /* Material with your shader effect */
Graphics.Blit(srcTexture, destTexture, yourEffectMaterial);
주의점
Graphics.CopyTexture() 또는 Graphics.Blit()을 사용하여 렌더 텍스처를 복사하거나 복제할 때 두 렌더 텍스처의 해상도가 동일한 것이 가장 좋습니다.
Graphics.CopyTexture()의 경우 한 대상 텍스처가 원본 텍스처 보다 더 작은 경우 원본 텍스처의 일부만 복사됩니다. 대상 텍스처가 더 크면 대상의 일부만 원본 텍스처로 채워지고 나머지는 변경되지 않습니다.
Graphics.Blit()의 경우 소스 텍스처와 대상 텍스처의 해상도가 다른 경우 소스 텍스처는 대상 텍스처에 맞게 크기가 조정됩니다. Graphics.Blit()의 유용한 기능이지만 고해상도 텍스처가 더 낮은 해상도로 축소될 때 품질 손실로 이어질 수 있고, 저해상도 텍스처가 더 낮은 해상도로 축소될 때 픽셀화로 이어질 수 있습니다.
Render Texture 만드는 방법