Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- VR
- 개인 바이트
- URP로 변경
- URP
- 프로그래밍 기초
- ColorGradingLutPass
- 게임 수학
- Cartoon Rendering
- Rim Light
- AppSW
- ASW(Application SpaceWarp)
- Private Bytes
- working set
- Cell Shader
- Toon Shader
- Specular
- C언어
- 벡터
- Cell Look
- 가상 바이트
- 작업 집합
- Three(Two) Tone Shading
- 3d
- 메모리 누수
- Virtual Byte
- OculusMotionVectorPass
- Windows Build
Archives
- Today
- Total
WinCNT
Texture를 PNG파일로 저장하기 본문
서론
일종의 Baking Tool과 같은 스트립트를 만들고 있다
물론 방법은 1도 몰랐기 때문에 조사해가면서 진행 중인데,
알게 된 내용 하나씩 정리해보려고 한다
우선은 Texture를 PNG파일로 저장에 대해서다!
Texture를 PNG파일로 저장
뭐가 되었든 최종적으로는 Texture를 PNG파일로 저장하는 마무리가 필요할 것이다
다행히도 이 부분은 인터넷에 레퍼런스가 많았다
핵심 키워드는 Graphics.Blit와 Texture2D의 ReadPixels()과 EncodeToPNG()인 것 같다
실험삼아 만들어 본 함수는 다음과 같다
private void SaveBakeResultToTexture()
{
RenderTexture buffer = new RenderTexture(
textureSize,
textureSize,
0, // No depth/stencil buffer
RenderTextureFormat.ARGB32, // Standard colour format
RenderTextureReadWrite.Linear // No sRGB conversions
);
// (머테리얼의) 셰이더를 사용하여 원본 텍스처를 대상 렌더링 텍스처로 복사한
Graphics.Blit(texture, buffer, bakeMaterial);
// 현재 Render Target에 Render Texture를 설정한다(Graphics.SetRenderTarget과 같음)
RenderTexture.active = buffer;
Texture2D outputTex = new Texture2D(textureSize, textureSize, TextureFormat.ARGB32, false);
// 현재 Render Target(Screen, 혹은 RenderTexture)에서 픽셀을 읽고 Texture2D에 쓴다
outputTex.ReadPixels(
new Rect(0, 0, textureSize, textureSize),
0, 0, // Write starting at the top-left texel
false // No mipmaps
);
var pngByte = outputTex.EncodeToPNG();
string filePath = directoryPath + "/" + fileName + ".png";
File.WriteAllBytes(filePath, pngByte);
//clean up variables
RenderTexture.active = null;
DestroyImmediate(outputTex);
}
결과
위의 함수를 이용해서 만든 스크립트이다
지정한 텍스처를 지정한 매테리얼(의 셰이더)을 통한 결과를 png로 저장한다
(포스트 프로세스 같은 느낌)
참고로 지정한 텍스처는 다음과 같다(유니티짱의 텍스처)
Gary 매테리얼의 프래그먼트 셰이더의 는 다음과 같다
half4 frag(Varyings IN) : SV_Target
{
half4 finalColor = 0.0;
half4 color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv);
color.rgb = pow(color.rgb, 1/2.2); // Gamma Correction
finalColor.rgb = dot(color.rgb, float3(0.3, 0.59, 0.11));
finalColor.a = 1.0f;
return finalColor;
}
실행하면 다음과 같이 그레이 스케일이 적용된 파일이 생성된다
마무리
다음으로는 스크립트에서 텍스처 맵을 만드는 방법을 생각해보자…
참고 사이트
How to write from shader to a texture to a PNG in Unity?
unity_script_texture2d_save_png_file - FreeStyleWiki
'Unity > Unity 관련' 카테고리의 다른 글
유니티 스크립트 게임 오브젝트의 레이어와 카메라의 컬링 마스크를 설정하기 (0) | 2023.05.19 |
---|---|
유니티 에디터 모드에서 다이얼로그(Dialogue)창 띄우기 (0) | 2023.04.26 |
URP에서 특정 카메라의 렌더링 후에 호출되는 함수 (0) | 2023.04.25 |
스크립트로 정점(버텍스) 컬러 변경하기 (0) | 2023.03.17 |
Unity의 인스펙터에 버튼 표시하기 (0) | 2023.02.17 |