Xsi制作真实的矿泉水瓶

修改
鏉ユ簮: junjun 浏览 12328 日期 2011-10-22 0

   朱峰3d动画制作社区——这是一篇xsi(nurbs)的基础综合教程,想告诉大家在si的工具在xsi中如何使用。  

  这片教程是一篇基础综合教程(nurbs)。想告诉大家在si的工具在xsi中如何使用。(因为有的人并没有使过si)最近我在论坛上看到讨论在xsi中如何使用带通道的贴图实现区域透明效果的问题,所以我就把这些方法整合到一起。方便大家学习。

  旋转曲线,选择create>curve>draw cv nurbs命令,在front视窗中绘制一条瓶体轮廓线,注意瓶体的几个凹槽。

  然后选择surface>revolution along axis命令。勾选close u选项。检查法线是否正确(modify>surface>invert normals),冻结操作历史(edit>freeze) 。

  剪切瓶体,由于瓶口和瓶底为圆形,而瓶身为方形,因此将瓶体切割为5断。选择瓶体,选择modify>surface>snip命令。在front视窗中点击图中所示1的位置。

  也可以用select面板的u isoline过滤选择,然后再选snip命令,弹出snip surface编辑器。

 ctrl+d复制剪切物体(surfmsh),通过管理器打开snip surface[1]编辑器,只选择snip all srf mesh选项。按下图所示:

  选择modify>surface>snip命令,剪切物体。

  ctrl+d复制剪切物体(surfmsh1),通过管理器打开snip surface[2]编辑器,只选择snip all srf mesh选项。

  按上图中所示3和4的位置,按照1和2的方法依此类推。

 将多余部分删除,只剩下三部分。

  扭曲标记点,选中中间的瓶身,在top视窗中,按t键,选择控制点。

  按c键,中键沿y轴旋转点集。调整如图:

  合并表面,首先将瓶口物体沿xz轴均匀缩小一些(约0.92左右);将瓶底物体沿xz轴均匀缩小(约0.87左右)。选择眼睛图标,勾选boundary(边界)。将三个物体一同选择,观察边界位置使它们对齐。

  选择瓶口和中部物体,在select面板选择boundary按钮,选择两物体的边界。

  选择create>surface>merge命令,按右键结束。创建一个新物体surfmsh6。弹出merge surface编辑器。保持默认。

 选择新物体和瓶底物体,选择两物体的边界。

  选择create>surface>merge命令,按右键结束。创建一个新物体(surfmsh7)。弹出merge surface编辑器。保持默认。隐藏多余物体,最后如图。

  制作瓶体凹槽,使新物体沿y轴旋转10度,把它放正。在select面板选择u isoline过滤,分别在四个正方向表面的中心选择四条等位线。然后选择modify>surface>insert knot curve命令。

  按t键,在front和right视窗中,框选四个凹槽的中央控制点。

  按v键沿y轴向下移动,形成弧形。

