Unity物理模拟方法环境乱炖
对比总览真到写标题时才觉得自己干的事好杂……借着学校座谈会需要选取论文演讲开了PBD和XPBD,顺手写了半隐式和隐式进行对比。又想起之前实习时一直想但是没做的对比C#和C++性能,就还把半隐式的方法在Unity和C++中各写了两份对比(怎么能少了并行化)。先上个总的对比表格吧,具体数值没有多大意义,但看个趋势还是可以的。(35x35布料网格,2000劲度系数,32迭代,64线程,GTX1650笔记本。并行均为无锁多线程)
Unity
Unity Job + Burst
C++
C++ Thread
Time (ms)
36.9
1.6
12.2
38.8
C++ Thread的表现有些出乎意料,可能是Thread过于耗了?不过C++比Unity的性能倒好了不少,感觉之后遇到想优化但又不适合Job + Burst并行化的代码都可以试试C++
Semi-Implicit Euler
Implicit Euler
PBD
XPBD
Main Thread (ms)
36.9
N/A
70.9
52.2
Job + Burst (ms)
1.6
N ...
C# Meta游戏开盒预研
事情的起因是个人打了爱之巢,之后不久刷到了Kinito Pet的实况,对Meta游戏开玩家的盒这种行为感到十分有趣,故而预研了下如何开盒,方便日后独游使用。理论上是Windows环境的C#方案,但因为仅使用Windows环境下的Unity进行测试,所以也可能存在其他引擎环境不适用的情况
直接获取 部分信息可以直接获取,省时省力
123456789101112131415161718192021//获取操作系统信息print(Environment.UserName); //当前用户的用户名print(Environment.MachineName); //计算机的名称print(Environment.OSVersion); //系统版本//通过进程名匹配一些常见软件(包括修改器)Process[] processes = Process.GetProcesses();foreach (Process process in processes){ print(process.ProcessName);//进程名称 pr ...
本科完结篇
总有种不大真实的感觉,四年时间过的飞快,仿佛之前还在准备去北方海岛,现在就又准备出国了。可能是本命年的缘故,今年以来诸事不顺,值此阳炎日也写个总结攒下人品吧。
关于学校 东北大学秦皇岛分校,当时确实分只够211,但刷各志愿分析软件时偶然刷到了这个学校。地域方面秦皇岛京爷后花园,不错;学校方面顶着985的牌子,不亏;专业方面计科A-,血赚(现在好像是A了,想来应该还有我的一份贡献?)。缺点嘛,学校小,保研率低,但对我都不是事。那还犹豫个什么,志愿前面放清华北大,毕竟做人还是要有梦想的。后面放三峡水利水电,不行就去大坝打螺丝,直接就是开冲。
还没开学就看到的有趣表情
到了后发现小岛着实不错,环境不错,物价低廉,人也很实在。刚到就把山海关,老龙头,鸽子窝,碧螺塔,阿那亚,西港花园,茂业万达等转了个遍。校内老师们都很认真负责,可以和思政老师探讨形式(我:我认为是半资半封);和文科老师探讨中英神话文化差异(毕竟感觉一个重神性,而另一个重人性);和高数老师一起骂教材答案(我:这几个怎么算都不对 老师:tmd教材错了几年 ...
纸间异想
个人相信游戏是第九艺术,以做出能打动人心的作品为目标。本科期间自学Unity游戏制作,实时渲染,物理模拟,角色动画,游戏引擎等,并有幸在在百田百奥有过客户端实习,腾讯天美有过引擎实习。值此毕业之际想汇总自身所学并探寻自身能力上限,便选取了独立游戏作为毕业设计。
创作背景关于类型 之前初中时经常和同学在信息课机房打各种游戏,有一阵被flash页游纯白枪骑兵吸引,苦于没有联机模式当时就立下宏愿有能力后自己做个射击对战游戏,积极跟进玩家需求。现在终于算是有相应的能力以及足够的时间,就直接将玩法类型选定为射击对战开始圆梦童年(虽然但是,受限于机体素材相关成品更接近于弓箭手大作战和奇幻射击)。
关于画风 再回忆之前那个在笔记本上写写画画架构游戏的时期,玩家与创作者面对面讨论共创,实时绘制地图,记录数据……当然还有传统艺能提防老师。可惜现在的硬件遥遥领先与当时,身边却少了足够的空闲时间和游戏的最高配制——朋友。或许是出于怀念,本人将画面风格定为纸上涂鸦,并在引导时加入了些许共创元素,希望能再现部分当时情景聊以纪念。
关于Meta& ...
Unity引擎工具实习总结
引擎工具岗实习了接近一年,修改过引擎源码,也实现了各式各样需求,回顾起来还真是一长段路,感谢组内同事的帮助和网上各优秀博客(如Unity Editor 编辑器扩展功能相关和Intel GPA安卓逆向相关)。于此就简略记录下引擎工具岗的基础内容,权当是离职总结回顾了,且行且看,尽力而为,不要害怕,不要后悔。
编辑器工具 程序不仅有GamePlay向,也有Editor向,为策划美术提供工具使其能更好输出内容。在个人开发/小团队中可能不甚重要(或者根本没有),但如果是大型项目的话那就另当别论了。
编辑器分类 大概可以分为两类,一类单开一个窗口,另一类在Inspector界面中显示
窗口编辑器 窗口编辑器的主体结构如下:
12345678910111213using UnityEditor;public class TestWindow : EditorWindow{ static TestWindow window; //实例对象,必须静态 [MenuItem(&quo ...
常见的数值积分与解线性系统方法
数值积分对于某一函数$f(x)$,我们需要由 $t$ 时刻的状态求得未来某时间 $t+h$ 的状态。即由 $f(t)$求得 $f(t+h)$ 。为此,我们将$f(t)$ 泰勒展开 $f(x+\Delta x)=f(x)+f’(x)\Delta x+\frac{1}{2}f’’(x) \Delta x^2+\frac{1}{6}f’’’(x) \Delta x^3+\cdots$ 实际中不可能取到无穷项,故以下方法均为其的近似截断。
我们可以通过所取泰勒展开中最高阶数对积分方式进行分类。如欧拉积分只用到了一阶导数,所以是一阶方法。且其误差为 $O(n^2)$ ,步长 $h$ 减半后,误差变为原误差的四分之一。
欧拉积分经典以折线逼近曲线的趋近式表达
显式欧拉(Explicit Euler)最简单的积分方式,然而会有数值膨胀
$\vec v(t_1)=\vec v(t_0)+M^{-1}\vec F(t_0)\Delta t $
$x(t_1)=x(t_0)+\vec v(t_0)\Delta t$
隐式欧拉(Implicit Euler)以未来的状态更新现在 ...
拣爱
写在之前 《拣爱》(LoveChoice)是亚恒在GameJam中完成原型,之后补全并逐步完善的AVG游戏。“怎样才是爱?”他尝试用这个游戏去作回答。这款有着温暖画风和剧情的游戏不只靠选项推进剧情,而是用丰富的交互去让剧情更加丰满。意料之外而情理之中的交互方式,提醒玩家去注意那些感情中容易被忽略的细节。
关于作者 可能很多玩过《拣爱》的人,都不会想到,亚恒之前是一个汽车嵌入式软件工程师和兼职日语翻译,没有任何游戏行业从业经验。为什么会选择开始做游戏呢?以下是亚恒关于此的自述。
亚恒:“可能是出于中年危机吧(笑)。早几年我开始思考我的终身职业应该是什么,也看了一些别人的理论。我认为有两点判断标准是我自己认可的:1、当你很有钱的时候,你依然愿意做这件事情。2、做这件事情,你可以不害怕周一。而其实我得出来的答案不是做游戏,而是做创作。我希望能把创作,作为我的终身职业。可以是文学、视频、电影、音乐,当然也可以是游戏。而之所以先选择游戏,一是因为游戏是这些领域里面我最熟悉的,也是我闲时最大的爱好。二是游戏开发与我自己的技能集合 ...
Unity Burst 初探
前言 Unity DOTS是Unity官方基于ECS架构开发的一套包含Burst Complier技术和JobSystem技术面向数据的技术栈,它旨在充分利用SIMD,多线程操作充分发挥ECS的优势。ECS本人暂且没这个能力,与之关系相对没这么密的Burst和Job倒是可以单拆下来把玩把玩。
准备资源准备 在Unity的Package Manager中开启显示Preview的选项,之后安装Jobs,Burst会被一并装上。
大致用法1234567891011121314151617181920212223using Unity.Jobs; //定义【IJob】【IJobParallelFor】using Unity.Burst; //定义【BurstCompile】using Unity.Collections; //定义【NativeArray】等容器using UnityEngine.Jobs; //定义【IJobParallelForTransform】using Unity.Mathematics; //SIMD数学库[BurstC ...
Dynamic Bone 简析
前言 最近接实习公司需求整Dynamic Bone,虽然因Dynamic Bone中节点距离恒定,布料模拟方面Magica Cloth效果远甚Dynamic Bone(然而性能消耗上也是),但Dynamic Bone的算法也算得上经典,也值得一写。
正文DataStruct123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 public Transform m_Root = null;//裁切参照 public List<Transform& ...
GAMES201
Lec1 课程介绍基于物理的动画简介
物理引擎及应用定义:在电脑中模拟真实世界
应用:计算机辅助设计,电影特效,VR/AR,训练机器人,游戏
课程关键词离散化、高效求解器、生产力、性能、硬件体系结构、数据结构、并行化、可微编程
Taichi 编程语言简介什么是太极
太极的安装
太极的初始化
太极的数据结构
太极的张量
kernels用于计算的函数,即时编译,kernel不能调用kernel
functionskernel和func均可调用func
标量
矩阵和线性代数
原子操作
调试
Lec2 拉格朗日视角(1)介质模拟的两种视角拉格朗日视角用拉格朗日粒子、三角网格、方格等代表跟随材料移动的节点,不断检测自身的位置和速度
欧拉视角网格本身不移动,检测穿过当前节点的材料的速度
两种视角的对比通常来说,拉格朗日视角很好地体现了“随波逐流”,而欧拉视角更倾向于“岿然不动”
拉格朗日视角下的粒子模拟和欧拉视角下的烟雾模拟
弹簧质点系统简单但是实用,一般用于布料系统、弹性物体等
系统的理论依据:胡克定律和牛顿第二定律
时间积分计算机中的时间并 ...