게임 루프에서 업데이트 독립 렌더링의 요점은 무엇입니까?


74

게임 루프에 관한 수십 개의 기사, 서적 및 토론이 있습니다. 그러나 나는 종종 다음과 같은 것을 보게됩니다.

while(running)
{
    processInput();
    while(isTimeForUpdate)
    {
        update();
    }
    render();
}

기본적으로이 접근 방식에 대해 귀찮은 것은 "업데이트 독립적"렌더링입니다. 예를 들어 변경이 없을 때 프레임을 렌더링합니다. 그래서 제 질문은 왜이 접근법이 종종 가르쳐 지는가?


6
개인적으로 gameprogrammingpatterns.com/game-loop.html 이 유용한 설명을 찾았 습니다
Niels

12
렌더링의 모든 변경 사항이 게임 상태에 반영되는 것은 아닙니다. 그리고 나는 당신이 그 코드 조각의 요점을 오해하고 있다고 생각합니다-그것은 당신이 업데이트 당 여러 번 렌더링하지 않고 렌더링 당 여러 번 업데이트 할 수있게합니다.
Luaan

13
코드가 while (isTimeForUpdate)아니라 읽습니다 if (isTimeForUpdate). 의 주요 목표는에 없었을 render()때가 update()아니라 s update()사이 에 반복되는 것입니다 render(). 어쨌든, 두 상황 모두 유효하게 사용됩니다. 전자는 상태가 update함수 외부에서 변경 될 수있는 경우에 유효합니다 ( 예 : 현재 시간과 같은 암시 적 상태에 따라 렌더링되는 내용 변경). 후자는 물리 엔진에 작고 정확한 업데이트를 많이 할 수 있기 때문에 유효합니다. 예를 들어 장애물을 통해 '뒤틀림'가능성을 줄입니다.
Thierry

보다 논리적 인 질문은 "업데이트 의존 렌더링 게임 루프 의 요점은 무엇입니까 "
user1306322

1
아무 것도하지 않는 업데이트가 얼마나 자주 있습니까? 배경 애니메이션이나 화면 시계를 업데이트하지 않습니까?
pjc50

답변:


113

우리가 길을 따라 많은 흥미 진진한 도전과 함께, 우리가이 공동의 대회에 어떻게 도착했는지에 대한 오랜 역사가 있습니다.

1. 문제 : 장치가 다른 속도로 작동

현대의 PC에서 오래된 DOS 게임을 시도해 보았는데, 그것은 흐릿하게 실행될 수 있습니까?

많은 오래된 게임에는 매우 순진한 업데이트 루프가있었습니다. 입력 시간을 수집하고 게임 상태를 업데이트하며 시간이 얼마나 걸리는지 계산하지 않고 하드웨어가 허용하는 한 빨리 렌더링합니다. 즉, 하드웨어가 변경되는 즉시 게임 플레이가 변경됩니다.

우리는 일반적으로 플레이어가 작년의 전화를 사용하든 최신 모델을 사용하든, 최고급 게임용 데스크톱 또는 중간 계층 노트북.

특히 (멀티 플레이어 또는 리더 보드를 통해) 경쟁이 치열한 게임의 경우 특정 장치에서 실행중인 플레이어가 더 빨리 실행하거나 반응 시간이 더 길어질 수 있기 때문에 다른 장치보다 이점을 갖기를 원하지 않습니다.

확실한 해결책은 게임 플레이 상태 업데이트 속도를 고정시키는 것입니다. 그렇게하면 결과가 항상 동일하다는 것을 보장 할 수 있습니다.

2. 그렇다면 왜 프레임 속도를 잠그고 (예 : VSync 사용) 여전히 잠금 단계에서 게임 플레이 상태 업데이트 및 렌더링을 실행하지 않습니까?

