试用了一下Novodex2.6.2的布料系统,感觉相当不错,
简单易用,功能强大,速度也很不错,
布料系统不仅可以用来模拟布料,同样可以用来描述毛发,以及很多可变性的物体,例如空的汽油桶的表面等等。公司就是打算用这个制作头发的效果

不多说了,以下是总结:图以及demo懒得放出了,实在不好意思拿出手

Novodex2.6.2布料系统

1、概述:

Novodex中的布料系统是一个由很多顶点构成的用来模拟类似衣服,旗子等可变形的物体的系统。在Novodex中,布料不同于刚体模拟,布料有一个专门的类型:NxCloth,这个类没有继承自任何类型。

2、布料属性:

布料有很多属性,这些属性通过NxClothDesc类表达。以下列举常用属性:

NxMat34 NxClothDesc::globalPose 保存全局的位置和姿态

NxReal thickness                       厚度

NxReal density                          密度

NxReal bendingStiffness             弯曲柔软度,取值在(0,1)

NxReal stretchingStiffness          拉伸柔软度,取值在(0,1)

NxReal dampingCoefficient  震荡衰减因子,取值在(0,1)

NxReal friction                          摩擦因子,取值在(0,1)

NxCollisionGroup collisionGroup 碰撞组

NxGroupsMask groupsMask     碰撞Mask

NxU32 flags                              可以通过这个设置一些行为属性,常见的flags如下:

NX_CLF_DISABLE_COLLISION     取消和刚体的碰撞

NX_CLF_SELFCOLLISION         Enable/disable自碰撞

NX_CLF_GRAVITY                           Enable/disable重力

NX_CLF_BENDING                          Enable/disable 弯曲阻力

NX_CLF_BENDING_ORTHO             Enable/disable直角弯曲阻力

NX_CLF_COLLISION_TWOWAY     Enable/disable布料和刚体的相互影响,如果disable了,布料不会影响到刚体,例如,拖动布料不会拖动刚体,但是如果Enable了,那么拖动布料会同时拖动刚体。

NX_CLF_TEARABLE                        是否可撕裂,Enable后,当施加在布料上的力大到一定程度,可以撕裂布料,但是前提是必须在初始化的时候生成了撕裂线。

NX_CLF_HARDWARE                       是否使用硬件模拟

3、创建布料

创建布料首先要创建NxClothDesc,NxClothDesc负责描述所有的布料属性,然后通过NxClothDesc穿件NxCloth对象。

因为创建布料需要用户指定顶点和三角形的数据,所以还需要cook数据到SDK。

但是这种创建过程十分的繁琐,Novodex SDK 提供给了我们封装了的辅助类。MyCloth类。使用这个类能够方便的创建四方形的或者不规则的布料。

创建一块宽w,高h,顶点间隔d的布料:

MyCloth(NxScene *scene, NxClothDesc &desc, NxReal w, NxReal h, NxReal d, char *texFilename, bool tearLines)

同样可以通过复杂的3d模型创建布料:

通过读入*.obj文件创建,obj文件可以通过3D MAX直接转换

MyCloth(NxScene *scene, NxClothDesc &desc, char *objFileName, NxReal scale)

4、固定布料

布料不同于刚体,所以不可能使用Joints来固定布料,NxCloth类提供了几个用于固定布料的函数:

void attachVertexToGlobalPosition(const NxU32 vertexId, const NxVec3 &pos);

vertexId是布料上的一个点,这个函数用户将布料上的一个点固定在全局空间中的一个位置。

void attachVertexToShape(NxU32 vertexId, const NxShape *shape, const NxVec3 &localPos, NxU32 attachmentFlags);

这个函数将布料上的一个点固定在一个刚体的shape上,localPos是相对于这个刚体的局部坐标。attachmentFlags表示布料将如何影响刚体的shape,这个参数有2个取值,分别是NX_CLOTH_ATTACHMENT_TWOWAY和NX_CLOTH_ATTACHMENT_TEARABLE。NX_CLOTH_ATTACHMENT_TWOWAY 表示刚体可以影响布料,布料也可以影响刚体。但是有个条件,shape必须是动态的,也就是说如果设置了NX_BF_KINEMATIC的话,布料也无法影响到shape。

