手把手教你架构3D游戏引擎+Unity 3D实战核心技术详解+脚本编程 游戏开发六部曲

手把手教你架构3D游戏引擎+Unity 3D实战核心技术详解+脚本编程 游戏开发六部曲 pdf epub mobi txt 电子书 下载 2025

想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
店铺: 蓝墨水图书专营店
出版社: 清华大学出版社
ISBN:9787302446422
商品编码:11192544517

具体描述


Unity 3D实战核心技术详解

Unity 3D脚本编程:使用C#语言开发跨平台游戏

Unity Shader入门精要

Unity 3D网络游戏实战

手把手教你架构3D游戏引擎

GPU编程与优化 大众高性能计算


YL0736 9787302446422 9787121303180 

9787111549963 9787115423054 9787121297182 9787121304323



内容简介

《Unity 3D 实战核心技术详解》详细介绍了实际游戏开发中使用的核心技术,每一章都结合了游戏开发的实战案例。首先,介绍了3D 数学在Unity 中的运用,3D 数学知识包括:Unity 坐标系统、向量、矩阵、四元数、欧拉角等基础知识。其次,介绍了游戏开发中常用的核心技术:Avatar 换装系统、消息事件系统、Protobuf 在游戏中的运用,以及游戏中的文本文件加密算法等。再次,介绍了游戏中的AI 行为树算法、残影算法、移动端实时阴影绘制、移动端海水的绘制等技术。然后,在游戏架构设计方面,介绍了**的针对UI 的MVC 架构设计和对于角色动作和技能的FSM 有限状态机架构,以及游戏版本迭代使用的热更新技术方案。介绍了移动端GPU 编程和游戏开发的一些经验。

《Unity 3D 实战核心技术详解》适合具备一定Unity 开发经验的初学者和有一定Unity 项目开发经验的游戏开发者阅读。

作者简介

姜雪伟,

创业公司技术合伙人,从事IT行业15年,主导或参与了18款大型游戏的研发;

曾在网龙、久游、趣游等知名IT公司担任核心技术团队负责人;

在泰课和CSDN学院等在线教育网担任高级讲师,CSDN社区专家;

研究方向为客户端架构、3D引擎架构、图形学算法、GPU编程等,目前负责公司3D引擎的研发工作;

工作之余,喜欢用书籍记录自己多年的技术积淀。

目录

推荐序
推荐语
前言
第1章 3D数学与UNITY
1.1 Unity坐标系
1.2 向量
1.2.1 向量的加法
1.2.2 向量的减法
1.2.3 向量点乘
1.2.4 向量叉乘
1.3 矩阵
1.3.1 平移矩阵
1.3.2 矩阵缩放
1.3.3 矩阵旋转
1.4 四元数
1.5 欧拉角
1.6 小结
第2章 AVATAR换装系统
2.1 换装原理
2.2 换装代码实现
2.3 小结
第3章 消息事件封装
3.1 消息类型定义和封装
3.2 消息事件的监听与分发
3.3 小结
第4章 PROTOBUF在游戏中运用
4.1 Protobuf消息结构体定义
4.2 编写Protobuf结构体
4.3 Protobuf转换工具制作
4.4 Protobuf文件在Unity中的运用
4.5 小结
第5章 游戏中的文本文件加密
5.1 配置文件格式
5.2 文件加载接口
5.3 文本文件加密算法及应用
5.4 小结
第6章 行为树在游戏中的运用
6.1 行为树插件介绍
6.2 案例讲解
6.3 小结
第7章 残影
7.1 残影的技术实现
7.2 Demo展示
7.3 小结
第8章 移动端实时阴影绘制
8.1 移动端实时阴影实现原理
8.2 技术实现
8.3 透明材质实时阴影处理
8.4 小结
第9章 移动端海水仿真技术
9.1 海水实现的技术原理
9.2 海水网格
9.3 海水算法
9.4 海水的技术实现
9.5 海水浮力的实现
9.6 海面风力实现
9.7 操作界面
9.8 海水的渲染
9.9 海水案例分享
9.10 小结
第10章 MVC架构设计
10.1 MVC代码模块设计
10.2 事件代码实现案例
10.3 窗体基类的实现案例
10.4 窗体子类代码实现案例
10.5 控制类实现案例
10.6 状态类设计实现
10.7 窗体管理类实现案例
10.8 MVC案例分享
10.9 小结
第11章 FSM有限状态机在游戏中的运用
11.1 FSM基类设计
11.2 子类设计
11.3 实体类设计
11.4 技能子类
11.5 游戏案例分享
11.6 小结
第12章 移动端热更新技术实现
12.1 热更新架构设计
12.2 资源打包工具的开发
12.3 C#与Lua接口相互结合
12.4 模块化接口实现
12.5 Lua脚本逻辑编写
12.6 案例实现
12.7 小结
第13章 移动端SHADER技术
13.1 可编程流水线
13.2 顶点着色器
13.3 片段着色器
13.4 Shader案例分享
13.5 小结
第14章 游戏开发经验分享
14.1 关于调试经验分享
14.2 移动端游戏防破解技术
14.3 减小包体的大小
14.4 动态对象资源的优化
14.5 多线程资源下载技术
14.6 小结



内容简介

本书以Unity 3D的跨平台基础Mono以及其游戏脚本语言C#为基础进行讲解。全面系统地剖析了Unity 3D的跨平台原理以及游戏脚本开发的特点。第1章主要介绍了Unity 3D引擎的历史以及编辑器的基本知识;第2章主要介绍了Mono,以及Unity 3D利用Mono实现跨平台的原理,并且分析了C#语言为何更加适合Unity 3D游戏开发;第3章到第10章主要介绍了Unity 3D游戏脚本语言C#在使用Unity 3D开发过程中的知识点,包括Unity 3D脚本的类型基础、数据结构、在Unity 3D脚本中使用泛型、使用委托和事件打造自己的消息系统、利用定制特性来拓展Unity 3D的编辑器、Unity 3D协程背后的秘密――迭代器以及可空类型和序列化在Unity 3D中使用的相关知识;第11章到第14章,则主要介绍了Unity 3D的资源管理以及优化和编译的内容。 

