shaderpixel 16

ShaderPixel - 5. 색 구슬 구현

A translucent object (using volumetric ray-marching) with non-volumetric diffuse and specular lighting on its surface (like colored glass marble). Think to implement a mode to display one of the specular/diffuse term of the lighting to verify that your lighting works.위 과제에서 요구하는 반투명 물체와 비체적 디퓨즈 및 스페큘러 조명이 적용된 구슬을 구현했다. 구슬은 레이마칭 기법을 사용해 구현했고, 색상 계산 및 조명 효과를 추가해 완성했다.렌더 함수렌더 함수는 한 프레임마다 호출되어 구슬을 그..

ShaderPixel - 4. 버텍스 셰이더에서 계산한 노말 값과 월드 좌표는 실제로 프래그먼트에 그려지는 픽셀의 월드 좌표와는 다르다

과제의A transluscent object (using volumetric ray-marching) with non-volumetric diffuse and specular lighting on its surface (like colored glass marble). Think to implement a mode to diplay one the specular/diffuse term of the lighting to verify that your lighting works.이부분에 해당하는 색구슬을 완성하였다. 이번에는 구슬 그리는데 삽질한 내용을 쓸 것이다. 우선 버텍스 셰이더에서 그 구슬을 그릴 공간을 구한다. 최적화하기위해 저 검은색 부분만 레이를 쏠 예정이다. 일단 저부분만 alpha값을 낮춰 ..

ShaderPixel - 3. 렌더링 전략 고민..

일단 과제에서 요구된 오브젝트 중 일부는 그냥 레이마칭으로 구현해야 하는 상황이었다.평소처럼 메쉬 기반으로 버텍스 셰이더에서 판단해서 그리면 되는 게 아니라 레이마칭을 적용해야 해서.. 메쉬랑 같이 사용하려면 깊이 정보를 직접 계산해줘야 했다. 이게 메쉬 기반 오브젝트가 혼합되어 있는 상황이라 더 어려워진다.  특히 지금 레이마칭을 적용해야 하는 오브젝트들은 블렌딩이나 반투명 효과를 주는 상황이 많아서, 뒷배경에 있는 오브젝트가 보이도록 해야 한다는 게 또 문제다.특히 반투명 구슬이나 구름 같은 오브젝트는 서로 영향을 주는 상호작용을 고려해야 한다.예를 들어 구름 뒤에 보이는 반투명 구슬, 혹은 구슬에 비치는 구름처럼 보이도록 구현하려면, 같은 셰이더 안에서 계산해야 이런 상호작용이 쉬워진다. 각각의 셰..

ShaderPixel - 2. 바닥 구성 (Normal map)

이번에는 Normal Map을 사용해 바닥 표면을 표현했다.알베도 텍스처와 Normal Map을 적용하여 표면의 질감과 조명이 자연스럽게 반응하도록 만들었다. Tangent-Bitangent-Normal (TBN) 행렬을 활용해 조명 계산을 위한 텍스처 공간(Tangent Space) 변환을 적용하여 표면의 기복에 따라 조명이 반사되도록 구현하였다.바닥 텍스처 및 모델 초기화 코드먼저 바닥에 사용할 알베도 텍스처와 Normal Map을 로드하고, 바닥의 크기와 회전 정보를 설정했다.// Normal Map 셰이더 프로그램 로드m_normalProgram = Program::Create("./shader/normal.vs", "./shader/normal.fs");// 바닥 알베도 텍스처와 Normal M..

ShaderPixel - 1. 배경 구성 (Skybox)

이번 작업에서는 HDR 파노라마 이미지를 큐브맵 텍스처로 변환해 스카이박스(Skybox)를 구성했다.캡처 초기화 코드HDR 이미지를 불러온 후, 큐브맵 텍스처로 변환하기 위해 큐브 프레임버퍼와 뷰 행렬을 설정했다.// HDR 이미지를 로드하여 Texture 객체로 생성m_hdrMap = Texture::CreateFromImage(Image::Load("./image/god_rays_sky_dome_8k.hdr").get());// 스피어리컬 맵에서 큐브맵으로 변환하는 셰이더 프로그램 로드m_sphericalMapProgram = Program::Create("./shader/spherical_map.vs", "./shader/spherical_map.fs");// 큐브맵 텍스처 생성 (2048x2048..

ShaderPixel - 0. 과제 해석

프로젝트 개요목적ShaderPixel 프로젝트의 주된 목적은 OpenGL을 통해 다양한 그래픽 객체가 논리적으로 연결되도록 매트릭스 스택을 조작하며, 쉐이더를 활용해 고차원적인 렌더링을 구현하는 것이다. 신체 부위와 같은 독립적인 개체들이 상호 연결된 상태로 동작할 수 있도록 구성하면서, 쉐이더의 복잡한 조명과 최적화를 경험할 수 있다. 또한 이 프로젝트를 통해 3D 공간에서 창의적인 비주얼 효과를 표현할 수 있다.일반적인 규칙Makefile 또는 빌드 파일 제공: 프로젝트 컴파일을 위해 Makefile, CMake 또는 Premake 등의 빌드 파일을 제공해야 한다.OpenGL 4.0 이상 사용: OpenGL을 사용할 경우 최소 버전 4.0을 사용하며, 쉐이더는 버전 330을 사용해야 한다. Vulka..