HDR이란?

2D, 3D, 다각형, 픽셀 등 게임의 그래픽 프로그래밍에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

HDR이란?

Post by 비회원 »

정확히 HDR은 무엇을 말하는건가요?
요즘 많이들 하는 일명 뽀샤시효과와는 전혀 관계 없는건가요?
택스춰레 랜더링 하고 그걸 효과주는 방식인가요?
언리얼3에서 HDR을 지원한다는데 도무지 어떤걸 가지고 HDR이라고 하는지 감이 잘 잡히지 않습니다.
첨부 HDR에 관한 사진같은거나 대략적인 구현방법을 알려주셨으면 합니다 ^^
비회원

음...

Post by 비회원 »

직접 검색해보세요.

HDR이 이슈가 되는 만큼 약간의 시간만 투자해도 많은 정보를 얻을 수 있으실 것 같네요.

여기는 지식인이 아닙니다. 내공이라도 거시던가...

--쥐돌이
비회원

Post by 비회원 »

답글 보고 남깁니다.
물론 검색해봤죠. 하지만 이해가 안가는걸 어떻게 합니까?
그렇게 얼마나 답답했으면 이곳에 글을 올리겠습니까?
윗분 답변치고는 너무 성의가 없어보이는군요. 그런 쓸대없는 말 들으려고 질문올린거 아니니 양해바랍니다.

전에도 GPG에 한글출력부분 질문부분의 글을 보니
"저 방법보다 좋은 방법 있지만 안가르쳐줄껍니다." 라는 문구랑 비슷한 성향이군요.
약올리는것도아니고...
zupet
Posts: 2764
Joined: 2003-05-13 03:34
Location: NCSOFT LE팀

Re: HDR이란?

Post by zupet »

비회원 wrote:정확히 HDR은 무엇을 말하는건가요?
요즘 많이들 하는 일명 뽀샤시효과와는 전혀 관계 없는건가요?
택스춰레 랜더링 하고 그걸 효과주는 방식인가요?
언리얼3에서 HDR을 지원한다는데 도무지 어떤걸 가지고 HDR이라고 하는지 감이 잘 잡히지 않습니다.
첨부 HDR에 관한 사진같은거나 대략적인 구현방법을 알려주셨으면 합니다 ^^
단어의 뜻은 High Dynamic-range Render 으로 알고 있습니다. 별거 아니고 렌더링시 Tatget Buffer(백버퍼가 일반적이죠.)를 float 형식을 쓰게 합니다. f16 이나 f32 등을 쓰게 하고 Pixel Shader 에서 연산된 float 값을 그대로 쓰게 합니다. 여기서 주의할 점은 광원이나 각종 텍스쳐 연산을 할때 0~1로 클리핑 되는게 아니라 그 값이 그대로 버퍼에 쓰여지는 것이죠. f32 -> f16 이니까 좀 깍여 나갈 수 있지만 일단 거칠게라도 대부분의 정보는 기록되고 화면에 나갈때는 이 화면의 일정 범위를 적당히 0~255 범위로 변환해서 나가게 됩니다.

여기서 부릴 수 있는 꽁수중 몇가지가 카메라와 같이 노출 보정을 해주는 작업입니다. Post-Effect로 쓰이는 작업이 이런 것의 도움을 받으면 좀더 사진기로 찍은 사진 같이 좀더 자연스럽게 뽀샤시가 들어간다던지(256단계로 뽀샤시를 넣는게 한계란 거죠.) 아니면 아주 밝은 곳과 어두운 곳이 같이 있으면 순식간에 노출 보정으로 진짜 사진같은 느낌이 난다던지 몇가지 장점이 있습니다. Far Cry도 패치로 지원 한다고 하던데 글쎄요? 일단 지원하는 카드는 라데온 9500이상, GeForceFx 이상인듯 하니 아직 제약이 많긴 하죠.

p.s.라지만.. 디자이너들이 이런 작업에 익숙하질 않아서 제대로 쓰기에는 게임들이 나올때까지 많이들 안쓸듯

p.s.2.어디를 검색하셨는지 모르겠지만 일단 DX 9.0 에도 관련 내용이 언급되어 있습니다. 영문..이라 문제인가요? -_-a
kwanny
Posts: 50
Joined: 2002-06-01 23:18
Location: Ntreev Soft
Contact:

HDR

Post by kwanny »

간단하게 말하면,
HDR = High Dynamic Range

입니다.
여기서 Dynamic Range 란 어떤 신호의 최소/최대 값의 비를 말합니다. (♨ 이 비율이 큰 것이 HDR 이겠죠 ?)