이것은 효과가 있지만 항상 청중에게 만족스러운 것은 아닙니다. 30fps의 고체로 게임을하는 데 오랜 시간이 걸렸습니다. 이제 플레이어는 일반적으로 최소 60fps를 최소 막대로, 특히 멀티 플레이어 액션 게임에서 기대하고 있으며, 일부 오래된 타이틀은 기대치가 바뀌면서 눈에 띄게 고르지 않게 보입니다. 특히 잠금 장치의 프레임 속도를 반대하는 PC 플레이어 그룹이 있습니다. 그들은 최첨단 하드웨어에 많은 비용을 지불했으며, 컴퓨팅 근육을 최대한 부드럽고 충실도 높은 렌더링에 사용할 수 있기를 원했습니다.

특히 VR에서는 프레임 속도가 최고이며 표준은 계속해서 올라갑니다. 최근 VR의 부활 초기에 게임은 종종 약 60fps로 실행되었습니다. 이제 90이 표준이되었으며 PSVR과 같은 하드웨어가 120을 지원하기 시작했습니다. 이는 계속 증가 할 수 있습니다. 따라서 VR 게임의 프레임 속도가 현재 수행 가능한 작업으로 제한되는 경우 하드웨어 및 기대치가 계속 발전함에 따라 뒤쳐 질 수 있습니다.

일반적으로 프레임을 순서대로 인식하는 것과 같이 특정 유형의 "인식"을 기반으로하기 때문에 "플레이어는 XXX보다 빠른 것을 인식 할 수 없다"는 말에주의해야합니다. 모션의 연속성 인식은 일반적으로 훨씬 더 민감한.)

마지막 문제는 고정 프레임 속도를 사용하는 게임도 보수적이어야한다는 것입니다. 게임에서 비정상적으로 많은 수의 객체를 업데이트하고 표시하는 순간을 맞이한 경우 프레임을 놓치고 싶지 않습니다. 마감일과 눈에 띄는 말더듬 또는 장애를 일으 킵니다. 따라서 헤드 룸을 떠나기 위해 콘텐츠 예산을 충분히 낮게 설정하거나 전체 사양을 최소 사양의 하드웨어에서 최악의 성능으로 유지하는 것을 피하기 위해보다 복잡한 동적 품질 조정 기능에 투자해야합니다.

성능 문제가 개발 후반에 나타나는 경우, 기존의 모든 시스템이 이제는 항상 도달 할 수없는 잠금 단계 렌더링 프레임 속도를 가정하여 빌드 및 조정될 때 특히 문제가 될 수 있습니다. 업데이트 및 렌더링 속도를 분리하면 성능 변동을 처리 할 수있는 유연성이 향상됩니다.

3. 정해진 시간 간격으로 업데이트 할 때 (2)와 동일한 문제가 없습니까?

이것이 원래 질문의 핵심이라고 생각합니다. 업데이트를 분리하고 때로는 게임 상태 업데이트가없는 두 프레임을 렌더링하는 경우 눈에 띄는 변화가 없으므로 낮은 프레임 속도에서 잠금 단계 렌더링과 동일하지 않습니다. 화면?

실제로 게임에서 이러한 업데이트의 디커플링을 사용하는 방법에는 여러 가지가 있습니다.

a) 업데이트 속도는 렌더링 된 프레임 속도 보다 빠를 수 있습니다.

tyjkenn이 다른 답변에서 언급했듯이 물리학은 특히 렌더링보다 더 높은 빈도로 강화되므로 통합 오류를 최소화하고보다 정확한 충돌을 제공합니다. 따라서 렌더링 된 프레임간에 0 또는 1 개의 업데이트가 아닌 5 또는 10 또는 50이있을 수 있습니다.

이제 120fps로 렌더링하는 플레이어는 프레임 당 2 개의 업데이트를 얻을 수 있으며, 30fps로 사양이 낮은 하드웨어 렌더링을 사용하는 플레이어는 프레임 당 8 개의 업데이트를 받고 두 게임 모두 동일한 초당 게임 속도로 실행됩니다. 더 좋은 하드웨어는 더 매끄럽게 보이지만 게임 플레이의 작동 방식을 근본적으로 바꾸지는 않습니다.

