游戏物理引擎+特效系统

原文链接:游戏开发入门(六)游戏物理引擎_游戏开发物理引擎-CSDN博客

游戏开发入门(七)特效系统_csdn 游戏效果开发-CSDN博客

1.游戏应用物理的目的就是为了真实

2.物理引擎:
可以认为属于游戏引擎的一个构成部分,但是可以独立剥离开来。游戏中的物理模拟的计算都是通过物理引擎根据真实世界物理定律来计算与实现的。市面上主流的物理引擎现在有两款,Havok与PhysX,其他的还有Open Dynamics Engine,Newton Game Dynamics,Tokamak Game Physics

3.物理引擎带来的表现上的优势

  • a.增加动画表现的丰富性,减少美术的工作量(柔体物理)
  • b.增加游戏的真实性
  • c.快速模拟各种现实中常见的情形(如秋千,用代码现写一个成本高的离谱)
  • d.减少逻辑代码的工作量(比如正常情况下,玩家遇到障碍会停止,在物理世界这是很自然的,但是在非物理世界却很难处理)

4.如何赋予游戏对象物理?
给游戏模型创建一个物理包围盒,该包围盒与模型始终保持位置一致,物理引擎作用与该物理包围盒,进而就能影响整个游戏对象了。

5.物理类型与应用

  • a.刚体物理 刚体是指在运动中和受力作用后,形状和大小不变,而且内部各点的相对位置不变的物体。在游戏中,刚体物理的应用最为广泛。常见的地形,建筑,玩家等基本上都赋予的是刚体物理,游戏中的弓箭,实体子弹也都是通过物理引擎来模拟计算的。其中涉及到速度、加速度、力旋转、动量、摩擦、冲量等
  • b.破碎物理 一个对象受到一定力会破碎,理论上破碎效果可以通过动画师来制作动画,但是想根据不同力的大小产生不同的表现效果,那动画的工作量就显得过于繁重,破碎物理可以完美的解决这个问题。
  • c.粒子物理 游戏中的烟尘,雪花,雨水等,这些粒子在很多游戏中并没有添加物理(因为开销比较大),不过添加物理后可以很方便的处理很多问题,比如雨水穿过房顶的问题
  • d.流体物理 游戏中的瀑布,一些河流等。我们常见的海水一般并不是使用流体物理来做的,因为使用UV动画来处理可以极大的减少运算开销,而且现在的贴图效果表现也很不错

6.物理引擎的起源与应用
军事战争,其实这个很容易理解,国外的有些战争题材的游戏稍加修改就可以被用来模拟训练。既然物理引擎的目的就是仿真,那么他的仿真程度越高,其可以应用的场景就越多。

7.游戏中常见的物理现象

  • a.重力,浮力 虽然这是现实世界中最常见的现象,但是很多游戏中并没有通过物理引擎去模拟重力,而是采用相对简单的逻辑代码模拟
  • b.碰撞 碰撞是最为常见的现象,任何角色在移动过程中碰到障碍都要停止移动,或者互相给力产生位移
  • c.变形 包括布料,头发等容易产生形变的物体
  • d.流体移动 液体的模拟 目前来看一般只有大型游戏或者有特殊需求的游戏才会使用,开销比较大
  • e.破碎 事先对物体进行破碎处理,将其模型与物理绑定拆分成多个碎片,受力后分散
  • f.受物理约束的移动 考虑到摩天轮、钟摆、秋千等在现实世界中受约束的模拟,我们可以对这些物体做特殊处理,这种处理就是物理约束

8.Unity中的物理引擎(与Unreal相同)
NVIDIA的PhysX引擎
Unity中物理是以组件的形式存在的,把组件赋予一个OBject就可以赋予其对应的特性。
物理组件大概分为6种:RigidBody刚体,Colider碰撞盒,Joint约束关节(前三个是刚体组件),Cloth布料(柔体组件),constant force恒力,CharacterController角色控制器