作者简介

陈嘉栋,毕业于大连海事大学,目前任光宇在线客户端高级开发工程师。博客园推荐博客作者,微软2015年度Visual Studio and Development Technologies有价值专家(Most Valuable Professional)。认为编程首先是爱好,其次才是职业。专注前沿技术,热爱开源。深信代码改变世界。

没有值得吹嘘的项目,只有不断前行的动力。


目录

第1 章 Hello Unity 3D 1

1.1 Unity 3D 游戏引擎进化史 1

1.2 Unity 3D 编辑器初印象 5

1.2.1 Project 视图 5

1.2.2 Inspector 视图8

1.2.3 Hierarchy 视图 9

1.2.4 Game 视图 10

1.2.5 Scene 视图12

1.2.6 绘图模式 14

1.2.7 渲染模式16

1.2.8 场景视图控制 17

1.2.9 Effects 菜单和Gizmos 菜单18

1.3 Unity 3D 的组成 18

1.4 为何需要游戏脚本 20

1.5 本章总结 21

第2 章 Mono 所搭建的脚本核心基础22

2.1 Mono 是什么22

2.1.1 Mono 的组成22

2.1.2 Mono 运行时 23

2.2 Mono 如何扮演脚本的角色24

2.2.1 Mono 和脚本 24

2.2.2 Mono 运行时的嵌入26

2.3 Unity 3D 为何能跨平台?聊聊CIL38

2.3.1 Unity 3D 为何能跨平台 38

2.3.2 CIL 是什么 40

2.3.3 Unity 3D 如何使用CIL 跨平台 44

2.4 脚本的选择,C# 或 48

2.4.1 熟悉的陌生人——UnityScript48

2.4.2 UnityScript 与 51

2.4.3 C#与UnityScript 55

2.5 本章总结57

第3 章 Unity 3D 脚本语言的类型系统58

3.1 C#的类型系统 58

3.2 值类型和引用类型 65

3.3 Unity 3D 脚本语言中的引用类型73

3.4 Unity 3D 游戏脚本中的值类型90

3.4.1 Vector2、Vector3 以及Vector4 90

3.4.2 其他常见的值类型94

3.5 装箱和拆箱95

3.6 本章总结98

第4 章 Unity 3D 中常用的数据结构99

4.1 Array 数组100

4.2 ArrayList 数组101

4.3 List<T>数组102

4.4 C#中的链表——LinkedList<T>103

4.5 队列(Queue<T>)和栈(Stack<T>)107

4.6 Hash Table(哈希表)和Dictionary<K,T>(字典)112

4.7 本章总结120

第5 章 在Unity 3D 中使用泛型121

5.1 为什么需要泛型机制121

5.2 Unity 3D 中常见的泛型 124

5.3 泛型机制的基础127

5.3.1 泛型类型和类型参数 128

5.3.2 泛型类型和继承131

5.3.3 泛型接口和泛型委托 131

5.3.4 泛型方法136

5.4 泛型中的类型约束和类型推断139

5.4.1 泛型中的类型约束139

5.4.2 类型推断144

5.5 本章总结146

第6 章 在Unity 3D 中使用委托149

6.1 向Unity 3D 中的SendMessage 和BroadcastMessage 说拜拜150

6.2 认识回调函数机制——委托151

6.3 委托是如何实现的154

6.4 委托是如何调用多个方法的 160

6.5 用事件(Event)实现消息系统164

6.6 事件是如何工作的 169

6.7 定义事件的观察者,实现观察者模式 172

6.8 委托的简化语法 177

6.8.1 不必构造委托对象177

6.8.2 匿名方法 178

6.8.3 Lambda 表达式 196

6.9 本章总结 201

第7 章 Unity 3D 中的定制特性 202

7.1 初识特性——Attribute 202

7.1.1 DllImport 特性203

7.1.2 Serializable 特性 205

7.1.3 定制特性到底是谁 207

7.2 Unity 3D 中提供的常用定制特性208

7.3 定义自己的定制特性类 213

7.4 检测定制特性 216

7.5 亲手拓展Unity 3D 的编辑器 217

7.6 本章总结227

第8 章 Unity 3D 协程背后的迭代器 228

8.1 初识Unity 3D 中的协程 228

8.1.1 使用StartCoroutine 方法开启协程 229

8.1.2 使用StopCoroutine 方法停止一个协程 233

8.2 使用协程实现延时效果234

8.3 Unity 3D 协程背后的秘密——迭代器 238

8.3.1 你好,迭代器 238

8.3.2 原来是状态机 242

8.3.3. 状态管理 248

8.4 WWW和协程 253

8.5 Unity 3D 协程代码实例 257

8.6 本章总结259

第9 章 在Unity 3D 中使用可空型 260

9.1 如果没有值260

9.2 表示空值的一些方案 261

9.2.1 使用魔值 261

9.2.2 使用标志位 261

9.2.3 借助引用类型来表示值类型的空值 265

9.3 使用可空值类型 267

9.4 可空值类型的简化语法 272

9.5 可空值类型的装箱和拆箱 278

9.6 本章总结 280

第10 章 从序列化和反序列化看Unity 3D 的存储机制 281

10.1 初识序列化和反序列化 281

10.2 控制类型的序列化和反序列化 290

10.2.1 如何使类型可以序列化 290

10.2.2 如何选择序列化的字段和控制反序列化的流程 292