업데이트 속도가 프레임 속도와 일치하지 않으면 둘 사이의 "비트 주파수"를 얻을 수 있는 위험 이 있습니다 . 예 : 대부분의 프레임은 4 개의 게임 상태 업데이트를위한 충분한 시간과 약간의 남은 시간을가집니다. 그런 다음 매번 프레임에서 5 개의 업데이트를 수행하기 위해 충분히 절약하여 움직임에 약간의 점프 또는 말더듬을 만듭니다. 이것은 다음과 같이 해결할 수 있습니다 ...

b) 업데이트 사이의 게임 상태 보간 (또는 외삽)

여기서 우리는 종종 게임 상태를 미래에 정해진 시간 간격으로 유지하고, 가장 최근의 두 상태에서 충분한 정보를 저장하여 그들 사이에 임의의 지점을 만들 수 있습니다. 그런 다음 화면에 새 프레임을 표시 할 준비가되면 표시 목적으로 만 적절한 순간에 혼합됩니다 (즉, 여기서 기본 게임 플레이 상태를 수정하지 않음)

올바르게 수행하면 움직임이 버터처럼 부드럽게 느껴지고 너무 낮아 지지 않는 한 프레임 속도의 일부 변동을 가리는 데 도움이됩니다 .

c) 비 게임 플레이 상태 변경에 평활도 추가

게임 플레이 상태를 보간하지 않더라도 약간의 평활도를 얻을 수 있습니다.

캐릭터 애니메이션, 파티클 시스템 또는 VFX와 같은 시각적 변화와 HUD와 같은 사용자 인터페이스 요소는 종종 게임 플레이 상태의 고정 된 시간 간격과 별도로 업데이트됩니다. 즉, 프레임 당 게임 플레이 상태를 여러 번 똑딱 거리면 모든 틱마다 비용을 지불하지 않고 최종 렌더링 패스에서만 지불합니다. 대신, 우리는 이러한 효과의 재생 속도를 프레임 길이에 맞게 조정하므로 렌더링 속도가 허용하는 한도 내에서 (1)에 설명 된대로 게임 속도 나 공정성에 영향을주지 않고 부드럽게 재생합니다.

카메라 움직임도이 작업을 수행 할 수 있습니다. 특히 VR에서는 때때로 같은 프레임을 두 번 이상 표시하지만 그 사이에있는 플레이어의 머리 움직임을 고려하여 프레임을 다시 투영 하여인지 할 수있는 대기 시간과 편안함을 향상시킬 수 있습니다. 기본적으로 모든 것을 그렇게 빨리 렌더링하지는 않습니다. 일부 게임 스트리밍 시스템 (게임이 서버에서 실행되고 플레이어가 씬 클라이언트 만 실행하는 경우)도이 버전을 사용합니다.

4. 왜 모든 것에 그 (c) 스타일을 사용하지 않습니까? 애니메이션 및 UI에서 작동하는 경우 현재 프레임 속도에 맞게 게임 플레이 상태 업데이트를 간단하게 조정할 수 없습니까?

예 * 가능하지만 간단하지 않습니다.

