淘宝人生专属小屋--虚拟人和虚拟场景技术探索

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 淘宝人生专属“小屋” 虚拟角色和虚拟场景技术探索 梵昀 阿里巴巴淘宝互动娱乐前端工程师
2. 目录 01 我们有什么 我们想做什么 02 我们一起来创作 03 技术框架内幕 04 未来展望
3.
4. 我们有什么? 我们想做什么? 入口路径 淘宝人生首页 旅行玩法首页 人生小屋
5. 我们想做什么: 人生小屋 人生小屋演示视频
6. 我们一起来创作 Get Started!
7. 技术框架内幕
8. 室内场景 Step1: 加载房间模型 制作场景 场景文件格式转换 3D场景模型 资产标准 场景导入 引擎选择
9. 室内场景 同Step1: 加载家具模型 场景
10. 1. 透视相机:Perspective camera 室内场景 Step2: 加载相机? 预备知识 Scene Camera Renderer 2. 正交相机:Orthographic camera Render the scene with camera 将相机捕捉到的场景帧,通过渲染器渲染到 画布上展示给用户
11. 室内场景 坐标系统: MVP矩阵变换 • • 局部空间: Local Space,或者称为物体空间(Object Space),局部坐标是对象相对于局部原点的坐标 世界空间:World Space,世界坐标作为一个更大空间范 围的坐标系统
12. 室内场景 Step2: 加载相机? 选择透视相机:Perspective camera FOV: 视场角,相机视锥体的两端的夹角。视场角的大小决定了视野范围,视场角越 大,视野就越大。目标物体超过这个角就不会被收在镜头里。
13. 室内场景 Step3: 相机如何围绕场景中心旋转?OrbitControl OrbitControl 轨道控制器:使相机围绕目标进行轨道运动 三维场景能旋转的本质:相机对象的旋转 鼠标左右拖动 改变相机位置、角度、渲染空间数据 引起图像变化
14. y 室内场景 Step3 trick: 相机视野变换?FOV y z Field of View 相机视野 相机平视 相机位于顶部,俯视视角时,看到整个房间? x 相机的张角变大,视野FOV 增大 z 相机俯视,FOV增大 camera.rotationX x
15. 室内场景 Up till now: 场景模型展示 疑问❓ • 为何墙壁被隐藏了?单面墙 • 视角在入户门背后时,如何隐藏门框? mesh visibility
16. 室内场景 Step4: 隐藏门框 mesh visibility y 世界坐标系 x camera.worldPosition(x,y,z)> doorEdge.worldPosition(x, y, z) 相机z坐标 > 门框z坐标,隐藏门框mesh z
17. 美术 生产 角色 Step1: 加载虚拟人
18. 人物动起来 Step2: Joystick操控摇杆 Joystick 2个重要参数: • • joystick force: strength in % joystick angle: angle in radian 疑问 ❓ 相机没有跟随移动,人走出视野
19. 人物动起来且始终在视野中 Step3: 相机跟随 场景的相机,挂载到人物node父节点上, 人物在中心 子节点设置的坐标位置是相对于父节点的局 部空间坐标,相机始终位于人物node正前 Joystick操控人物node移动 场景相机同步移动,场景视角改变,人物 始终在中心
20. 游戏逻辑 家具选中方案:Raycast Raycast光线投射原理: 1. 确定射线起点:常用相机原点 2. 确定射线终点:鼠标点击点(视口坐标 -> 世界坐标: MVP) 3. 创建射线对象:起点是相机坐标,终点为鼠标点击处 4. 检测碰撞结果:射线和检测物体的包围和求交 5. 捕获与此射线相交的空间中的物体 6. 相交的物体按照深度排序,并返回 如何选中家具? • 射线起点:相机 • 射线终点:鼠标点击 • 检测物体:家具 • 返回:与家具相交点的位置
21. 游戏逻辑 家具拖拽移动: Raycast 核心点:如何得知鼠标拖拽位置的世界坐标? • 射线起点:相机 • 射线终点:鼠标点击 • 检测物体:地板 • 返回:与地板相交点的位置
22. 游戏逻辑 人物与家具碰撞:Raycast 如何检测人物与家具碰撞? • 射线起点:人物 • 射线方向:人物走动方向 • 检测物体:家具 • 返回:与家具相交点的位置 大量家具时,低端机达不到 fps30 格子
23. 游戏逻辑 人物与家具碰撞:格子 看不见的逻辑层:tileInfo • 将地板划分为 n * n 二维数组形式 • 家具所占地砖 x * y • 此位置地砖保存该家具信息
24. 游戏逻辑 与家具动作交互 • 足够靠近动作触发点 • 旋转人物转向(基于家具 自转角度 + 触发点位置) • 动作触发点 播放动画 Play animation
25. 视效优化 阴影渲染: shadow map What is a shadow map? 贴图叠加。 传统的实时渲染? 若有n个光源: 1. 2. 3. 4. 5. 使用 第1个灯光 spot light 渲染一次整个场景,产生一 个shadow map 使用 第2个灯光 directional light 产生一个shadow map … … 最终将 n 次渲染的阴影结果进行合并,每个mesh渲染 读取n个shadow map 大量计算和性能 ❓
26. 阴影渲染 Part1:家具阴影渲染 如何提升阴影所需性能? 方案1:可以有多个灯光,但只有一个平行光可 产生阴影 方案2:使用 光照贴图 或 环境光照遮挡贴图 来 预先计算离线照明的效果 离线渲染 方案3:使用 假阴影,添加一个平面放到物体下 方的地面上,同时赋予一个看着像阴影的纹理图 片材质 离线渲染 面光源
27. 人物假阴影 阴影渲染 • Part2:人物阴影渲染 • 方案3,面光源投影,人物下方添加一个阴 影材质的平面 更好的效果:模糊处理 如何实时渲染?离屏渲染 实时渲染人物阴影
28. 人物阴影渲染 Off-Screen rendering GPU屏幕渲染: • On-Screen Rendering:当前屏幕渲染,屏幕上显示GPU 读取帧缓冲区(Frame Buffer)渲染好的的数据 • Off-Screen Rendering:离屏渲染,因为一些限制,无法 把渲染结果直接写入frame buffer,GPU在当前屏幕缓冲区 以外新开辟一个缓冲区进行渲染操作,之后再写入frame buffer。 为什么会使用离屏渲染? 当使用圆角,阴影,遮罩的时候,图层属性的混合体被指定为在 未预合成之前不能直接在屏幕中绘制,需要屏幕外渲染被唤起。 实时渲染人物阴影:离屏渲染,单独在内存 中创建一个屏幕外缓冲区并进行渲染
29. • 增强社交属性:室内单人 • 多人 多样的社交玩法,好友聚会,好友社交,多人 实时通信方案 未来展望 • 提升小屋视觉效果:全局光照离线烘焙,添加更加 真实的光影效果
30. 扫码回复「D2」 获取第十七届 D2 演讲 PDF 材料 后续也将推送 D2 会后技术文章,敬请关注!!
31. 感谢大家观看

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-17 05:38
浙ICP备14020137号-1 $Map of visitor$