컴퓨터 그래픽스에서 보면,
과거 3D카드의 프레임버퍼를 이루는 ARGB의 각 요소는 1BYTE( 0~255, 혹은 0~1)의 LDR(Low Dynamic Range)로 이루어져 있으나 실세계(밖에 나가서 태양을 바라 보면)에서는 Luminance(밝기/광도)의 비가 100,000:1 정도까지 있는 경우가 있습니다. 이런 경우 LDR로 표현이 불가능 하기 때문에 HDR이 필요한 것입니다.

HDR Rendering을 하게 되면 Luminance, Radiance(방사휘도, pixel intensity) 즉, 밝기의 범위가 [0..1]의 범위를 뛰어 넘을 수 있습니다. HDR 구현에 floating point(부동 소수점)를 사용 하게 되는데 부동 소수점의 범위와 오차에 따라 16bit / 32bit 두 종류가 많이 있습니다. 당연히 32bit 를 선택하면 더 느리지만 퀄리티가 좋겠죠.

그런데 컴퓨터 그래픽에서 진정한(True) HDR을 맛보려면 사실 모든 부분에서 부동소수점(FP)가 되어야 합니다.

1. 부동 소수점 연산
2. 부동 소수점 랜더 타겟
3. 부동 소수점 텍스쳐
4. 부동 소수점 필터링
5. 부동 소수점 디스플레이 !

간단히 말해 1~4가 가능한 GeForce 6800급 이상이 필요 하다는 소리죠. 그런데 5번은 아직은 상용화된 제품이 없고 곧 나올 예정이랍니다. 다시말해, 우리가 현재 쓰고 있는 모니터로 100,000:1 같은 Luminace 표현이 불가능 하기 때문에 HDR을 LDR로 변환하는 것을 Tone Mapping이라고 합니다. Tone Mapping에는 여러가지 방법이 있으나 간단한 것은 전체 화면의 평균 Luminance로 해당 픽셀의 Luminance를 나누는 것이죠.

HDR Scene을 Tone Mapping 하기 직전 이미지 좌표계상에서 Glow / Bloom Filter등을 거는 것을 Post Processing Efftects라고 그러는데 이것이 보통 [뽀샤시]라고 부르는 것과 같은 효과를 보여 줍니다. Bloom Filter라는 것은 필름 등에서 빛이 과하게 많인 노출된 주변에 빛이 번지는 효과 같은 것을 내죠.

그런데, 위에서 언급했듯이 True HDR은 일반적인 3D 카드를 위한 해법은 아니기에 Fake HDR이 주로 사용 되는데 Masaki Kawase가 DX8에서 사용한 Low-precision buffer를 이용한 방법에서 처음 본 것 같네요.

사실 ATI Glow Effect Sample 이나 쉐이더릴 이용한 Glow 효과(개인적으로 뽀샤시 라는 단어에 불만이 있습니다만...)로 화면 전체가 화사해지는 것만 가지고 HDR이라고 부르기 어렵다는게 제 생각입니다. 다만, 유사(Fake) HDR과 비슷한 효과를 준다 정도로 생각 하고 있습니다. (<- 이건 틀린 생각 일수도...)

[HDR 관련 참고]
* http://download.nvidia.com/developer/pr ... es_HDR.pdf
* Masaki Kawase's Practical Implementation of High Dynamic Range Rendering : http://www.daionet.gr.jp/~masa/column/2004-04-04.html

[Tone Mapping]
* Photographic Tone Reproduction for Digital Images : http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf

[단어 상세]
Radiance : http://en.wikipedia.org/wiki/Radiance

[Floating point 참고]
* 최적화를 위한 부동 소수점 수 압축 : http://www.gamecode.org/article.php3?no ... &field=tip
* C언어의 변수 float와 double - Float Point 처리 : http://blog.naver.com/post/postView.jsp ... =1&cpage=1

* 음...프로그래밍이나 그래픽스 전공도 아니고 최근에는 이런 공부가 취미의 가까운 수준인지라 틀린 부분이 있을 수 있어서 글을 올리는데 망설여 집니다.
drawtree
Posts: 30
Joined: 2004-05-27 20:54

Post by drawtree »

