OpenGL® 그림자 란 무엇입니까?
Open Graphics Library® (OpenGL®) 섀도우는 비슷한 조명 조건에서 실제 생활에서 그림자가 어떻게 캐스팅되는지에 대한 3 차원 (3D) OpenGL® 장면에서 시각적 근사치입니다. Shadows는 OpenGL®에서 구현하기위한 복잡한 시각적 기능입니다. 주로 장면에서 그림자를 캐스팅하는 데 타고난 지원이 없기 때문입니다. 대신 다양한 사용 가능한 버퍼, 셰이더 및 경우에 따라 특정 그래픽 카드의 특수 기능에 액세스하는 확장 기능을 사용하여 장면 내에서 객체와 지오메트리에서 그림자를 만드는 데 사용할 수있는 다양한 기술이 있습니다. 대부분의 경우 OpenGL® 그림자 렌더링의 품질, 정확도 및 속도는 컴퓨터 또는 장치에있는 그래픽 하드웨어의 처리 능력 및 메모리와 직접 관련이 있습니다. OpenGL® 그림자를 구현하는 가장 인기있는 방법 중 일부에는 Shadow Volumes, Shadow Mapping 및 Ray Tracing이 포함됩니다.
OpenGL® 그림자 지원이있는 응용 프로그램을 작성하려면 수학적 지식과 OpenGL®의 작동 방식에 대한 깊은 이해가 필요합니다. OpenGL®은 실시간으로 역동적이고 렌더링 된 3D 장면을 만드는 데 주로 사용되므로 그림자를 만드는 데 사용되는 알고리즘은 속도를 위해 최적화해야 할뿐만 아니라 렌더링에 사용되는 그래픽 파이프 라인에서 발생할 수있는 자원의 소비 및 중단에 대해 신중하게 측정해야합니다. 이러한 이유로 Ray Tracing이라는 그림자를 만드는 가장 기본적인 방법은 종종 3D 장면에 비해 비현실적입니다.
.광선 추적은 기본적으로 장면을 통해 카메라의 관찰 평면 또는 위치에서 장면을 통해 물체의 표면에 이르기까지 상상의 선 또는 광선을 따른 다음 하나 이상의 광원 및 기타 요인의 위치에 따라 표면의 색상을 계산합니다. 래스터 화 과정에서3D 장면은 2 차원 (2D) 표면으로 그려져 표시 될 수 있으므로, 광선 추적 과정은 그려지는 모든 픽셀에서 수행되어야하며, 특히 텍스처 또는 기타 표면 특성으로 동일한 픽셀을 여러 번 평가해야 할 수도 있습니다. 이것은 실시간 광선 추적을 의미하지만 그림자가 정확하게 렌더링되지만 일반적으로 실용적이지 않습니다.
OpenGL® 그림자를 생성하는 데 사용할 수있는 또 다른 방법을 그림자 매핑이라고합니다. 이 방법은 깊이 또는 스텐실 버퍼를 사용하여 광원의 각도에서 장면을 광원에서 장면 내의 다른 물체의 표면까지 일련의 거리로 렌더링합니다. 그런 다음 장면은 올바른 시야각에서 두 번째로 렌더링되어 각 픽셀이 버퍼 내의 특정 거리 범위 내에 있는지 확인하여 픽셀이 켜지거나 그림자가 켜져 있는지 확인합니다. 그림자 매핑을 사용하면 메모리 집약적 일 수 있으며, 광원이 둘 이상인 장면에서는 M을 포함 할 수 있습니다.여러 각도에서 다중 맵을 아킹합니다.
섀도우 볼륨은 다른 방법보다 더 정확한 OpenGL® 그림자를 만드는 방법이지만 자체 문제를 제시합니다. 그림자 볼륨은 본질적으로 광원에서 멀리 떨어진 물체의 조명 표면에서 팽창하는 장면에서 보이지 않는 지오메트리 조각입니다. 이 볼륨은 다른 물체에 대해 확인하여 볼륨이 유래 한 표면의 그림자에 빠지는 지 확인할 수 있습니다. 이 절차는 매우 복잡 할 수 있으며 궁극적으로 속도에 최적화 될 때 시각적 아티팩트를 만듭니다.