10.2.3 序列化、反序列化中流的上下文介绍及应用 296

10.3 Unity 3D 中的序列化和反序列化 299

10.3.1 Unity 3D 的序列化概览 299

10.3.2 对Unity 3D 游戏脚本进行序列化的注意事项302

10.3.3 如何利用Unity 3D 提供的序列化器对自定义类型进行序列化 305

10.4 Prefab 和实例化之谜——序列化和反序列化的过程309

10.4.1 认识预制体Prefab 309

10.4.2 实例化一个游戏对象311

10.4.3 序列化和反序列化之谜314

10.5 本章总结317

第11 章 移动平台动态读取外部文件 318

11.1 假如我想在编辑器里动态读取文件318

11.2 移动平台的资源路径问题 320

11.3 移动平台读取外部文件的方法323

11.4 使用Resources 类加载资源330

11.5 使用WWW类加载资源332

11.5.1 利用WWW类的构造函数实现资源下载332

11.5.2 利用 WWW.LoadFromCacheOrDownload 方法实现资源下载333

11.5.3 利用WWWForm 类实现POST 请求335

11.6 本章总结335

第12 章 在Unity 3D 中使用AssetBundle 336

12.1 初识AssetBundle 336

12.2 使用AssetBundle 的工作流程337

12.2.1 开发阶段 337

12.2.2 运行阶段340

12.3 如何使用本地磁盘中的AssetBundle 文件344

12.4 AssetBundle 文件的平台兼容性345

12.5 AssetBundle 如何识别资源345

12.6 本章总结346

第13 章 Unity 3D 优化347

13.1 看看Unity 3D 优化需要从哪里着手 347

13.2 CPU 方面的优化348

13.2.1 对DrawCall 的优化 348

13.2.2 对物理组件的优化 354

13.2.3 处理内存,却让CPU 受伤的GC355

13.2.4 对代码质量的优化356

13.3 对GPU 的优化 357

13.3.1 减少绘制的数目358

13.3.2 优化显存带宽358

13.4 内存的优化 359

13.4.1 Unity 3D 的内部内存 359

13.4.2 Mono 的托管内存 360

13.5 本章总结 363

第14 章 Unity 3D 的脚本编译 365

14.1 Unity 3D 脚本编译流程概览365

14.2 JIT 即时编译368

14.2.1 使用编译器将游戏脚本编译为托管模块368



内容简介

内 容 提 要
本书不仅要教会读者如何使用Unity Shader,更重要的是要帮助读者学习Unity中的一些渲染机制以及如何使用Unity Shader实现各种自定义的渲染效果,希望这本书可以为读者打开一扇新的大门,让读者离制作心目中杰出游戏的心愿更近一步。
本书的主要内容为:第1章讲解了学习Unity Shader应该从哪里着手;第2章讲解了现代GPU是如何实现整个渲染流水线的,这对理解Shader的工作原理有着非常重要的作用;第3章讲解Unity Shader的实现原理和基本语法;第4章学习Shader所需的数学知识,帮助读者克服学习Unity Shader时遇到的数学障碍;第5章通过实现一个简单的顶点/片元着色器案例,讲解常用的辅助技巧等;第6章学习如何在Shader中实现基本的光照模型;第7章讲述了如何在Unity Shader中使用法线纹理、遮罩纹理等基础纹理;第8章学习如何实现透明度测试和透明度混合等透明效果;第9章讲解复杂的光照实现;第10章讲解在Unity Shader中使用立方体纹理、渲染纹理和程序纹理等高级纹理;第11章学习用Shader实现纹理动画、顶点动画等动态效果;第12章讲解了屏幕后处理效果的屏幕特效;第13章使用深度纹理和法线纹理实现更多屏幕特效;第14章讲解非真实感渲染的算法,如卡通渲染、素描风格的渲染等;第15章讲解噪声在游戏渲染中的应用;第16章介绍了常见的优化技巧;第17章介绍用表面着色器实现渲染;第18章讲解基于物理渲染的技术;第19章讲解在升级Unity 5时可能出现的问题,并给出解决方法;第20章介绍许多非常有价值的学习资料,以帮助读者进行更深入的学习。
本书适合Unity初学者、游戏开发者、程序员,也可以作为大专院校相关专业师生的学习用书,以及培训学校的培训教材。

作者简介

冯乐乐,一只喜欢计算机图形的程序媛。上海交通大学软件学院研究生,爱好写shader,喜欢一切用计算机绘画的技术。

目录

第1篇 基础篇

第1章 欢迎来到Shader的世界 2
1.1 程序员的三大浪漫 2
1.2 本书结构 3

第2章 渲染流水线 5
2.1 综述 5
2.1.1 什么是流水线 5
2.1.2 什么是渲染流水线 6
2.2 CPU和GPU之间的通信 7
2.2.1 把数据加载到显存中 7
2.2.2 设置渲染状态 8
2.2.3 调用Draw Call 8
2.3 GPU流水线 9
2.3.1 概述 9
2.3.2 顶点着色器 10
2.3.3 裁剪 11
2.3.4 屏幕映射 11
2.3.5 三角形设置 12
2.3.6 三角形遍历 13
2.3.7 片元着色器 13
2.3.8 逐片元操作 14
2.3.9 总结 17
2.4 一些容易困惑的地方 18
2.4.1 什么是OpenGL/DirectX 18
2.4.2 什么是HLSL、GLSL、CG 19
2.4.3 什么是Draw Call 20
2.4.4 什么是固定管线渲染 22
2.5 那么,你明白什么是Shader了吗 23
2.6 扩展阅读 23