9.关于刚体物理常见的应用

  • a.给各个对象添加碰撞实体(球形SphereCollider,长方体BoxCollider,胶囊体CapsuleCollider,轮子WheelCollider,三角网格MeshCollider,地形TerrainCollider),根据这些碰撞实体去进行物理模拟运算
  • b.设置各种铰链约束(joint)
  • c.Ragdoll布娃娃系统 一般针对玩家角色,用来模拟死亡后效果
  • d.碰撞筛选 可以选择特定标记的碰撞盒之间相互碰撞,不标记就不会产生碰撞

10.关于刚体与碰撞盒的关系
刚体是赋予物体物理属性的实体(质量,重力,摩擦系数等),而碰撞盒是用来模拟物理之间产生碰撞以及碰撞结果的只有刚体没有碰撞盒,就会互相穿过。只有碰撞盒没有刚体,那么碰撞的力无法正确计算,也没有意义

11.Trigger
触发器是游戏中经常用到的一个技术,简单来说就是设定一个区域,玩家或者NPC进去该区域触发某个事件

12.关于Joint的理解
在Unity里面叫做关节(铰链),一般在物理引擎中其实现原理就是物理约束。本质上就是给其6个自由度中的某几个自由度做限制,比如该物体只能在XoY平面移动。在Unity里面提供了默认的几个常用的关节类型(unreal中需要自己配置约束),可以方便的实现诸如弹簧、钟摆等效果。

13.物理材质
物理材质就是模拟现实中物体的材质,他的主要功能有两个,第一个是表示当前碰撞体的物理表面类型,进而可以根据类型去做特殊处理,第二个是配置摩擦力等参数,可以模拟现实中不同材质物体运动碰撞的效果。

14.Character controller
他在Unity中的概念与unreal等其他引擎的差距很大。Unity中是指一个只受玩家作用,而不受其他碰撞体影响的一个偏物理概念。unreal中单纯是指一个控制玩家角色的控制器。

15.布料系统的实现原理

a.弹簧系统 一般采用的是弹簧—质点模型
https://www.cnblogs.com/shushen/p/5473264.html
http://blog.csdn.net/silangquan/article/details/15746855
b.Long Range Attachment 个人感觉这一点不算什么技术原理,理解弹簧质点模型就可以了
c.碰撞检测 布料是由多个顶点构成的,为了保证不会穿模,需要保证每一个点都能产生正确的碰撞
d.动画融合 如果物理模拟的结果不是很理想,可以让美术手动做一个动画,然后按照一定权重相结合。
e.风扰动 类似植物,可以主动添加一个风扰动来模拟布料飘动的效果
f.重力和阻尼 阻尼越大,其飘动所需要的力就越大

1.什么是特效?
在我工作的环境内,特效基本上就是指粒子特效。但更通用的定义应该是指为了体现出游戏中的某些特殊效果增加一些在现实中不常见的表现。这些表现包括但不限制于场景光影特效,UI表现特效,技能特效,雨水,沙尘等等。

2.特效在项目使用中的问题
没有一个完善,通用的特效系统,导致每个项目在运行时都需要手动重新搭建一个适合自己项目的类似系统,或者完全不构建系统,进而造成开发效率的降低。然而对于当前市面上的大部分游戏,特效的应用极为广泛,构建一个特效系统确实是有意义的。特效系统的定义不确定性以及难以抽象的特点,也是导致没有出现特效系统的原因之一。

3.如何抽象一个特效系统的功能?

a.分析实际项目中的“特效”有哪些?

  • UI特效(在某些情况下与材质特效是相同的)
  • 粒子特效(动作,技能,附魔等) 材质特效(角色颜色变化等)
  • 后处理(景深,光晕等,课程前面没有这方面内容,不过后面在系统设计的时候提到了镜头管理,镜头管理一般包含摄像机处理与后处理)

