玩转blender_3d动画角色创作和重生之玩转NBA

2024-04-28 12:30:27
世界杯球迷网 > NBA > 玩转blender_3d动画角色创作和重生之玩转NBA

本篇文章给大家谈谈玩转blender:3d动画角色创作,以及重生之玩转NBA的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

文章详情介绍:

最新Blender 3D角色建模教程,太美了,我一定要拥有她

今天给大家带来最新Blender 3D角色建模教程,支持系统:Windows、Mac系统,课程格式:MP4,提供方式:百度网盘,获取方式在文章底部

Blender 最近可谓是大火!在国外使用人数都已经超越C4D,作为一款免费开源的 3D 软件,其中建模、动画、材质、渲染、视频剪辑等基本功能都能满足!

课程内容大概展示

是不是超级棒的Blender学习资源,快来领取,超速前进吧!

关注下方微信公众号

回复:“661”

按提示操作 即可免费领取

进入公众号获取更多资源

↓↓↓

Blender动画导入Three.js

你是否在把 Blender 动画导入你的 ThreeJS 游戏(或项目)中工作时遇到问题? 您的 .glb (glTF) 文件是否正在加载,但没有显示任何内容? 你的骨骼没有正确克隆吗?

如果是这样,请阅读我如何使用 SkeletonUtils.js 解决此问题

推荐:用 NSDT场景设计器 快速搭建3D场景。

1、前提条件

你正在使用 Blender 3.1+(此版本包括 glTF 2.0 导出选项)

你知道如何使用“Armatures”在 Blender 中为对象设置动画

你的动画可以在 Blender 中运行

你的three.js游戏(或项目)有一个有效的“更新”循环

2、导出到 ThreeJS

如果你的动画已准备好添加到你的游戏/项目中,请导航至文件 > 导出 > glTF 2.0(.glb、.gltf)导出动画

第二个窗口将提示你为项目定义其他设置。 我突出显示了我的项目的重要方框。 如果你的游戏垂直感知 y 轴,你可能需要选中“+Y Up”。 Blender 假设 z 轴是垂直的,所以我决定在我当前的游戏中遵循这种格式。

我喜欢在游戏启动时加载我所有的 3D 模型。 这使我可以存储对象以供以后快速访问。 由于我们使用的是 .glb 格式的文件,因此我们需要利用 GLTFLoader 库(链接到文档和可下载的 JS 文件)。

下载脚本后,你现在可以利用 ThreeJS LoadingManager 库(包含在默认的 ThreeJS 文件中)来加载你的动画(参见下面的示例)。

var manager = new THREE.LoadingManager(); var loader = new THREE.GLTFLoader(manager); // You need to download this JS file separately var cache = {}; // Add manager listeners manager.onLoad = function() { /* Do something */ } manager.onProgress = function() { /* Do something */ } // Load all your models from your JSON file (using jQuery) and clone theme for later $.getJSON("./json/assets.json", function(json) { for (const [key, value] of Object.entries(json)) { loader.load(value.url, function(gltf) { // Define model using the loaded scene var model = gltf.scene; model.name = key; model.animations = gltf.animations; model.mixer = new THREE.AnimationMixer(model); model.clips = []; // Add all animations (for nested models) for (var i = 0; i < model.animations.length; i++) { model.clips.push(model.mixer.clipAction(model.animations[i])); } // (optional) Create animation functions for easier playback model.animation = { play: function() { for (var i = 0; i < model.clips.length; i++) { model.clips[i].play(); }}, reset: function() { for (var i = 0; i < model.clips.length; i++) { model.clips[i].reset(); }} } // Cache objects for later cache[key] = model; }); } });

示例 assets.json 文件:

{ "models": { "my-model-1": { "url": "./resources/models/my-model-1.glb" } } }

下一步非常重要:如果你尝试克隆缓存模型并将其添加到场景中,你的对象将不会复制蒙皮网格和骨骼。 Object3D 只会递归地复制最少的对象数据(例如:位置、旋转、比例、用户数据等)——更多信息

在将缓存模型添加到场景之前,你需要下载并使用 SkeletonUtils.js 库——更多信息

// Bad: cache['my-model-1'].clone(); // Good: THREE.SkeletonUtils.clone(cache['my-model-1']); var object = THREE.SkeletonUtils.clone(cache['my-model-1']); scene.add(object);

如果你正确地克隆了你的对象,你的模型的子对象将正确地复制原始的 SkinnedMesh 对象类型:

最后一步是在游戏循环中更新模型混合器。 如果没有这一步,你的模型动画将无法运行。

var clock = new THREE.Clock(); var myModel = THREE.SkeletonUtils.clone(cache['my-model-1']); // This function would be called by your game render loop function updateAnimation() { var delta = clock.getDelta(); myModel.mixer.update(delta); }

这应该有望解决你的模型动画问题。


原文链接:
http://www.bimant.com/blog/blender-anim-to-threejs/

作者:piikee | 分类:NBA | 浏览:5 | 评论:0