그래픽스계에서 HDR은 '실제 세계의 빛 상태를 사진으로 찍어 그 데이터를 그대로 광원으로 사용하여 렌더링하는 것'이 시초입니다.
실사와 CG합성시 CG로 만든 물체가 실사 물체와 잘 어울리지 않고 튀는 경우가 많은데 그 이유 중 하나가 원래 화면을 찍을때의 주변 빛 상태를 프로그램 내에서 완전히 똑같이 재연할 수가 없기 때문입니다.
그래서 생각하다 나온 방법이 실사를 찍을 때 아예 주변의 빛 상태까지 기록해 버리고 나중에 합성용 CG를 만들 때 그 빛 데이터를 광원으로 사용해서 렌더링하면 완전히 같은 상태를 얻을 수 있어서 완벽한 합성이 가능해집니다.
그래서 실제 세계의 빛 데이터를 찍으려 했는데 기존의 방법(LDR, 칼라를 255단계로 나눔)으로는 저장이 불가능해서 높은 단계의 칼라 해상도를 가지는 파일을 만들었습니다.
그리고 그런 데이터를 저장한 이미지를 HDR Image(HDRI)라고 부릅니다.
(파일 포맷으로는 .HDR, .EXR, .MAP 등등이 있는데, 초기에는 .HDR로 많이 다뤘는데 ILM에서 .EXR이라는 새로운 공개 표준을 제정해서 그쪽으로 따라가는 분위기입니다.)

게임같은 리얼타임 그래픽에서 HDR의 의미라면 역시 광원효과입니다.
HDR이미지가 실세계의 빛을 그대로 데이터한거라서 HDR이미지를 광원으로 쓰면 그것만으로도 굉장한 리얼리티를 보장받습니다. 이건 반사 효과를 낼때 환경 매핑의 위력을 생각하시면 이해가 쉬울겁니다. (HDR이미지를 환경 맵으로도 씀으로써 반사 효과도 같이 해결할 수 있습니다. 이때는 반사 효과의 강약을 조절할때 빛이 강한 부분은 더 강하게 남는 등 좀 더 리얼한 이미지가 됩니다.)
이거에 대해서는 말보다는 여기 가보시면 그림으로 설명이 잘 되 있습니다.
http://www.debevec.org/Research/HDR/

또 최신 버젼의 DX SDK의 예제에 HDR예제가 있으니 한번 보시면 좋을겁니다.(고사양필요)
같은 기능을 HDR과 LDR버젼으로 만들어둔게 몇 개 있어서 비교해 보시면 좋을겁니다.



또한, 렌더링 파이프라인 전체에서 HDR처리(소수 칼라 지원)가 지원되면 하나의 이미지를 여러번 처리해도 칼라가 손상되지 않으므로 좀더 표현이 자유로워집니다.
비회원

HDR 에 대한 추가 질문

Post by 비회원 »

일단 글로우 효과말고 HDRI 쪽에 대한 질문입니다만...
현재 HDRI 는 실사 촬영시 피쉬아이 같은 형식으로 이미지를 떠 오는 것으로 알고 있습니다.
실시간엔진에서 이 HDRI 를 가지고 라이팅을 한다면
만약에 3D 툴에서 배경을 제작후 복잡한 V-ray 나 브라질 급의 라이팅을 준후 그것을 HDRI 로 뽑아내면
실시간 3D 엔진에서 그런 고급 랜더러로 랜더링 한 수준에 근접한 화면을 만들어 낼 수 있다는 의미인가요?
비회원

Post by 비회원 »

HDR-image를 쓴 경우 고급 랜더러로 랜더링 한 수준에 근접한 것이 아니라 보다 더 포토리얼리스틱한 장면을 렌더링 할 수 있죠.

실제(HDR-image)보다 가상(ray-tracing)이 앞설 수 는 없으니까요.
zupet
Posts: 2764
Joined: 2003-05-13 03:34
Location: NCSOFT LE팀

Re: HDR 에 대한 추가 질문

Post by zupet »

비회원 wrote:일단 글로우 효과말고 HDRI 쪽에 대한 질문입니다만...
현재 HDRI 는 실사 촬영시 피쉬아이 같은 형식으로 이미지를 떠 오는 것으로 알고 있습니다.
실시간엔진에서 이 HDRI 를 가지고 라이팅을 한다면
만약에 3D 툴에서 배경을 제작후 복잡한 V-ray 나 브라질 급의 라이팅을 준후 그것을 HDRI 로 뽑아내면
실시간 3D 엔진에서 그런 고급 랜더??랜더링 한 수준에 근접한 화면을 만들어 낼 수 있다는 의미인가요?
뭔가 오해를 하신 것 같은데 HDR 은 단어 그대로 High Dynamic Range 의 약자로서 S/N비가 비약적으로 향상되었단 뜻입니다. 그 이상도 그 이하도 아니고 HDR 을 사용함으로서 빛에 대한 자유도를 조금 더 높여줬다는 뜻일 뿐이죠. 문서를 조금 더 읽어보시고 과연 무엇을 할 수 있을지 생각해 보는게 좋을 것 같습니다.

