2014-10-07 4 views
0

내 코드 (C++로 코딩 됨)는 모델의 법선을 업데이트하는 for-loop에서 bottle-necking입니다. 필자가 테스트 한 모델은 약 2.2k 정점 (표시)으로 잘 작동하고 60fps 한계에서 작동하지만 법선은 표시기 (~ 12k)만큼 비슷합니다. 코드는 의도 한대로 작동하지만이 for 루프는 업데이트해야하는 법선의 양 때문에 너무 오래 걸립니다.C++ : 애니메이션 : 법선 : 많은 수의 법선을 처리하고 애니메이션 업데이트 중에 어떻게 업데이트합니까?

정보는 마야 API에서 수출하고 내 프로젝트가 읽을 수있는 파일 형식으로 저장 (파일을 읽는 내 프로젝트에 문제가 없는지, 그것은 모든 맞습니다).

내가 그것을 계산해야 법선의 수를 줄일하려고 생각하고 있지 않다 뭔가가 있나요? 그런 문제를 다루기 위해 사람들이 AAA에서 어떤 트릭을 사용합니까? Maya API 레벨에서 최적화 할 수 있습니까? 도움이 될 수있는 다른 조언은 크게 감사하겠습니다.

나는 이전에 답변을 검색 한, 그러나 나는 "노멀 맵은"내 문제와 아무 상관이없는 올라오고 멀리 가져올 수 없습니다. >.>;

미리 감사드립니다. :)

============================================ = 요청에 따라

코드 블록 :

 // Transform and save our normals. 
     for(unsigned int i = 0; i < p_mesh_data->getNormalCount(); ++i) 
     { 
      Quaternion total_rotation; 

      unsigned int index = p_mesh_data->getNormalToVertex(i); 
      for(unsigned int j = 0; j < p_skeleton->getJointCount(); ++j) 
      { 
       JointInfluence influence = p_mesh_data->getInfluence(index * p_skeleton->getJointCount() + j); 

       total_rotation = total_rotation + (rotations[influence.joint_id] * influence.weight); 
      } 

      p_normals[i] = Matrix(total_rotation).transform(p_mesh_data->getNormal(i)); 
     } 
+0

문제 코드 블록을 추가했습니다. – KrittzArt

+0

이 코드를 프로파일 링하여 루프에서 실행 시간이 가장 많이 걸리는 부분을 확인하십시오. – uesp

+0

방금 ​​출력물을 얻었지만 게시물에는 너무 많은 내용이 포함되어 있습니다. :/ – KrittzArt

답변

1

데이터와 좀 더 많은 연구보고 후, 나는 가중치에게 대부분을 다진 미만 0.001f (영향이 없었다 기본적으로 아무것도) 제거 프레임을 업데이트하는 데 필요한 루프. 이제 편안한 16 평균 ms에 앉아 있습니다. 같은 문제를 통해 오는 다른 사람들을위한

는 불필요한 영향을 정화하는 고/복합 폴리 모델과 높은 프레임 속도를 유지하기 위해 필요한 것이다. 단순한 기하학에서는 이것이 필요하지 않을 수도 있습니다.

시간을내어 주신 모든 분들께 감사드립니다. :)