내 코드 (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));
}
문제 코드 블록을 추가했습니다. – KrittzArt
이 코드를 프로파일 링하여 루프에서 실행 시간이 가장 많이 걸리는 부분을 확인하십시오. – uesp
방금 출력물을 얻었지만 게시물에는 너무 많은 내용이 포함되어 있습니다. :/ – KrittzArt