第3章 Unity Shader基础 24
3.1 Unity Shader概述 25
3.1.1 一对好兄弟:材质和Unity Shader 25
3.1.2 Unity中的材质 26
3.1.3 Unity中的Shader 26
3.2 Unity Shader的基础:ShaderLab 28
3.3 Unity Shader的结构 29
3.3.1 给我们的Shader起个名字 29
3.3.2 材质和Unity Shader的桥梁:Properties 29
3.3.3 重量级成员:SubShader 31
3.3.4 留一条后路:Fallback 33
3.3.5 ShaderLab还有其他的
语义吗 33
3.4 Unity Shader的形式 33
3.4.1 Unity的宠儿:表面着色器 34
3.4.2 聪明的孩子:顶点/片元着
色器 35
3.4.3 被抛弃的角落:固定函数着
色器 35
3.4.4 选择哪种Unity Shader形式 36
3.5 本书使用的Unity Shader形式 36
3.6 答疑解惑 36
3.6.1 Unity Shader != 真正的Shader 36
3.6.2 Unity Shader和CG/HLSL之间的关系 37
3.6.3 我可以使用GLSL来写吗 38
3.7 扩展阅读 38

第4章 学习Shader所需的数学基础 39
4.1 背景:农场游戏 39
4.2 笛卡儿坐标系 40
4.2.1 二维笛卡儿坐标系 40
4.2.2 三维笛卡儿坐标系 41
4.2.3 左手坐标系和右手坐标系 42
4.2.4 Unity使用的坐标系 44
4.2.5 练习题 45
4.3 点和矢量 45
4.3.1 点和矢量的区别 46
4.3.2 矢量运算 47
4.3.3 练习题 53
4.4 矩阵 54
4.4.1 矩阵的定义 54
4.4.2 和矢量联系起来 55
4.4.3 矩阵运算 55
4.4.4 特殊的矩阵 57
4.4.5 行矩阵还是列矩阵 60
4.4.6 练习题 61
4.5 矩阵的几何意义:变换 62
4.5.1 什么是变换 62
4.5.2 齐次坐标 63
4.5.3 分解基础变换矩阵 63
4.5.4 平移矩阵 64
4.5.5 缩放矩阵 64
4.5.6 旋转矩阵 65
4.5.7 复合变换 66
4.6 坐标空间 67
4.6.1 为什么要使用这么多不同的坐标空间 68
4.6.2 坐标空间的变换 68
4.6.3 顶点的坐标空间变换过程 72
4.6.4 模型空间 73
4.6.5 世界空间 73
4.6.6 观察空间 75
4.6.7 裁剪空间 77
4.6.8 屏幕空间 83
4.6.9 总结 85
4.7 法线变换 86
4.8 Unity Shader的内置变量(数学篇) 87
4.8.1 变换矩阵 87
4.8.2 摄像机和屏幕参数 88
4.9 答疑解惑 89
4.9.1 使用3×3还是4×4的
变换矩阵 89
4.9.2 CG中的矢量和矩阵类型 89
4.9.3 Unity中的屏幕坐标:ComputeScreenPos/VPOS/
WPOS 90
4.10 扩展阅读 93
4.11 练习题答案 93
第2篇 初级篇

第5章 开始Unity Shader学习之旅 100
5.1 本书使用的软件和环境 100
5.2 一个简单的顶点/片元着色器 100
5.2.1 顶点/片元着色器的基本
结构 101
5.2.2 模型数据从哪里来 103
5.2.3 顶点着色器和片元着色器之间如何通信 104
5.2.4 如何使用属性 105
5.3 强大的援手:Unity提供的内置文件和变量 107
5.3.1 内置的包含文件 107
5.3.2 内置的变量 109
5.4 Unity提供的CG/HLSL语义 109
5.4.1 什么是语义 109
5.4.2 Unity支持的语义 110
5.4.3 如何定义复杂的变量类型 110
5.5 程序员的烦恼:Debug 111
5.5.1 使用假彩色图像 111
5.5.2 利用神器:Visual Studio 113
5.5.3 新利器:帧调试器 113
5.6 小心:渲染平台的差异 115
5.6.1 渲染纹理的坐标差异 115
5.6.2 Shader的语法差异 116
5.6.3 Shader的语义差异 117
5.6.4 其他平台差异 117
5.7 Shader整洁之道 117
5.7.1 float、half还是fixed 117
5.7.2 规范语法 118
5.7.3 避免不必要的计算 118
5.7.4 慎用分支和循环语句 119
5.7.5 不要除以0 119
5.8 扩展阅读 120

第6章 Unity中的基础光照 121
6.1 我们是如何看到这个世界的 121
6.1.1 光源 121
6.1.2 吸收和散射 122
6.1.3 着色 122
6.1.4 BRDF光照模型 123
6.2 标准光照模型 123
6.2.1 环境光 123
6.2.2 自发光 124
6.2.3 漫反射 124
6.2.4 高光反射 124
6.2.5 逐像素还是逐顶点 125
6.2.6 总结 125
6.3 Unity中的环境光和自发光 126
6.4 在Unity Shader中实现漫反射光照
模型 126
6.4.1 实践:逐顶点光照 126
6.4.2 实践:逐像素光照 129
6.4.3 半兰伯特模型 130
6.5 在Unity Shader中实现高光反射
光照模型 131
6.5.1 实践:逐顶点光照 132
6.5.2 实践:逐像素光照 134
6.5.3 Blinn-Phong光照模型 135
6.6 召唤神龙:使用Unity内置的
函数 136

第7章 基础纹理 139
7.1 单张纹理 140
7.1.1 实践 140
7.1.2 纹理的属性 142
7.2 凹凸映射 146
7.2.1 高度纹理 146
7.2.2 法线纹理 146
7.2.3 实践 148
7.2.4 Unity中的法线纹理类型 154
7.3 渐变纹理 155
7.4 遮罩纹理 158
7.4.1 实践 159
7.4.2 其他遮罩纹理 161

