zoukankan      html  css  js  c++  java
  • [Nebula2]使用3dmax7,nmaxtoolbox导出模型到nebul­a2遇到的问题及解决方法

    1. 长度单位
    假设nebula2内使用opende,其长度单位一般当作公制的米(也可以根据需要调整重力加速度质量等的比例来使用其他单位)。
    3dmax内可以调整内部数据使用的长度单位。
    Customise->Units Setup...->System Unit Setup
    调整为任意单位,只需要保证Unit
    Setup内的显示单位(Display Unit
    Scale)与之匹配,则导出时的'数据'尺寸就是Measure中查看到的值。
    Nebula Export Options内有一个Scale Geometry
    By的参数,改为1.0则可以保持尺寸不变。(默认值为0.01,此时建议设置System
    Unit为厘米、

    显示单位为米以保证程序内使用的长度单位与模型制作时的单位一致)

    2. 坐标轴
    3dsmax是右手系坐标轴,z轴正方向向上。而nebula2则是右手系,y轴正方向向上。这个变化由nmaxtoolbox导出时自动进行转换。

    3. 渲染结点包围盒偏移
    无骨骼模型在进行了一系列的变换后会产生变换,其结果是包含整个模型的ntransformnode结点的包围盒与实际看到的对象的包围盒不一致。这在

    进行对象可见裁减时将得到错误的结果。
    解决方法有2种:第一种是模型变换后进行Reset
    XForm并重新转为editable mesh
    第二种则是程序中所有对象的可见裁减不以模型为单位,而以实际的nshapenode为单位。(该方法仅是设想,未尝试)

    4. 层次结构的模型动画
    模型之间设置父子关系,子模型会收到父模型动画的影响,如模拟监视器探头的2个不同轴向的关节。只需要分别设置父子的相对动画过程即可。

    5. 骨骼动画与程序中模型的装配连接
    模型可以通过绑定骨骼的方式得到装配点,但装配点骨骼方向需要设置为方向(0,0,0)(即指向3dsmax的x轴正方向)才能得到模型向正上方。
    程序中可以直接取装配点骨骼的变换矩阵乘到装配模型的变换矩阵内。
    如:坦克炮塔,炮塔装配在坦克上方。炮管装配在炮塔前部。
        // set tank tower
        mx.ident();
        mx.rotate_y(this->tower_turn.x); // 坦克炮塔水平转向
        if (this->joint[0])
        {
            mx *= this->joint[0]->GetMatrix(); // 装配骨骼
        }
        mx *= mx_tank; // 坦克变换矩阵
        this->tower->Transform().setmatrix(mx);
        this->tower->Render();

        // set tank gun
        mx.ident();
        mx.rotate_x(this->tower_turn.y); // 炮管上下转
        if (this->joint[1])
        {
            mx *= this->joint[1]->GetMatrix(); // 炮管装在炮塔上
        }
        mx.rotate_y(this->tower_turn.x); // 炮塔水平转
        if (this->joint[0])
        {
            mx *= this->joint[0]->GetMatrix(); // 炮塔装在坦克上
        }
        mx *= mx_tank; // 坦克的变换矩阵

        this->gun->Transform().setmatrix(mx);
        this->gun->Render();
    6. 阴影体的制作和导出
    阴影体用来生成shadow
    volume,nebula2需要模型制作对应的阴影体才能生成shadow
    volume。
    阴影体分为两类,static shadow和skinned shadow。
    阴影体必须是闭合的,否则生成的阴影在边界处会显示出多余的阴影片。
    多个阴影体可以相交或重合。
    3dsmax中制作阴影体可以复制原模型然后修改mesh
    options为shadow后导出。
    如果使用skinned
    shadow,则在阴影体上添加skin这个modifier后最终导出时需要选择包含mesh
    options的modifier再导出(可能是nmaxtoolbox的缺陷)否则导出时阴影体被认为是普通模型。

    阴影体制作补充
    阴影体的闭合不仅要把阴影体模型的洞补上,而且从原模型复制来的阴影体如果是多重纹理的需要把阴影体纹理统一到同一个纹理空间,否则导出的阴影体将会按多重纹理­把阴影体切分成为不闭合的多个模型。


    ===========================

    放出我正在使用中的nmaxtoolbox。修改内容如下:
    1.
    光源导出castshadows参数;点光源(Omni/Point)导出LightRange参数(默认为500.f)
    2.
    材质导出renderpri参数,nebula2中使用它对物体进行渲染排序
    3.
    纹理默认值,使用shaders:shaders.xml中定义的默认值(仅支持AmbientMap0,BumpMap0,DiffMap0)官方最近的更新­支持所有类型的纹理,但各类型固定了默认值。
    4. 为了配合nebula2的shadow2,阴影体单独导出mesh文件:
    static
    shadow导出带有_shadow后缀的mesh文件,顶点格式COORD,
    3个float
    skinned
    shadow导出带有_skinnedshadow后缀的mesh文件,顶点格式COORD,
    WEIGHT, JINDICES, 11个float
    5. export菜单不调用nviewer。

    下载地址:
    http://zikaizhang.googlepages.com/nmaxtoolbox_2006_10_12.exe

  • 相关阅读:
    Kafka 生产者 自定义分区策略
    同步互斥
    poj 1562 Oil Deposits(dfs)
    poj 2386 Lake Counting(dfs)
    poj 1915 KnightMoves(bfs)
    poj 1664 放苹果(dfs)
    poj 1543 Perfect Cubes (暴搜)
    poj 1166 The Clocks (暴搜)
    poj 3126 Prime Path(bfs)
    处理机调度
  • 原文地址:https://www.cnblogs.com/kaikai/p/528106.html
Copyright © 2011-2022 走看看