본문 바로가기

전체 글

DirectX Shader LUT 필터 코드 구현 안녕하세요 넬다이입니다. 오늘은 LUT에 대해서 배워보도록 할 생각인데요 LUT는 무엇인가? 아마 잘 모르시는 분들도 계실 거예요. 저도 처음에 이게 뭔가 싶었거든요. 기존에는 영상 쪽이나 포토샵 쪽에서 사용하던 기법으로 분위기를 변경하거나 할 때 사용을 한 것 같으며 후처리 필터로써 상대적으로 낮은 비용으로 최고의 효과를 얻을 수 있다고 생각을 하는 기법입니다. 자 일단 직접 보시면 편하실 거예요 지금 보시는 화면은 다른 LUT를 이용해서 필터를 적용시킨 모습입니다. 분명 하나의 씬이지만 LUT의 따라서 분위기가 전혀 다르게 바뀌는데요 LUT텍스처는 이런 형태로 되어있어요 저도 이 당시에 저런 텍스처를 처음 봤기 때문에 여러분들도 처음 보셨을 수도 있고 이미 알고 계신 분들도 있을 거예요 하지만 지금 .. 더보기
DirectX Shader Bloom 코드 구현 안녕하세요 넬다이입니다. 오늘은 Bloom에 대해서 배워보는 시간을 가져볼까 하는데요 Bloom은 무엇일까? Bloom은 렌더링 되는 부분에서 밝은 부분을 좀 더 밝게 표현하는 기법입니다. 이를 통해서 주변의 밝은 부분이 있다면은 그 경계선을 기준으로 어두운 부분으로 번지는 현상을 만들어 낼 수 있습니다. 자 직접 봐보시면 이해하기 쉽습니다. 첫 번째로 렌더링 된 화면에서 밝은 부분을 추출합니다. 이렇게 밝은 부분을 추출을 하게 된 후 이것을 Blur처리를 하게 되는데요 위에 렌더링에서 블러 처리를 하게 되면은 이런 모양으로 변하게 되고 결과적으로는 이런 모습이 됩니다 이와 마찬가지로 다른 렌더링 화면도 준비를 했는데요 직접 봐보시지요 위에 3단계를 진행한 결과입니다. 자 그러면 간단하게 보기 위해서 코.. 더보기
DirectX Blur Shader 코드 구현 안녕하세요 넬다이입니다. 오늘은 셰이더에서 Blur에 대해서 직접 해볼 생각인데요 Blur는 쉽게 생각해서 흐리게 만들거나 뿌옇게 만드는 작업을 하는 것입니다. 저 같은 경우에는 SSAO를 완료하고 나온 작업물을 blur처리를 통해서 부드럽게 표현한 후 이미지를 적용시키는 작업을 진행했는데요 직접 한번 보시면 좋을 것 같습니다. 자 일단 전체 코드는 이렇습니다 texture g_BlurTex; sampler g_BlurSam = sampler_state { texture = g_BlurTex; AddressU = clamp; AddressV = clamp; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = LINEAR; }; float m_TexW = 1600... 더보기
DirectX SSAO(Screen Space Ambient Occlusion) Shader 코드 구현 안녕하세요 넬다이입니다. 오늘은 SSAO에 대해서 공부를 해볼 생각입니다. SSAO (Screen Space Ambient Occlusion)은 사실적인 광원 표현 기술이라고 생각하면 좋습니다. 화면의 특정 부분에 기하학 기반으로 밝고 어두운 부분을 계산하여 게임의 그래픽에 적용하는 기술로써 어두워야 하는 부분은 어둡게 표현을 게임화면에 표현해줌으로써 사실적인 보다 현실적인 조명효과와 입체감을 표현해 주는 기술입니다. 앰비언트 오클루전은 여러기술이 존재하며 SSAO , HBAO , HBAO+등과 같은 기법들이 존재하며 우리가 다룰 내용은 SSAO입니다. 가장 기본적이고 프레임 저하가 적은 SSAO는 모니터에 렌더링 되는 부분만 영역으로 인식하여 물체나 표면에 앰비언트 오클루전을 적용함으로써 일정 수준의 .. 더보기
DirectX 3D 기법 및 Shader 시작하기. 안녕하세요 넬다이입니다. 이번에 이렇게 글을 쓰게 된 것은 필자가 예전에 만들어 놓은 게임에 대해서 한번 뜯어보면서 여러분들에게 많은 내용을 선물해 드리고 싶어서 이렇게 글을 남기게 되었습니다. 예전에 저는 포토 폴리 오용 게임을 만들었는데요 그 사진은 아래와 같습니다 이게 제가 만든 킬러 이즈 데드 모작한 작품입니다. 이 작품을 통해서 제가 여러분들에게 각각 기법들이나 셰이더 Shader 파일들을 하나하나 뜯어보면서 강의를 해볼까 합니다. 저는 이걸 처음에 구현할 때는 각족 예제 소스들도 부족했고 그에 따라서 개발에 필요한 지식들도 많이 부족한 상태로 시작을 했는데 특히 포트폴리오를 만들 때는 영문으로 된 사이트에 들어가서 원리를 깨우치고 그것을 직접 구현해가면서 하나하나 적용시킨 거 같습니다 필자의 .. 더보기
(C/C++ 속성 정리) 23일 차 : 분활컴파일 및 안녕하세요 넬다이입니다. 오늘은 분할 컴파일에 대해서 알아볼까 합니다. 코딩을 하다 보면은 줄 수가 정말 몇천 자까지 넘어가는 경우도 있는데요 이것을 적절하게 파일을 나눠서 가독성을 높여주며 관리의 용의 하게 만들어 줄 수 있는 장점을 가지고 있으며 어렵지 않은 내용이니 다들 잘 따라오실 것이라고 믿습니다. 분할 컴파일 한 파일 안에 모든 코드를 작성해도 되지만 프로젝트가 커지게 되면 가독성이 떨어지게 되는데요 우리는 이것을 해결하기 위해서 분할 컴파일을 사용하게 됩니다. 분할 컴파일을 하게 되면은 각각 기능의 맞게 함수화를 하여 다른 파일에 모아두는데요 예를 들어서 Math라는 파일 안에는 계산을 위한 함수들만 넣어놓게 된다면은 제가 Math관련 함수를 찾아야 한다면은 Math파일만 찾으면 되기 때문에.. 더보기
(C/C++ 속성 정리) 22일 차 : 함수포인터를 이용한 사칙연산 계산기 만들기 안녕하세요 넬다이 입니다. 오늘은 함수포인터를 이용해서 계산기를 만들어 보는 시간을 가져볼까 합니다. 짧은 내용이니 부담갖지 마시고 다들 파이팅입니다. 계산기만들기 자 계산기를 만들어 볼껀데요 사칙연산 계산을 위해서 일단 함수들은 적어보겠습니다. int PlusFunc(int iFirst, int iSecond); int MinusFunc(int iFirst, int iSecond); int MultiFunc(int iFirst, int iSecond); int DivFunc(int iFirst, int iSecond); 자 일단 계산을 하기위한 함수 4개를 선언하고 이에 맞는 정의를 해보도록 하겠습니다. int PlusFunc(int iFirst, int iSecond) { return iFirst +.. 더보기
(C/C++ 속성 정리) 21일 차 : 함수포인터 안녕하세요 넬다이입니다. 오늘은 함수 포인터를 배워보도록 할 텐데요 포인터를 지나온 여러분들이라면은 쉽게 이해가 가실 것이라고 생각하며 다들 파이팅입니다 ㅎ 함수 포인터 함수 포인터는 특정 함수에 대한 메모리 주소를 담을 수 있는 것이다. 함수 또한 메모리 주소를 가지고 있으며 그 함수에 해당하는 기계어 코드가 저장된 메모리 블록의 시작 주소입니다. 장점은 재사용성이 극대화되는 점이 있습니다. intSum(int iA, int iB) { return iA + iB; } 이런 Sum을 해주는 함수가 있는데요 이를 함수 포인터로 담아서 사용을 해보도록 하겠습니다. #include using namespace std; intSum(int iA, int iB); void main(void) { //함수 포인터를.. 더보기