Нюансы при экспорте из 3DS MAX (комментарии)
Это сообщение сгенерировано автоматически.
Hax
Может вопрос не совсем по теме, но я уже не знаю где ещё спросить:( Как ты компилировал плагин, так что работает и в 6ом и 7ом максе? У меня получается следующая штука, плагин работает только с той версией макса от которой был сдк. В остальных случаях он либо просто не грузится, либо все падает при экспорте.
В плагине используется IGame, возможно дело в этом?
Мы не используем IGame. Плагин, откомпилированный с любым 3ds max 5.0-7.0 sdk работает с 3ds max 5.0-8.0. Ничего специального для этого я не делал.
спасибо, приятно читать было
DROnik
В solution'е делаешь несколько проектов ( для каждой версии Макса ), настраиваешь пути и при внесении добавления в код перекомпилируешь версии плагина для нужных версий Макса. Справедливости ради отмечу, что в последнее время от этого отказались и используется одна версия Макса по указанию лид-дизайнера.
Hax
Красные вершины можно использовать, но при анимации их приходиться сохранять отдельно, как морфинг. Хотя в подавляющем большинстве анимаций разницы между мягкой и "красной" привязками не видно, наши аниматоры за красную привязку встали горой.
За статью спасибо.
Вы сохраняете 4000 кадров, на каждом 3000 красных вершин, как позиции вершин?
>>3DS MAX предоставляет доступ к позициям вершин и треугольникам, но не к нормалям вершин.
Mesh mTriangles=Info->mTriObject->GetMesh(); mTriangles.checkNormals(true); Face *Faces=mTriangles.faces; ... Point3 rNrm=mTriangles.getNormal(Faces[f].v[i]); RVertex *cVertex=&mTriangles.getRVert(Faces[f].v[i]); if(cVertex->ern) { for(uinteger n=0; n<(cVertex->rFlags&NORCT_MASK); n++) if(cVertex->ern[n].getSmGroup()==Faces[f].smGroup) { rNrm=cVertex->ern[n].getNormal(); break; }; }; Point3 cNrm=Matr.VectorTransform(rNrm); cGroupe->cStream.Normal[cV[i]].v[0]=cNrm.x; cGroupe->cStream.Normal[cV[i]].v[1]=cNrm.z; cGroupe->cStream.Normal[cV[i]].v[2]=cNrm.y; cGroupe->cStream.Normal[cV[i]].Normalize();
Мало того что макс хранит нормали вершин, дак ещё и не по одной нормали на оную, а для каждой смуф группы.
А так неплохая статья...
3DS MAX SDK help:
------- cut ---------
class RNormal
Description:
The 'rendered' normal class. RNormals are stored as unit vectors in object space. An instance of this class is maintained by the RVertex class since the RVertex is what gets rendered (lit), and the lighting methods need to know about the normals. All methods of this class are implemented by the system.
>Note: This class is used internally by 3ds max. Developers who need to compute face and vertex normals for a mesh should >instead refer to the Advanced Topics section Computing Face and Vertex Normals.
------- cut ---------
Да, статья действительно хорошая.
Мы тут затеяли переработать систему материалов для движка и...
У максовского объекта есть поле User Defined, а у материала такого нет.
Как сделать нечто подобное User Defined для материалов, для задания им дополнительных свойств?
>У максовского объекта есть поле User Defined, а у материала такого нет.
>Как сделать нечто подобное User Defined для материалов, для задания им дополнительных свойств?
Вот, наткнулся случайно:
MO, Hax - я так и не понял, к какому вы выводу пришли по поводу интерфейса RNormals.
Ведь в этом куске написано,
>Note: This class is used internally by 3ds max. Developers who need to compute face and vertex normals for a mesh should instead refer to the Advanced Topics section Computing Face and Vertex Normals.
Т.е. именно этот класс юзает макс для отображений нормалей, и значит чтобы получить картинку 1:1 как в максе нужно именно его и использовать? А разрабу, которому нужно РАСЧИТАТЬ нормали - см такой-то топик.
так или нет?
Да, всё правельно. Но использовать расчитанные нормали я смысла не вижу. Художник нарисует одно, а в приложении будет совсем другое, ибо нормаль для расчета освещения это совсем даже не математическая нормаль к поверхности в данной точке. В максе даже есть специальный модификатор который позволяет ручками поправить каждую конкретную нормаль (очень удобно и полезно, особенно для лоу поли). Нормали которые использует 3ds для расчета освещения (точнее их используют классы материалов) какраз находятся в интерфейсе RNormals. Что касается приписочки в документации, то как я понимаю это всеголишь предупреждение о нестабильности интерфейса (т.е. он может менятся и может быть несовместим от версии к версии), плюс ссылка на то как можно расчитывать нормали если очень не хочется использовать RNormals.
>Т.е. именно этот класс юзает макс для отображений нормалей, и значит чтобы получить картинку 1:1 как в максе
>нужно именно его и использовать? А разрабу, которому нужно РАСЧИТАТЬ нормали - см такой-то топик.
>так или нет?
Мы используем ATI Normal mapper. Для того, чтобы полученные normal maps работали без артефактов, игра должна использовать нормали, которые использует Ati normal mapper при рассчете normal maps. Normal mapper при экспорте в NMF нормали пересчитывает, и поэтому мы пересчитываем точно по такому же алгоритму, как и в исходниках normalmapper.
Соответсвенно, наш плагин игнорирует нормали 3DS MAX, и модификаторы для редактирования нормалей.
Ага, спасибо, понял. И за статью спасибо :)
Тема в архиве.