이 답변은 이미 약간 길기 때문에 모든 세부 사항을 다루지 않고 간단한 요약 만 할 것입니다.

  • 곱한 deltaTime작동하는 가변 길이의 갱신을 조정하는 선형 변화 (애니메이션 타임 라인을 따라 예. 등속 운동, 타이머의 카운트 다운 또는 진행)

  • 불행히도 게임의 많은 측면이 비선형 적 입니다. 중력만큼 단순한 것조차도 다양한 프레임 속도에서 결과가 다른 것을 피하기 위해 더 복잡한 통합 기술 또는 고해상도 하위 단계가 필요합니다. 플레이어 입력 및 제어 자체는 비선형 성의 큰 원천입니다.

  • 특히, 이산 충돌 감지 및 해상도의 결과는 업데이트 속도에 따라 달라지며 프레임이 너무 길면 터널링 및 지 터링 오류가 발생합니다. 따라서 다양한 프레임 속도로 인해 더 많은 컨텐츠에 대해 더 복잡하고 비싼 연속 충돌 감지 방법을 사용하거나 물리학의 가변성을 허용해야합니다. 연속 충돌 감지조차도 물체가 호에서 움직일 때 문제가 발생하여 더 짧은 시간 간격이 필요합니다 ...

따라서 중간 정도의 복잡성 게임의 경우 일반적으로 deltaTime스케일링을 통해 일관된 행동 및 공정성을 유지하는 것은 매우 어렵고 유지 관리에 중점을 두어 완전히 불가능한 것입니다.

업데이트 속도를 표준화하면 종종 간단한 코드 로 다양한 조건 에서 보다 일관된 동작을 보장 할 수 있습니다 .

이 업데이트 속도 유지 렌더링에서 분리하는 것은 우리에게주는 유연성 경험의 부드러움과 성능을 제어하는 게임 플레이 로직을 변경하지 않고를 .

그럼에도 불구하고 우리는 진정으로 "완벽한"프레임 속도 독립성을 얻지 못하지만 게임의 많은 접근 방식과 마찬가지로 주어진 게임의 요구에 대해 "충분히 좋은"쪽으로 전화를 걸 수있는 제어 가능한 방법을 제공합니다. 이것이 유용한 출발점으로 일반적으로 가르치는 이유입니다.


2
모든 것이 동일한 프레임 속도를 사용하는 경우 모든 것을 동기화하면 컨트롤러가 샘플링되는 시점과 게임 상태가 반응하는 시점 사이의 지연을 최소화 할 수 있습니다. 일부 구형 컴퓨터의 많은 게임의 경우 최악의 시간은 17ms 미만입니다 (수직 공백 시작시 컨트롤을 읽은 다음 게임 상태 변경 사항을 적용하고 빔이 화면 아래로 이동하는 동안 다음 프레임이 렌더링 됨) . 사물을 분리하면 종종 최악의 시간이 크게 증가합니다.
supercat

3
보다 복잡한 업데이트 파이프 라인으로 인해 의도하지 않게 대기 시간이 발생하기 쉬워진다는 것이 사실이지만, 올바르게 구현 될 때 분리 된 접근 방식의 필수 결과는 아닙니다. 실제로 지연 시간 을 줄일 수도 있습니다 . 60fps로 렌더링되는 게임을 봅시다. lockstep을 사용하면 read-update-render최악의 대기 시간은 17ms입니다 (현재 그래픽 파이프 라인 및 디스플레이 대기 시간 무시). (read-update)x(n>1)-render동일한 프레임 속도에서 분리 된 루프를 사용하면 입력을 자주 또는 더 자주 확인하고 작동하기 때문에 최악의 대기 시간은 동일하거나 향상 될 수 있습니다. :)
DMGregory

3
실시간으로 계산되지 않은 오래된 게임에 대한 흥미로운 부수적 인 메모에서, 원래 우주 침략자 아케이드는 플레이어가 적의 함선을 파괴하고 렌더링하고 게임 업데이트를 가속화 할 때 렌더링 능력으로 인해 결함이 생겼습니다. 게임의 상징적 인 난이도 곡선에서
Oskuro

