메뉴 건너뛰기

조회 수 126 추천 수 0 댓글 0


 

유니티가 SRP (옛날 방식 렌더 파이프)일 때는 Color Space가 Gamma가 디폴트였는데

URP나 HDRP는 Linear가 디폴트가 됐다나 뭐라나...

아무튼 지금 프로젝트도 Gamma를 쓰고 있었다가 Linear로 바꿀 상황을 마주하였다.

 

 

image.png

image.png

 

리니어, 감마 스페이스하면 줄창 볼 수 있는 차이를 보여주는 사진. 위 Linear 아래 Gamma

Linear보다 어두운 곳은 더 어둡게, 밝은 곳은 더 밝게 나온다고 한다.

 

그 외에도 색상 연산을 리니어 스페이스에서 하는가, 감마 스페이스에서 하는가 차이가 있다고 하는데

별로 더 깊게 공부하고 싶은 마음은 없고, 나는 내 지금의 문제 상황을 해결해야한다.

 

 

 

 

 

 

https://5nani.com/xe/index.php?mid=Creative&document_srl=25577

  HSV 변경 기능을 만들었더니 리얼화이트를 만들 수 없어서 다시 만들어야했다. 그래서 찾아보니 HSV 말고도 HSL 이란 것도 있었다. &...
조루나 | 2022.05.13

 

이때 만들었던 스파인 HSL 색상 변경 기능에서

셰이더에 전달하는 프로퍼티 (Vertex Color값)이 Gamma 일 때랑 다르게 동작하는 문제 발생.

전에는 0.0 ~ 1.0을 전달해주면 반반 나눠서 밝게, 어둡게 잘 조절됐는데

리니어 스페이스로 바꿨더니 0.732 정도에서 갑자기 색이 확 변하는 상황.

슬라이더만 고장나면 다행인데 염색 앰플 기능(해당 슬롯의 기본색이랑 비교해서 앰플 색에 맞추기)도 고장.

 

셰이더에 전달되는 Input Vertex Color가 아마 리니어 스페이스 기반으로 전달되는데

셰이더에서는 감마 스페이스 때랑 똑같이 동작하는 것 같다...?

 

 

 

