Fx에서 blend, sampler 설정하는게 찾기도 더 쉽고 코드 작성이 더 빠른거 같다 어쩌다 보니, 특히 외부 FX 파일을 사용하기 위해 shader.fx 파일을 파싱해서 hlsl 과 pass, sampler, technique 를 분리해주는 전처리기를 작성하였다. 문제는, D3DCompile 을 통해 빌드하면 빌드하는데 오래 걸린다 Pipeline State 에서 HLSL 디버깅에 진입시 버벅인다. 반면 같은 소스를 header로 컴파일하여 include 하면 문제가 없었다. 좀더 제대로 짜서 effect db 같은 걸 만들어야 할거 같다. 이렇게 살아야하나 방황을 했는데, 인터넷에서 괜찮은 샘플을 발견하였다. 확실히 xml 이 파싱이 나은듯, 그냥 fx를 파싱하다 보니 시간만 잡아먹은듯하다. i..
Bloom 추가 중에 너무 빨리 어두어지는거 같아서 살펴보았다. https://youtu.be/YRz6NBqDffg miniEngine 에서는 adapt 과정을 아래와 같이 정해놓은 target 에 대해 한다. exposure = lerp(exposure, targetExposure, AdaptationRate); exposure = clamp(exposure, MinExposure, MaxExposure); https://www.slideshare.net/youpyo/hdr-8480350 p24, 25 에서는 아래와 같은 공식을 사용하였다. 원전은 http://wiki.gamedev.net/index.php/D3DBook:High-Dynamic_Range_Rendering 인데 날라갔고, 링크 깨진 한..
Tone mapping 은 됐으니 내부의 다른 효과를 구현해보자 R11G11B10 은 이래저래 적당한 포맷인듯. 그 밖의 R8G8B8M 등의 압축에 대해선 아래 글에 나와있다. http://lousodrome.net/blog/light/tag/rgbm/ https://www.slideshare.net/youpyo/hdr-8480350 (p13) Bloom 및 Glare 에 대해선 위의 글에 p10 나와있다 문제는 이걸 어케 구현하느냐인데, https://www.slideshare.net/youpyo/hdr-8480350 (p14) 위에건 대략적인 개론을 설명해놨는데 머 어떻게 구현해야할지 감이 안잡혔다. 21페이지 평균 휘도를 계산하기 위한 downsampling 코드는 나와있다. 그 밖에 암순응, 간상..
다음은 Geometry shader를 이용한 방법이다 법선 방향으로의 확대 및 뒷면 그리기가 아닌 다각형 가장자리에 윤곽선을 붙일 지 여부 판정 에지 (가장자리)을 따라 라인을 그립니다 http://zerogram.info/?p=941 Deferred Rendering (UE4) 기반에 대해 몇몇 실험이 아래 링크에 나와있다. http://rarihoma.xvs.jp/2015/02/22/1/#worldnormal- 단일 객체에 대한 depth map, noraml map, color map 을 sobel filter 링 후 결합 http://replay.unrealsummit.co.kr/data/usmp2016/pre002.pdf 개괄적 설명이 있는데, Epic Games Japan 의 Jun 이 제안했..
Forward pass 가 너무 많이 잡아먹기에, 투명이 없는 배경 모델을 찾아서 바꾸고, DirectXTex가 PNG 읽을 때 강제로 32 BIT RGBA로 컨버팅 하기에 차라리 BGRX로 읽도록 바꿨다. 이전에 BGRX의 경우 alpha가 없는 걸로 처리하도록 했기에 뒷단은 알아서 된다. 내부적으로 WinCodec 쪽을 사용하기에 멀 할수가 없다. FreeImage를 사용한 INFOMSPGMT 의 경우는 아래와 같이 처리한다. // Check to see if the texture has an alpha channel. m_bIsTransparent = ( FreeImage_IsTransparent( dib ) == TRUE ); Position 을 Depth 부터 reconstruction 하게 바..
이전에는 사진에서 쓰이는 톤매핑 구현하다(했다가 그만 뒀는데) 치웠는데 검색어를 바꾸니 더 나오네; https://www.slideshare.net/youpyo/hdr-8480350 https://www.slideshare.net/cagetu/ndc11-hdr 40 페이지 부터 언급이 되어있다. 42 페이지 Reinhard 가 나온다. 그 다음이야기가 아래에서 이어진다. http://egloos.zum.com/cagetu/v/6198009 우선 이걸 기반으로 ModelViewer를 해석해보자. ToneMappingUtility.hlsli 에서 float3 TM_Reinhard(float3 hdr, float k = 1.0) { return hdr / (hdr + k); } // The next gener..
관련 글은 Game programming gem 2권에 존재한다. http://www.gpgstudy.com/gpg2/gpg2s5-1draft.html 몇몇 방법은 너무 오래되었다. 물론 거기서 normal 확장 방법을 설명하는데 그건 아직 현역이다. 그냥 단순히 구현한다면, float3 pos = input.position + input.normal * EdgeSize * 0.01; matrix clipToProj = mul(projection, mul(view, model)); return mul(clipToProj, float4(pos, 1.0)); 아래와 같이 가까워지면 굵어지는 문제 존재한다 굵기를 고정시키려면, 카메라와의 거리를 고려해야한다. 아래 방법은 대충 비례식이 맞는거 같은데 y/pos..
이까지 오는데 너무 많이 걸렸는데, 여기서 또 Pixel Query를 하네 Deferred context랑 안맞기도 한데 그냥 context로 해도 stall 이 있는듯. https://www.3dgep.com/forward-plus/ 에서는 이전 프레임 (또는 이전 2 프레임)의 쿼리 결과가 시간적 일관성 이론 [15] 에 의존하는 현재 프레임의 쿼리 결과 대신 사용되는 경우 실속을 피할 수 있습니다 . 이렇게하면 여러 광원에 대해 여러 쿼리 개체를 만들어야하기 때문에 쿼리 개체를 여러 프레임에 걸쳐 유지해야하는 경우 다시 쿼리 개체를 사용할 수 없기 때문에 이러한 쿼리 개체를 다시 사용할 수 없습니다. 또, 다시 Query pool 을 만들어야하나. 만들어도 저 시간적 일관성이 어떻게 얻어지는거지; ..
http://zerogram.info/?p=1613 에 기반하여 실험을 진행하고 있다.
- Total
- Today
- Yesterday