참고로 HDR 은 Post Effect 에선 여러가지 도움이 되지만 이건 HDR 로 렌더링을 해서가 아니라 HDR 을 활용한 이펙트일 뿐입니다. 실제 렌더링한 결과물은 아니죠. DXSDK 예제에 나와있지만 HDR 렌더링 자체는 매우 심플하고 실제 렌더링 자체가 변화된 부분은 거의 없다는 것을 생각해둬야 합니다.
비회원

Post by 비회원 »

HDR-image를 이용한 라이팅은 정확히 말하면 사진(또는 비디오)를 통해 High Dynamic Range Radiance Map을 만들어 내는 것을 말합니다.

흔히 극사실 렌더링을 위해 BRDF를 HDR-image로 부터 계산해 낸다고 하죠.

바꿔말하면, 사실감을 부여하기 위해 텍스쳐맵을 쓰듯이 극사실의 렌더링을 위해서 라이트맵을 쓴다고 생각하시면 됩니다.

단순히 S/N비를 늘린 텍스쳐를 사용하는 것이 아니라 자연적인 조건의 조명 조건을 기록한 상태의 라이트맵을 사용하기 때문에 흔히 말하는 자연광 표현에 있어서는 다른 방법에 비해 탁월한 결과를 만들어 낼 수 있습니다.

실사 이미지에 가상 3D 오브젝트를 넣는다던가, 블루 스크린을 이용한 다른 조명 환경에서의 영상 합성등에 현재 많이 이용되고 있고, 게임 업계에서도 보다 현실감 있는 조명 효과(날씨에 따른 조명 변화등을 표현하기 위해)를 위해 도입하고 있는 것으로 알고 있습니다.

물론 포스트-프로세싱으로 글로우 효과나 모션 블러등에 이용되기도 하죠.
비회원

의견들이 많이 갈리시는 거 같군요..

Post by 비회원 »

저도 HDRI 를 라이트맵의 개념으로 이해하고 있었는데...
글로우 외에는 쓸데가 없다 라고 하시는 분들이 많으시군요..
그리고 DirectX 의 HDR 예제가 별 차이가 없다고 보시나요?
저는 엄청난 차이가 있다고 보는데요..
저도 라이트맵으로 오브젝트에 적용해서 주변 배경과 오브젝트가 튀지 않고 섞이는 것이라고
생각했는데...
글로우 이펙트 등의 작업에 밖에는 쓸모가 없다 하시는 분들도 계시니
참 헤깔리는 군요..
비회원

HDR

Post by 비회원 »

아 그리고 zupet 님 HDR 은 High Dynamic-range Radiance 로 알고 있는데 뜬금없이 render 라니 그 부분은
오타신가보군요..
비회원

HDR

Post by 비회원 »

지금 DirectX 의 HDR 을 보니 High Dynamic Range 의 lighting 이군요..
아무래도 위의 분들의 의견이 갈리는 것은 각기 다른 기술을 논의하고 있는 것이 아닌가 생각되는군요..
HDRI 의 HDR 은 말그대로 High Dynamic-range Randiance Image 로 극 사실주의를 위한 lightmap
이고
그냥 실시간랜더링에서는 단순히 lighting 에 적용하는 수준인 것 아닌지 모르겠군요.
뭐 어차피 기본이 되는 것은 같은 것입니다만 단순히 어디까지 확장시킬 것인가에 대한 의견차이인 것 같군요..
babyluxo
Posts: 10
Joined: 2005-04-13 17:57

Post by babyluxo »

Glow-effect나 Motion Blur는 HDR-image를 이용한 post-processing 방법 중에 일부입니다.

언리얼 엔진등에서 사용하고자 하는 것은 HDR-image를 라이트맵으로 사용해서 자연광 효과를 최종 렌더링 결과물에서 얻고자 하는 것입니다.

예를 들면, 숲속에서의 전투씬을 구현하려고 한다면 직접 디지탈 카메라와 크롬볼등의 장비를 가지고 숲으로 들어가서 HDR-image를 촬영하고 와서 렌더링 작업에 라이트맵으로 적용을 할 수 있겠죠.

단순하게 생각하면 기존의 integer 컬러값이 아닌 float 컬러값을 쓰기 때문에 학장된 텍스쳐 매핑 정도로 생각할 수 있지만, 정작 중요한 핵심은 HDR-image를 통해서 현재 위치에서의 BRDF(Bidirectional Reflectance Distribution Function)를 계산함으로써 radiance map의 역할을 수행 할 수 있다는 것입니다.

라이팅 방법으로는 실제 자연광을 그대로 모델링할 수 있다는 장점때문에 차세대 게임콘솔 디자인에도 핵심사항으로 자리잡고 있습니다(이번 GDC2005에서도 많이 언급됐더군요).