1
@DMGregory : 비동기 적으로 작업을 수행하는 경우 게임 루프가 컨트롤을 폴링 한 직후 컨트롤 변경이 발생할 수 있으며 렌더링 루프가 게임 상태를 잡은 직후에 현재 컨트롤 이벤트가 끝난 후 게임 이벤트 사이클이 완료 될 수 있습니다. 비디오 출력 시스템이 현재 프레임 버퍼를 잡은 직후에 현재의 후의 렌더링 루프가 완료되도록하기 때문에 최악의 시간은 두 개의 게임 루프 시간에 두 개의 렌더링 시간에 두 개의 프레임주기가 더해집니다. 사물을 올바르게 동기화하면 절반으로 줄일 수 있습니다.
supercat

1
@Oskuro : 그것은 결함이 아니었다. 업데이트 루프의 속도는 화면에 침입 한 침입자의 수에 관계없이 일정하게 유지되지만 게임은 모든 업데이트 루프에서 모든 침입자를 끌어 내지는 않습니다.
supercat

8

다른 대답은 좋으며 게임 루프가 존재하는 이유와 렌더링 루프와 분리되어야하는 이유에 대해 이야기합니다. 그러나 "변경 사항이 없는데 왜 프레임을 렌더링해야합니까?"의 구체적인 예는? 그것은 실제로 하드웨어와 복잡성에 달려 있습니다.

비디오 카드는 상태 머신이며 동일한 작업을 계속 반복해서 잘 수행합니다. 변경 한 것만 렌더링하면 실제로 더 비싸지 않습니다. 대부분의 시나리오에는 정적 요소가 많지 않습니다. FPS 게임에서 약간 왼쪽으로 이동하면 화면에서 물건의 98 % 픽셀 데이터를 변경하면 전체 프레임을 렌더링 할 수도 있습니다.

그러나 주로 복잡성. 모든 것을 재 작업하거나 일부 알고리즘의 이전 결과를 추적하고 새로운 결과와 비교하고 변경이 다른 경우에만 픽셀을 렌더링해야하기 때문에 업데이트하는 동안 변경된 모든 것을 추적하는 것은 훨씬 더 비쌉니다. 시스템에 따라 다릅니다.

하드웨어 등의 디자인은 현재 컨벤션에 크게 최적화되어 있으며 상태 머신은 시작하기에 좋은 모델입니다.


5
여기에서 무언가 가 변경 되었을 때만 (질문이 요구하는) 렌더링 (모든 것) 과 변경된 부분 만 렌더링 (답이 설명하는 것) 사이에는 구별이 있습니다 .
DMGregory

사실이며, 첫 번째 단락과 두 번째 단락을 구분하려고했습니다. 프레임이 전혀 바뀌지 않는 경우는 드물기 때문에 종합적인 답변과 함께이 견해를 취하는 것이 중요하다고 생각했습니다.
Waddles

이 외에도 렌더링 하지 않을 이유가 없습니다 . 당신은 항상 당신의 렌더 호출마다 모든 프레임을 호출 할 시간이 있다는 것을 알고 있습니다 (당신은 항상 당신의 렌더 콜에 대해 항상 프레임을 호출 할 시간이 있다는 것을 더 잘 알고 있을 것입니다 !). 본질적으로 결코 일어나지 않습니다.
Steven Stadnicki 1

@StevenStadnicki 프레임마다 모든 것을 렌더링하는 데 시간 이 많이 걸리지 않는다는 것은 사실입니다 (여러 국가가 한 번에 많은 변화가있을 때마다 예산을 책정해야하기 때문에 시간이 필요하기 때문에). 그러나 랩톱, 태블릿, 전화 또는 휴대용 게임 시스템과 같은 휴대용 장치의 경우 플레이어의 배터리를 효율적으로 사용하기 위해 중복 렌더링을 피하는 것이 좋습니다 . 이것은 주로 UI 액션이 많은 게임에 적용되며 화면의 많은 부분이 플레이어 액션 사이의 프레임에 대해 변경되지 않고 게임 아키텍처에 따라 구현하는 것이 항상 실용적이지는 않습니다.
DMGregory

6