第8章 透明效果 162
8.1 为什么渲染顺序很重要 163
8.2 Unity Shader的渲染顺序 164
8.3 透明度测试 165
8.4 透明度混合 169
8.5 开启深度写入的半透明效果 171
8.6 ShaderLab的混合命令 173
8.6.1 混合等式和参数 173
8.6.2 混合操作 174
8.6.3 常见的混合类型 175
8.7 双面渲染的透明效果 176
8.7.1 透明度测试的双面渲染 176
8.7.2 透明度混合的双面渲染 176
第3篇 中级篇

第9章 更复杂的光照 180
9.1 Unity的渲染路径 180
9.1.1 前向渲染路径 182
9.1.2 顶点照明渲染路径 185
9.1.3 延迟渲染路径 186
9.1.4 选择哪种渲染路径 188
9.2 Unity的光源类型 188
9.2.1 光源类型有什么影响 189
9.2.2 在前向渲染中处理不同的
光源类型 190
9.3 Unity的光照衰减 195
9.3.1 用于光照衰减的纹理 196
9.3.2 使用数学公式计算衰减 196
9.4 Unity的阴影 196
9.4.1 阴影是如何实现的 197
9.4.2 不透明物体的阴影 198
9.4.3 使用帧调试器查看阴影绘制过程 202
9.4.4 统一管理光照衰减和阴影 204
9.4.5 透明度物体的阴影 206
9.5 本书使用的标准Unity Shader 209

第10章 高级纹理 210
10.1 立方体纹理 210
10.1.1 天空盒子 210
10.1.2 创建用于环境映射的立方体
纹理 212
10.1.3 反射 213
10.1.4 折射 215
10.1.5 菲涅耳反射 217
10.2 渲染纹理 219
10.2.1 镜子效果 219
10.2.2 玻璃效果 220
10.2.3 渲染纹理 vs. GrabPass 224
10.3 程序纹理 225
10.3.1 在Unity中实现简单的程序
纹理 225
10.3.2 Unity的程序材质 228

第11章 让画面动起来 230
11.1 Unity Shader中的内置变量
(时间篇) 230
11.2 纹理动画 230
11.2.1 序列帧动画 230
11.2.2 滚动的背景 233
11.3 顶点动画 234
11.3.1 流动的河流 234
11.3.2 广告牌 236
11.3.3 注意事项 239
第4篇 高级篇

第12章 屏幕后处理效果 244
12.1 建立一个基本的屏幕后处理脚本
系统 244
12.2 调整屏幕的亮度、饱和度和
对比度 246
12.3 边缘检测 249
12.3.1 什么是卷积 249
12.3.2 常见的边缘检测算子 249
12.3.3 实现 250
12.4 高斯模糊 253
12.4.1 高斯滤波 253
12.4.2 实现 254
12.5 Bloom效果 259
12.6 运动模糊 263
12.7 扩展阅读 266

第13章 使用深度和法线纹理 267
13.1 获取深度和法线纹理 267
13.1.1 背后的原理 267
13.1.2 如何获取 269
13.1.3 查看深度和法线纹理 271
13.2 再谈运动模糊 272
13.3 全局雾效 276
13.3.1 重建世界坐标 276
13.3.2 雾的计算 278
13.3.3 实现 278
13.4 再谈边缘检测 283
13.5 扩展阅读 287

第14章 非真实感渲染 288
14.1 卡通风格的渲染 288
14.1.1 渲染轮廓线 288
14.1.2 添加高光 289
14.1.3 实现 290
14.2 素描风格的渲染 293
14.3 扩展阅读 296
14.4 参考文献 297

第15章 使用噪声 298
15.1 消融效果 298
15.2 水波效果 302
15.3 再谈全局雾效 305
15.4 扩展阅读 309
15.5 参考文献 309

第16章 Unity中的渲染优化技术 310
16.1 移动平台的特点 310
16.2 影响性能的因素 311
16.3 Unity中的渲染分析工具 312
16.3.1 认识Unity 5的渲染统计
窗口 312
16.3.2 性能分析器的渲染区域 313
16.3.3 再谈帧调试器 313
16.3.4 其他性能分析工具 314
16.4 减少draw call数目 314
16.4.1 动态批处理 315
16.4.2 静态批处理 316
16.4.3 共享材质 318
16.4.4 批处理的注意事项 318
16.5 减少需要处理的顶点数目 319
16.5.1 优化几何体 319
16.5.2 模型的LOD技术 319
16.5.3 遮挡剔除技术 320
16.6 减少需要处理的片元数目 320
16.6.1 控制绘制顺序 320
16.6.2 时刻警惕透明物体 321
16.6.3 减少实时光照和阴影 321
16.7 节省带宽 322
16.7.1 减少纹理大小 322
16.7.2 利用分辨率缩放 323
16.8 减少计算复杂度 323
16.8.1 Shader的LOD技术 323
16.8.2 代码方面的优化 323
16.8.3 根据硬件条件进行缩放 324
16.9 扩展阅读 324
第5篇 扩展篇

第17章 Unity的表面着色器探秘 328

内容简介

本书在一开始便提出一个明确的学习目标,便是要制作一款完整的多人对战游戏,然后一步一步去实现它。全书分为3个部分:

,部分“单机游戏”:第1章至第5章,主要在于开发一款功能完整坦克单机游戏。除了让坦克行走、开炮,还将介绍基于代码和资源分离的界面系统、敌人AI。了解开发单机游戏的知识,也是为接下来的网络开发学习奠定基础。

第二部分“网络原理”:第6章至第8章,主要介绍网络通信的原理,开发客户端的网络模块和服务端程序框架。这套框架具有较高的通用性,可以运用在多种游戏上。