b.这些“特效对游戏的作用”是什么?

  • 强化反馈(UI新手引导特效)
  • 增强视觉表现(技能表现)
  • 特殊效果表现(boss不同阶段的形态与颜色,植被燃烧消失,景深效果)

c.这些“特效”用到的资源是什么形式?(格式因引擎而异)

  • 图片
  • shader文件(一般来说,现在引擎里面的所有渲染内容都与shader有关,因为考虑到有一些传统游戏框架这里把shader单独拿出来作为一种形式)
  • 粒子文件
  • 集成于引擎中,没有单独的文件(拖尾渲染,后处理)

d.分析共同点

  • 纯表现
  • 从开始到结束一般没有交互,不接收输入
  • 随时间产生变化

e.总结
多种表现效果在同一个固定时间区间内的非线性排列

  • 固定时间轴动画驱动
  • 支持多样化的表现效果元素混合编辑功能
  • 提供对多种表现效果元素在同一时间轴内的非线性排列功能

4.一般UI特效的实现方式

  • 逐帧动画(N张图片循环播放,资源多,占空间大)
  • UV动画

5.一般技能特效(如刀光)的实现

  • Mesh面片+ UV动画(需要先生成一个透明的面片)
  • Trail拖尾特效(引擎提供,不需要实时生成Mesh网格)
  • Particle粒子特效(粒子消耗一般来说比较高)

6.灵魂吸附的效果实现
Particle粒子,每帧更新其位置

7.走路时灰尘的实现
一般在引擎的动画编辑界面里都可以在动作的某一帧直接添加粒子效果(或者其他事件通知),在该位置添加制作好的灰尘效果调整位置偏移即可。如果想与身体位置保存一致,还需要将其绑定到固定的骨骼关节上

8.一个简单的无抽象的特效系统与一个复杂特效系统的比较
由于项目开发周期与成本的原因,我们要根据情况来判断是否需要构建一个复杂的系统
简单:

  • 固定时间轴动画驱动
  • 实现方式:放弃该功能,直接以某个固定事件的开始作为起始时间(很多游戏里都是这么做的)
  • 支持多样化的表现效果元素混合编辑功能
  • 实现方式:不提供统一功能,直接使用表现效果元素本身的编辑环境制作
  • 提供对多种表现效果元素在同一时间轴内的非线性排列功能
  • 实现方式:通过配置表,直接配置各表现元素相对1中的固定开始时间

简单无抽象的特效系统问题:

  • 每次添加新的玩法时,都需要加入新的固定事件去驱动,同时处理相关逻辑
  • 各中特效是分开的,不方便管理,同时需要在多个小工具之间来回切换
  • 配置内容随着项目的进行不断添加,造成修改成本增加,同时有些配置还需要到特定的游戏环境里面测试

复杂:

固定时间轴动画驱动
实现方法:提供统一的基于时间轴的特效控制系统,抽象化每一个驱动元素(类似一个视频剪辑软件的效果, 所谓的驱动元素就是经过封装一个可管理的特效片段,可以直接处理引擎中相关联的特效元素)
支持多样化的表现效果元素混合编辑功能
实现方法:单独提供每一种表现元素的驱动元素,归纳到特效控制系统统一管理(类别视频中的视频轨道和音频轨道,多种轨道可以各自处理各自的内容)
提供对多种表现效果元素在同一时间轴内的非线性排列功能
实现方法:提供驱动元素在特效控制系统中的非线性编辑功能(非线性就是指随着时间变化不是线性的,可以先快后面的这种效果)
所见即所得的编辑环境
实现方法:提供基于UI的编辑环境
多种不同表现元素的整体预览
实现方法:UI编辑环境下可以拉起所有的可视化元素的基础系统(比如正常引擎编辑后可以立刻看到修改后的粒子效果,你需要让这个效果立刻显示到你的特效系统里面)
迅速快捷的修改反馈
实现方法:所有表现元素参数支持序列化方案,驱动元素支持实时修改反馈
提供较为统一的基础编辑环境
实现方法:驱动元素接口统一化设计。(方便从一个引擎移植到另一个引擎)
9.判断一个游戏系统设计的好坏因素

  • a.系统负荷的大小(会不会因为过于复杂而造成过多的额外成本)
  • b.是否方便多人开发
  • c.是否方便测试
  • d.要方便特定的使用人群使用

