Graphics.CopyTexture()는 텍스처 간의 간단하고 효율적인 데이터 전송
효율적인 데이터 전송
Texture.isReadable 값이 false 인 경우, CopyTexture 가 텍스처를 복사하는 가장 빠른 메소드.
아래 3가지 조건이 두 텍스처간에 동일해야 함.
- 텍스처 포멧
- 크기
- RenderTexture.antiAliasing 값
https://docs.unity3d.com/ScriptReference/Graphics.CopyTexture.html
Unity - Scripting API: Graphics.CopyTexture
This method copies pixel data from one texture to another on the GPU. If you set Texture.isReadable to true for both src and dst textures, the method also copies pixel data on the CPU. If you set Texture.isReadable to false, CopyTexture is one of the faste
docs.unity3d.com
Graphics.Blit()은 복사하는 동안 데이터에 셰이더를 적용하거나 텍스처 데이터를 크기에 맞게 조정. 는 GPU 텍스처 간 고성능 복사 및 후처리 효과 생성을 위한 API로, 렌더 파이프라인 및 색공간에 따른 주의사항이 있음.
소스 텍스처를 대상 렌더 텍스처에 전체 화면으로 그리기 위해 셰이더를 사용.
후처리 효과를 만들기 위해 커스텀 셰이더를 사용할 수 있습니다.
동일한 렌더 텍스처를 소스와 대상으로 지정하면 예기치 않은 동작이 발생할 수 있습니다. 대신 더블 버퍼링을 사용하세요.
선형 색공간에서는 GL.sRGBWrite를 설정해야 합니다.
내장 렌더 파이프라인에서는 Camera.main.targetTexture를 사용합니다.
URP 및 HDRP에서는 RenderPipelineManager.endContextRendering 콜백 내에서 호출해야 합니다.
https://docs.unity3d.com/ScriptReference/Graphics.Blit.html
Unity - Scripting API: Graphics.Blit
Success! Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable. Close
docs.unity3d.com
가우시안 블러 셰이더를 Graphcs.Blit() 함수로 1회 적용한 결과로 Texture2D 를 얻는 샘플 코드
using UnityEngine;
public class GaussianBlur : MonoBehaviour
{
public Shader gaussianBlurShader;
public Texture2D sourceTexture;
public float blurRadius = 1f;
public bool applyBlur = false;
private Material blurMaterial;
private RenderTexture tempRenderTexture;
private Texture2D blurredTexture;
void Start()
{
blurMaterial = new Material(gaussianBlurShader);
tempRenderTexture = new RenderTexture(sourceTexture.width, sourceTexture.height, 0);
blurredTexture = new Texture2D(sourceTexture.width, sourceTexture.height, TextureFormat.RGBA32, false);
}
void Update()
{
if (applyBlur)
{
ApplyGaussianBlur();
applyBlur = false;
}
}
void ApplyGaussianBlur()
{
// 소스 텍스처를 임시 렌더 텍스처에 복사
Graphics.Blit(sourceTexture, tempRenderTexture);
// 블러 셰이더 적용
blurMaterial.SetFloat("_BlurRadius", blurRadius);
Graphics.Blit(tempRenderTexture, tempRenderTexture, blurMaterial);
// 렌더 텍스처에서 Texture2D로 복사
RenderTexture.active = tempRenderTexture;
blurredTexture.ReadPixels(new Rect(0, 0, tempRenderTexture.width, tempRenderTexture.height), 0, 0);
blurredTexture.Apply();
RenderTexture.active = null;
// 임시 렌더 텍스처 해제
RenderTexture.ReleaseTemporary(tempRenderTexture);
}
void OnDestroy()
{
DestroyImmediate(blurMaterial);
Destroy(blurredTexture);
}
}
게임 개발에 필수적인 내용을 담는 명서들을 소개합니다.
<유니티 교과서 개정6판>(유니티 최신 버전)
https://link.coupang.com/a/be3P0t
유니티 교과서 개정6판
COUPANG
www.coupang.com
<대마왕의 유니티 URP 셰이더 그래프 스타트업>
https://link.coupang.com/a/bs8qyC
대마왕의 유니티 URP 셰이더 그래프 스타트업
COUPANG
www.coupang.com
<리얼-타임 렌더링(REAL-TIME RENDERING) 4/e>
https://link.coupang.com/a/8VWas
리얼-타임 렌더링 4/e
COUPANG
www.coupang.com
<이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것>
https://link.coupang.com/a/9BqLd
이득우의 게임 수학:39가지 예제로 배운다! 메타버스를 구성하는 게임 수학의 모든 것
COUPANG
www.coupang.com
유니티 에셋 스토어 링크
https://assetstore.unity.com?aid=1011lvz7h
에셋스토어
여러분의 작업에 필요한 베스트 에셋을 찾아보세요. 유니티 에셋스토어가 2D, 3D 모델, SDK, 템플릿, 툴 등 여러분의 콘텐츠 제작에 날개를 달아줄 다양한 에셋을 제공합니다.
assetstore.unity.com
(링크를 통해 도서/에셋 구입시 일정액의 수수료를 지급받습니다.)
'유니티 엔진 (Unity Engine)' 카테고리의 다른 글
[Unity] 유니티 셰이더 코드에서 _MainTex_TexelSize 변수의 정체는? (0) | 2024.03.19 |
---|---|
[Unity] 셰이더 처리 후 텍스처 테두리가 번져 보이는 문제 (0) | 2024.03.19 |
[Unity] 간단한 가우시안 블러(GaussianBlur) 셰이더 코드 (0) | 2024.03.14 |
[Unity] Dithering 셰이더 함수, Dither 노드, Dither thresholds array (0) | 2024.03.13 |
[Unity] 밸브사의 포탈(Portal) 게임의 포탈 메카닉스 만드는 방법 (자료) (0) | 2024.03.13 |
[Unity] Working with Cinemachine Cameras Overview (시네머신 카메라 작업 개요) (0) | 2024.03.12 |
[Unity] 화면 캡쳐(Screen Capture) 관련 자료 메모 (0) | 2024.03.07 |