적용 범위-알고리즘의 결함-사용을 제거하는 방법?


10

소개

대부분의 주요 벡터 그래픽 렌더링 엔진에는 알고리즘 결함이 있습니다. 픽셀 적용 범위를 계산하여 각 셰이프를 개별적으로 렌더링하고 앤티 앨리어싱을 만든 다음 서로의 상단에 구성합니다. 예, 간단하지만 올바른 솔루션은 더 간단합니다.

이것은 투명성에 의해 커버리지를 둥글게 만들면서 conflation 문제를 야기합니다. 알파 블렌딩은 상황을 정확하게 나타내지 않는 규칙을 따릅니다. 예를 들어 50 % 덮힌 픽셀은 50 % 보완되는 픽셀과 인접하며 100 % 커버리지로 끝나지 않으며 75 % 커버리지로 끝납니다. . 이것이 어떻게 보이는지는 알고리즘이 조정되는 방법과 다른 세부 사항에 달려 있지만 본질적으로 이것은 알려진 오류입니다. 누군가는 다른 엔진 오류 를 문서화하는 데 어려움을 겪고 어떻게 더 잘 수행 할 수 있는지 보여주는 종이를 작성했습니다.

여기에 이미지 설명을 입력하십시오

이미지 1 : 대표적이지 않은 샘플로 상단 행에 확대 오류를 나타내는 삼각형으로 만든 모양을 렌더링합니다. SVG 소스

이 문제는 커버리지 계산없이 수퍼 샘플로 간단한 순진한 솔루션 *을 가지고 이미지를 필터링합니다. 보너스로 상자 필터링보다 더 나은 이미지 재구성 알고리즘을 사용할 수 있습니다 ( A Pixel is Not a Square 3 읽기 ). 현재 솔루션과 비슷한 속도의 솔루션도 있으며 이러한 솔루션은 하드웨어 래스터 화 파이프 라인에서 훨씬 쉽게 수행 할 수 있습니다 (이 문제를 피하기 위해 빌드 되었기 때문에 GPU에서이 오류는 거의 발생하지 않습니다).

이것은 비용이없는 문제도 아닙니다. 그래픽 디자인 작업을하는 많은 사람들이 컴퓨터가해야 할 문제를 해결하기 위해 여기에 겹치는 부분과 겹치는 부분이 없도록하여이 문제를 수동으로 회피하려고하는 데 많은 시간을 소비하는 사람들이 많이 있습니다. 그리고 많은 경우에 장엄한 실패. 그러나 고객은 왜 오류가 있는지 신경 쓰지 않고 수정해야합니다.

질문

오류가 어떻게 전파됩니까? 그들은 모두 같은 오류를하고 있기 때문에 알고리즘에 동일한 소스를 사용한다고 결론을 내릴 수 있습니다. 설계자가이 알고리즘을 선택하게 된 원인은 무엇입니까? 왜 3D 프로그래머 만이이 오류를 인식하고 2D 프로그래머는 그렇지 않은 동안 API 및 교육에서 그 부분을 체계화 했습니까?

이 오류가 더 이상 전파되지 않도록하는 방법은 무엇입니까?


부록 (그러나 나는 이것에 대해 묻지 않는다)

* 결함없이 수퍼 샘플링이 작동한다는 주장은 특별하며 특별한 증거가 필요합니다. 수퍼 샘플링 작업 의 핵심 은 수퍼 샘플링이 커버리지 처리를 수행하지 않는다는 것입니다. 본질적으로 수퍼 샘플러는 각 샘플을 포인트 샘플로 취급합니다. 포인트 샘플은 기본 영역을 가정하지 않으므로 발생하지 않는 곳에서 알파 비교를 일으키지 않습니다.

답변 중 하나에 설명 된대로 일관성있게 작동합니다. 일관성을 위해 정수 샘플링으로 샘플을 처리해야합니다. 이를 통해 한 번 화면 공간으로 변환 된 각 포인트가 동일한 좌표에 대해 동일한 솔루션을 얻을 수 있으며 샘플이 픽셀 경계로 2 회 음영 처리되지 않습니다. 이렇게하려면 샘플이 왼쪽 하단 샘플 인 경우 픽셀 ot가 정확하게 켜지도록 트리거하지 않을 수 있습니다 (따라서 정확한 가장자리가> vs <=로 처리되는 규칙을 만듭니다). 하나의 콘솔 그래픽 카드를 제외한 모든 것이 이와 같이 작동합니다. 추가 데이터를 캐시 할 필요가 없으며 추가 테스트를 수행 할 필요가 없습니다. 이 솔루션은 적용 범위 기반 솔루션보다 안정적이고 일반적이며 일관성 이 있습니다.

알고리즘은 약간 더 적은 코드와 약간 더 많은 샘플을 가진 원본과 정확히 동일합니다. 따라서 적용 범위 기반 알고리즘보다 많지 않으면 일관성이 있습니다. 우리는 거의 모든 다른 신호 처리 분야와 그래픽 카드 분야에서 이러한 방법을 사용했기 때문에 이것을 알고 있습니다.

이 방법에는 단점이 있습니까? 순진한 가정을한다면 조금 느려집니다. 그것은 이론적으로 적용 범위 래스터 라이저보다 빠른 점근선 동작을 가지고 있습니다. 또한 컨볼 루션 기반 효과의 사용을 구현하기가 더 어려울 수 있습니다.


근무일이 끝나면 내 일정에 대한 그림을 추가합니다. 이 모든 것이 그래픽 처리 후에 시각적으로 해석됩니다
joojaa

답변:


6