렌더링은 일반적으로 게임 루프에서 가장 느린 프로세스입니다. 사람은 60보다 빠른 프레임 속도의 차이를 쉽게 인식하지 못하기 때문에 렌더링보다 더 빨리 렌더링하는 데 시간을 낭비하는 것이 덜 중요합니다. 그러나 더 빠른 속도로 더 많은 혜택을 얻을 수있는 다른 프로세스가 있습니다. 물리학은 하나입니다. 하나의 루프에서 너무 큰 변화는 객체가 벽을 지나서 바로 글리치 할 수 있습니다. 더 큰 증분으로 간단한 충돌 오류를 해결할 수있는 방법이있을 수 있지만 복잡한 물리 상호 작용이 많을 경우 동일한 정확도를 얻지 못할 수 있습니다. 물리 루프가 더 자주 실행되는 경우 매번 렌더링되지 않고 객체를 더 작은 단위로 이동할 수 있기 때문에 글리치가 발생할 가능성이 줄어 듭니다. 민감한 물리 엔진에 더 많은 리소스가 사용되며 사용자가 볼 수없는 더 많은 프레임을 그리는 데 더 적은 리소스가 사용됩니다.

이것은 그래픽을 많이 사용하는 게임에서 특히 중요합니다. 모든 게임 루프에 대해 하나의 렌더가 있고 플레이어에 가장 강력한 머신이없는 경우 게임에서 fps가 30 또는 40으로 떨어지는 지점이있을 수 있습니다. 여전히 끔찍한 프레임 속도는 아니지만 글리치를 피하기 위해 각 물리 변화를 합리적으로 작게 유지하려고하면 게임 속도가 상당히 느려지기 시작합니다. 플레이어는 자신의 캐릭터가 정상 속도의 절반 만 걷는다는 사실에 짜증이납니다. 그러나 렌더링 속도가 나머지 루프와 무관 한 경우 플레이어는 프레임 속도의 감소에도 불구하고 고정 된 보행 속도를 유지할 수 있습니다.


1
예를 들어 진드기 사이의 시간을 측정하고 그 시간에 캐릭터가 얼마나 멀리 가야하는지 계산합니까? 고정 스프라이트 애니메이션의 시대는 오래되었습니다!
Graham

2
사람은 일시적인 앨리어싱없이 60fps보다 빠르게 물체를 인식 할 수 없지만 동작 흐림 현상이없는 상태에서 부드러운 동작을 수행하는 데 필요한 프레임 속도는 그보다 훨씬 높을 수 있습니다. 특정 속도를 넘어 서면, 회전하는 바퀴가 희미하게 나타나야하지만, 소프트웨어가 동작 흐림 효과를 적용하지 않고 바퀴가 프레임 당 스포크의 절반 이상으로 회전하면 프레임 속도가 1000fps 인 경우에도 바퀴가 나빠 보일 수 있습니다.
supercat

1
@Graham, 당신은 물리학과 같은 것들이 틱당 더 큰 변화로 잘못 행동하는 첫 번째 단락에서 문제에 부딪칩니다. 프레임 속도가 충분히 낮아지면 더 큰 변화를 보상하면 플레이어가 벽을 통과하여 타격 상자를 완전히 잃을 수 있습니다.
tyjkenn

1
인간은 일반적으로 60fps보다 빠르게 인식 할 수 없으므로 렌더링보다 더 빨리 렌더링하는 데 리소스를 낭비하는 것은 의미가 없습니다. 그 진술에 문제가 있습니다. VR HMD는 90Hz로 렌더링되며 계속 올라갑니다. 헤드셋에서 90Hz와 60Hz의 차이를 정확하게 인식 할 수 있다고 말할 때 저를 믿으십시오. 또한, 최근에는 GPU 바인딩만큼 CPU 바인딩 된 많은 게임을 보았습니다. "렌더링이 일반적으로 가장 느린 프로세스"라고 말하는 것이 반드시 사실은 아닙니다.
3Dave