국내 게임업체에서도 오프닝 동영상들의 제작에 일부 활용한 것으로 알고 있습니다만 실제 게임 엔진에 적용한 업체가 있는지는 모르겠습니다.

EA의 경우에는 이 쪽에서 제일 잘나가는 사람을 모셔다가 아예 부서 하나를 따로 만들었습니다.

우리나라 업체에서도 적극적으로 R&D했으면 하는 바램이 있지만 보통 그냥 special effect 툴로만 평가절하하는 경우가 많더군요(이번에 한 업체에 면접에서 이 분야를 적용한 게임 엔진을 만들어 보고 싶다고 말했다가 망신만 당하고 보기좋게 떨어졌습니다 ㅜ.ㅜ).
babyluxo
Posts: 10
Joined: 2005-04-13 17:57

Post by babyluxo »

HDR-image를 이용한 렌더링 테크닉에 대해서 자세히 알고 싶으시다면, 이용방법만을 설명한 DX 문서보다는 image-based lighting SIGGRAPH course 노트나 GDC2004 course 노트 중에서 P. Debevec의 슬라이드를 참고하시기 바랍니다.

P. Debevec은 HDR-image-based rendering 방법을 고안해 낸 사람입니다. 그 사람 사이트에 가시면 관련 기술 논문을 볼 수 있습니다.
zupet
Posts: 2764
Joined: 2003-05-13 03:34
Location: NCSOFT LE팀

Re: HDR

Post by zupet »

비회원 wrote:아 그리고 zupet 님 HDR 은 High Dynamic-range Radiance 로 알고 있는데 뜬금없이 render 라니 그 부분은
오타신가보군요..
DirectX 에서 기술하는 HDR 라는 약자는 High Dynamic Range 까지가 맞습니다. 연산 과정에 부등소숫점을 적용함으로써 연산의 S/N 비율을 높여주는 작업이고 HDR Radiance 는 그러한 환경을 활용한 기법중 한가지일 뿐입니다. 제가 알기로 최근 실시간 3D 그래픽쪽에서는 HDRI 를 이용한 라이팅 기법보다는 PRT 를 이용한 라이팅 기법이 좀더 관심을 끌고 있다고 알고 있습니다만.. 어차피 둘다 비슷한 계열이긴 하겠군요.

어쨌거나.. HDRImage 라고 적어주신 것을 HDR 이라고 읽은 것은 실수네요. ^_^
zupet
Posts: 2764
Joined: 2003-05-13 03:34
Location: NCSOFT LE팀

Post by zupet »

babyluxo wrote:예를 들면, 숲속에서의 전투씬을 구현하려고 한다면 직접 디지탈 카메라와 크롬볼등의 장비를 가지고 숲으로 들어가서 HDR-image를 촬영하고 와서 렌더링 작업에 라이트맵으로 적용을 할 수 있겠?
별로 좋은 생각은 아닌것 같습니다. HDR을 구현하기 위해서는 매우 좋은 광학 장비가 필요한데 일반적으로 시중에서 판매하는 고급형 SLR 디지털 카메라도 고작해야 36bit 계조이고 색깔당 12단계정도의 강도를 갖고 있을 뿐입니다. 이런 부분은 S/N비가 훨씬 높은 특수 필름을 특수한 장비로 읽지 않으면 안될것 같습니다. HDR Image 들을 판매하는 사이트가 따로 있는 이유도 이런 것 때문이겠죠.
babyluxo wrote:단순하게 생각하면 기존의 integer 컬러값이 아닌 float 컬러값을 쓰기 때문에 학장된 텍스쳐 매핑 정도로 생각할 수 있지만, 정작 중요한 핵심은 HDR-image를 통해서 현재 위치에서의 BRDF(Bidirectional Reflectance Distribution Function)를 계산함으로써 radiance map의 역할을 수행 할 수 있다는 것입니다.
HDR Image로 제작된 Cube Map을 사용하더라도 사실적인 BRDF 은 무리라고 생각되는군요. 일단.. 모든 방향에 대한 광량을 계산해서 합산해주어야 하는데 아직 3D 카드로는 반구에 대한 광량을 적분하기에는 무리가 있습니다. 그래서 DX9 을 이용한 몇몇 HDRI를 이용한 샘플을 살펴보면 HDRI를 이용한 광원은 반사가 되거나 빛이 투가되는 물체들을 대상만을 보여주고 있습니다.

