감마 보정 (gamma correction)
감마 보정
http://ko.wikipedia.org/wiki/%EA%B0%90%EB%A7%88_%EB%B3%B4%EC%A0%95
감마 보정 : 비선형 전달 함수를 사용해 빛의 강도신호를 비선형적으로 변형하는 것.
감마 조정 : 디스플레이 등의 특성에 따라 감마 값을 미세하게 조정하는 것.
감마 보정의 목적 : 인간의 시각이 밝기에 대해 비선형적으로 반응하기 때문에 최적의 화질을 보여주기 위해선
비선형적으로 데이터를 인코딩 하여 어두운 부분을 더 자세히 기록해야 한다.
감마 보정(gamma correction), 감마 인코딩(gamma encoding)의 이해
http://shotgunlee.egloos.com/10607756
- 자극 사이의 절대적인 차이가 아닌, 자극 사이의 비율이 중요하다.
어두운 부분의 25,26 차이는 사람이 매우 크게 느끼지만 밝은 부분의 200,201 차이는 느끼기 힘들다.
- 선형으로 인코딩하면 밝은부분에서 시각이 지각할 수 없는 필요없는 데이터가 많아지고,
어두운 부분에서는 데이터가 부족해서 화질이 떨어지게 된다.
이렇게 채널당 8bit와 같이 한정된 정보량 안에서 선형적으로 빛의 밝기를 기록하면
시각에서 민감한 "어두운 부분"에서 부드럽게 밝아지지 않고 단절되어 보이는 banding현상이 발생.
gpg 감마보정에 관한 번역 글
http://www.gpgstudy.com/gpgiki/GammaCorrection
- 표준 컴퓨터 모니터의 강도에 대한 반응은 선형.
- 강도를 올바르게 보이도록 조정하는 작업이 감마보정.
눈에서의 영상처리와 감마 보정
http://hornil.com/bbs/board.php?bo_table=sp_tip_kr&wr_id=2
흰선 : 실제 밝기 강도, 녹색 선 : 우리 눈이 받아들이는 밝기 강도
a의 그림처럼 리니어한(선형적인) 값에서는 밝은 색이 더 많아 보이고
b가 동일하게 분포되어 있는 것 처럼 인식하므로 a처럼 선형적인 값을
b와 같이 눈에 선형적인 것처럼 보이지만 실제로는 비선형인 값으로 보정을 한다.
다음과 같은 지수함수를 사용하여 곡선의 형태로 유사하게 만들 수 있다.
B = R * F(A/R, 1/ɣ);
A: 처리 전 값, B: 처리 후 값, R: 밝기 단계
F(x, y): x를 밑으로, y를 지수로 하는 지수함수 (c 함수로는 pow()가 있다.)
이미지 처리에서의 감마 보정이란 무었인가.
http://maxattivo.blogspot.com/2011/07/what-is-gamma-correction-in-image.html
http://visualxock.tistory.com/466
Vout = Vinγ
Vout은 리시브 값이고 Vin은 원래 값이다. 그리고 γ값이 감마이다.
원하는 값을 얻기 위해서 원래 값(Vin)을 얼마만큼(γ) 올려야 하는가가 관건.
- 감마라는 말은 사진사로부터 유래.
받아들인 이미지의 광학밀도가 필름의 노출 정도와는 비례하지 않는다는 것을 발견.
노출 정도를 더블링 하면 두배만큼은 어두워지거나 밝아지지 않는다는 것을 발견.
Image Processing Algorithms Part 6: Gamma Correction
http://thecryptmag.com/Online/57/imgproc_6.html
gammaCorrection = 1 / gamma
colour = GetPixelColour(x, y)
newRed = 255 * (Red(colour) / 255) ^ gammaCorrection
newGreen = 255 * (Green(colour) / 255) ^ gammaCorrection
newBlue = 255 * (Blue(colour) / 255) ^ gammaCorrection
PutPixelColour(x, y) = RGB(newRed, newGreen, newBlue)
GPU Gems 3. 24.1
http://http.developer.nvidia.com/GPUGems3/gpugems3_ch24.html
비선형 특성의 효과를 위한 조정을 감마보정이라고 부른다.
감마 보정은 이미지를 디스플레이 하기 전에 이미지 픽셀에 대한 모니터 변환의 역을 적용하는 계산.
- 감마보정은 왜 필요 한가?
- 간단하게 말해서 모니터는 선형, 렌더러는 비선형이라서.
- 감마 보정은 어떻게 하는 것인가?
- 이미지를 디스플레이하기 전에 이미지 픽셀에 대한 모니터 변환의 역을 적용하는 계산.
- 디스플레이 전에 픽셀값을 1/감마로 제곱하면 감마의 제곱에 대한 디스플레이 음함수는 선형응답에서 결과를
올바르게 전체적으로 상쇄한다.
- 선형이란 무었인가?
- f(x+y) = f(x) + f(y)
입력값을 더해서 출력하는 것과 각 입력값의 개별 출력값을 다 더한값이 같다는 것.
- f(k*x) = k * f(x)
입력값에 스칼라배 한 만큼 출력에 적용된다.
- 예로 라이트 전달은 선형이다. 하나으 장면에서 두 개의 라이트로부터의 조광 분포는 합계가 된다.
- 모니터는 비선형이고 렌더러는 선형.
CRT는 전압을 라이트의 강도로 변환할 때 선형적으로 동작하지 않는다.
모니터의 응답은 아래 그림의 지수함수 곡선에 가깝고 이 해당 지수를 "감마"라고 부른다.
아래 주황색 화살표에서 알 수 있듯이 50%강도의 픽셀값인 0.218이 100% 강도의 픽셀값
1.0에 비해 라이트의 1/4이하를 방출한다.
렌더러, 셰이더나 인쇄기들은 선형 데이터로 작동하는 것을 좋아한다.
게임에서 사용하는 모든 텍스처는 감마가 적용된(아래로 볼록한) 텍스처이므로 디스플레이
출력 시, 올바른 색상을 표현하기 위해 1/2.2로 감마를 상쇄해야 한다.
그래서 텍스처는 감마공간(Gamma Space), Pixel Shader는 선형공간(Linear Space)라고 한다.
- 조명
Lambert는 N과 L의 내적값으로 라이트를 계산한다.
그렇다면 cos60 값인 0.5에 따라 두 내적값이 60도를 이룰 때 카메라를 향해 절반의 빛을 반사해야 한다.
아래 그림은 렌더몽키에서 테스트 한 결과값이다.
이 값은 마지막 결과값에 pow(color,1.0/2.2)을 해 준 결과값이다.
이는 올바르게 선형변환 된 것이다.
위 그림은 다른 보정없이 그냥 출력한 값이다.
2.0 정도의 감마를 가지는 비선형인 모니터에 이미지를 디스플레이 하면 위와 같이 된다.
전반적으로 정확한 시뮬레이션 보다 어둡게 나타난다.
- 입력 텍스처부터 출력 디스플레이까지
JPEG 이미지 파일 ( 비선형, 이미 감마 보정되어 있음, sRGB공간, 실제 눈에 보여주고자 하는
색상정보값 보다 밝게해서 저장 되어 있음. 위로 볼록한 지수함수 그래프 모양, Gamma Encoded)
-> 읽어들임(예를 들면 diffuse, 선형공간으로 변환, pow(color,2.2) 연산, 어둡게 해서 밝게
되어있던 값을 상쇄시킨다. 평평한 그래프 모양)
-> 라이팅 & 셰이딩(선형공간에서 처리)
-> 일반적인 비선형 디스플레이 장치에서의 디스플레이를 위해 감마 보정된다.
(다시 sRGB공간으로 옮김, pow(color,1.0/2.2) 연산, 위로 볼록한 모양)
-> 모니터가 감마를 적용 (pow(color, 2.2), 평평해 진다.)
디테일맵과 감마보정에 대한 이야기
http://kblog.popekim.com/2012/01/blog-post_25.html
하드웨어에서 지원해 주는 sRGB.
Gamma Correction에 대한 간략 설명
http://wrice.egloos.com/5388456
- 감마 계산공식.
보여주고자 하는 값 ^ (1.0/2.2)
여기서 2.2 값을 Gamma값 이라고 한다.
- 색을 가지는 이미지들은 모두 Gamma Correction이 적용된 이미지.
(ex : 디카로 찍은 이미지, 웹에서 검색해서 얻는 이미지들...etc)
다시말해 실제 눈에 보여주고자 하는 색상 정보값보다 약간 밝게해서 파일로 저장되었다.
- 이미지 파일이지만 색상값을 저장하지 않고 데이터를 저장하는 이미지들은
눈에 보여질 용도가 아니므로 Gamma Correction이 적용되어 있지 않다.
(ex : normal map...etc)
- 디자이너가 포토샵으로 이미지를 그림 -> 실제 파일로 저장(감마보정, 실제보다 약간 밝게 저장)
- 게임 그래픽에서 감마보정에 대한 이해가 중요한 이유는 이미지 블렌딩에서의 문제 때문.
두장의 이미지를 50%씩 더할 경우
(색상A * 0.5) + (색상B * 0.5)
이때 색상A와 색상B가 일반 이미지 파일로부터 오는 값들이라면 sRGB공간에 있는 색상이며
실제 값보다 약간 밝은 값이라는 이야기!!! 그래서 이렇게 고쳐야 한다.
단계 1 : ((색상A ^ 2.2)* 0.5) + ((색상B ^ 2.2) * 0.5)
여기에 색상값 범위가 0.0에서 1.0 이라는 부분을 고려하면
색상A^2.2 <= 색상A , 즉 어둡게 만든다는 뜻.
그래서 sRGB공간에서 선형공간으로 옮겨서 더하고나서 다시 sRGB로 옮겨야 한다.
단계 2 : ((색상A ^ 2.2)* 0.5) + ((색상B ^ 2.2) * 0.5) ^ (1.0/2.2)
대충 살아가는 게임개발자님의 감마 코렉션
http://chulin28ho.egloos.com/5607643
댓글들이 재미있습니다.
LCD 모니터 설정
http://blog.naver.com/psy2993/90081371916
감마에 대해 깔끔하게 잘 정리되어 있습니다.
sRGB 텍스처 포맷
- ms랑 hp가 협력해서 만든 모니터 및 프린터 표준 RGB 색 공간.
- http://designsen.net/285 (sRGB, Adobe RGB등에 대한 자세한 설명과 차이점들)
- http://www.gballard.net/psd/srgbforwww.html (RGB Correct Color Space Tutorial for the internet)
Blind Inverse Gamma Correction
Blind Inverse Gamma Correction - presentation3.ppt
[Tutorial] Gamma Correction
- http://www.geeks3d.com/20101001/tutorial-gamma-correction-a-story-of-linearity/
Gamma: 360 vs PS3
- http://filmicgames.com/archives/14
Conversion Color Space Filtering
http://www.slideshare.net/cagetu/928501785227148871?fb_action_ids=489832257731037&fb_action_types=og.likes&fb_source=timeline_og&action_object_map=%7B%22489832257731037%22%3A10150801907643963%7D&action_type_map=%7B%22489832257731037%22%3A%22og.likes%22%7D&action_ref_map=%5B%5D
Uncharted 2: HDR Lighting
Uncharted2-Hdr-Lighting_Part1.pptx
알파연산의 감마처리는?
NDC11 HDR
짧게 요약하자면....
- 다양한 모니터의 비선형 반응을 보정하기 위해 사용.
- 인간의 시각적인 부분에서 밝은 색 지역보다 어두운색 지역의 변화에 민감하기 때문에
어두운 지역의 정밀도를 높이기 위해 사용.
- 모든 이미지들(텍스쳐)은 감마공간에 있다. (원본보다 밝게 되어 있는)
- 모니터는 감마공간에 있는 이미지를 선형으로 보여주는 역활을 한다.
(다시 어둡게 해서 원본처럼 보이게 하는)
- 선형공간에서 라이팅 연산을 해야 한다.(밝은 걸 어둡게 해서 평평한 선형)
- 즉, 감마공간에 있는 이미지를 선형공간으로 꺼내서 라이팅 계산을 해야 한다.
- 선형공간으로 꺼내기 위해 -> 선형 디퓨즈 칼라 = pow(color,2.2)(어둡게)
- lighting 연산 dot(n,l)
- 다시 감마공간으로 -> 최종 칼라 = pow(선형칼라 *etc, 1/2.2)(밝게)
- 출력할때는 모니터가 다시 어둡게 해서 평평.
링크 : IGC2017] 펄어비스 개발자가 직접 알려주는 '검은사막의 압도적인 비주얼 노하우'
해당 링크들은 전부 좋은글 들 이니 한번씩 읽어보면 많은 도움이 된다능...
이번에 스터디에서 발표하면서 만든 ppt.
위의 링크들을 짜집기 해서 만든 거라능.ㅡㅡ;...
ps. 틀린 부분이 있다면 댓글 달아주세요. 잽싸게 고치겠습니다. ㅎ
add.
포토샵에서 이미지를 만들 때 linear color space에서 작업해서 저장하면
엔진에서 텍스처를 읽어올 때 역감마를 해서 linear하게 맞쳐 줄 필요가 없지 않을까..
그러면 처음부터 선형공간에서 라이팅 계산이랑 다 하면 되지 않을까.
다만 이미지 쓸때 감마 처리 해주는 부분은 들어가야 하겠지만....흐음..헛생각일까....
http://fnordware.blogspot.kr/2008/05/making-linear-icc-profile.html
어차피 뽀샵에도 스크립트 지원하는데 자동변환 기능을 만들 수 있지 않을까..
'Study > M's Lecture' 카테고리의 다른 글
3. 왜 물은 물처럼 보이는 걸까? (0) | 2013.01.17 |
---|---|
2. 왜 물은 물처럼 보이는 걸까? (0) | 2012.12.14 |
1. 왜 물은 물처럼 보이는 걸까? (0) | 2012.12.14 |
벡터 (0) | 2012.02.10 |
가우스 필터 (0) | 2012.01.31 |