Skip to content

mng990/DirectX113D

Repository files navigation

🛠️ DirectX11 3D 렌더링 엔진 데모

C++



🎨 모델 렌더링


애니메이션







스키닝과 트위닝으로 자연스러운 모션과
부드러운 애니메이션 간 전환을 구현했습니다.





인스턴싱







동일한 메쉬와 머테리얼을 가진 여러 물체의 위치 정보를 모아
하나의 자료형으로 전달해 드로우콜을 감소시켰습니다.
인스턴싱으로 물체들을 렌더링하기 위해
Update 시 마다 object가 소유한 Component(Renderer)로 렌더링하던 로직을
InstanceManger로 통합해 렌더링 하도록 수정했습니다.





🗻 지형/파티클


Greed (Height Map)







8비트 포멧의 Height Map 정보를 파싱해
그리드의 높낮이를 렌더링 했습니다.





Sky Box







카메라를 구의 중심에 고정한 후
카메라의 회전에 따라 메쉬가 움직이도록 조정해
Sky box를 구현했습니다.





Billboard







카메라의 시선 벡터와 물체의 위치 정보를 통해
물체가 카메라의 시선 벡터에 맞춰 회전하도록 구현했습니다.





🎯 Collision


Ray picking







뷰포트(2D)에서 월드 스페이스(3D)로 좌표를 변환시켜
마우스가 위치한 지점에서 빛을 쏴
충돌한 물체가 클릭에 반응하도록 했습니다.





Button Demo (응용)







Orthographic 카메라로
특정 위치에 고정된 버튼을 그린 후
Ray Picking으로 사용자 입력에 반응하도록 구현했습니다.





💡 조명


Ambient / Diffuse / Specular



lightDemo_1



물체와 빛의 Ambient, Diffuse, Specular 정보를 섞어
빛의 방향에 따른 자연스러운 색상을 구현했습니다.

Specular의 경우
빛의 역방향 벡터와 일치하는 노말 벡터 뿐 아니라
해당 노말 벡터와 pi 가량의 사잇값을 가진 후면 벡터에도
Specular 효과가 적용되는 문제가 있었습니다.

이를 수정하기 위해 acos을 활용해 세타를 추출하고
해당 값이 0.75 * pi를 넘어가는 경우
효과가 적용되지 않도록 제한을 걸어 해결했습니다.



Emissive







카메라의 시선 벡터와 물체의 노말 벡터를 섞어
물체의 외곽선을 강조하는 조명을 구현했습니다.





Normal Mapping



NormalMapping



RGB 정보로 저장된 노말맵을 파싱한 후
해당 정보를 Tangent Space에서 World Space로 변환 후
쉐이더 파일에서 추가적인 연산을 통해
물체의 디테일한 질감을 구현했습니다.





About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published