이 주제는 최적화 문제와 마찬가지로 많은 결과를 낳았지만, 내가 원하는 것 (생각)을 찾지 못했습니다.OpenGL 저수준 성능 질문
많은 자습서 및 SO 질문에도 유사한 도움말이 있습니다. 일반적으로 덮는 :
- 사용 GL 얼굴 따라서 모델 번씩 버텍스 당에서 MVP 계산을 감소 (OpenGL의 기능이 아닌 현장 로직)
- Only를 GPU (projectionModelView 조합) 1 행렬을 전송 컬링 (해야하는대로).
- 사용 인터리브 정점
- 많은 GL 일괄, 가능한 호출 최소화 적절한
그리고/아마도 몇 많은 다른 사람. 나는 (내 호기심 때문에) 여러 개의 버텍스 버퍼를 사용하여 2 천 8 백만 개의 삼각형을 렌더링했다. 나는 위의 모든 기술을 (최선을 다해서) 시도했으며, 성능 변화가 거의 없었다.
내 구현에서 약 40FPS를 받는다는 것은 아무 문제가 없지만 이러한 최적화 팁이 실제로 어디에서 사용되는지 궁금하다.
렌더링 중에 내 CPU가 약 20-50 % 공회전하므로 을 사용합니다. 나는 성능 향상을 위해 GPU를 사용하고 있습니다.
참고 : 속도를 채울 저장 그대로 내가
크로스 1은 분명하다 Game Development
매우 좋습니다! 감사. –
아주 좋은 대답입니다. 질문, 포인트 2에 대한 답변에서, 나는 약간 혼란스러워합니다. Shader 내부의 "모델 * 투영 * 뷰"(모델이 변경 될 때마다 유니폼 변수, modelview가 전송 됨)와의 차이점을 비교했습니다. 모델 당 업데이트 된 단일 균일 행렬 변수 (modelviewprojection) 대 정점 대신 CPU에 의해 계산됩니다 (한 번). 확실하게 그것은 많은 계산을 저장할 것입니까? – dcousens
@Daniel : 일반적으로 셰이더에서 MVP 행렬을 계산하지 않습니다. 먼저 model_view_position = MV * vertex_position 계산을 수행 한 다음 clip_position = P * modelview_position을 수행합니다. 그 이유는 일부 알고리즘의 경우 전체 프로젝션 프로세스의 최종 결과뿐만 아니라 모델 뷰 변형 된 정점 위치가 필요하다는 것입니다. 또한 정점 법선은 전체 MVP^T^-1이 아닌 MV의 역 전치에 의해서만 변형됩니다. 그래서 또 다른 이유가 있습니다. 멋진 조명을 구현하려면 이러한 변형 된 법선이 필요합니다. – datenwolf