第三部分“网络游戏”:第9章至第12章,主要讲解房间系统和同步系统的逻辑实现,将单机坦克游戏改造成多人对战网络游戏。

目录

第1章 掌握Unity3D基本元素 
1.1 简单的游戏 
1.1.1在场景中创建一个立方体 
1.1.2编写可以使立方体运动的程序 
1.1.3测试游戏 
1.1.4总结 
1.2 资源导入 
1.3 山体系统 
1.4 灯光 
1.5 材质 
1.6 预设 
1.6.1制作预设 
1.6.2例子 
1.7 声音 
1.7.1音源 
1.7.2接收器 
1.7.3简单播放器 
1.8 GUI 
1.8.1用Unity3D编写HelloWorld程序 
1.8.2用Unity3D编写登录框 
1.9导出游戏 
第 2 章 驾驶梦想中的坦克 
备用章节名:坦克控制单元 
2.1行走控制 
2.1.1Unity3D的脚本 
2.1.2获取输入操作 
2.1.3坐标变换 
2.2 相机跟随 
2.2.1跟随的数学原理 
2.2.2相机跟随的功能实现 
2.2.3鼠标控制相机的角度 
2.2.4滚轮调整相机与坦克的距离 
2.3 坦克的物理特征 
2.3.1 Unity3D的物理引擎 
2.3.2 车轮碰撞器 
2.4 驾驶坦克 
2.5转动的轮子 
2.6滚动的履带 
第3章 开炮击毁敌人 
备用章节名:火炮系统 
3.1 旋转的炮塔 
3.2 俯仰的炮管 
3.3 开炮! 
3.3.1制作炮弹 
3.3.2制作爆炸效果 
3.3.3炮弹逻辑 
3.3.4开火 
3.4 坦克的控制类型 
3.5 摧毁敌军 
3.6 准心 
3.7 生命指示条 
3.8 击中提示 
3.8.1谁发射了炮弹 
3.8.2被谁击中 
3.8.3击杀提示 
3.9 炮弹的音效 
3.9.1射击音效 
3.9.2爆炸声音 
第4章 进击的人工智能 
备用章节名:人工智能 
4.1 实现人工智能的一般方法 
4.1.1有限状态机 
4.1.2分层有限状态机 
4.2 搜寻目标 
4.2.1编写AI类 
4.2.2在Tank中调用AI类 
4.3 向敌人开炮 
4.3.1旋转的炮塔 
4.3.2俯仰的炮管 
4.3.3开炮! 
4.4 路点和路径 
4.4.1路点 
4.4.2路径 
4.4.3一种生成路径的方法 
4.4.4给坦克指定路径 
4.5 走向目的地 
4.6 使用NavMesh计算路径 
4.6.1NavMesh的原理 
4.6.2生成导航图 
4.6.3生成路径 
4.7 行为决策 
4.8 战场 
4.8.1战场逻辑 
4.8.2两军对峙 
第5章 代码分离的界面系统 
5.1 了解Unity UI系统(UGUI) 
5.1.1 Canvas画布 
5.1.2 EventSystem 
5.1.3 RectTransform 
5.1.4 其他UGUI组件 
5.1.5 事件触发 
5.2 制作坦克游戏界面 
5.3 界面基类PanelBase 
5.3.1 代码与资源分离的优势 
5.3.2 界面系统的设计 
5.3.3 PanelBase的设计 
5.4 界面管理器PanelMgr 
5.4.1 层级管理 
5.4.2 打开面板OpenPanel 
5.4.3 关闭面板ClosePanel 
5.5 TitlePanel和InfoPanel 
5.6 调用界面系统 
5.7 胜负面板 
5.8 设置面板 
第6章 网络基础 
6.1 七层网络模型 
6.1.1 应用层 
6.1.2传输层 
6.1.3网络层 
6.1.4数据链路层 
6.2 IP与端口 
6.3 TCP协议 
6.3.1 TCP连接的建立 
6.3.2 TCP的数据传输 
6.3.3 TCP连接的终止 
6.4 Socket套接字 
6.5 同步Socket程序 
6.5.1 新建控制台程序 
6.5.2编写服务端代码 
6.5.3编写客户端程序 
6.6 异步socket程序 
6.6.1 连接类(state) 
6.6.2 异步服务端 
6.6.3 开启服务端 
6.6.4 编写客户端程序 
6.7 Mysql 
6.7.1 Mysql基础入门 
6.7.2 留言板服务端程序 
6.7.3 调试程序 
6.8 类的序列化 
6.9 定时器 
6.10 线程互斥 
6.11 通讯协议和消息列表 
6.11.1 通讯协议 
6.11.2 服务端程序 
6.11.3 客户端场景 
6.11.4 消息列表 
6.11.5 客户端程序 
6.11.6 调试 
第7章 游戏服务端框架 
7.1服务端架构 
7.1.1 总体架构 
7.1.2游戏流程 
7.1.3连接数据结构 
7.1.4数据库结构 
7.1.5项目结构 
7.2 数据管理类DataMgr 
7.2.1 数据库结构 
7.2.2 玩家数据 
7.2.3 Player的初步版本 
7.2.4 连接数据库 
7.2.5 防止sql注入 
7.2.6 Register注册 
7.2.7 CreatePlayer创建角色 
7.2.8 登录校验 
7.2.9 获取角色数据 
7.2.10 保存角色数据 
7.2.11 调试 
7.3 处理粘包分包 

内容简介

本书主要介绍如何利用3D固定流水线编写游戏引擎,以及在已编写引擎的基础上开发游戏,全书共分10章,主要内容包括游戏引擎简介、数学知识、材质和光照、固定流水线、游戏引擎架构、3D引擎底层封装、3D引擎封装、游戏设计实现、地图编辑器、3D可编程流水线。本书重点介绍3D固定流水线编程中涉及的矩阵和向量之间的换算,后一章介绍了GPU编程,也就是常说的3D可编程流水线。

