안녕하세요 넬다이입니다.
이번에 이렇게 글을 쓰게 된 것은 필자가 예전에 만들어 놓은 게임에 대해서 한번 뜯어보면서 여러분들에게 많은 내용을 선물해 드리고 싶어서 이렇게 글을 남기게 되었습니다.
예전에 저는 포토 폴리 오용 게임을 만들었는데요 그 사진은 아래와 같습니다
이게 제가 만든 킬러 이즈 데드 모작한 작품입니다.
이 작품을 통해서 제가 여러분들에게 각각 기법들이나 셰이더 Shader 파일들을 하나하나 뜯어보면서 강의를 해볼까 합니다.
저는 이걸 처음에 구현할 때는 각족 예제 소스들도 부족했고 그에 따라서 개발에 필요한 지식들도 많이 부족한 상태로 시작을 했는데 특히 포트폴리오를 만들 때는 영문으로 된 사이트에 들어가서 원리를 깨우치고 그것을 직접 구현해가면서 하나하나 적용시킨 거 같습니다
필자의 코드에서 구현된 셰이더들의 렌더 타겟만 해도 이 정도입니다.
m_pTargetMgr->Render_Target(L"Target_Albedo");
m_pTargetMgr->Render_Target(L"Target_Normal");
m_pTargetMgr->Render_Target(L"Target_Depth");
m_pTargetMgr->Render_Target(L"Target_Reflect");
m_pTargetMgr->Render_Target(L"Target_Shade");
m_pTargetMgr->Render_Target(L"Target_Specular");
m_pTargetMgr->Render_Target(L"Target_Shadow");
m_pTargetMgr->Render_Target(L"Target_ShadowMap");
m_pTargetMgr->Render_Target(L"Target_Ramp");
m_pTargetMgr->Render_Target(L"Target_SSAO");
m_pTargetMgr->Render_Target(L"Target_Bloom");
m_pTargetMgr->Render_Target(L"Target_BloomBlurX");
m_pTargetMgr->Render_Target(L"Target_BloomBlurY");
m_pTargetMgr->Render_Target(L"Target_BloomBlurXX");
m_pTargetMgr->Render_Target(L"Target_BloomBlurYY");
m_pTargetMgr->Render_Target(L"Target_BloomClear");
m_pTargetMgr->Render_Target(L"Target_Blur");
m_pTargetMgr->Render_Target(L"Target_BlurX");
m_pTargetMgr->Render_Target(L"Target_BlurY");
m_pTargetMgr->Render_Target(L"Target_Blend");
m_pTargetMgr->Render_Target(L"Target_HDR");
m_pTargetMgr->Render_Target(L"Target_Water");
m_pTargetMgr->Render_Target(L"Target_LastWater");
m_pTargetMgr->Render_Target(L"Target_MotionBlurCurrent");
m_pTargetMgr->Render_Target(L"Target_MotionBlurLast");
m_pTargetMgr->Render_Target(L"Target_MotionBlur");
m_pTargetMgr->Render_Target(L"Target_AfterImage");
m_pTargetMgr->Render_Target(L"Target_Alpha_Add");
m_pTargetMgr->Render_Target(L"Target_Alpha_Multi");
m_pTargetMgr->Render_Target(L"Target_Final");
m_pTargetMgr->Render_Target(L"Target_Fog");
m_pTargetMgr->Render_Target(L"Target_LUT");
m_pTargetMgr->Render_Target(L"Target_RadianBlur");
m_pTargetMgr->Render_Target(L"Target_GodRay");
m_pTargetMgr->Render_Target(L"Target_FX");
m_pTargetMgr->Render_Target(L"Target_Environment");
또한 테스트용으로 그리고 있는 렌터타겟 개수도 꽤 많습니다.
지금 화면을 가리고 있는 게 전부 렌더타겟이라고 보면 된다. 각각의 렌터타겟들을 이용해서 효과를 만들고 그를 이용해서 또 조합해서 새로운 화면을 만들어 내고 수많은 오브젝트들이 그려지고 있어도 속도 또한 느리지 않다.
꽤 오래된 프로젝트임에도 제가 이렇게 포스팅하려고 하는 이유는 제가 이 당시 개발할 때 느낀 막막함을 조금이나마 해소해 드릴 수 있지 않을까 해서입니다. 포스팅을 하면서 간단한 원리와 함께 코드를 공개를 진행하는 게 어떨까 했습니다.
특히 지금 배우고 계신 분들 중에서 엔진이나 셰이더 쪽을 파고 계시는 여러분들이라면 더욱더 필요하지 않을까 싶습니다.
제가 주로 공부했던 파트가 엔진과 셰이더이기 때문입니다. 지금은 엔진 서버 클라 다 개발을 하고 있는 게임 개발자이지만 앞으로 개발을 목표로 하시는 분들에게 이러한 글 하나가 소중할 것이라고 생각했습니다.
또 한 이 글을 토대로 여기서 보여드리지 못한 코드에 대해서도 여러분들의 요청에 의해 추가적으로 구현해보는 시간도 가질 수 있다면 좋을 거 같았습니다. 무언가 소통하면서 쌓아나가는 느낌이 좋을꺼같았습니다.
fx 파일도 이 정도 있네요
그 당시 Frame을 올리기 위해서 많은 코드를 작성하고 최적화도 한 것도 맞습니다.
저렇게 사진상 수많은 오브젝트들이 있는데도 프레임을 60선을 유지하고 있는 이유 또한 제가 여러 개 뒤지면서 각종 프레임을 살릴 수 있는 기법들을 넣었기 때문이라고도 생각합니다. 또 한 LUT같이 카메라 기법 또한 개발을 해보았습니다.
이렇듯 많은 시간과 밤샘 작업을 통해서 만들어진 제 작업물을 공개하겠습니다 앞으로 많은 관심 또한 부탁드리겠습니다. 개발자는 서로 공유하며 실력이 발전해 나간다고 생각하며 글을 마쳐보겠습니다. 제 자랑도 좀 하고요. 그리고 여러분들의 이야기도 듣고싶은것도 있습니다.
그럼 이만 넬다이 물러가겠습니다.
다음 포스팅때 뵐께요.
'개발 > DirectX3D' 카테고리의 다른 글
DirectX Shader LUT 필터 코드 구현 (0) | 2020.07.19 |
---|---|
DirectX Shader Bloom 코드 구현 (2) | 2020.07.18 |
DirectX Blur Shader 코드 구현 (9) | 2020.07.17 |
DirectX SSAO(Screen Space Ambient Occlusion) Shader 코드 구현 (0) | 2020.07.16 |