half4 LightweightFragmentBlinnPhongSimplified(InputData inputData, half4 texDiffuseAlpha, half3 emission, half4 vertexColor)
{
#if UNITY_COLORSPACE_GAMMA
    
#else
    vertexColor = pow(vertexColor, 0.4545);
#endif

    //half4 diffuse = texDiffuseAlpha * vertexColor;
    half4 diffuse = adjustHueOfColor(texDiffuseAlpha, vertexColor);
#if UNITY_COLORSPACE_GAMMA
    
#else
    diffuse = pow(diffuse, 2.2);
#endif

 

그래서 인풋 들어온 버텍스 컬러를 감마 스페이스에 맞게 계산하고 x^(1/2.2)

다시 아웃풋에서 x^(2.2) 해주면 일단 셰이더 프로퍼티 전달 문제는 해결.

pow는 좀 느리니까 나중에 근사식으로 최적화를 해주면 좋겠다.

https://www.shadertoy.com/view/WlG3zG

뭐 이런 식으로...

 

 

 

 

image.png

https://rito15.github.io/posts/unity-srgb-linear-gamma-color-space/

구글링으로 찾을 수 있는 조상님들의 지혜, 오늘도 흡수합니다. 쭈왑쭈왑

 

 

여전히 잘 모르겠지만 유니티에서 사용하는 컬러 스페이스에 맞게 Input Vertex Color와

Fragment Shader Output Color가 알아서 변환되어서 게임에 출력되나봄.

 

 

 

image.png

 

이제 문제는 프래그먼트 셰이더의 Output Color를 pow(x, 2.2) 해주어서 위의 그래프와 같이 아래로 볼록하게 만들었기 때문에

게임에 들어가보면 좀 어둡게 나온다는 것인데.

최종 출력 컬러를 감마 스페이스쪽으로 한 번 더 연산했기에 당연히 발생한 문제.

 

 

 

 

sRGB_Texture.PNG

 

해당 텍스쳐에 sRGB 옵션을 끄면 Gamma Correction이 꺼진다고 한다.

컴퓨터 속 이미지 파일들은 감마 스페이스에 맞게 변환되어서 "밝게" 저장되어 있는데,

이걸 끄면 이 파일은 리니어 스페이스에 맞게 저장되어 있으니 어둡게 역보정하지 마라!라고 하는 것인듯?

 

반대로 지금까지의 셰이더 수정을 안 하고 정상 상태에서,

리니어 스페이스 프로젝트에서 이것만 하면 텍스쳐가 밝게 나온다.

디스크에 저장된 이미지 상태 그대로 출력되어서 밝아지는 것 같음.

 

 

 

image.png

아무튼 에디터에서 포스트 프로세싱과 겹쳐서 이렇게 퍼렇게 나오는 문제도 있고하지만...

 

 

image.png

런타임에서는 아무튼 잘 나옴을 확인!

 

 

오늘도 야매 셰이더질에 성공하였다.

 


사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
47 그외 게임 메이커 스튜디오 C# dll 라이브러리 만들 때 .NET 프레임워크 버전 문제 file 조루나 2024.05.03 3
46 게임 애드몹 Code 3 no fill 에러 원인 중 한 가지 file 조루나 2024.01.16 18
45 게임 유니티 특) 9 Slice랑 Filled 동시에 안 됨. 조루나 2023.11.29 10
44 게임 메쉬로 Progress circle 그리기 file 조루나 2023.11.23 10
43 그외 남이 만든 게 안 돌아가서 뜯어고친 C# 셀레니움 크롬 드라이버 자동 업데이트 조루나 2023.11.23 10
42 게임 우효, 이런 좋은 버그리포트 도구가 있었다니 Sentry 1 file 조루나 2023.05.08 43
41 게임 Unity 빌드 전 대화상자 출력 조루나 2023.04.20 10
40 게임 유니티 모바일에서 VideoPlayer로 영상 재생하면 자꾸 멈춘다. 조루나 2023.02.23 33
39 게임 세 가지 셀 셰이딩 에셋의 단순 프레임 비교 file 조루나 2023.02.03 43
38 게임 유니티 transform 참조의 문제 file 조루나 2022.11.10 63
37 게임 에셋 Super Tilemap Editor가 바닥면 Collider를 만들어주지 않아 file 조루나 2022.10.27 10
36 게임 미소녀 뱀파이어 서바이버즈를 만들자! - 캐릭터 몸에 마법 문신 넣기 file 조루나 2022.10.06 98
35 게임 Unity 2020에서 Spine 3.6 Runtime이 AtlasAsset을 제대로 Import하지 못 할 때 file 조루나 2022.09.20 19
34 게임 스파인 텍스쳐 런타임 색칠하기 file 조루나 2022.09.02 25
33 비주얼 블렌더 맛보기 1 file 조루나 2022.07.21 70
32 게임 파티클 메쉬와 Optimize Mesh Data의 저주 file 조루나 2022.07.14 20
31 게임 유니티 2D(2.5D) 타일 에셋 - Super Tilemap Editor file 조루나 2022.07.06 25
» 게임 유니티 컬러 스페이스와 스파인 HSL 색 변경의 역습 유니티가 SRP (옛날 방식 렌더 파이프)일 때는 Color Space가 Gamma가 디폴트였는데 URP나 HDRP는 Linear가 디폴트가 됐다나 뭐라나... 아무튼 지금 프로젝트도 G... file 조루나 2022.07.06 126
29 게임 앱 이름에 따라 프레임이 다르게 나온다... file 조루나 2022.06.21 15
28 게임 유니티 스파인 슬롯에 HSL 색상 변경(=포토샵 Colorize) 3 file 조루나 2022.05.13 170
Board Pagination Prev 1 2 3 Next
/ 3