作者简介

硕士研究生,从事互联网和IT行业十年以上,擅长3D游戏引擎开发,GPU编程,游戏架构等技术。曾就职于网龙公司,久游公司,趣游等公司并担任过重要职务,参与或主导过多款商业3D网络游戏上线运营。曾发表《三维漫游系统关键技术研究》,《虚拟交互漫游系统关键技术研究与实现 》,《移动端海洋实时仿真技术研究与实现》等多篇论文,目前个人拥有两项软件著作权。

目录

第1章 游戏引擎简介 (1)
1.1 引擎的原理 (1)
1.2 开发3D引擎具备的条件 (4)
总结 (6)
第2章 数学知识 (8)
2.1 向量 (8)
2.1.1 向量加法及运用 (9)
2.1.2 向量减法及运用 (10)
2.1.3 向量点积及应用 (10)
2.1.4 向量的叉乘及应用 (12)
2.1.5 向量的长度及应用 (13)
2.1.6 向量的归一化及应用 (14)
2.2 矩阵运算 (14)
2.2.1 矩阵加法和减法 (14)
2.2.2 矩阵乘法及运用 (15)
2.3 3D坐标系 (19)
2.4 齐次坐标 (19)
2.5 四元数 (20)
总结 (20)
第3章 材质和光照 (22)
3.1 材质 (22)
3.2 光照 (23)
总结 (26)
第4章 固定流水线 (27)
4.1 局部坐标到世界坐标的变换 (27)
4.2 世界坐标到相机坐标的变换 (29)
4.3 物体剔除 (31)
4.4 相机坐标到透视坐标的变换 (32)
4.5 透视坐标到视口坐标的变换 (33)
4.6 光栅化 (33)
总结 (34)

第5章 游戏引擎架构 (35)
5.1 模块功能细分 (36)
5.2 GDI含义 (36)
5.3 整个引擎渲染思路 (37)
总结 (38)
第6章 3D引擎底层封装 (39)
6.1 自定义结构体 (39)
6.2 矩阵定义 (45)
6.3 通用类定义 (54)
6.4 向量运算 (59)
6.5 灯光 (72)
6.6 视景体 (77)
6.7 矩阵转换 (83)
6.8 图形渲染系统 (89)
6.9 材质 (100)
6.10 坐标系之间的转换 (109)
总结 (158)
第7章 3D引擎封装 (159)
7.1 相机的实现 (160)
7.2 监听事件 (166)
7.3 模型分析 (168)
7.4 模型加载 (169)
7.5 模型操作 (180)
7.6 场景管理 (191)
7.7 绘图接口 (206)
7.8 游戏窗口 (207)
总结 (217)
第8章 游戏设计实现 (218)
8.1 游戏架构 (218)
8.2 坦克设计 (219)
8.3 AI坦克 (230)
8.4 子弹设计 (235)
8.5 玩家控制 (240)
8.6 游戏类封装 (246)
8.7 游戏管理 (253)
8.8 主循环 (276)
总结 (278)
第9章 地图编辑器 (280)
9.1 编辑器实现 (281)
9.2 模型插件实现 (282)
总结 (284)
第10章 3D可编程流水线 (285)
10.1 GPU编程语言 (287)
10.2 灯光的Shader渲染 (287)
10.3 CelShading渲染 (291)
10.4 环境映射 (298)
10.5 Phong着色 (302)
10.6 Bloom渲染 (305)
10.7 PSSM阴影 (314)
总结 (323)



内容简介

本书,篇系统地介绍GPU编程的相关知识,帮助读者快速入门,并构建GPU知识体系;第二篇和第三篇给出大量实例,对每个实例进行循序渐进的并行和优化实践,为读者提供GPU编程和优化参考;第四篇总结影响GPU性能的关键要素(执行核心和存储体系),量化测评GPU的核心性能参数,给出CPU/GPU异构系统上覆盖完全的各种混合并行模式及其实践,帮助读者真正透彻理解GPU。
本书适合作为计算机及相关专业的教材,也可作为GPU程序开发人员和科研人员的参考书。本书封面贴有清华大学出版社防伪标签,无标签者不得销售。

目录