NX_CLOTH_ATTACHMENT_TEARABLE表示布料不影响刚体,施加在布料的力足够大将会撕裂布料。

void attachToCollidingShapes(NxU32 attachmentFlags);

void attachToShape(const NxShape *shape, NxU32 attachmentFlags);

这2个函数将布料固定在刚体上,只要是布料和刚体相交的点,都将被固定在刚体上。

void detachFromShape(const NxShape *shape);

void freeVertex(const NxU32 vertexId);

这2个函数用于将布料解除连接。

5、渲染:

void MyCloth::draw(bool shadows)

MyCloth类提供了渲染函数,原理其实很简单,只是将创建布料时候的顶点用Vertex Array画出。

6、Sleep

为了加速渲染,可以设置sleep,当布料的速度低于某个值的时候,认为布料静止,这样Novodex将忽略对布料的计算。

通过以下函数获取/设置Sleep速度阀值:

      NxReal NxCloth::getSleepLinearVelocity() const;
     void NxCloth::setSleepLinearVelocity(NxReal threshold);
    

可以通过以下方法查询布料是否正处于Sleep中:

      bool NxCloth::isSleeping() const;
 

可以通过以下方法强制将Cloth置于Sleep状态中:

void NxCloth::putToSleep();

可以通过以下方法强制唤醒Cloth:

void NxCloth::wakeUp(NxReal wakeCounterValue = NX_SLEEP_INTERVAL);

7、RayCasting

很多时候需要检查一条线是否和布料相交,就需要用RayCasting,NxCloth提供了这个函数:

bool raycast(const NxRay& worldRay, NxVec3 &hit, NxU32 &vertexId);

其中,hit将保存有相交的点的坐标,vertexId是布料上和线相交的点的Id

8、施加力

NxCloth类提供了施加力的函数:

virtual void addForceAtVertex(const NxVec3& force, NxU32 vertexId, NxForceMode mode = NX_FORCE);

这个函数对布料上的一点施加力。

virtual void NxCloth::addForceAtPos ( const NxVec3 & position, const NxVec3 & force,

NxReal radius, NxForceMode mode = NX_FORCE )

这个函数对空间中的一个半径区域内施加力,所有在这个区域的布料顶点都将受到影响。

virtual void NxCloth::setExternalAcceleration ( NxVec3 acceleration   )

这个函数对布料上所有的点,不包括被固定的点,施加一个加速度。

转载于:https://www.cnblogs.com/sssa2000/archive/2006/12/08/586676.html

