Computer Graphics/ShaderPixel

ShaderPixel - 0. 과제 해석

surkim 2024. 10. 30. 13:42

프로젝트 개요

  1. 목적
    ShaderPixel 프로젝트의 주된 목적은 OpenGL을 통해 다양한 그래픽 객체가 논리적으로 연결되도록 매트릭스 스택을 조작하며, 쉐이더를 활용해 고차원적인 렌더링을 구현하는 것이다. 신체 부위와 같은 독립적인 개체들이 상호 연결된 상태로 동작할 수 있도록 구성하면서, 쉐이더의 복잡한 조명과 최적화를 경험할 수 있다. 또한 이 프로젝트를 통해 3D 공간에서 창의적인 비주얼 효과를 표현할 수 있다.
  2. 일반적인 규칙
    • Makefile 또는 빌드 파일 제공: 프로젝트 컴파일을 위해 Makefile, CMake 또는 Premake 등의 빌드 파일을 제공해야 한다.
    • OpenGL 4.0 이상 사용: OpenGL을 사용할 경우 최소 버전 4.0을 사용하며, 쉐이더는 버전 330을 사용해야 한다. Vulkan을 사용할 수도 있다.
    • 라이브러리 사용 허용: 윈도우 관리, 오브젝트 로딩, 수학 연산(Matrix/Vector/Quaternions), 사운드, GUI를 위한 라이브러리를 사용할 수 있다. 단, 평가 시 불필요한 라이브러리 파일은 업로드하지 않아야 한다.

필수 구현 사항

  1. 장면 구성
    • 장면은 배경 오브젝트렌더링 오브젝트 두 가지로 구성해야 한다.
      • 배경 오브젝트는 아트 작품이 전시된 건물처럼 장면의 배경 역할을 한다. 이 배경에는 자유롭게 텍스처와 쉐이더를 적용할 수 있다.
      • 렌더링 오브젝트는 각종 쉐이더가 적용되어 최종적으로 렌더링되는 오브젝트이다. 모든 필수 쉐이더를 렌더링하기 위해 다양한 오브젝트가 필요하다.
    • 자유로운 이동: 키보드와 마우스를 사용해 장면 내부를 자유롭게 탐색할 수 있어야 한다. 이를 통해 다양한 쉐이더를 직접 확인할 수 있다.
  2. 쉐이더 시스템
    • 쉐이더 시스템은 레이마칭 객체가 창문처럼 홀로그램 형태로 보이도록 구현해야 한다. 쉐이더의 유니폼 설정은 Shadertoy와 같은 사이트를 참고하여 구성할 수 있다.
  3. 필수 쉐이더 목록
    • 이 프로젝트에서는 다음의 쉐이더를 모두 구현해야 한다. 각 쉐이더는 지정된 기능과 효과를 만족해야 하며, 이를 통해 창의적인 그래픽 환경을 만들어야 한다.
      1. Mandelbox: 조명 효과가 포함된 프랙탈 형태로, 그림자 효과는 선택 사항이다.
      2. 기타 3D 프랙탈: Mandelbox와는 다른 3D 프랙탈로, 조명과 주변광 차폐, 그림자 효과를 포함해야 한다.
      3. IFS (Iterated Function System): 반복 함수 시스템을 사용해 복잡한 패턴을 렌더링한다.
      4. 반투명 오브젝트: 볼륨 레이마칭 기법을 사용해 반투명 효과를 렌더링하며, 표면에는 비볼륨성 확산 및 반사광 조명이 적용되어야 한다.
      5. 볼륨 구름: 볼륨 조명과 구름, 더 높은 밀도의 내부 오브젝트가 함께 표현되어야 한다. 밀도가 높은 오브젝트는 구름에 그림자를 드리워야 한다.
      6. 3D 세계 (다른 세계): 3D 공간에서 실제 창문처럼 다른 세계가 보이는 쉐이더로, 퍼스펙티브와 깊이감을 느낄 수 있어야 한다.
      7. 2D 쉐이더: 렌더버퍼를 사용한 창의적인 2D 쉐이더로, 화면에 독특한 효과를 표현할 수 있다.
      8. 3D 또는 4D 쉐이더: 추가적으로 구현할 수 있는 3D 혹은 4D 쉐이더로, 다차원적인 시각 효과를 표현할 수 있다.
  4. 코드 및 구조
    • 명확한 코드 작성: 각 쉐이더와 오브젝트의 코드는 명료하고 가독성이 좋아야 하며, 명확한 변수명과 주석을 통해 가독성을 유지해야 한다.
    • 창의적인 프레임 구성: 단순히 큐브 안에 쉐이더를 렌더링하지 않고 참신한 프레임을 통해 독창적인 시각 효과를 구성해야 한다.

보너스 구현

기본적인 쉐이더 구현이 완벽하게 완료된 후 추가 기능을 통해 프로젝트의 완성도를 높일 수 있다. 필수 요구 사항이 완벽히 충족되지 않으면 보너스는 평가되지 않으며, 모든 필수 기능이 완벽히 작동해야만 보너스가 인정된다.

  1. 핫 리로드: 쉐이더 소스가 수정되면 즉시 반영되도록 핫 리로드 기능을 추가한다.
  2. 추가 조명: 장면에 더 많은 조명을 추가하여 쉐이더에 영향을 줄 수 있도록 한다.
  3. 오브젝트 그림자 투사: 쉐이더가 적용된 3D 오브젝트가 장면에 그림자를 드리우도록 설정한다.
  4. 가까이 접근 시 쉐이더 조작 가능: 뷰가 쉐이더 가까이 접근하면 쉐이더 설정 UI가 나타나고, 바로 반영되도록 한다.
  5. 포탈 구현: 특정 쉐이더 내부로 들어가거나 나갈 수 있는 포탈을 통해 다채로운 장면을 경험할 수 있도록 한다.
  6. 사운드 입력: 사운드를 입력으로 받아 반응하는 쉐이더를 만들어 소리와 연동된 비주얼 효과를 구현한다.
  7. VR 지원: VR 기기를 통해 과제 결과물을 감상할 수 있도록 한다.
  8. AR 스테이징: 현실 테이블 위에 AR로 장면을 투영하여 경험할 수 있도록 한다.
  9. 카메라 충돌 감지: 오브젝트 내부에 들어가면 카메라 충돌이 발생하도록 설정하여 몰입감을 더한다.
  10. 포스트 프로세싱 효과: Bloom, 톤 매핑, 모션 블러 등 포스트 프로세싱 효과를 추가하여 시각적 퀄리티를 극대화한다.
  1.