iOS에서 GL_ALPHA_TEST의 성능이 매우 좋지 않은 것처럼 보입니다. 견적하려면 Apple :OpenGL ES 1.1에서 GL_ALPHA_TEST 대체 (쉐이더 없음)
그래픽 하드웨어는 조각의 색상 값을 계산하기 전에 그래픽 파이프 라인의 초기에 깊이 테스트를 자주 수행합니다. 응용 프로그램이 OpenGL ES 2.0 조각 쉐이더에서 OpenGL ES 1.1 또는
discard
명령어의 알파 테스트를 사용하는 경우 일부 하드웨어 깊이 버퍼 최적화를 비활성화해야합니다. 특히 조각 조각을 볼 수 없기 때문에 조각의 색상을 완전히 계산하여 폐기해야 할 수 있습니다.알파 테스트를 사용하거나 픽셀을 없애려면 버리는 방법 대신 α가 0 인 알파 블렌딩을 사용하는 것이 좋습니다. 이는 Z- 버퍼 최적화를 유지하면서 프레임 버퍼 컬러에 대한 기여를 효과적으로 제거합니다. 이렇게하면 깊이 버퍼에 저장된 값이 변경되므로 투명한 기본 요소를 뒤에서 앞으로 정렬해야 할 수 있습니다.
알파 테스트 또는
discard
명령을 사용해야하는 경우 필요하지 않은 프리미티브를 처리 한 후 장면에서 이러한 개체를 개별적으로 그립니다. 결과가 사용되지 않는 계산을 수행하지 않으려면 명령어를 조각 쉐이더의 초기에 배치하십시오.
궁금한 점은 "알파 강제로 알파 블렌딩을 사용하십시오"라는 것이 정확히 무엇을 의미합니까? 어떻게 이것을 할 수 있습니까? 또는 알파 값에 따라 픽셀을 생략하거나 숨길 수있는 다른 방법이 있습니까?
텍스쳐 컴 바이 너 또는 다양한 블렌드 모드 (glBlendFuncSeparateOES
포함) 사용을 고려했습니다. 그러나 아무 것도 그 일에 맞지 않습니다. 별도의 알파 텍스처가 있고 텍스처 조합을 사용하면 작업 할 수 있다고 생각합니다. 그래도 텍스쳐가 하나만있는 것을 선호합니다.
답장을 보내 주셔서 감사합니다. 셰이더 기반 솔루션에 대한 아주 잘 설명되어 있습니다. 그러나 내가 말했듯이 셰이더를 전혀 지원하지 않는 OpenGL ES 1.1을 목표로하고 있습니다 (http://www.khronos.org/registry/gles/ 참조). – kloffy