정사각형을 렌더링하려고한다고 가정하겠습니다. 텍스처는 "square.png"입니다.
텍스처가 단순한 색상 일 경우 컴퓨터에서 더 쉽게 렌더링 할 수 있습니까?
그리고 여기저기서 완전히 임의의 색을 가진 매우 시끄러운 질감이라면 어떨까요?
또는 텍스처의 모든 픽셀이 서로 다르지만 약간만 다르다는 점에서 텍스처가 시끄럽다면?
정사각형을 렌더링하려고한다고 가정하겠습니다. 텍스처는 "square.png"입니다.
텍스처가 단순한 색상 일 경우 컴퓨터에서 더 쉽게 렌더링 할 수 있습니까?
그리고 여기저기서 완전히 임의의 색을 가진 매우 시끄러운 질감이라면 어떨까요?
또는 텍스처의 모든 픽셀이 서로 다르지만 약간만 다르다는 점에서 텍스처가 시끄럽다면?
답변:
게임 개발, 특히 게임 그래픽에서 대부분의 것들과 마찬가지로 대답은 "의존적"입니다
텍스처의 해상도는 렌더링 속도에 영향을 줄 수 있습니다. 픽셀이 많을수록 GPU에 업로드 할 원시 데이터가 많고 한 번에 캐시에 맞출 수있는 텍스처가 적으므로 텍스처의 오른쪽 부분을 기다리는 동안 셰이더가 더 많은 일시 정지를 칠 수 있습니다 캐시로 가져옵니다.
밉 매핑을 사용하면 이로 인한 영향을 줄일 수 있습니다. 밉맵을 사용하면 축소 된 버전의 텍스처 체인을 저장합니다. 처음에는 더 많은 메모리가 소리를냅니다. 그러나 텍스쳐가 화면에 작은 크기로 표시 될 때 (원거리의 원거리 오브젝트와 같이) 더 작은 버전에서 읽을 수 있으므로 샘플이 전체적으로 점프하지 않고 텍스처 캐시를 더 잘 사용합니다. 또한 앨리어싱이 줄어 듭니다.
텍스처의 내용은 대부분 렌더링 효율성에 영향을 미치지 않습니다.
색상은 GPU에 관한 한 많은 숫자이므로 그 숫자가 무엇이든 상관하지 않으며 수학을 통해 같은 방식으로 퍼널 링합니다. "이전에 녹색에서 픽셀을 본 적이 있는데, 마지막에이 입력을 보았을 때 계산 한 것과 동일한 출력을 재사용 할 것입니다"라는 것을 기억하는 것만 큼 멋진 일은하지 않습니다. 또는 임의의 반짝임, GPU가 동일한 작업을 수행하고 있습니다.
이미지의 예측 가능한 영역에서보다 효율적으로 압축하고 복잡한 영역에서 더 많은 비트를 소비하는 PNG 및 JPG와 같은 형식과 달리 BTC, ETC, PVRTC 또는 원시 RGBA와 같은 GPU 텍스처 형식은 블록 당 고정 된 수의 비트를 사용합니다. 픽셀. 따라서 동일한 압축 형식을 유지하면서 텍스처를 더 자세하게 또는 덜 상세하게 만들면 데이터 크기가 변경되거나 데이터 전송 및 캐시 관련 효율성에 영향을 미치지 않습니다.
그러나 이전 압축에서 잘 보존되지 않은 특정 종류의 세부 정보를 사용하는 경우 다른 형식을 사용하도록 전체 이미지를 변경해야하므로 데이터 크기가 다시 변경 될 수 있습니다.
상황에서 가장 큰 별표는 다음과 같습니다.이 텍스처 색상 입력을 사용하여 if()
분기 와 같은 결정을 내릴 수 있습니다 . 여기서 세부 사항은 속도에 중요합니다.
GPU 음영 처리 단위는 일괄 처리로 픽셀 블록에서 작동하며 여러 데이터 스트림에서 동일한 명령을 병렬로 실행합니다. 따라서 블록의 일부 픽셀이 하나의 분기를 가져 if
오고 다른 픽셀이 다른 분기를 가져갈 때 전체 배치는 두 분기 를 모두 거쳐야 합니다 (한 픽셀 세트 또는 다른 세트에 적용되지 않는 결과를 가리십시오)
입력이 매끄럽고 예측 가능한 방식으로 변경되면 단일 브랜치 만 필요로하는 많은 블록이있을 수 있으며 이러한 두 브랜치 케이스 모두 전환 경계 주위의 좁은 대역으로 제한됩니다. 그러나 입력이 임의적 인 경우 대부분의 블록이 두 가지를 모두 취하여 렌더링 속도를 늦추기를 기대합니다.
왜곡 또는 인덱스 맵과 같이 하나의 텍스처를 사용하여 두 번째 텍스처에 대한 조회를 제어하는 경우에도 발생할 수 있습니다. 첫 번째 텍스처가 무작위로 튀어 나오면 두 번째 텍스처의 흩어져있는 임의의 작은 지점에서 샘플링하여 텍스처 캐시의 일관성이 떨어지고 평균적으로 필요한 데이터를 얻기 위해 더 오래 기다립니다.
따라서 전반적으로 : 아닙니다. 텍스처의 내용은 렌더링 속도에 큰 영향을 미치지 않습니다. ;)
n
th 픽셀에 도달하기 전에 모든 단일 픽셀을 거쳐야합니다. 일정한 픽셀 바이트 너비로, 그것은 단지 start_of_buffer + width * n
이며 , 특히 큰 경우에 훨씬 빠릅니다 n
.
위 의 DMGregory의 탁월한 대답 과 함께 , "텍스처"의 복잡성이 렌더링 성능에 영향을 미칠 수있는 경우가 있으며, 이전 렌더링의 결과가 후속 렌더링에서 소스로 사용되는 경우가 있습니다 (예 : 그림자 맵). / 반사 / 환경지도.
일부 최신 하드웨어는 이러한 버퍼에 무손실 압축을 적용 할 수 있습니다. 예를 들어 PowerVR에는 PVRIC , AMD, Delta Color Compression , ARM에는 비슷한 것이 있습니다. 이러한 압축 기술의 목적은 전반적인 대역폭을 줄이고 렌더링 성능을 향상시키는 것입니다.
깊이 나 색상 (정수 또는 부동 소수점)과 같이 데이터가 단순할수록 이러한 체계가 더 잘 작동합니다. 물론, 렌더링 출력을 의도적으로 단순화하여 더 나은 기능을 제공하는 것은 아니지만 노이즈가 많은 데이터를 사용하지 않는 것이 어떤 상황에서는 도움이 될 수 있습니다.
또한 대역폭을 낮추려는 시도로 이러한 체계를 사용하는 프레임 / 깊이 버퍼의 스파 스 샘플링을 수행하는 것은 블록 기반 일 가능성이 높기 때문에 도움이되지 않습니다.
또한 다음 두 SE Computer Graphics 질문과 답변을 찾을 수 있습니다.