2016-08-27 9 views
1

텍스처에서 많은 흰색 꼬임을 가져옵니다. 그러나 노란색 원으로 그리면 작은 알파 값 (0과 같지 않음)이 포함 된 점이 잘못 혼합되어 화면의 일부 픽셀이 어두워집니다 (스크린 샷을 보면 확대되었습니다). 어떤 문제가 될 수 있습니까? 파란색 배경에 모두 괜찮습니다. @tklausi이 코멘트에 지적알파 값이 작을 때 OpenGL에서 블렌드가 잘못됨

screenshot

+0

알파 값이 낮은 흰색 픽셀과 알파 값이 0 인 검정 픽셀 (완전히 투명 한 화살표 바깥 쪽) 사이의 보간 문제와 모양이 비슷합니다. – tkausl

+0

비디오 드라이버의 문제 일 수 있습니까? –

+0

아니, 그 보간법이 어떻게 작동하는지. __how__ 이미지 편집 프로그램을 사용하면 완전히 투명한 픽셀을 저장할 수 있지만 맞으면 (보통) 문제가되지 않는 것처럼 검정색으로 저장됩니다. Thats는 나쁜. 이미지를 업로드하기 전에 사전 처리를해야하며 알파 값이 0 인 모든 픽셀을 흰색으로 설정해야합니다. – tkausl

답변

1

,이 문제는 기존의 알파 블렌딩와 함께 텍스처 보간 관련되었다. 알파가 높은 값에서 알파가 0 인 "배경"으로 전환 할 때 알파가> 0이고 RGB가 배경색과 혼합 된 보간 결과를 얻을 수 있습니다.

@ tlkausi의 해결책은 배경의 RGB 값을 흰색으로 변경하는 것이 었습니다. 그러나 이것은 이전과 같은 문제를 일으킬 것입니다. 실제 이미지에 어두운 색상이 있으면 주변에 밝은 아티팩트가 표시됩니다.

정확한 해결책은 실제 테두리 픽셀의 RGB 색상을 반복하여 보간이 항상 더 낮은 알파 값을 사용하여 같은 색상이되도록하는 것입니다.

그러나 훨씬 더 좋은 해결책이 있습니다. 미리 곱한 알파입니다. 픽셀 당 텍스처에 (R, G, B, a)를 저장하는 대신 (aR, aG, aB, a)를 저장합니다. 블렌딩 할 때 a*source + (1-a) * background을 사용하지 않고 단지 source + (1-a)*background을 사용합니다. 차이점은 이제 당신이 "중립적 인 요소"(0,0,0,0)를 가지며 그것에 대한 보간이 아무런 문제도 제기하지 않는다는 것입니다. 필터링과 함께 잘 작동하며 밉 매핑 및 기타 기술에도 좋습니다.

일반적으로 을 사용하는 것은 "전통적인"것을 선호하여 미리 곱셈 된 알파를 사용하는 것입니다. 미리 곱셈은 이미지 파일에 직접 적용 할 수도 있고 텍스처 업로드시 할 수도 있지만 런타임 비용이 전혀 들지 않습니다.

미리 곱셈 된 알파에 대한 자세한 내용은 in this MSDN blog article 또는 over here at NVIDIA입니다.