@DavidLively, "무의미한"것은 너무 과장된 것일 수 있습니다. 내가 의미하는 바는 렌더링이 병목 현상을 일으키는 경향이 있으며 대부분의 게임은 60fps에서 잘 보입니다. VR과 같은 일부 게임에서는 더 빠른 프레임 속도로만 얻을 수있는 중요한 효과가 있지만 이는 표준이 아닌 예외처럼 보입니다. 느린 컴퓨터에서 게임을 실행하는 경우 거의 눈에 띄지 않는 빠른 프레임 속도보다 물리를 사용하는 것이 좋습니다.
tyjkenn

4

렌더링 하위 시스템에 "마지막 렌더링 이후의 경과 시간" 이라는 개념이 있다면 질문의 구성과 같은 구성이 의미가 있습니다 .

예를 들어, 게임 세계에서 객체의 위치가 (x,y,z)현재 좌표 벡터를 추가로 저장하는 접근 방식으로 고정 좌표를 통해 표현 되는 접근 방식을 고려하십시오 (dx,dy,dz). 이제 메소드 에서 위치 변경이 발생 하도록 게임 루프를 작성할 수 update있지만, 이동 중에 변경이 발생 하도록 설계 할 수도 있습니다 update. 게임 상태는 실제로 다음 때까지 변경되지 않습니다 비록 후자의 접근 방식과 함께 update하는render더 높은 빈도로 호출되는 함수는 이미 약간 업데이트 된 위치에 오브젝트를 그릴 수 있습니다. 이것이 기술적으로 보이는 것과 내부적으로 표현 된 것 사이에 불일치가 발생하지만, 그 차이는 대부분의 실제적인 측면에는 중요하지 않지만 애니메이션은 훨씬 매끄럽게 보입니다.

예를 들어 네트워크 입력 대기 시간을 고려할 때 게임 상태의 "미래"를 예측하는 것은 (잘못 될 위험이 있음에도 불구하고) 좋은 ​​아이디어가 될 수 있습니다.


4

다른 답변 외에도 ...

상태 변경을 확인하려면 상당한 처리가 필요합니다. 실제로 처리하는 것과 비교하여 변경 사항을 확인하는 데 비슷한 (또는 그 이상!) 처리 시간이 걸리는 경우 실제로 상황을 개선하지 못한 것입니다. @Waddles 말한대로 이미지를 렌더링의 경우, 비디오 카드는 정말 또 다시 같은 바보 같은 일을 잘, 그것은 단순히 그것을 통해 전송하는 것보다 변화에 대한 데이터의 각 청크를 확인하기 위해 더 많은 비용입니다 처리를 위해 비디오 카드에. 또한 렌더링이 게임 플레이 인 경우 화면 이 마지막 틱에서 변경 되지 않았을 가능성이 거의 없습니다 .

또한 렌더링에 프로세서 시간이 많이 걸린다고 가정합니다. 프로세서와 그래픽 카드에 따라 다릅니다. 수년 동안, 점점 더 정교한 렌더링 작업을 그래픽 카드로 오프로드하고 프로세서에서 필요한 렌더링 입력을 줄이는 데 중점을 두었습니다. 프로세서 render()호출은 단순히 DMA 전송을 설정하는 것이 이상적 입니다. 그런 다음 그래픽 카드에 데이터를 가져 오는 것이 메모리 컨트롤러에 위임되고 이미지 생성이 그래픽 카드에 위임됩니다. 프로세서 를 병렬로 사용 하면서 자체 시간에 할 수 있습니다.물리, 게임 플레이 엔진 및 프로세서가 더 잘하는 다른 모든 것들을 처리합니다. 분명히 현실은 그것보다 훨씬 더 복잡하지만 시스템의 다른 부분으로 작업을 오프로드 할 수있는 것도 중요한 요소입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.