,篇理论篇
第1章高性能计算概述3
1.1高性能计算概念辨析3
1.1.1并行计算、高性能计算和超级计算3
1.1.2超级计算机与超级计算中心4
1.2计算科学5
1.3高性能计算发展史5
1.4高性能计算简介6
1.5向量机与阵列机8
1.6本章小结9
第2章GPU概述10
2.1GPU是什么10
2.2协处理器10
2.3GPU与显卡的关系11
2.4GPU/显卡购买注意事项11
2.5为什么要学GPU编程12
2.6GPU与CPU辨析13
2.7GPU发展简史14
2.8GPU编程方法14
2.9CPU/GPU异构系统16
第3章GPU硬件架构17
3.1GPU架构17
3.1.1Tesla架构18
3.1.2Fermi架构20
3.1.3Kepler架构21
3.1.4Maxwell架构23
3.1.5Pascal架构243.2Kernel的硬件映射28
3.3GPU存储体系29
3.4GPU计算能力30
GPU编程与优化——大众高性能计算目录第4章GPU软件体系33
4.1GPU软件生态系统33
4.2CUDA Toolkit34
4.2.1NVCC编译器34
4.2.2cuobjdump35
4.3CUDA环境安装36
4.3.1Windows 7安装CUDA 4.236
4.3.2Linux下安装CUDA38
第5章CUDA C编程41
5.1CUDA编程模型41
5.2CUDA编程七步曲42
5.3驱动API与运行时API42
5.4CUDA运行时函数43
5.4.1设备管理函数43
5.4.2存储管理函数45
5.4.3数据传输函数48
5.4.4线程管理函数51
5.4.5流管理函数52
5.4.6事件管理函数52
5.4.7纹理管理函数53
5.4.8执行控制函数55
5.4.9错误处理函数55
5.4.10图形学互操作函数57
5.4.11OpenGL互操作函数58
5.4.12Direct3D互操作函数59
5.5CUDA C语言扩展60
5.6grid�瞓lock�瞭hread三维模型61
第二篇入门篇
第6章向量加法67
6.1向量加法及其串行代码67
6.2单block单thread向量加68
6.3单block多thread向量加68
6.4多block多thread向量加69
6.5CUBLAS库向量加法70
6.6实验结果分析与结论71
6.6.1本书实验平台71
6.6.2实验结果71
6.6.3结论71
6.7知识点总结72
6.8扩展练习75
第7章归约: 向量内积76
7.1向量内积及其串行代码76
7.2单block分散归约向量内积77
7.3单block低线程归约向量内积78
7.4多block向量内积(CPU二次归约)79
7.5多block向量内积(GPU二次归约)81
7.6基于原子操作的多block向量内积81
7.7计数法实现多block向量内积84
7.8CUBLAS库向量内积85
7.9实验结果与结论86
7.9.1实验结果86
7.9.2结论86
7.10归约的深入优化探讨87
7.10.1block数量和thread数量对归约性能的影响87
7.10.2算术运算优化88
7.10.3减少同步开销89
7.10.4循环展开90
7.10.5总结91
7.11知识点总结91
7.12扩展练习94
第8章矩阵乘法95
8.1矩阵乘法及其3种串行代码95
8.1.1一般矩阵乘法95
8.1.2循环交换矩阵乘法97
8.1.3转置矩阵乘法98
8.1.4实验结果与优串行矩阵乘99
8.2grid线程循环矩阵乘法100
8.3block线程循环矩阵乘法101
8.4行共享存储矩阵乘法101
8.5棋盘阵列矩阵乘法103
8.6判断移除105
8.7CUBLAS矩阵乘法106
8.8实验结果分析与结论108
8.8.1矩阵乘精度分析108
8.8.2实验结果分析110
8.8.3浮点运算能力分析111
8.9行共享存储矩阵乘法改进111
8.10知识点总结113
8.11扩展练习115
第9章矩阵转置116
9.1矩阵转置及其串行代码116
9.21D矩阵转置117
9.32D矩阵转置118
9.4共享存储2D矩阵转置119
9.5共享存储2D矩阵转置diagonal优化120
9.6实验结果分析与结论121
9.7共享存储2D矩阵转置的深入优化122
9.8知识点总结124
9.9扩展练习125
第三篇提高篇
第10章卷积129
10.1卷积及其串行实现129
10.1.1一维卷积129
10.1.2二维卷积131
10.2GPU上1D卷积134
10.3M常量1D卷积135
10.4M共享1D卷积136
10.5N共享1D卷积137
10.6实验结果分析139
10.6.1扩展法1D卷积实验结果分析139
10.6.2判断法与扩展法1D卷积对比140
10.6.3加速比分析141
10.6.4线程维度对性能的影响141
10.72D卷积的GPU移植与优化142
10.7.1GPU上2D卷积142
10.7.2M常量2D卷积143
10.7.3M常量N共享2D卷积143
10.7.42D卷积实验结果分析145
10.8知识点总结145
10.9扩展练习147
第11章曼德博罗特集148
11.1曼德博罗特集及其串行实现148
11.2曼德博罗特集的GPU映射150
11.3一些优化尝试及效果152
11.3.1访存连续152
11.3.2uchar4访存合并153
11.3.34种零拷贝153
11.3.4总结分析155
11.4计算通信重叠优化156
11.5突破kernel执行时间限制159
11.6知识点总结160
11.7扩展练习162
第12章扫描: 前缀求和163
12.1前缀求和及其串行代码163
12.2Kogge�睸tone并行前缀和164
12.2.1直接Kogge�睸tone分段前缀和164
12.2.2交错Kogge�睸tone分段前缀和165
12.2.3完整Kogge�睸tone前缀和166
12.3Brent�睰ung并行前缀和168
12.3.1Brent�睰ung分段前缀和169
12.3.2两倍数据的Brent�睰ung分段前缀和170
12.3.3避免bank conflict的两倍数据Brent�睰ung分段前缀和171
12.3.4完整Brent�睰ung前缀和173
12.4warp分段的Kogge�睸tone前缀求和174
12.5实验结果分析与结论177
12.6知识点总结179
12.7扩展练习180第13章排序181
13.1串行排序及其性能181
13.1.1选择排序181
13.1.2冒泡排序182
13.1.3快速排序182
13.1.4基数排序183
13.1.5双调排序网络185
13.1.6合并排序186
13.1.7串行排序性能对比187
13.2基数排序188
13.2.1基数排序概述188
13.2.2单block基数排序189
13.2.3基于thrust库的基数排序196
13.3双调排序网络197
13.3.1双调排序网络概述197
13.3.2单block双调排序网络199
13.3.3多block双调排序网络202
13.4快速排序206
13.5合并排序207
13.6实验结果分析与结论208
13.7知识点总结209
13.8扩展练习210
第14章几种简单图像处理211
14.1图像直方图统计211
14.1.1串行直方图统计211
14.1.2并行直方图统计211
14.1.3实验结果与分析212
14.2中值滤波213
14.2.1串行中值滤波214
14.2.21D并行中值滤波215

用户评价

评分

评分

评分

评分

评分

评分

评分

评分

评分

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou 等,本站所有链接都为正版商品购买链接。

© 2025 windowsfront.com All Rights Reserved. 静流书站 版权所有