프로젝트 개요
- 목적
ShaderPixel 프로젝트의 주된 목적은 OpenGL을 통해 다양한 그래픽 객체가 논리적으로 연결되도록 매트릭스 스택을 조작하며, 쉐이더를 활용해 고차원적인 렌더링을 구현하는 것이다. 신체 부위와 같은 독립적인 개체들이 상호 연결된 상태로 동작할 수 있도록 구성하면서, 쉐이더의 복잡한 조명과 최적화를 경험할 수 있다. 또한 이 프로젝트를 통해 3D 공간에서 창의적인 비주얼 효과를 표현할 수 있다. - 일반적인 규칙
- Makefile 또는 빌드 파일 제공: 프로젝트 컴파일을 위해 Makefile, CMake 또는 Premake 등의 빌드 파일을 제공해야 한다.
- OpenGL 4.0 이상 사용: OpenGL을 사용할 경우 최소 버전 4.0을 사용하며, 쉐이더는 버전 330을 사용해야 한다. Vulkan을 사용할 수도 있다.
- 라이브러리 사용 허용: 윈도우 관리, 오브젝트 로딩, 수학 연산(Matrix/Vector/Quaternions), 사운드, GUI를 위한 라이브러리를 사용할 수 있다. 단, 평가 시 불필요한 라이브러리 파일은 업로드하지 않아야 한다.
필수 구현 사항
- 장면 구성
- 장면은 배경 오브젝트와 렌더링 오브젝트 두 가지로 구성해야 한다.
- 배경 오브젝트는 아트 작품이 전시된 건물처럼 장면의 배경 역할을 한다. 이 배경에는 자유롭게 텍스처와 쉐이더를 적용할 수 있다.
- 렌더링 오브젝트는 각종 쉐이더가 적용되어 최종적으로 렌더링되는 오브젝트이다. 모든 필수 쉐이더를 렌더링하기 위해 다양한 오브젝트가 필요하다.
- 자유로운 이동: 키보드와 마우스를 사용해 장면 내부를 자유롭게 탐색할 수 있어야 한다. 이를 통해 다양한 쉐이더를 직접 확인할 수 있다.
- 장면은 배경 오브젝트와 렌더링 오브젝트 두 가지로 구성해야 한다.
- 쉐이더 시스템
- 쉐이더 시스템은 레이마칭 객체가 창문처럼 홀로그램 형태로 보이도록 구현해야 한다. 쉐이더의 유니폼 설정은 Shadertoy와 같은 사이트를 참고하여 구성할 수 있다.
- 필수 쉐이더 목록
- 이 프로젝트에서는 다음의 쉐이더를 모두 구현해야 한다. 각 쉐이더는 지정된 기능과 효과를 만족해야 하며, 이를 통해 창의적인 그래픽 환경을 만들어야 한다.
- Mandelbox: 조명 효과가 포함된 프랙탈 형태로, 그림자 효과는 선택 사항이다.
- 기타 3D 프랙탈: Mandelbox와는 다른 3D 프랙탈로, 조명과 주변광 차폐, 그림자 효과를 포함해야 한다.
- IFS (Iterated Function System): 반복 함수 시스템을 사용해 복잡한 패턴을 렌더링한다.
- 반투명 오브젝트: 볼륨 레이마칭 기법을 사용해 반투명 효과를 렌더링하며, 표면에는 비볼륨성 확산 및 반사광 조명이 적용되어야 한다.
- 볼륨 구름: 볼륨 조명과 구름, 더 높은 밀도의 내부 오브젝트가 함께 표현되어야 한다. 밀도가 높은 오브젝트는 구름에 그림자를 드리워야 한다.
- 3D 세계 (다른 세계): 3D 공간에서 실제 창문처럼 다른 세계가 보이는 쉐이더로, 퍼스펙티브와 깊이감을 느낄 수 있어야 한다.
- 2D 쉐이더: 렌더버퍼를 사용한 창의적인 2D 쉐이더로, 화면에 독특한 효과를 표현할 수 있다.
- 3D 또는 4D 쉐이더: 추가적으로 구현할 수 있는 3D 혹은 4D 쉐이더로, 다차원적인 시각 효과를 표현할 수 있다.
- 이 프로젝트에서는 다음의 쉐이더를 모두 구현해야 한다. 각 쉐이더는 지정된 기능과 효과를 만족해야 하며, 이를 통해 창의적인 그래픽 환경을 만들어야 한다.
- 코드 및 구조
- 명확한 코드 작성: 각 쉐이더와 오브젝트의 코드는 명료하고 가독성이 좋아야 하며, 명확한 변수명과 주석을 통해 가독성을 유지해야 한다.
- 창의적인 프레임 구성: 단순히 큐브 안에 쉐이더를 렌더링하지 않고 참신한 프레임을 통해 독창적인 시각 효과를 구성해야 한다.
보너스 구현
기본적인 쉐이더 구현이 완벽하게 완료된 후 추가 기능을 통해 프로젝트의 완성도를 높일 수 있다. 필수 요구 사항이 완벽히 충족되지 않으면 보너스는 평가되지 않으며, 모든 필수 기능이 완벽히 작동해야만 보너스가 인정된다.
- 핫 리로드: 쉐이더 소스가 수정되면 즉시 반영되도록 핫 리로드 기능을 추가한다.
- 추가 조명: 장면에 더 많은 조명을 추가하여 쉐이더에 영향을 줄 수 있도록 한다.
- 오브젝트 그림자 투사: 쉐이더가 적용된 3D 오브젝트가 장면에 그림자를 드리우도록 설정한다.
- 가까이 접근 시 쉐이더 조작 가능: 뷰가 쉐이더 가까이 접근하면 쉐이더 설정 UI가 나타나고, 바로 반영되도록 한다.
- 포탈 구현: 특정 쉐이더 내부로 들어가거나 나갈 수 있는 포탈을 통해 다채로운 장면을 경험할 수 있도록 한다.
- 사운드 입력: 사운드를 입력으로 받아 반응하는 쉐이더를 만들어 소리와 연동된 비주얼 효과를 구현한다.
- VR 지원: VR 기기를 통해 과제 결과물을 감상할 수 있도록 한다.
- AR 스테이징: 현실 테이블 위에 AR로 장면을 투영하여 경험할 수 있도록 한다.
- 카메라 충돌 감지: 오브젝트 내부에 들어가면 카메라 충돌이 발생하도록 설정하여 몰입감을 더한다.
- 포스트 프로세싱 효과: Bloom, 톤 매핑, 모션 블러 등 포스트 프로세싱 효과를 추가하여 시각적 퀄리티를 극대화한다.
'Computer Graphics > ShaderPixel' 카테고리의 다른 글
ShaderPixel - 5. 색 구슬 구현 (0) | 2024.11.17 |
---|---|
ShaderPixel - 4. 버텍스 셰이더에서 계산한 노말 값과 월드 좌표는 실제로 프래그먼트에 그려지는 픽셀의 월드 좌표와는 다르다 (2) | 2024.11.15 |
ShaderPixel - 3. 렌더링 전략 고민.. (1) | 2024.11.13 |
ShaderPixel - 2. 바닥 구성 (Normal map) (0) | 2024.11.11 |
ShaderPixel - 1. 배경 구성 (Skybox) (0) | 2024.11.11 |