算法与游戏
文章平均质量分 90
海洋_
畅销书作者,著作:《手把手教你3D游戏引擎架构》、《Unity3D实战核心技术详解》,《Cocos2d-x 3.x 图形学渲染技术讲解》等。
展开
-
移植UE4的BRDR算法到Unity
最近在改进Unity的PBR渲染技术,计划把UE4的渲染库搬到Unity中,就查阅了相关的资料,找到了UE4的PBR公式,下面把公式对应的代码实现出来,后面把它们整到一个cginc作为库文件使用,换句话说就是封装一个类似Unity的UnityStandardBRDF.cginc里的函数换掉。下面就把BRDF的渲染公式以及对应公式的代码展示一下,后面直接将其放到Unity即可。BRDF算法UE4...原创 2019-10-11 21:45:01 · 2445 阅读 · 2 评论 -
学习3D引擎架构技术概述
近期对3D引擎的架构设计做了一个梳理总结,现在开发游戏都离不开引擎,这些引擎包括Unity引擎,虚幻引擎,Cocos2dx引擎,自研引擎等等。很多开发者只会利用他们写逻辑,遇到优化问题就束手无策了,遇到Shader编程以及优化就感到头疼,长此以往对自己技术提升非常不利的。要改变现有的状态,就必须要系统的学习相关3D引擎技术,这样才能在使用引擎开发产品时得心应手。本篇博客从两方面给读者做...原创 2018-05-08 22:04:28 · 8817 阅读 · 4 评论 -
Unity3D教你制作Bezier和Spine曲线编辑器二
在上篇博客中介绍了直线的制作,下面继续曲线的制作流程,曲线算法很多,原创 2017-08-31 11:17:02 · 3214 阅读 · 1 评论 -
Unity3D教你制作Bezier和Spine曲线编辑器一
以前做端游编辑器时,制作过曲线编辑器,现在使用Unity3D编程,Unity3D为我们提供了很多组件,但是在项目开发中,我们可能只需要某个小功能,但是要把整个组件加到项目中,一旦需求变换,修改起来比较麻烦,鉴于这些原因,我们自己手动做一个曲线编辑器利用Unity3D。曲线编辑器的主要功能包括:1.创建自定义的编辑器2.在Scene View窗口中绘制3.可以在Scene View窗口中编辑4.利用原创 2017-08-30 16:41:18 · 5839 阅读 · 5 评论 -
Unity3D 法线转换与切线空间总结
在Shader编程中经常会使用一些矩阵变换函数接口,其实它就是把固定流水线中的矩阵变换转移到了可编程流水线或者说GPU中,先看下面的函数语句:// Transform the normal from object space to world spaceo.worldNormal = mul(v.normal, (float3x3)_World2Object);在这里先给读者介绍一下,为何使用此原创 2017-08-29 10:02:06 · 13571 阅读 · 0 评论 -
Unity3D 关于模型变形技术代码实现
本篇博客给读者介绍关于如何实现模型的变形,在项目开发中经常会涉及到模型的变形操作,比如如下效果图: 第一部分准备工作 首先在Unity中建立一个场景,在场景中放置一个球体,这个球体可以使用Max工具建立,在球体上放几张Materials,效果如下所示: 下面开始具体实现,创建一个新的MeshDeformer脚本来处理变形, 就像立方体球体组件一样,它需要一个网格过滤器来处理。 using U原创 2017-09-06 15:31:47 · 29998 阅读 · 17 评论 -
Unity3D教你制作Bezier和Spine曲线编辑器总结
上篇博客给读者介绍了关于曲线编辑器控制点的制作,最后给读者介绍如何使用曲线编辑器。 我们已经用样条做了一段时间了,但是还没有告诉读者如何使用它们。可以用样条做许多事情,例如,移动一个物体的路径,我们来创建一个SplineWalker组件。 using UnityEngine;public class SplineWalker : MonoBehaviour { public BezierS原创 2017-09-06 09:31:18 · 3207 阅读 · 2 评论 -
Unity3D教你制作Bezier和Spine曲线编辑器四
在上篇博客中介绍了关于曲线编辑器的制作,下面开始讲如何去编辑,这就需要在曲线上加控制点虽然我们的样条是连续的,但它在曲线段之间会急剧的变化,这些突然变化也导致了点的方向和速度变化,因为两个曲线之间的共享控制点会产生两个不同的速度,每一个曲线都有一个速度。如果我们想让曲线速度相等,必须确保定义它们的两个控制点——前一条曲线的三分之一和下一条曲线的第二点——在共享点周围镜像,这确保了第一和二阶导数...原创 2017-09-05 13:38:56 · 2051 阅读 · 3 评论 -
Unity3D教你制作Bezier和Spine曲线编辑器三
继续接着介绍曲线编辑器的制作,上篇博客介绍了关于Bezier曲线的制作,接下来给读者介绍Spine B样条曲线之作。 如果要创建复杂的曲线,我们需要连接多个曲线,这样的构造称为样条。让我们通过复制Bezier曲线代码来创建一个,将类型更改为BezierSpline。 using UnityEngine;public class BezierSpline : MonoBehaviour {原创 2017-09-04 13:56:12 · 3732 阅读 · 3 评论 -
Interpolation Search 插值搜索算法
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 再给读者介绍一种算法插值算法,给定n个均匀分布值arr []的排序数组,写一个函数来搜索数组中的特定元素x。我们原创 2017-06-02 16:19:17 · 2517 阅读 · 0 评论 -
关于C与C++的区别
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 项目开发中,经常会遇到C与C++之间互相调用问题,但是有时会遇到在C语言没啥问题,但是将其放到C++中就会出现问原创 2017-06-02 14:17:45 · 8567 阅读 · 1 评论 -
Jump Search-跳跃搜索算法
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 最近在项目中要使用查找算法,正好利用这次机会,把算法再复习一遍,这次是利用跳跃查找算法解决问题。 Jump Se原创 2017-06-02 13:39:50 · 3726 阅读 · 1 评论 -
KMP字符串匹配算法
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 算法在各个领域都有非常广泛的应用,尤其现在比较流行的人工智能,深度学习以及搜索算法等等,当然游戏开发领域也需要算原创 2017-06-02 10:27:44 · 909 阅读 · 1 评论 -
Photon与Unity核心技术之角色更换武器
在单机游戏开发中,角色的武器是经常可以更换的,角色更换武器的基本原理是将武器挂接到角色的骨骼动画的虚拟点上,这样角色做动作时,武器也会随着骨骼进行运动,完成了角色挂接武器,这个挂接武器流程是固定的。而在网络游戏中,做挂接武器时就要注意了,下面就以Photon服务器为例给读者介绍如何实现在网络游戏中给角色挂接武器,当然其他网络游戏的挂接方式类似。 在网络游戏中更换角色武器需要注意以下几...原创 2018-03-13 19:02:07 · 4110 阅读 · 0 评论 -
Photon与Unity核心技术之角色动作同步
上篇介绍了角色更换武器同步处理,本篇介绍关于使用Photon实现角色同步,客户端还是选择Unity开发,在实现动作之前,Unity为我们提供了我们俗称为老动画和新动画状态机,我们先介绍老动画的实现方式,它是通过Animation组件把角色的动作拖进去的。老动画网络同步处理老动画使用在Unity以前的版本中常用,效果如下所示:在Photon中也有关于老动画同步的组件,如下图所示:也需要将Third ...原创 2018-03-14 09:26:24 · 8312 阅读 · 6 评论 -
Unity游戏开发经验点滴
游戏开发中会遇到各种各样的问题,只有经历过了才会深刻,这里就游戏开发的一些经验点滴给读者分享一下,先从代码说起。从事IT行业这么多年了,写过或者看过很多代码,有的项目代码写的不错的,大家经过多年的努力都会从初级程序员到主程的发展,作为主程除了做架构设计,带团队外,就是审核代码,现在程序员写的代码,大部分都是只根据需求而写,游戏开发与其他开发最大的不同是需求经常变化,朝令夕改用于游戏策划一点都不为...原创 2019-10-08 10:24:05 · 5245 阅读 · 3 评论 -
移动端实时阴影+自投影技术实现
说到实时阴影,现在市面上各个项目实现的实时阴影大部分都是平面阴影,比如王者荣耀实现的实时阴影以及一些RPG网络游戏实现实时阴影,所以项目在设计地形时都是有意回避地形高度差的出现,尽量让地形是平坦的。本篇博客介绍的实时阴影是可以在平面以及地形上进行的渲染。这样实现的实时阴影就可以在不同的地形上进行投影,实现方式采用的还是比较传统的实时阴影算法比如ShadowMap,CSM算法或者PSM算法等等都可以...原创 2019-10-02 22:03:35 · 2974 阅读 · 4 评论 -
Unity PBR渲染技术系列一
国庆假期终于空闲了,利用休息这段时间,把最近一直研究Unity的渲染技术成果给大家分享一下,目前,在游戏开发方面,两个职位比较火,一个是图形学程序,另一个是美术TA。这两个职位有个共同的特征就是需要掌握Shader编程。Unity官方提供了一些Shader的渲染比如Standard。但是这个远远不能满足程序开发需求。需要我们自己去开发一些Shader满足需求,很多人对写Shader都比较头疼,学习...原创 2019-10-01 21:41:04 · 5332 阅读 · 0 评论 -
Unity3D捏脸+衣服摆动技术介绍
在前面的博客中介绍过关于变形的实现方式,使用的是球体,本篇博客结合着游戏开发中的捏脸以及角色衣服随动作摆动效果,因为二者在目前的游戏开发中使用的非常多,借此给读者通过案例的方式给读者介绍一下。捏脸实现捏脸效果,在MMORPG游戏中使用的比较多,比如:《楚留香》、《荒野行动》、《猎魂觉醒》、《琅琊榜:风起长林》、《九州天空城》等等。MMORPG游戏的捏脸系统还是做的比较强大,但是原理都是一样的,...原创 2019-10-01 10:10:11 · 18391 阅读 · 15 评论 -
C#重要知识点在游戏开发中的应用
今天是大年三十,在此祝各位程序员朋友身体健康,猪年大吉。闲来无事,把在Unity开发中使用的C#知识点总结一下,自己在带团队新人的时候,好多知识点它们并不是很清楚,另外也不知道自己哪方面不足。其实在面试的时候,主考官也会问到相关的问题,项目开发中这些知识点是必备的。下面我把总结的给读者展示一下:我给读者介绍一下,C#作为面向对象语言,面向对象语言的三大特性就是,继承,封装,多态。继承就是子类继...原创 2019-02-06 09:47:04 · 5742 阅读 · 4 评论 -
在Unity中使用四叉树算法绘制地形
四叉树算法在游戏中获得了广泛的应用,前几年3D引擎实现的地形绘制大部分都是用四叉树生成的,因为移动端在硬件方面的限制,我们的地形使用的是美术自己制作的地形,对于程序来说省去了不少工作量,但是作为程序开发者尤其是想从事引擎开发的程序员,我们还是要自己实现一遍四叉树算法的,其实网上很多资料都有C++ OpenGL或者C++ DX实现的四叉树地形。很多引擎的地形它也是在四叉树的基础上改进而成,如果我们想...原创 2018-08-21 10:36:38 · 7620 阅读 · 4 评论 -
深入理解加载FBX模型文件
每个模型文件都有自己的格式,有自研引擎的模型格式,有AutoDesk提供的模型文件格式,比如FBX模型文件,因为Unity与UE4引擎的使用而备受关注,网上也有很多关于这方面的文章,但是都没有真正解释FBX文件的内部结构,以及如何自己封装程序加载FBX模型文件。本篇博客就教给读者这两方面的知识,这样更有助于读者理解Unity加载设置FBX文件的界面。FBX文件内部结构我们要加载模型文件,...原创 2018-08-13 21:15:34 · 82054 阅读 · 29 评论 -
Unity大场景数据加载及优化方案
前段时间,有几个虚拟仿真公司跟我请教关于大地形的加载优化问题,它们使用的引擎都是自己研发的,引擎对于开发者来说,大同小异,它们的基本构造是一样的,关键是在于解决问题的方法,正是基于这个前提写了这个课程,希望给读者提供一些解决问题的思路。 目前,大地形动态加载已经成为当前游戏开发或者虚拟仿真领域必须要解决的问题,尤其在虚拟军事仿真领域,由于要涉及到大兵团虚拟演练作战,这对仿真真实性要求比较...原创 2018-08-07 16:29:55 · 34245 阅读 · 8 评论 -
Unity3D地面云层投影实时绘制
现实生活中,地面上经常会有云彩的影子在移动,它其实就是通过太阳光将其投射到地面上的,这个应用在游戏中跟人的感觉场景比较真实,在FoxHole散兵坑游戏中就实现了这个效果,如下图所示: 实现类似的效果方法有两种:一种是常用的方法,就是使用一个天空盒,再实现一个飘动的云层,然后通过平行光将其投射到地面上,虽然比较好理解,这种方法不推荐,运行效率也会受影响。另一种方法就是我们本篇博客需要实现的,通...原创 2018-08-11 10:20:07 · 6583 阅读 · 2 评论 -
3D引擎架构设计高级篇
3D引擎架构设计最核心的技术包括:引擎框架设计,引擎内存管理,大场景加载以及卸载,引擎的渲染,模型骨骼插件;其他的模块还有粒子,AI,行为树,UI等等吧。 市场上对于引擎开发的需求也是比较大的,而且薪资都比较高的,比如腾讯,网易,巨人,EA等等很多国内外知名的IT公司都有这方面的需求,作为一名程序员如果只局限于逻辑的编写,对自己的能力提升没有半点帮助,久而久之就把自己...原创 2018-07-26 11:52:06 · 2579 阅读 · 0 评论 -
飞车竞速商业游戏制作教程
最近刚发布了一个关于赛车竞速的视频课程,属于跑酷类型的游戏,类似天天飞车,属于一款真正的商业游戏,目前,跑酷类型的游戏在市场上的反响还是不错的,其实任何类型的游戏只要玩法新颖,用户基础都是有的。视频教学网址:https://edu.csdn.net/course/detail/8610 该飞车竞速游戏视频课程的主要特点如下: 第一,游戏UI,通常的游戏UI制作都是使用NGUI或者UGU...原创 2018-06-25 19:11:44 · 956 阅读 · 0 评论 -
C++动态内存分配
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 C / C ++中的动态内存分配是指程序员手动执行内存分配, 动态分配的内存分配给堆,非静态和局部变量获取在St原创 2017-06-06 16:03:02 · 1150 阅读 · 5 评论 -
C程序的内存布局
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 C程序的典型内存表示由以下部分组成: 1、文本片段 2、初始化数据片段 3、未初始化数据片段 4、原创 2017-06-06 10:28:34 · 1155 阅读 · 1 评论 -
指针和引用在C++中应用
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 C和C ++支持与大多数其他编程语言不同的指针, 其他语言包括C ++,Java,Python,Ruby,Per原创 2017-06-05 17:05:29 · 822 阅读 · 3 评论 -
Cocos2d-x 3.x 图形学渲染系列二十四
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。CSDN视频网址:http://edu.csdn.net/lecturer/144 在使用相机进行拍摄照片使,为了突出当前的角色,相机自动会将远处的物体进行模糊处理也就是所说的Blu原创 2017-01-26 08:19:32 · 842 阅读 · 0 评论 -
Cocos2d-x 3.x 图形学渲染系列二十三
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 CSDN视频网址:http://edu.csdn.net/lecturer/144 游戏品质的提升不仅仅只限于模型的材质和特效渲染,游戏场景的渲染也是非常重要的,针对游戏场景的渲染原创 2017-01-25 08:27:32 · 1690 阅读 · 0 评论 -
移动端海洋实时仿真技术研究与实现
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。摘 要 针对目前海浪的研究都是基于PC端的问题,为了实现在移动端实时仿真模拟海洋,提出了一种可以在移动端运行的算法,利用快速傅里叶变换算法(FFT)建立海浪高度场,结合LOD(Lev原创 2017-01-21 22:11:32 · 3914 阅读 · 0 评论 -
Cocos2d-x 3.x 图形学渲染系列二十一
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 模型材质的高光、法线渲染在游戏中使用的最多,加上高光、法线的材质凹凸感更强。UE4(虚幻4引擎)对模型材质的渲染非常逼真,它在对材质渲染方面做的更好,算法更强大。效果如下图:下面利原创 2017-01-20 13:53:18 · 2744 阅读 · 0 评论 -
3D游戏引擎底层数据结构的封装之Stack
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 数据结构系列已经给读者介绍了一些常用的,这些也是商业引擎底层的封装,给读者展示也是告诉读者其实引擎内部的技术并没有那么神秘,都是人写的。但是作为开发者,我们也要学着写一些数据结构的原创 2017-01-20 09:50:51 · 1040 阅读 · 0 评论 -
3D游戏引擎底层数据结构的封装之Queue
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 本篇文章主要给读者介绍一下关于Queue队列的封装,Queue在数据结构课本上有详细的讲解,它是一种先进先出(FIFO)——先进队列的元素先出队列的数据结构,它的存储方式有线性和环原创 2017-01-19 10:09:10 · 1215 阅读 · 0 评论 -
3D游戏引擎底层数据结构的封装之List
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 相信很多开发者在游戏开发中都会用到List表,用于存储数据或者对象。估计也有很多人对它的实现并不清楚,只是会用而已。学习知识不能仅限于表面,如果抱着只是会用,时间长了对自己的技能提原创 2017-01-18 14:56:28 · 1721 阅读 · 1 评论 -
3D游戏引擎底层数据结构的封装之Dictionary
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 本章主要给读者介绍Dictionary的封装,Dictionary在游戏开发中使用的非常多,开发者通常的做法是直接使用系统提供的Dictionary去做操作,不知道大家在使用Dic原创 2017-01-17 19:35:18 · 1223 阅读 · 0 评论 -
3D游戏引擎底层数据结构的封装之Array
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 我写过一本关于比较简单的3D游戏引擎的封装,在这里给读者介绍一下,关于商业引擎中的底层封装,很多人可能会问,引擎已经为我们封装好了,拿过来用就可以了,不需要再自己封装了,这个没有错原创 2017-01-17 17:41:56 · 1243 阅读 · 0 评论 -
算法与游戏之OBB碰撞算法
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。 包围盒是一个简单的立体几何空间,它里面可包含着复杂形状的物体。给物体添加包围体的目的是快速的进行碰撞检测,如果读者使用过Unity3D引擎,该引擎一共分为以下几种碰撞体:球状碰撞体原创 2017-01-17 10:28:45 · 12047 阅读 · 0 评论 -
如何学习一款游戏引擎
市面上的引擎应用的最广的无非是Cocos2D引擎和Unity3D引擎以及虚幻4引擎,当然还有许多开源的引擎,面对这么多的引擎,读者该如何学习?笔者就以自己工作十多年的经验给读者分享一下,因为人与人是不同的,所以我分享的知识不一定适合所有人。 学习一款引擎从哪里下手?通常的做法是看到引擎代码后,先看看其说明文档,它能做哪些事情,比如这款引擎核心功能是什么?它擅长做哪些事情?以Uni原创 2016-12-19 10:20:35 · 13105 阅读 · 3 评论