2012-11-04 2 views
0

OpenGL ES 2.0에서 Android의 픽셀 라이팅을 사용하여 3D 장면을 그립니다. 몇 개의 작은 객체 만 렌더링하면 60FPS가됩니다. 그러나 객체를 배치하기 위해 풍경을 사용하려고하면 프레임 속도가 약 15 프레임으로 많이 떨어집니다. 나는 풍경에서 모든 픽셀에 대한 조명을 계산해야하기 때문에 이것이라고 생각합니다. 내가 이것을 최적화 할 수있는 방법이 있습니까? 내가 풍경에 그림자를 드리려고하기 때문에 정점 별 조명을 사용하고 싶지는 않습니다.Android에서 픽셀 조명 당 최적화하는 방법은 무엇입니까?

+0

렌더링 코드를 넣을 수 있습니까? 올바른 방향을 가리키는 데 도움이됩니다. –

+0

코드가 너무 많아서 게시 할 수 없습니다. 내가 할 수있는 한 설명하려고 노력했다. – dragostis

+0

당신이 의심하는 부분을 게시하기 만하면됩니다. –

답변

1

위의 주석에서 나는 셰이더 코드가 그보다 더 빠를 수 없다고 생각하며 GPU 필 레이트 제한에 고정되어 있다고 생각합니다.

이 경우 객체를 현명하게 제거하여 성능을 향상시킬 수 있습니다. 먼저 가장 빠르고 간단한 쉐이더를 사용하고 가장 가까운 객체를 닫습니다 (픽셀 별 조명에 복잡한 쉐이더 사용). 이 방법으로 GPU는 풍경의 시각적 부분 만 그려 내고 풍경 쉐이더에서는 계산량이 적습니다. 필자의 경우, 객체를 재정렬하여 서로를 효과적으로 차단하기 위해 3fps를 추가로 확보 할 수있었습니다.

그러나 성능 저하가 실제로 엄청나게 커서 쉐이더 코드를 게시 할 수 있다면 쉐이더 성능을 향상시킬 수있는 몇 가지 방법이있을 수 있습니다.

+1

아주 잘 생각한 대답이지만, 이미 그것을하고 있습니다. 아직도, 나는 잘 생각해 답변을 주셔서 감사합니다. 나는 그것을 가장 최적화하는 것에 대해 생각했고 그것이 85 % 정도라고 말하고 싶습니다. 필자가 충분히 최적화 할 수 없다면 픽셀 라이팅을 에뮬레이트하기 위해 프리픽스의면 수를 늘리는 동시에 버텍스마다 랜드 스케이프를 그릴 것입니다. – dragostis

+0

@dragostis 저는 픽셀 단위 계산 대신에 정점 데이터를 사용하도록 제안하려고 생각했습니다. :) 예를 들어, 정점 데이터를 사용하여 AO 색상을 저장했으며 3000 개의 정점이있는 메쉬에서 상당히 잘 보입니다. – keaukraine

+0

정확히 내 생각. :) 많이 고마워! – dragostis

0

카메라와의 거리에 따라 가로를 분할하는 것이 좋습니다. 가장 가까운 파티션의 경우 픽셀 당 그릴 수 있으며 더 많은 개체와 세부 정보를 추가 할 수 있습니다. 원거리 파티션의 경우 정점 조명을 사용합니다. 또한 멀리있는 사물에 사기꾼을 사용하십시오. 랜드 스케이프를 분할 할 때 근처의 풍경이 화면 공간에 투영되는 정도를 모델에 입력해야합니다. 왜냐하면 사용자가 땅을 가깝게 놓고 플레이어가 볼 수있게하면 모든 화면을 하나의 화면 단위로 렌더링해야하기 때문입니다. 픽셀 조명이며 속도 저하로 어려움을 겪을 것입니다.

관련 문제