수퍼 샘플링은 순진하게 수행 될 때 계산 비용이 많이 듭니다. 예를 들어 디스플레이의 픽셀 크기의 절반을 사용하는 경우 메모리와 대역폭의 4 배가 필요하기 때문입니다. Wikipedia 는이를 언급하고 적응 형 수퍼 샘플링을 가능한 솔루션으로 지정합니다. 그러나 이는 알고리즘을 훨씬 더 정교하고 복잡하며 구현하기 어렵게 만듭니다.

더 많은 메모리와 실행 시간이 필요없는 알고리즘을 원한다면 순진한 "투명성"접근 방식보다 훨씬 복잡해집니다.


실제로 래스터 화 설정을 저장하기 만하면 샘플을 저장할 필요가 없습니다. 커버리지 기반 방법은 그것들을 저장하지 않으므로 뒤로 한 단계가 아닙니다. 순진한 방법은 이해하기 쉽고 우선 순위 기반 샘플링을 쉽게 수행 할 수 있기 때문에 제공됩니다. 또한 적용 범위 기반 솔루션을 GPU로 옮기려면 많은 추가 작업을 수행해야하며 해당 모델과 호환되지 않습니다.
joojaa

@joojaa : "래스터 화 설정 저장"의 의미를 설명하거나 20 페이지 이상의 과학 논문을 통해 자신을 파헤칠 필요가없는 방식으로 접근 방법을 설명 할 수있는 링크를 제공 할 수 있습니까?
Doc Brown

각 픽셀은 서로 독립적이므로 픽셀을 수행하는 동안 샘플 만 저장하면됩니다. 이후에는 안전하게 폐기 할 수 있습니다. 더 높은 차수를 사용하려면 제한된보기 만 저장할 수 있습니다. 따라서 처리 코어에 메모리를 할당하기
만하면

박스 필터를 사용하면 개별 샘플을 저장할 필요가없는 이동 / 실행 평균 공식을 사용할 수 있습니다
joojaa

@ joojaa : 나는 그것을 얻지 못합니다-먼저 모든 관련 모양 , 수백 또는 수천 개의 샘플을 계산 하고 나중에 래스터 디스플레이로 필터링 하지 않아도 됩니까?
Doc Brown

6

수퍼 샘플링은 일반적으로 문제를 해결하지 못합니다. 눈에 띄지 않게 만들뿐입니다. 픽셀 크기가 절반이면 문제의 절반이 눈에 띄지 만 사라지지는 않습니다.

이러한 설계의 핵심은 "렌더링 삼각형 ABC"명령이 명확한 의미를 갖기를 원한다는 것입니다. "렌더링 삼각형 BCD"가 컬렉션에있을 때 (동일하거나 다른 색상으로) 다른 의미를 갖는 경우와 같이 드로잉 명령의 컬렉션으로 간주되는 경우를 제외하고는 모호하지 않습니다. 그렇지 않습니다.

예를 들어, 천 개의 삼각형을 고려하면 ABC와 측면 또는 측면의 일부를 공유하는 모든 삼각형을 찾는 것조차 계산이 무겁습니다 (수천 번 다시 수행해야 함을 기억하십시오). 다른 실질적인 문제들도 많이 있습니다. 특히, 원래의 모든 렌더링 요청은 오래 전에 작성 되었더라도 새로운 추가 요청으로 인해 재평가가 필요한 경우를 대비하여 유지되어야합니다.

결론은 완벽하게 일관된 솔루션을 실행할 수 없다는 것입니다. 질문이 남아 있습니다 : 우리가 할 수있을 때 현재 상황을 개선하려고 노력해야합니까? 일반적으로이 질문에 대한 대답은 아니요 입니다. 모델 자체에 설명 된 제한이 있어도 모델의 완벽하게 일관된 구현이 항상 더 좋습니다. 대안은 프로그래머가이 두 가지 중 어떤 것이 어떤 경우에 어떤 것을 보유 할 것인지 알 수있는 방법없이 때로는 더 나아지거나 그렇지 않은 구현 일 수 있습니다. 또한 프로그래머가 조금만 변경해도 프로그래머가 제어 할 수없는 결과로 "더 나은 것"에서 "더 나은 것"으로 이동할 수 있습니다. 프로그래밍 맥락에서 예측 가능성은 먼


내 수퍼 샘플링이 적용 범위 계산을 수행하지 않으면 적용 범위 계산의 문제입니다. 문제를 줄이는 것이 아니라 그 대답에 수렴하기 때문에 문제가 없습니다. 이것을 증명하기 위해 코드가 필요합니까? 이것이 그래픽 카드의 작동 방식이며이 문제가 발생하지 않습니다. 그렇지 않으면 모든 게임에서 문제가 발생합니다. 허위 논리를 기반으로 하므로이 답변을 구매하지 않습니다.
joojaa

@joojaa 게임은 앤티 앨리어싱을 수행하지 않거나 앤티 앨리어싱을 위해 수퍼 샘플링을 사용하여 일반적으로 4 가지 레벨의 앤티 앨리어싱을 제공합니다. 앤티 앨리어싱에서 약 64 레벨을 원하는 프리젠 테이션 품질 그래픽에는 충분하지 않습니다. 게임은 한 문제를 다른 문제로 바꿉니다.
Pete Kirkham

@PeteKirkham은 설정에 따라 일부 gamnes에서 샘플 양을 지정할 수 있습니다. 어쨌든 상자 필터링보다 고차 필터를 사용하는 경우 프리젠 테이션 레벨 AA를 생성하기 위해 16 개 이상의 샘플이 필요하지 않습니다. 내 예제에서 오류 이미지 없음은 하드웨어 리스터 라이저 내부에서 수퍼 샘플링하여 수행됩니다.
joojaa
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.