이에대한 해결책으로 제시되고 있는 것이 PRT 라고 생각합니다. 모든 방향에 대한 광량을 합산할 수 있고 각 Pixel이나 Vertex단위의 에너지를 독자적으로 연산할 수 있고 더해서 Self occlusion 의 정보도 같이 포함되 수 있기 때문이죠. PRT에 사용되는 광원은 HDR Image로 부터 생성되기도 하지만 꼭 그런 것은 아니니 HDRI Radiance 로 취급하면 안됩니다. ^_^
babyluxo wrote:라이팅 방법으로는 실제 자연광을 그대로 모델링할 수 있다는 장점때문에 차세대 게임콘솔 디자인에도 핵심사항으로 자리잡고 있습니다(이번 GDC2005에서도 많이 언급됐더군요).

국내 게임업체에서도 오프닝 동영상들의 제작에 일부 활용한 것으로 알고 있습니다만 실제 게임 엔진에 적용한 업체가 있는지는 모르겠습니다.

EA의 경우에는 이 쪽에서 제일 잘나가는 사람을 모셔다가 아예 부서 하나를 따로 만들었습니다.

우리나라 업체에서도 적극적으로 R&D했으면 하는 바램이 있지만 보통 그냥 special effect 툴로만 평가절하하는 경우가 많더군요(이번에 한 업체에 면접에서 이 분야를 적용한 게임 엔진을 만들어 보고 싶다고 말했다가 망신만 당하고 보기좋게 떨어졌습니다 ㅜ.ㅜ).
아주 없진 않은 것 같습니다. 나름대로 연구하는 개발자도 지원해주는 회사도 있는 것 같군요. 관심 있으신가요 ? ^__^
babyluxo
Posts: 10
Joined: 2005-04-13 17:57

Post by babyluxo »

DirectX에서 말하는 HDR도 궁극적으로 역시 HDR-image를 사용하기 위한 연산과정을 제공하기 위한 것이라고 생각합니다.

zupet님께서 연산과정의 S/N비율을 높이는 것을 말하셨는데, 실제로는 S/N 비율이라기 보다는 픽셀값의 range가 기존의 integer 기반 표현보다 넓어진 HDR-image를 라이트맵으로 활용하기 위한 연산과정을 DX에서 포함했다고 보는 것이 맞지 않을까요?

보통 24bit의 (R, G, B)를 integer 컬러값로 쓴다면, (DX의 경우는 정확히 어떻게 표현하는지 모르지만,) 일반적인 ILM 포맷이나 전통적인 Radiance의 HDR 표현법에서는 (R, G, B, exp)로 exponential을 위한 8bit를 추가하여 32bit로 HDR을 표현합니다. 즉 exp값에 의해서 기존보다 넓은 확장 영역의 빛을 표현할 수 있습니다.

사실 여기까지라면 단순히 영역만 넓힌 것이지만, 흔히 말하는 Glow Effect같은 post-effect 역시 이러한 HDR로 표현된 image를 라이트맵으로 생각해서 물체의 reflectance function에 따라 라이팅을 하는 것입니다.

보통 노출을 달리한 사진을 여러장 찍어서 현재 상태의 자연광에 대한 라이트맵을 HDR로 표현한 이미지로 만들어서 쓰고 있죠.

이런한 연산을 위해서 DX에서 HDR 지원 연산기능을 지원하는 것이므로 HDR과 HDR-Image를 떼어 놓고 보기는 무리가 있을 듯합니다.

zupet님께서 언급하신 PRT는 미리 계산해놓은 arbirary BRDF를 가지고 렌더링 하기 때문에 실제 자연광에 대한 BRDF를 사용하는 HDR-image를 사용한 방법에 비해 퀄리티가 떨어지고, 적용되는 object에 제약사항이 있어서 실제 차기 게임엔진에 얼만큼 영향을 미칠지는 미지수라고 생각됩니다.

PRT 알고리즘의 개발자가 MS의 DX 개발팀에 들어갔으니 DX에서는 계속 지원이 되겠죠.
Last edited by babyluxo on 2005-04-14 16:43, edited 1 time in total.
babyluxo
Posts: 10
Joined: 2005-04-13 17:57

Post by babyluxo »

zupet wrote:
babyluxo wrote:예를 들면, 숲속에서의 전투씬을 구현하려고 한다면 직접 디지탈 카메라와 크롬볼등의 장비를 가지고 숲으로 들어가서 HDR-image를 촬영하고 와서 렌더링 작업에 라이트맵으로 적용을 할 수 있겠?
별로 좋은 생각은 아닌것 같습니다. HDR을 구현하기 위해서는 매우 좋은 광학 장비가 필요한데 일반적으로 시중에서 판매하는 고급형 SLR 디지털 카메라도 고작해야 36bit 계조이고 색깔당 12단계정도의 강도를 갖고 있을 뿐입니다. 이런 부분은 S/N비가 훨씬 높은 특수 필름을 특수한 장비로 읽지 않으면 안될것 같습니다. HDR Image 들을 판매하는 사이트가 따로 있는 이유도 이런 것 때문이겠죠.?
HDR-image를 만들기 위한 장비가 생각보다 복잡하거나 고가는 아닙니다. 영화 스파이더맨2에 뉴욕시내를 표현하기 위한 Env. map용 HDR-image도 국내에서 흔히(?) 쓰이는 캐논 SLR 디지탈 카메라로 촬영했습니다. ^.^

