WinCNT

Direct2D - 흑백 쉐이더 만들기 본문

게임 프로그래밍(학습 내용 정리)/게임 수학

Direct2D - 흑백 쉐이더 만들기

WinCNT_SSS 2022. 1. 19. 10:40

그레이 스케일

흑백이란?

명도 값만 존재함

RGB값이 같으면 흑백이 된다?

 

D2D도 기반은 D3D의 쉐이더라고 하니

쉐이더를 중간에서 커스텀을 하면

속도 저하 없이 그레이 스케일도 구현할 수 있을 것이다

 

텍스처 샘플링

텍셀 - 텍스트 픽셀의 합성어

텍스처로부터 샘플링해서 2차원 이미지를 불러옴

 

float4 = RBGA 자료형(쉐이더의 자료형)

쉐이더에서는 0~255가 0~1의 값으로 바뀜

 

스위즐링

rrra, ggga, bbba 등으로 rbg값을 같게 해주면 색이 흑백이 된다

근데 미묘하게 밝기 값이 다르다

그럼 어떤 것을 써야 할까?

아니 어떠한 비율로 섞어야 가장 사람의 눈에 자연스러운 흑백이 될까?

 

이에 대한 것을 그레이 스케일이라고 한다

눈은 녹색 계열에 가장 민감하던가, 블루가 가장 민감도가 떨어진다거나의 과학적인 근거가 있다

그럼 그레이는 어떤 비율로 섞으면 될까?

다행히 이미 계산된 값이 존재한다

 

Gray=0.299*R + 0.587*G + 0.114*B

 

https://www.mathworks.com/matlabcentral/answers/67725-how-weights-are-assigned-to-each-rgb-component-in-function-rgb2gray

 

How weights are assigned to each RGB component in function rgb2gray -

In function rgb2gray, Gray=0.299*R + 0.587*G + 0.114*B, i understand it is a standard formula but can anyone help me understanding on how the weights for each channel are computed?

www.mathworks.com

 

각 픽셀에 대해서 위와 같은 연산을 해주면 다음과 같이 자연스러운 흑백이 완성된다

 

일정 부분만 흑백 처리하기

특정 부분만을 그래이 하기 위해서는 마스킹 기법이 필요하다

포토샵 등에 있는 마스크(안 나오는 부분은 검정색, 나오는 부분은 하얀색)와 같음

 

마스크 텍스처와 출력할 텍스처를 선형 보간(Lerp)한다

mask는 검정색과 햐얀색뿐이므로 선형 보간을 하면 흑백으로 할 것인지를 구할 수 있다

채널마다 마스크 설정하기

마스크의 응용 중 하나로, 각각의 RGBA 채널마다 마스크를 설정하는 기법이 있다

각각의 RGBA 채널마다 마스크를 설정하면

하나의 텍스처로 여러 마스킹을 구현할 수 있으므로 메모리를 아낄 수 있다

 

SSS

'게임 프로그래밍(학습 내용 정리) > 게임 수학' 카테고리의 다른 글

법선 매핑(Normal Mapping)  (0) 2022.03.22
셰이더  (0) 2022.03.08
PBR  (0) 2022.01.11
조명 처리  (0) 2022.01.11
계층 구조와 애니메이션 보간 기초  (0) 2022.01.11