10.关于编程的一点小经验
不要做过多的设计,因为你的代码总有可以优化的地方,实际情况下实践的测试反馈往往比纯构思要好的多

11.关于序列化
序列化功能是将对类象以字节流的形式输出,游戏中的存档功能几乎都是使用序列化去做的。

12.与特效系统紧密相关的内容
视频中前面分析了特效系统,但是实际上他的特效系统不仅仅包含特效,还有镜头管理与音效管理两个内容。
其实授课者师将游戏中基本的表现内容都整合到其特效系统里面了,可能是因为镜头,音效都与特效紧密联系,如果拆分开来势必导致表现不匹配,操作复杂等各种问题。

13.一个合格的系统公交应该有的功能

  • a.代码编辑
  • b.可视化资源编辑窗口
  • c.提供大量的表现效果功能
  • d.提供了整套编辑元素序列化方案
  • e.提供资源管理方案
  • d.同意的构建流程
  • f.可预览的运行环境

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战杯 基于LSTM的天气预测 - 时间序列预测

0 前言 🔥 优质竞赛项目系列,今天要分享的是 机器学习大数据分析项目 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/po…

Stable Diffusion——基础模型、VAE、LORA、Embedding各个模型的介绍与使用方法

前言 Stable Diffusion(稳定扩散)是一种生成模型,基于扩散过程来生成高质量的图像。它通过一个渐进过程,从一个简单的噪声开始,逐步转变成目标图像,生成高保真度的图像。这个模型的基础版本是基于扩散过程…

论文精读--word2vec

word2vec从大量文本语料中以无监督方式学习语义知识,是用来生成词向量的工具 把文本分散嵌入到另一个离散空间,称作分布式表示,又称为词嵌入(word embedding)或词向量 Abstract We propose two novel model architec…

白银交易新手指南:怎样选择可靠的现货交易平台?

在投资市场上,白银作为一种贵金属,具有较高的投资价值和风险防范功能。对于白银交易新手来说,选择一个可靠的现货交易平台是至关重要的。那么,如何挑选一个适合自己的现货交易平台呢? 1. 平台资质 一个正规的现货交易…

Spring最新核心高频面试题(持续更新)

1 什么是Spring框架 Spring框架是一个开源的Java应用程序开发框架,它提供了很多工具和功能,可以帮助开发者更快地构建企业级应用程序。通过使用Spring框架,开发者可以更加轻松地开发Java应用程序,并且可以更加灵活地组织和管理应…

【软考高项】【英语知识】-- 单词积累

目录 一、常见计算机技术词汇 二、项目管理词汇 2.1 十大知识域 2.2 五大过程组 2.3 49个子过程 2.4 工具和技术汇总 2.5 输入和输出汇总 一、常见计算机技术词汇 序号中文英文1云计算Cloud computing2云存储Cloud storage3云服务Cloud service4软件即服务SaaS5平台即服…

[leetcode M] 105. 从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,20,7] 输出: [3,9,20,null,null,15,7]…

【Azure 架构师学习笔记】- Azure Databricks (8) --UC架构简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件 前言 UC 简单来说,就是管理两样东西:用户和元存储。 用户管理 所有Databri…

C#,笛卡尔树(Cartesian Tree)的构造、遍历算法与源代码

