游戏开发
文章平均质量分 94
鹅厂程序小哥
与你一起写程序 | 知乎:鹅厂程序小哥 | 微信公众号:鹅厂程序小哥
展开
-
【详细解析版】Protobuf3使用手册
Protobuf使用手册--中文版,好不容易找到了,分享一下给大家。目录第1章 定义.proto 文件1.1 定义package1.2 定义message1.3 定义属性1.3.1 标注1.3.2 类型1.3.3 属性顺序号1.4可选项1.4.1import可选项1.4.2packed1.4.3default1.5 大数据量使用建议1.5.1 repeated message类型1.5.2 repeated raw类型1.6 Proto...原创 2021-01-01 22:21:33 · 2962 阅读 · 2 评论 -
游戏程序员养成计划
与玩游戏相比,写游戏要复杂上千万倍,除了需要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内,由于相关资料的缺乏,更是让初学者无从下手。下面总结了一些入门方法和比较容易入手的资料。 首先你要精通一门高级语言,比如C++或者C#,其次,要有良好的英文阅读能力。对游戏开发者来说英文阅读能力是最重要也是最基本的工具之一,因为你遇到的大部分资源...转载 2019-12-23 21:17:41 · 708 阅读 · 0 评论 -
3D图形学(6):正向渲染和延迟渲染
内容引自《Real Time Rendering 3rd》Forward Rendering(正向渲染)发生在渲染管线的顶点处理阶段,会计算所有的顶点的光照。全平台支持。规则一:最亮的几个光源会被实现为像素光照 规则二:然后最多4个光源会被实现为顶点光照 规则三:剩下的光源会被实现为效率较高的球面调谐光照(Spherical Hamanic),这是一种模拟光照规则一补充说明...原创 2019-03-31 22:03:48 · 1832 阅读 · 3 评论 -
3D图形学(7):全局光照之光线追踪、路径追踪
内容引自《Real Time Rendering 3rd》全局光照 Global Illumination全局光照(Global Illumination,简称 GI), 作为图形学中比较酷的概念之一,是指既考虑场景中来自光源的直接光照,又考虑经过场景中其他物体反射后的间接光照的一种渲染技术。光线追踪 Ray Tracing光线追踪方法主要思想是从视点向成像平面上的像素发射光...原创 2019-03-31 22:14:22 · 2313 阅读 · 0 评论 -
3D图形学(8):屏幕后处理
内容引自《Real Time Rendering 3rd》屏幕后处理,基于图像的渲染(Image-Based Rendering,简称IBR)一、天空盒 Skyboxes环境贴图(environment map)可以代表本地空间入射光亮度。虽然环境贴图通常用于模拟反射,但它们也可以直接用来表示环绕环境的远处物体。任何独立于视图的环境地图表示都可以用于此目的;立方体贴图(cubi...原创 2019-03-31 22:32:55 · 999 阅读 · 0 评论 -
MatCap--用低廉的成本,达到类似PBR的渲染效果
PBR虽然渲染效果真实,但是性能要求较高。尤其是在移动平台,计算能力有限,采用MatCap思想的Shader,用较低的计算成本,就可以达到类似PBR一样真实的渲染效果,可谓是在移动平台实现次时代渲染效果的一种优秀解决方案。MatCap (Material Capture):材质捕获,使用特定材质球的贴图,作为当前材质的视图空间环境贴图,从而实现具有均匀表面着色的反射材质物体的显示。不像一...原创 2019-04-10 12:18:30 · 7437 阅读 · 2 评论 -
3D图形学(9):非真实感渲染(NPR)
内容引自《Real Time Rendering 3rd》非真实感渲染 Non-Photorealistic Rendering与传统的追求照片真实感的真实感渲染不同,非真实感渲染(Non-Photorealistic Rendering,NPR)旨在模拟艺术式的绘制风格,常用来对绘画风格和自然媒体(如铅笔、钢笔、墨水、木炭、水彩画等)进行模拟。而卡通渲染(Toon Rendering)作...原创 2019-03-31 22:42:20 · 1507 阅读 · 0 评论 -
3D图形学(10):游戏中的加速渲染算法
内容引自《Real Time Rendering 3rd》一、空间数据结构(Spatial Data Structures)空间数据结构(Spatial Data Structures)是将几何体组织在N维空间中的一系列数据结构。这些空间数据结构可以用于很多实时渲染相关操作的加速查询中,如场景管理,裁减算法、相交测试、光线追踪、以及碰撞检测等。空间数据结构的组织通常是层次结构的。宽泛地...原创 2019-03-31 23:22:15 · 1658 阅读 · 0 评论 -
3D图形学(11):渲染优化之从瓶颈定位到优化策略
本文章结合了浅墨整理的《Real-Time Rendering 3rd》第十五章“Pipeline Optimization”和《GPU Gem I》第28章“Graphics Pipeline Performance”,整合冯乐乐的《Unity Shader入门精要》第十六章 渲染优化,同时,加上一些自己的整理。一、渲染管线的瓶颈定位策略正确定位到了瓶颈,优化工作就已完成了一半,因...原创 2019-04-03 11:39:29 · 2714 阅读 · 0 评论 -
分治法,动态规划法,贪心法,回溯法,分支限界法的区别和联系以及适用情况
《算法设计与分析》课程已经进入尾声,在这里对学过的算法进行总结归纳。笔者先对各个算法的思想进行简单的陈述,然后再进行对比。一、算法思想(一)分治法(divide and conquer method)是将待求解的原问题划分成k个较小规模的子问题,对这k个子问题分别求解。如果子问题的规模仍然不够小,则再将每个子问题划分为k个规模更小的子问题,如此分解下去,直到问题规模足够...转载 2019-04-21 20:14:08 · 4226 阅读 · 0 评论 -
五大常用算法--分支限界算法
分支限界法的基本思想 分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一...转载 2019-04-21 22:37:24 · 765 阅读 · 0 评论 -
Lua和C++交互:全局数组交互
Lua数组①数组是key值从1开始并连续递增的table。②索引号是从1开始,不是从0开始。lua还提供了一些只针对数组进行操作的API,如下:①LUALIB_API lua_Integer (luaL_len) (lua_State *L, int idx);luaL_len 使用于数组,可得到数组元素个数;以数字形式返回给定索引处值的“长度”; 它等价于在 Lua...原创 2019-03-21 14:16:19 · 1037 阅读 · 0 评论 -
Lua和C++交互:Lua调用C++类注册生成的Lua模块
这篇文章,属于Lua和C++交互的子篇章。总篇章地址:https://blog.csdn.net/qq826364410/article/details/88624824Lua调用C++类注册生成的Lua模块①新建创建对象函数,调用lua_newuserdata,创建一个对象指针,指向new出来的新的对象。②新建成员方法,调用lua_touserdata,得到从lua中传入的对象...原创 2019-03-19 16:39:36 · 3643 阅读 · 0 评论 -
Lua中的userdata
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 、指针和类)存储到 Lua 变量中调用。userdata分为两类,”full userdata”和”light userdata”。 full userdata light userdata 定义 ...原创 2019-03-20 11:03:08 · 4286 阅读 · 0 评论 -
3D图形学(5):BRDF经验模型和基于物理的BRDF模型
内容引自《Real Time Rendering 3rd》一、BRDF双向反射分布函数在计算机图形学中,BRDF(Bidirectional Reflectance Distribution Function,双向反射分布函数)是真实感图形学中最核心的概念之一,它描述的是入射光线经过某个表面反射后如何在各个出射方向上的分布。BRDF模型是绝大多数图形学算法中用于描述光反射现象的基本模型。...原创 2019-03-31 21:11:43 · 4814 阅读 · 0 评论 -
Lua和C++交互:在Lua中以面向对象的方式使用C++注册的类
这篇文章,属于Lua和C++交互的子篇章。总篇章地址:https://blog.csdn.net/qq826364410/article/details/88624824在Lua中以面向对象的方式使用C++注册的类Lua中面向对象的方式①新建创建对象函数,调用lua_newuserdata,创建一个对象指针,指向new出来的新的对象。得到注册成员方法时,创建的元表StudentClas...原创 2019-03-18 23:02:26 · 2124 阅读 · 1 评论 -
Androidstudio3.1.3和Unity互相调用
1.新建Android lib工程New->New Module2.选择Android Library3.输入package name 这个要和Unity的包名一致4.在新建的工程下如图位置new 一个 EmptyActivity 5.在android工程下的libs文件里添加unity的jar包Unity中jar有两个路径这个要取决于unity的打包方式在unity中playersetti...转载 2018-07-03 23:16:54 · 1217 阅读 · 0 评论 -
Unity Shader-法线贴图(Normal)及其原理
简介以前经常听说“模型不好看啊,怎么办啊?”答曰“加法线”,”做了个高模,准备烘一下法线贴图”,“有的美术特别屌,直接画法线贴图”.....法线贴图到底是个什么鬼,当年天真的我真的被这个图形学的奇淫杂技忽悠了,然而毕竟本人还算有点刨根问底的精神,决定研究一下法线贴图的原理以及Unity下的实现。本人才疏学浅,如有错误,欢迎指正。法线贴图是目前游戏开发中最常见的贴图之一。我们知道,一般情况下,模型面...转载 2018-07-07 18:31:50 · 789 阅读 · 0 评论 -
Jenkins定时构建
1.定时构建语法*号等同于H,表示任意一个合理的数* * * * *第一个*表示分钟,取值0~59,若其他值不做设定,则表示每个设定的分钟都会构建5 * * * * ,表示每个小时的第5分钟都会构建一次第二个*表示小时,取值0~23, 若其他值不做设定,则表示每个设定小时的每分钟都会构建* 5 * * * ,表示在每天5点的时候,一小时内每一分钟都会构建一次第三个*表示一个月的...原创 2018-10-23 14:51:54 · 433 阅读 · 1 评论 -
Top K问题的两种解决思路
Top K问题在数据分析中非常普遍的一个问题(在面试中也经常被问到),比如:从20亿个数字的文本中,找出最大的前100个。解决Top K问题有两种思路,最直观:小顶堆(大顶堆 -> 最小100个数); 较高效:Quick Select算法。LeetCode上有一个问题215. Kth Largest Element in an Array,类似于Top K问题。1. ...转载 2019-02-14 16:03:28 · 129 阅读 · 0 评论 -
AdrenoProfiler抓取游戏纹理和shader
转载:https://blog.csdn.net/woshixuhua/article/details/81711209我们在做项目时常被要求对标某个精品游戏,或是参考某个游戏的效果。还有些时候我们看到别人的做法很巧妙的时候;总忍不住要窥探一番。这时候AdrenoProfiler能帮上忙。安装这里关键是分两步:ADB和AdrenoProfiler。1. 安装ADB去安卓开发者官网htt...转载 2019-03-14 16:00:02 · 1053 阅读 · 3 评论 -
SnapdragonProfiler抓取游戏纹理和shader
转载:https://blog.csdn.net/woshixuhua/article/details/81711879前文说到过AdrenoProfiler经常会出现闪退和崩溃,接下来介绍高通的另一款产品SnapdragonProfiler作为替代。安装这里关键是分两步:ADB和SnapdragonProfiler。1. 安装ADB去安卓开发者官网https://developer....转载 2019-03-14 16:23:09 · 2015 阅读 · 0 评论 -
游戏开发完整学习路线
在软件开发中,游戏开发这个方向看起来目标很明确,但其实是个领域很广的方向,入门的时候如果得不到指点一二,很容易误入歧途,相反,如果走这条路之前能得到前人的一些指路,是可以事半功倍的。线路一:只使用游戏引擎对于第一条路线,游戏引擎的使用并不困难,因此适合想快速上手游戏开发工作的人。我们工作大多数时候也不会自己开发游戏引擎,所以这样对于一般的日常工作也没什么大碍。对于只使用游戏引擎的人来说,入...转载 2019-03-08 10:27:39 · 1816 阅读 · 1 评论 -
3D图形学(3):光照模型实现、阴影实现原理及ShadowCascade的实现原理
结合在Unity中的具体Shader实现光照模型。同时加入了Unity阴影的实现原理,ShadowCascade的实现原理。1. 光照模型1.1 Lambert漫反射:公式:入射光线的颜色和强度 * 材质的漫反射系数 * max(0,dot(法线方向,光照方向))缺点:在光照无法照到的地方,模型外观是全黑的,没有任何明暗变化。在背光面,max(0,法线向量和光照方向的点乘结果...原创 2019-03-15 11:05:38 · 3673 阅读 · 0 评论 -
3D图形学(2):GPU渲染管线与可编程着色器
内容引自《Real Time Rendering 3rd》渲染管线流程图其中:绿色的阶段都是完全可编程。 黄色的阶段可配置,但不编程。 蓝色的阶段完全固定。顶点着色器 Vertext Shader顶点着色器(The Vertex Shader)的功能于2001年首次在DirectX 8中引入。由于它是流水线上的第一个阶段,可选是在GPU还是CPU上实现。而在C...原创 2019-03-11 11:00:32 · 703 阅读 · 0 评论 -
3D图形学(1):图形渲染管线
内容引自《Real Time Rendering 3rd》1 图像渲染管线架构概述 Architecture渲染管线的主要功能就是决定在给定虚拟相机、三维物体、光源、照明模式,以及纹理等诸多条件的情况下,生成或绘制一幅二维图像的过程。对于实时渲染来说,渲染管线就是基础。因此,我们可以说,渲染管线是实时渲染的底层工具。图2.1展示了使用渲染管线步骤。渲染出的图像的位置、形状是由它们的几...原创 2019-03-11 11:20:13 · 1222 阅读 · 2 评论 -
3D图形学(4):纹理贴图
内容引自《Real Time Rendering 3rd》 在计算机图形学中,纹理贴图是使用图像、函数或其他数据源来改变物体表面外观的技术。例如,可以将一幅砖墙的彩色图像应用到一个多边形上,而不用对砖墙的几何形状进行精确表示。当观察这个多边形的时候,这张彩色图像就出现在多边形所在位置上。只要观察者不接近这面墙,就不会注意到其中几何细节的不足(比如其实砖块和砂浆的图像是显示在光滑的表...原创 2019-03-15 12:40:04 · 12212 阅读 · 3 评论 -
【最详细易懂】C++和Lua交互总结
一、Lua与C++的交互机制——Lua堆栈Lua和C++ 的交互机制的基础在于Lua提供了一个虚拟栈,C++ 和Lua之间的所有类型的数据交换都通过这个栈完成。无论何时C++想从Lua中调用一个值,被请求的值将会被压入栈,无论何时C++想要传递一个值给Lua,首先将整个值压栈,然后就可以在Lua中调用。Lua中,对虚拟栈提供正向索引和反向索引两种索引方式,区别是:正数索引1永远表示栈底,...原创 2019-03-17 22:06:34 · 7658 阅读 · 4 评论 -
游戏中的设计模式
使用设计模式来提高程序库的重复利用性是大型程序项目开发必须的。但是在“四人帮”的设计模式概述中提到了23种标准设计模式,不但难以记住,而且有些设计模式更多的适用于应用程序开发,对游戏开发并不是很适配。根据经验,精挑细选后,在这里记录一些自认为有利用价值的设计模式,以便之后自己设计时使用。一、观察者模式 Observer观察者的设计意图和作用是: 它将对象与对象之间创建一种依赖关系,...原创 2019-03-25 10:59:16 · 558 阅读 · 0 评论 -
UGUI合批源码分析及优化
1. 概述本文档对Unity GUI 批次合并(Batching)源码(基于Unity 4.6版本源码)进行研究,总结UGUI Batching的规则,并提供UI优化建议,以及UI层级显示辅助工具使用说明。2. UGUI Batching规则分析UGUI以Canvas为单位进行批次生成和渲染,Canvas可以嵌套包含Canvas。Batching的生成和合并在canvas::Update里...转载 2018-07-10 14:02:48 · 4981 阅读 · 2 评论