보통 노출시간을 달리한 이미지를 여러장 찍고, 그것을 한장의 HDR-image로 만드는 방법을 사용하기 때문에, Env. map용도의 HDR-image를 만드는데는 고가의 광학장비가 필요하지 않습니다. 영화에서는 사람얼굴같은 real object에 적용하는 경우에 고가의 광학장비(사실 고가라고는 하지만 우리나라에도 놀고있는 장비가 많아 대여에는 문제없죠 -.-)를 사용하지만, 3D synthetic character를 사용하는 게임에서는 SLR 디지탈 카메라 정도면 만족스러운 결과물을 얻을 수 있습니다.

보통 캐논 카메라을 많이 쓰는데 이유는 캐논에서 카메라를 제어할 수 있는 라이브러리형태의 개발자킷을 제공하기 때문으로 알고 있습니다. 노출을 달리한 여러장의 이미지를 디지탈 카메라로 찍어야 하기 때문에 제어프로그램을 만들 수 있는 개발자킷을 제공하는 캐논쪽이 편하겠죠.

흔히 말하는 Fish-eye 이미지를 위해서는 크롬볼을 이용하는데 국내에서 파는 곳은 잘 모르지만 인터넷 주문으로 외국에 주문해도 그다지 비싸지 않습니다.
zupet wrote:
babyluxo wrote:단순하게 생각하면 기존의 integer 컬러값이 아닌 float 컬러값을 쓰기 때문에 학장된 텍스쳐 매핑 정도로 생각할 수 있지만, 정작 중요한 핵심은 HDR-image를 통해서 현재 위치에서의 BRDF(Bidirectional Reflectance Distribution Function)를 계산함으로써 radiance map의 역할을 수행 할 수 있다는 것입니다.
HDR Image로 제작된 Cube Map을 사용하더라도 사실적인 BRDF 은 무리라고 생각되는군요. 일단.. 모든 방향에 대한 광량을 계산해서 합산해주어야 하는데 아직 3D 카드로는 반구에 대한 광량을 적분하기에는 무리가 있습니다. 그래서 DX9 을 이용한 몇몇 HDRI를 이용한 샘플을 살펴보면 HDRI를 이용한 광원은 반사가 되거나 빛이 투가되는 물체들을 대상만을 보여주고 있습니다.

이에대한 해결책으로 제시되고 있는 것이 PRT 라고 생각합니다. 모든 방향에 대한 광량을 합산할 수 있고 각 Pixel이나 Vertex단위의 에너지를 독자적으로 연산할 수 있고 더해서 Self occlusion 의 정보도 같이 포함되 수 있기 때문이죠. PRT에 사용되는 광원은 HDR Image로 부터 생성되기도 하지만 꼭 그런 것은 아니니 HDRI Radiance 로 취급하면 안됩니다. ^_^
Real-time에 적용가능한 fast-algorithm 나와있지만 전체 GI에 응용하기에는 아직은 언급하신 PRT보다는 느리죠. 하지만 세이더를 지원하는 하드웨어를 기반으로 한다면 차이가 많이 나지 않는 것으로 알고 있습니다.

PRT 경우가 당장은 현실적인 리얼타임 연산이 가능한 방법이겠지만 arbitrary BRDF사용에 따른 퀄리티 문제와 제한된 오브젝트에만 적용가능한 문제점을 해결하지 않는 한 대세가 되기는 힘들다고 생각합니다.

또한 PRT는 SH-lighting을 Env. map으로 쓰고 있기 때문에 다양한 라이팅 효과를 주는데는 뛰어나지만, 사람의 눈에 보여지는 빛을 표현하기 위한 옵티칼 효과를 처리하기 위해서는 다른 방법이 추가로 더 필요하겠죠.

따라서 PRT기반의 엔진이라면 radiance source로 쓰이는 SH-Lighting만을 사용하는 것보다는 언급하신대로 SH lighting과 HDR-image lighting을 적절히 섞어서 쓰는 편이 좋다고 생각됩니다. GI쪽은 SH-lighting이 담당하고, 옵티칼 효과는 HDR-image가 담당하는 식이 되겠네요.
zupet wrote:
babyluxo wrote:라이팅 방법으로는 실제 자연광을 그대로 모델링할 수 있다는 장점때문에 차세대 게임콘솔 디자인에도 핵심사항으로 자리잡고 있습니다(이번 GDC2005에서도 많이 언급됐더군요).