Ren Descartes 一、笛卡尔(Ren Descartes) 勒内笛卡尔(Ren Descartes,1596年3月31日-1650年2月11日),1596年3月31日生于法国安德尔-卢瓦尔省的图赖讷(现笛卡尔,因笛卡尔得名&#…

Day 30 标准IO

文章目录 1.什么是标准IO1.1 概念1.2 特点1.3 操作 2.缓存区3.函数接口3.1 打开文件fopen3.2 关闭文件 fclose3.3 读写文件操作3.3.1 每次读写一个字符:fgetc()、fputc()每次读一个字符fgetc()每次写一个字符fputc()(1)针对文件(2)针对终端feof和ferror 3.3.2 每次一…

通过Docker Compose的方式在Docker中安装Maven环境

目前可以说 Docker 已经是在开发部署中成为主流,所以我们很多环境和工具都会安装在 Docker 容器中,Maven 环境是 SpringBoot 项目中最常用的依赖管理工具。当我们使用自动运维工具如 Ansible、Chef 、Puppet、Walle、Spug等)管理和部署 Maven…

击败.helper勒索病毒:恢复被加密的数据文件的方法

导言: 近年来,勒索病毒成为网络安全领域的一大威胁,其中.helper勒索病毒更是备受关注。该类型的勒索软件以其高效的加密算法,能够将用户的文件加密,迫使用户支付赎金才能解密数据。本文将介绍.helper勒索病毒的特点、恢复被加密数…

Unity红点系统的架构与设计

在游戏开发中,红点系统是一种常见的功能,用于提示玩家有未读消息或待处理任务。在Unity引擎中,我们可以使用脚本来实现红点系统,下面我将介绍一种基于Unity的红点系统的架构与设计,并给出对应的代码实现。 红点系统的代…

集成使用 GitHub Copilot 提升 IDEA 开发效率

集成使用 GitHub Copilot 提升 IDEA 开发效率 在现代软件开发中,集成开发环境(IDE)如IntelliJ IDEA已经成为开发人员不可或缺的工具。它们提供了代码编辑、调试、版本控制等一系列功能,极大地提高了开发效率。而GitHub Copilot作…

【Docker】Linux主机部署Docker

Docker部署 1.二进制文件部署 到如下地址,下载二进制包。 Docker官网:https://docs.docker.com/engine/install/binaries/ 网易镜像源:https://mirrors.163.com/docker-ce/linux/static/stable/x86_64/ 下载好的二进制包上传到主机&#xf…

【Android 13】使用Android Studio调试系统应用之Settings移植(十):外部模块依赖WifiTrackerLibRes的移植

文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、 WifiTrackerLib子模块3.1 源目录3.2 Android.bp四、移植方法4.1 创建模块4.2 替换源文件4.3 修改build.gradle4.4 图示4.5 模块编译通过

003:高精地图数据采集

摘要:高精度地图数据采集涉及多个环节和技术,需要严谨的规划和执行,以确保采集到的地理信息质量可靠、精准,并能够支持各种智能交通和导航应用的需求。 一、设备准备 高精地图数据采集需要高精度的设备,如Lidar&#…

Java之获取Nginx代理之后的客户端IP

Java之获取Nginx代理之后的客户端IP Nginx代理接口之后,后台获取的IP地址都是127.0.0.1,解决办法是需要配置Nginx搭配后台获取的方法,获得设备的真实地址。我们想要获取的就是nginx代理日志中的这个IP nginx配置 首先在nginx代理的对应lo…

C#程序反编译经验总结

1. 反编译出的代码有问题时,可以用多个反编译工具之间的代码相互印证。(比如.net reflector 与ILSpy) 2. 有时Visual Studio编译的错误信息不明确时, 可以msbuild编译程序,msbuild的错误信息相对完整一些。 2.1 编译错误&#xf…

【笔记】APN 配置参数 bitmask 数据转换(Android KaiOS)

一、参数说明 &#xff08;一&#xff09;APN配置结构对比 平台AndroidKaiOS文件类型xmljson结构每个<apn>标签是一条APN&#xff0c;包含完成的信息层级数组结构&#xff0c;使用JSON格式的数据。最外层是mcc&#xff0c;其次mnc&#xff0c;最后APN用数组形式配置&am…