2014-04-30 6 views
2

당신이 일반적으로 쿼드을 그리고 다음이 픽셀을 건너 '폐기'를 사용 http://www.arcsynthesis.org/gltut/Illumination/Tutorial%2013.html앤티 앨리어싱의 GLSL의 사기꾼

여기 예를

에 기재 한 바와 같이 당신은 사기꾼 기반의 광선 추적 방식을 사용하여 영역을 그리면 쿼드 중심에서 구형 반지름보다 큰 거리.

앤티 앨리어싱을 켜면 GLSL은 사용자가 그리는 프리미티브 테두리 (이 경우 쿼드)에 앤티 앨리어싱을 적용하지만 그린 된 픽셀과 삭제 된 픽셀 사이의 경계는 제거하지 않습니다.

구형을 표시하는 두 개의 스크린 샷과 테두리가 날아간 것입니다. 가장 위에있는 픽셀을 제외하면 쿼드 경계선에 위치합니다. 구 경계가 앤티 앨리어싱되지 않았습니다.

Impostor based sphere Sphere border zoom-in

나는 사기꾼 구를 만들기 위해 사용할 수있는 트릭이 있습니까

좋은 앤티 앨리어싱 테두리가?

최저 관련,

MADS

답변

1

대신 단지 픽셀을 폐기은 내부 및 외부 반경을 가지고 당신의 영역을 설정합니다. 내부 반경 안쪽의 모든 것이 완전히 불투명합니다. 바깥 쪽 반경 바깥의 모든 항목이 삭제되고 그 사이의 모든 항목은 0과 1 사이의 알파 값 사이에서 선형 보간됩니다.

float alpha = (position - inner)/(outer - inner); 
+0

당신은 또한 이것을 위해 블렌딩을 원할 것입니다. 솔직히, 당신은 아마도 셰이더 자체에서 이것을 구현할 수 있습니다 ... 'output = mix (, , alpha)'. –

+0

감사. 문제는 일반적으로 여러 영역이 있기 때문에 현재의 단색과 혼합해야합니다. 그래서 검은 색으로 혼합하는 것은 하나의 구체 만 가질 때만 작동합니다. 대신 블렌딩을 시도했지만,이 경우 필연적으로 모든 영역을 뷰 공간 Z 좌표와 관련하여 앞쪽으로 가져와야합니다. 음 ... – repoman

1

kneejerk 반응은 사용자 자신을 위해 멀티 샘플링하는 것입니다. 실제 출력의 4 배 크기로 설정 한 다음 밉맵을 생성하고 해당 텍스처에서 다시 화면으로 렌더링하십시오.

다른 방법으로는 쉐이더에서 직접 처리하고 OpenGL이 기하학 가장자리를 계속 걱정하게하십시오. 픽셀 당 4 개의 광선을 샘플링하고 평균을냅니다.

+0

고마워요. 나는 그것을 시험해 보겠다. – repoman