`

3D赛瓦号——整装待发!

阅读更多

随着岁末将至,twaver开发团队依旧马不停蹄,3d产品功能持续更新,新特效和功能目不暇接。现在,我们就利用一些新功能,制作一个全新“赛瓦号”飞船,大家看一下仿真程度是否有质的不同?

385

网页3d技术正在快速发展,3d可视化技术目前大热,不但是目前整个IT业中的技术热点,也是互联网、投资界的热门话题。各种3d虚拟仿真技术纷纷出现,对twaver这类底层3d展示引擎产品需求量也迅速加大,要求也不断上升。网页3d应用要求开发更加简单方便、效果更加逼真,twaver也在不断满足开发者这一需求。

要让3d场景更加真实,一个核心技术就是处理好“光线”。光线直接将外接实物的各种信息带入眼睛,模拟好光线的处理,3d场景就会更加真实。光线的处理一般有透视、反射、折射等。

386

让美工或程序员准备大量的高清贴图,并不现实,也不能完全解决真实度的问题。对于光线的反射,还需要直接用算法和一些辅助贴图进行实时计算和模拟。下面介绍几种常见的用法。

环境贴图

环境贴图,是指一个物体在一个环境中,对四周环境贴图的反射。例如,下面的一个球在一个完全空白的空间,它只是发出或反射一些灯光照射来的白光而已:
387

我们如果设置合理的材质和反光强度,会让它看上去更生动一些:
388

但是它依旧没有对环境的场景有什么更细致的反应。例如一个光鲜亮丽的汽车放在站台上,它会对头顶的灯光和俯身触摸油漆的看客有清晰的反射。这时我们可以使用环境贴图:

var envmap=['posx.jpg','negx.jpg','posy.jpg','negy.jpg','posz.jpg','negz.jpg'];
node.setStyle('m.envmap.image',envmap);
 

上面准备了6张环境贴图,分别对应环境立方体中的6个面,并设置给这个node对象。这样,node就会把这个环境给反射出来。
389
这看上去像一个剥了皮的皮蛋。通过下面的参数,可以进一步控制环境贴图的反射比例:

node.s({        
  'm.reflectRatio': 0.4,
});

 

390
折射,还可以配合透明来叠加投射效果。两者结合,可以做出既反射、又投射的“气泡”效果。当然这种情况要有背景参照物才能把“透明”观察的更清楚。为此我们添加一个天空盒环境。例如:

var skybox = new mono.Cube(10000,10000,10000);
skybox.setStyle('m.texture.image',['posx.jpg','negx.jpg','posy.jpg','negy.jpg','posz.jpg','negz.jpg']);
box.add(skybox);
 

391
合理利用环境反光,可以让物体显得更加精致、逼真,有光泽。

高光反射

接下来再看高光反射的问题。我们假设一个物体有贴图、有纹理,但是没有高光反射。那么它看上去将是这样的:
392
是不是显得很“呆”?因为材质是’basic’,没有反光效果,就没有光泽变化,就像一张平面上的画,没有立体感。可以修改材质的类型为’phong’增加反光:

node.s({
  'm.type': 'phong',
});
 

这样就有了反光:
393
生动多了。不过还是没有“高光”,材质感觉不是很“光亮、精致”。可以进一步设置白色高光:

node.s({
  'm.specular': 'white',
});
 

一些局部位置对光有了更强烈的反应,更加真实了:
394
更进一步,如果我们希望物体外表一些特定区域有高光反光,其他区域暗淡,该如何处理?我们可以使用specular map贴图进行控制。例如我们把上面模型中的蓝色区域作为“玻璃窗户让它有更强烈的反光,设置了specular map后的效果会有进一步变化:

node.s({
  'm.specularmap.image': 'specularmap.jpg',
});
 

395
现在的效果是,“该亮的地方亮、不该亮的地方不亮”。“哪里亮、怎么亮、亮不亮”,我们都可以通过上述手段进行精确的控制。

法线贴图

光滑没有一丝杂质的油漆,看上去有点假。有一些杂质、纹理的效果更加真实。利用贴图纹理可以实现这样的效果,例如皮革材质。但它比较呆板:不会随着光线的移动而改变对环境的光线反射变化。现在我们用normal map这一技术来代替图片纹理,看是否更简单、效果更好。

node.s({
  'm.normalmap.image': 'normalmap.jpg',
});
 

396
怎么样,“皮革”一样的纹理效果立刻就出来了,而且比美工制图更加简单方便。

如果觉得皮革纹理波动有点大,可以通过控制法向干扰的比例进行调节。下面我们把干扰调节低一点:

node.s({
  'm.normalScale': new mono.Vec2(0.1,0.1),
});
 

干扰只启动10%。看看效果:
398
皮革会平滑、柔和一些,不粗糙,但纹理依旧清晰可见。如果是我们买LV的包包,一定会选择这种材质而不是前面的粗糙材质。

即使不用任何贴图,也可以产生效果不错的纹理,如下图中的带雕刻效果的金属圆柱:
402

哦对了,差点忘记了将以上环境映射、高光、贴图几个伎俩同时并用,看看效果。
403

最后再加上玻璃头盔、天空盒,整个场景就完整了:
386

最后,大家就跟着我们这趟赛瓦号,出发踏上3d探索之旅吧!
386

408

分享到:
评论

相关推荐

    2020北京智能家居博览会.pdf

    亦创国际会展中心依托于智能机器人产业新高地——亦创智能机器人创新园,承接着中国目前智能机器人领域规格最高规模最大的国际性行业盛会——世界机器人大会。作为“制造业皇冠上的明珠”,智能机器人已成为世界...

    Twaver Web SVG 开发说明文档.pdf

    TWaver Web SVG是由赛瓦软件(SERVA Software)提供的一套Web 客户端解决方案。用户可以方便的运用TWaver开发包提供的Java接口,实现拓扑,机架板和图表在Web上以SVG的方式实现,并以AJAX的方式进行交互,通讯以及用...

    wine_reviews_data_analysis:探索和分析〜120k葡萄酒爱好者的评论...为什么问? 看看回购并找出

    探索和分析葡萄酒爱好者的评论 我们的项目调查了约120,000条具有品种,年份,酒庄,价格等特征的葡萄酒评论。... 赛瓦米·哈努曼图(Saivamsi Hanumanthu) 大崎薄木 伊莎贝尔·齐默曼(Isabel Zimmerman)

    android手机应用源码Imsdroid语音视频通话源码.rar

    android手机应用源码Imsdroid语音视频通话源码.rar

    营销计划汇报PPT,市场品牌 推广渠道 产品 营销策略tbb.pptx

    营销计划汇报PPT,市场品牌 推广渠道 产品 营销策略tbb.pptx

    JavaScript_超过100种语言的纯Javascript OCR.zip

    JavaScript

    JavaScript_跨平台React UI包.zip

    JavaScript

    node-v16.17.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    520表白代码.rar

    520表白html5爱心代码

    一个简单的HTML5和CSS代码示例,用于创建一个动态的爱心形状,并在网页上展示一个类似520表白的消息 这个示例使用了CSS的

    520表白html5爱心代码 一个简单的HTML5和CSS代码示例,用于创建一个动态的爱心形状,并在网页上展示一个类似520表白的消息。这个示例使用了CSS的动画效果和HTML的结构。

    智慧养老社区方案.pdf

    智慧养老社区方案.pdf

    node-v14.11.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JavaScript_美观和可访问的拖放列表与React.zip

    JavaScript

    codeviz 1.0.12

    codeviz 1.0.12

    JavaScript_高级用户LLM前端.zip

    JavaScript

    javascript koans是一个交互式学习环境,它使用失败测试按逻辑顺序向学生介绍javascript的各个方面.zip

    JavaScript

    JavaScript_巴勒斯坦和巴以冲突资源的策划列表.zip

    JavaScript

    JavaScript_手工制作的弗里达例子.zip

    JavaScript

    node-v17.4.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    移动应用Android 实现QQ好友列表源码.rar

    移动应用Android 实现QQ好友列表源码.rar

Global site tag (gtag.js) - Google Analytics