국내 게임업체에서도 오프닝 동영상들의 제작에 일부 활용한 것으로 알고 있습니다만 실제 게임 엔진에 적용한 업체가 있는지는 모르겠습니다.

EA의 경우에는 이 쪽에서 제일 잘나가는 사람을 모셔다가 아예 부서 하나를 따로 만들었습니다.

우리나라 업체에서도 적극적으로 R&D했으면 하는 바램이 있지만 보통 그냥 special effect 툴로만 평가절하하는 경우가 많더군요(이번에 한 업체에 면접에서 이 분야를 적용한 게임 엔진을 만들어 보고 싶다고 말했다가 망신만 당하고 보기좋게 떨어졌습니다 ㅜ.ㅜ).
아주 없진 않은 것 같습니다. 나름대로 연구하는 개발자도 지원해주는 회사도 있는 것 같군요. 관심 있으신가요 ? ^__^
HDR을 이용한 방법을 연구 중인 제가 알고있는 게임회사는 게임 동영상에 쓸 영상 만드는 곳에 적용하는 것만을 고려하더군요.

게다가 그래픽카드 업체에서 너무 Glow effect만을 강조해서 그런지 그것만을 위한 기술이라고 생각하는 경향이 있는 듯 합니다.

HDR-image를 사용한 경우 기본적으로 radiance map이기때문에 자연광과 인간의 시각 시스템 사이의 상관관계와 밀접한 관계가 있는 effect쪽에 강점을 보입니다. 개인적으로는 Motion-blur effect나 Depth of Field effect가 Glow effect보다 게임에서 활용도가 더 높지 않을까 생각됩니다.

게임엔진에 적극 도입하기 위한 연구를 진행중인 회사에 관심은 당연히 많습니다. ^.^
Last edited by babyluxo on 2005-04-16 17:24, edited 4 times in total.
비회원

Post by 비회원 »

위의 zupet 님이 말씀하신 HDR의 정의가 맞다고 생각하는데요..

High Dynamic Range의 약자라고 생각되어 지는데..
맨처음 생겨난 말이 High Dynamic Range Image 입니다.
게임과는 전혀 상관없이 애초에 영화쪽 CG를 위해서 생겨난 것입니다.
Image Based Lighting 을 위해서 연구를 하던 것의 연장선이라고 생각합니다.

실제 FX 영화를 찍을때는 그 이전부터 크롬볼을 사용한 이미지를 계속 사용해왔습니다.
CG가 들어갈 부분을 촬영할때 촬영장에서 CG 들어갈 부분에 크롬볼을 놓고 크롬볼만 카메라로 찍어서
CG 부분에 리플렉션 맵으로 사용하던 것이 발전 되어진 형태라고 볼 수 있습니다.

리플렉션 맵으로만 사용하던 것을 노출 보정을 통해서 좀더 넓은 영역의 빛의 정보를 저장해서
CG 모델들의 라이팅에 써먹게 한것입니다. 그리고 웹에 돌아다니시면 간단하게 HDRI 이미지를
만드는 방법이 나와있습니다.
보통 수동 기능을 가진 디카 (조리개와 셔터 스피드 조절 가능한 카메라)를 가지고
HDRShop 프로그램을 사용해서 만들 수 있습니다.

영화에서 카메라로 찍은 영상에 CG를 합성할때 배경과 잘 붙도록 하기 위해서 HDRI를 쓰는 것입니다.
지금은 뭐 실제 CG 작업에서 많이 사용되고 있지요.. (그냥 아무 HDRI 이미지로 라이팅하는 정도로만)

CG에서 가장 어려운 작업이 바로 라이팅인데 (CG 작업에서 퀄리티를 좌우하는것은 라이팅입니다.)
좀더 정확한 라이팅을 위해서 만들어낸 것이라고 볼 수 있죠..

뭐 굳이 게임에서 HDRI를 쓰는 이유는 잘 이해가 가지 않지만..
언리얼 엔진 3에서 64비트 HDR 렌더링 파이프라인이라고 나와있던데..
좀더 넓은 색상을 지원하기 위한 방법이라고 생각됩니다.

색을 RGB로만 생각하지 마시고 HSV 로 생각해서 접근하시면 바로 이해되실겁니다.
여기서 V 값이 보통 0~1 값인데..
HDR 에서는 v 값이 1을 오버해서 넘어갑니다. 1을 오버한 색은 라이트로 취급할수도 있더군요...

HDRI 관련 웹사이트는 http://www.debevec.org/ 로 가셔서 참조..
Locked