[next]

  选择modify>surface>insert knot curve命令,在front视窗中在(v向)添加3到4条结点曲线。

  按t键,在front和right视窗中,选择中心点集并且向下垂直移动,形成凹槽。重新选择上面的几个点,将它们垂直向上移动,并在x z轴均匀放大一些,形成一个突起。你可以自行做一些细部调整。

  调整如图:

 制作标签,nurbs物体,你可以提取任何一条表面曲线。选择create>curve>extract from surface命令,在物体上选择(v向)(可先激活v isoline过滤)。生成一条曲线。

  然后选择create> surface> extrusion along axis命令。选择y轴,选择close in u。length:2.2(依你做的为主)注意法线反转问题。通过调整使它在标签槽内。冻结他。

  制作瓶盖,选择create>curve>draw cv nurbs命令,在front视窗中绘制瓶盖外轮廓线。

  选择surface>revolution along axis命令。冻结操作历史(edit>freeze)。

 选择get> primitive> polygon mesh>cube命令,通过scale进行比例缩放,放置在瓶盖边上,突出边缘。按t键,将外侧两组点向内缩小一些,形成一个梯形。

  在select面板选择center,在transform面板,使trans z值为0,将中心坐标放置在全局坐标z轴的中心。选择edit>的duplicate\instantiate> duplicate multiple命令(ctrl+shift+d)输入numder为59,在y轴rotation输入6。按ok键。

  选择60个立方体,使用create>poly.mesh>merge命令,将他们合并为一个物体。冻结它,然后删除新建的59个立方体。建模过程到此为止。

  环境、灯光的设置。灯光在表现物体质感的过程中起重要得作用,材质与光线相互作用才产生物体的视觉特征。所以我们在设置材质之前,先把灯光设置好。

  首先我们要关闭环境光的影响,选择在render模式里modify>ambience命令。将r,g,b都设置为0。(可按住ctrl键拖动划块)这点大家要记住,除非你要特殊的环境。选择get>primitive>surface>sphere建立一个球体,作为环境。放大它使摄像机在里面。

  这里我们建立四盏灯。

  ①选择light>spot灯光,作为主光cone angle:51 rgb(1,1,1)。intensity:0.75 spreat angle:6.79照亮瓶体右侧。(以上数值要依个人而定)

  

  ②选择light>point灯光,rgb(0.6,0.6,0.6) ,intensity:1

  ③选择light>point灯光,rgb(0.7,0.7,0.7),intensity:0.75

  ④选择light>point灯光,rgb(0.4,0.4,0.4),intensity:0.85因为这个灯光只照明标签物体,所以我们通过管理器,把标签物体拖放到灯光的associated model节点里。把灯光属性的selective light选为inclusive。

[next]

  最终灯光位置调整如图:

  材质,我们将讲到两种方式,一种是正常的贴图,一种是带有alpha通道的贴图。

  首先选取作为环境的球体,我们选择material>constant材质,然后选择texture>image命令。在编辑器中选择texture image右边的new按钮。选new from file 指定贴图。选择texture projection(贴图坐标)为spherical。(你也可以使用自带的环境材质,包括si的或者在render pass中)

  我们也可以通过在xsi中改变图片的色调,饱和度,亮度等属性,点击edit键,进入fx面板,如图。

  然后在照相机视图改变显示模式(textured),选一个角度。

  选择瓶身,这要求干净透亮。我们给它一个material>phong材质。diffuse color:0.7 ambient:0.3 specular color:1.0 specular decay:100 transparency:0.97 index of refraction:1.176 reflection:0.31。

  选择标签物体,我们给它一个material>phong材质,然后选择texture>image命令。在编辑器中选择texture image右边的new按钮。选new from file 指定贴图。如果现在你的摄像机视图还保持textured模式,标签物体并没有显示图片。我们选择texture projection(贴图坐标)为cylindrical。现在图象显示出来了,我们可以选择贴图坐标物体(绿色的线状体),按c键沿y轴旋转它,确定它的贴图位置。

  带有alpha通道的贴图,如果你想让贴图有的地方透明,这里就要用到带通道的图片了,首先在photoshop里存张带通道的格式(可以是tga),把标签物体的图换成这张带通道的这张。(这我就不用再多说了吧)

 少了一步!选择瓶盖material>phong,diffuse color:0.83 ambient:0.5 specular color:0.8 specular decay:125(瓶盖旁边的立方体给一样的材质)

  让白色的地方透明。其实当你用一张带通道的图片时,默认的就能显示。因为我们的瓶身是透明的。所以我们用nodes>mixers>mix_2colors节点来混合材质,用nodes>colors channels>pick节点把通道提取出来,如果出现通道不正确,用invert来反转它。(注意:把标签的物体高光勾掉)

 渲染如下:

  你会发现标签里外都一样,这和现实的不同。所以我们用nodes>switch>front-back节点来指定里面的颜色。(依你要求的颜色)

 渲一下:

  完。

评论

{{ username ? username.charAt(0).toUpperCase() : '?' }}
Ctrl+Enter 发布
{{ (c.username || c.author_name || '?').charAt(0).toUpperCase() }}
{{ c.username || c.author_name }} {{ Utils.formatDate(c.created_at) }}