Novodex2.6.2 布料系统相关推荐

  1. Unity中的布料系统

    0. 前言 项目技术测试结束之后,各种美术效果提升的需求逐渐成为后续开发的重点,角色效果部分的提升目标之一便是在角色选择/展示界面为玩家提供更高的品质感,于是可以提供动态效果的布料系统就作为了技术预研 ...

  2. unity的软体系统(布料系统)相关

    1.主要内容 软体系统即时常说的布料系统.通过布料系统可以轻松的实现现实中的飘动效果,大大提升在项目中的表现 常见的用处如飘动的裙子,头发,弹力球等需要飘动的地方 2.软体系统内容 现代游戏引擎中实现 ...

  3. 微信游戏《全民炫舞》公司的引擎开发和布料系统技术介绍

    微信<全民炫舞>上线了. 整理了一下过去技术开发历史,还有技术ppt,有兴趣看下: 公司游戏引擎技术介绍: http://www.h3d.com.cn/hr/hr.htm 布料系统技术介绍 ...

  4. unity5 新布料系统 分析

    unity5中的布料和以前大不相同 而且随便设置的话会出现布料突然消失的问题(这个应该是bug吧 我用的是5.0的 总觉的还有不完善的 估计等试试新版才知道) 而且网上大多数是以前的布料系统,所以这里 ...

  5. Unity3D 布料系统 And Cloth Constraint 及 Mesh双面渲染

    如何在Unity3D 实现布料旗帜的飘动效果呢?如下图: 目录 一.布料系统的使用方法 二.Cloth布料系统的属性设置 1.Use Gravity 重力 2.Damping 阻尼 3.布料的拉扯和弯 ...

  6. 3d布料系统横向飘动_重磅首发!ZB 2021自带布料运算,独家中文字幕!妈妈再不担心我通宵改衣褶了...

    星标小G   创造奇迹 ggac.net Pixologic刚刚在官网发布了 ZBrush 2021部分新功能预览 全网中文版首发! 先睹为快吧 据官方人员称 ZBrush 2021将包括一些改变规则 ...

  7. 微信游戏《全民炫舞》开发公司h3d2 engine和QQ炫舞2 布料系统技术介绍

    H3D公司开发的<全民炫舞>上线了. 蝉联IOS榜首很多天. 整理了一下过去公司游戏引擎开发的历史.有兴趣可以去看看 公司游戏引擎开发历史介绍: http://www.h3d.com.cn ...

  8. 虚幻引擎图文笔记:使用布料模拟(Cloth Simulation)系统制作一面可以随风飘动的旗帜(更新)

    本文使用引擎版本:UE4.26 UE4的布料系统真是强大,可以在游戏运行时实时解算布料出动画.本文以一面随风飘动的旗帜的制作为例,带大家了解一下UE4布料模拟(Cloth Simulation)系统的 ...

  9. 强大的APEX系统 游戏中质感的布料材质

    强大的APEX系统 游戏中质感的布料材质 2009 年3月26日,在美国加利福尼亚州旧金山市召开的游戏开发者大会上(GDC2009),NVIDIA正式发布了NVIDIA PhysX APEX.APEX ...

最新文章

  1. 在R中子集化数据框的5种方法
  2. 【python】python2.x中的除法
  3. Java数字图像处理基础知识 - 必读
  4. 生日快乐程序_别@官方了!云开发教你制作个性头像小程序,以后过节想加啥就加啥!...
  5. 没有bug队——加贝——Python 练习实例 9,10
  6. 离线 ocr 开源_在线和离线开始使用开源
  7. websocket python unity_Unity中Websocket的简单使用
  8. 17.合并两个排序的链表
  9. jQuery插件开发的准备
  10. java字符常量_java字符常量
  11. 浏览器控件打开PDF文件时文件内容不显示的解决方法
  12. matlab与zemax,如何在ZEMAX和MATLAB之间通信
  13. latex如何打空格
  14. Windows如何彻底删除.sys后缀的流氓文件
  15. EasyRecovery2022数据恢复软件稳定版及版本区别对比
  16. Android如何定时开机代码,Android定时开机的流程详解
  17. python中应对各种机制
  18. Cookie、sessionStorage和localStorage
  19. 奇葩公司:520不发朋友圈秀恩爱就要劝退!
  20. 【区块链技术与应用】(二)

热门文章

  1. ifconfig没有命令 kali_新装的Linux系统没有ifconfig命令?教你一键找回
  2. alt+数字 符号大全_【BIM工具箱】Revit中特殊符号大全和输入技巧
  3. vivo自带便签新版_vivo手机笔记在哪里及如何用vivo手机做笔记?
  4. w7系统计算机网络密码是什么,解答win7系统共享弹出Windows安全窗口提示输入网络密码的详细教程...
  5. 15、计算机图形学——基于AABB进行光线追踪的加速(上)
  6. C++知识点29——使用C++标准库(迭代器适配器)
  7. 010-你觉得单元测试可行吗
  8. Java中有关Null的9件事
  9. runtime 关联对象objc_setAssociatedObject
  10. vue-cli#2.0项目结构分析