- 博客(43)
- 收藏
- 关注
原创 behaviac行为树总结
behaviac是游戏AI的开发框架组件,腾讯有提供源码。https://github.com/Tencent/behaviac 行为树由叶子节点和中间节点组成,从左到右依次是父子关系的节点:叶子节点主要是一些动作、条件和赋值等原子操作节点,包含了最基本的行为(如跑动、攻击等),当一个叶子节点被选择后,就会激活其对应的基本行为;中间节点主要是一些组合节点,代表逻辑...
2019-01-09 17:32:32
2659
原创 UnityShader优化
一、计算量优化 对不影响最终效果但仍在计算的删除; 尽量在脚本中计算然后传递给着色器,如果不可以的话尽量从像素着色器移动顶点着色器中计算。因为通常像素着色器执行的次数多于顶点着色器。二、Surface Shader Surface Shader方便用户快捷的处理照明,高效的产生底层的vertex和fragment shader。适合编写与光...
2019-01-09 17:10:35
442
原创 Unity资源管理(二)
之前在前面的Unity资源管理(一)中有讲过一些资源管理,现在系统的再补充一些一、资源读取方式1. Resources:支持编辑器模式和发布模式 ,缺点:Resources文件夹下的任何一点点修改,都会导致Resources包的重打。2. AssetDatabase :仅支持编辑器模式,缺点:正式发布版不能用,要用AssetBundle来替换。3. AssetBundle: 支持编...
2019-01-09 14:29:16
494
原创 Unity屏幕后处理
后处理:渲染完整个场景得到屏幕图像后,对这个图像进行操作。 过程:摄像中添加屏幕后处理脚本,OnRenderImage(RenderTexture src, RenderTexture dest)会将当前渲染的图像存储在src的纹理中,使用Graphics.Blit(RenderTexture src, RenderTexture dest, Material ...
2019-01-08 20:31:55
4602
原创 漫谈光照模型
简单点说,光照模型就是用一些数学公式模拟在真实环境下物体表面在光照下的颜色。这些模型包括但不限于之前讲过的Phong,Blinn-Phong(零基础学习OpenGL--光照和高级光照篇中介绍,二者区别主要在于镜面光照,Blinn-Phong测量的是法线与半程向量之间的夹角,而Phong模型测量的是视线与反射向量间的夹角。Blinn-Phong的镜面光分量会比冯氏模型更锐利一些)。...
2019-01-08 14:57:43
556
原创 Unity中的前向渲染路径和延迟渲染路径
渲染路径核心:光照处理。 Unity中光照:逐顶点、逐像素、球谐光照。 逐像素光照:按照每个像素的颜色被计算,看起来比较平滑;逐顶点光照:每个顶点上做光照,其他地方插值,效果粗糙。 但是逐像素光照中,每个光源会使每个光源光照范围内的物体增加一个渲染批次。延迟渲染可以解决逐像素光照对光源造成的性能影响。 延迟渲染:先不进行光照运算,对每个像素生...
2019-01-04 17:09:27
1387
原创 C#多线程编程
线程是轻量级进程。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。线程生命周期开始于 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。线程生命周期中的各种状态: 未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。 就绪状态:当线程准备好运行并等待 CPU 周期时的状况。 ...
2018-12-17 17:24:42
432
原创 Unity资源管理(一)
序:之前有接做过打包的工作,但是一直也没有整理下来,现在整理一下资源管理相关的顺便整理一下吧。Resources:Assets目录下面新建Resources文件夹,其中的所有资源,不论是否被场景用到,都会被打包到游戏中。资源加载方式:1.Resources.Load:加载Resources目录的一个asset2.Resources.LoadAsync:Resource...
2018-12-17 16:51:22
7298
原创 Unity基础和Unity Editor基础
一、MonoBehaviour 所有需要挂载到GameObject上面的脚本,都需要继承自MonoBehaviour,MonoBehaviour是Unity中所有脚本驱动的基类。MonoBehaviour有一些事件函数会在特定的时间被调用,Unity的MonoBehaviour脚本的生命周期示意图如下:1、FixedUpdate与Update的不同在于,Update在每帧被...
2018-12-12 15:00:31
16501
原创 C#语言基础篇
一、类型转换 在 C# 中,变量分为以下几种类型:值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 1.值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类...
2018-12-12 14:09:30
329
2
原创 深入了解 Unity 批处理
DrawCall是OpenGL中描述绘制次数的一个量,例如一个基本的OpenGL绘制流程是设置颜色、设置绘图方式、顶点坐标、绘制、结束。 目的:Unity3D使用了批处理来达到降低DrawCall的目的,批处理希望通过对物体网格的重组来获得更高的绘制效率。通俗点讲,多个物体合并成一个物体后,多个DrawCall就变成一个啦。 条件:Unity3D中批处...
2018-12-11 16:54:38
839
原创 Unity ShaderLab开发实战(五)边缘光RimColor
参考:https://blog.youkuaiyun.com/puppet_master/article/details/53548134RimColor:边缘发光效果。效果如下图(图片资源也是参考文章里的): 边缘很简单,法线和视线越垂直就是边缘,简单原理如下图: 那边缘发光效果就是希望在边缘处额外加一个光的效果。我们可以根据dot(N,V)来获得视线方向与法线...
2018-12-11 15:08:51
1263
原创 Unity ShaderLab开发实战(四)描边
之前可能在面剔除中提到过,面剔除可以用来实现描边效果。(以下效果图来自Unity3D ShaderLab开发实战详解) 原理:这是一个最简单的描边,使用面剔除:Cull指令,上图中 ,最左边的球使用的是Cull Front, 中间的使用Cull Back。最右边的球第一个Pass使用了Cull Front并且将球体沿法线挤出一点点,第二个Pass使用Cull Bac...
2018-12-10 17:25:17
2946
原创 OpenGL实战--基础
1.uniform变量 uniform变量是外部application程序传递给(vertex和fragment)shader的变量。在(vertex和fragment)shader程序内部,uniform变量就像是C语言里面的常量(const ),它不能被shader程序修改。 Opengl中可以设置三种类型的精度(lowp,medium 和 hi...
2018-12-10 11:45:14
443
转载 Adreno GPU Profiler 和 Snapdragon Profiler 实战(二)(转载)
  转载 https://www.youkuaiyun.com/article/a/2015-08-05/15826957Snapdragon Profiler是一款系统配置和调试工具,旨在帮助开发人员优化Snapdragon处理器驱动设备中的应用程序。这款工具通过三种数据捕获模式显示应用程序的CPU、GPU、DSP、内存、功率、网络连接和设备运行时的发热数据,从多个不同的...
2018-12-10 11:29:51
2421
原创 Adreno GPU Profiler 和 Snapdragon Profiler 实战(一)
OpenGL学过了,Unity的Shader也了解了一下,接下来在实战中看看还缺少什么。 这两款软件的下载地址:https://developer.qualcomm.com/download/software,需要注册个账号才可以下载的(免费注册)。下面安装的步骤会用电脑的应该都会。一、Adreno Profiler Adreno Profi...
2018-12-10 11:26:28
4591
原创 Unity ShaderLab开发实战(三)Pass的通用指令开关
1. LOD: 通过给SubShader设定一个整型的Level of DetaiI,即LOD数值,可以在运行时根据硬件设备能力来决定是否使用此Shader,以及使用哪一个层级的SubShader。用法eg: SubShader { LOD 600 Pass { } } 可以针对某一特定的Sha...
2018-12-06 16:59:39
3261
1
原创 Unity ShaderLab开发实战(二)渲染路径
渲染路径决定了光照如何应用在Shader中,需要为每个Pass指定要使用的渲染路径,这样光照计算才可以被正确进行。Unity--Edit--Project Setting--Player--Other Setting--Rendering Path里可以设置,也可以在相机的渲染路径设置中覆盖Project Setting中的设置。三种(前向渲染路径(Forward Rendering...
2018-12-05 17:42:54
343
原创 Unity ShaderLab开发实战(一)基础标签和关键字
注:此系列为<<Unity3d ShaderLab开发实战详解的读书笔记>>,作者郭浩瑜,人民邮电出版社,在这里感谢作者。 Unity使用自定义shaderLab来组织shader的内容。 SubShader:之所以用subshader,是为了能让开发者针对不同性能的显卡编写不同的shader,因为现实中并不是每个人都用相同的...
2018-12-04 20:02:39
855
原创 零基础学习OpenGL(十三)--阴影(二) 点光源阴影
上节我们学了如何使用阴影映射技术创建动态阴影,但它只适合定向光,因为阴影只是在单一定向光源下生成的。本节我们的焦点是在各种方向生成动态阴影。这个技术可以适用于点光源,生成所有方向上的阴影。 点光阴影,过去的名字是万向阴影贴图(omnidirectional shadow maps)技术。算法和定向阴影映射差不多:我们从光的透视图生成一个深度贴图,基于当前fragme...
2018-12-04 11:16:23
1676
原创 零基础学习OpenGL(十二)--阴影(一) 阴影映射
阴影是光线被阻挡的结果;当一个光源的光线由于其他物体的阻挡不能够达到一个物体的表面的时候,那么这个物体就在阴影中了。 阴影的实现: 阴影映射:我们以光的位置为视角进行渲染,我们能看到的东西都将被点亮,看不见的一定是在阴影之中了。我们希望得到射线第一次击中的那个物体,然后用这个最近点和射线上其他点进行对比。然后我们将测试一下看看射线上的其他点是否比最近点...
2018-12-03 13:55:24
610
原创 零基础学习OpenGL(十一)--Gamma校正
人眼对光的敏感度在不同亮度上是不一样的,人眼会对暗的区域变化更加敏感。如果用8位空间来存储像素,0-1区间可以表示256种亮度,但是我们不会一半表示暗的,一半表示亮的(即暗和亮都是128种颜色)。因为我们应该花更多的空间去存储暗的区域,换句话说,暗的需要被区分成更多种。 编码:当摄影设备储存照片时对像素进行编码,如果使用0.45的编码伽马对输入的亮度进行编码,那么0.5...
2018-12-03 10:49:09
381
原创 零基础学习OpenGL(十)--高级光照
之前有讲过冯氏光照模型,但他在镜面反射会在一些情况下出现问题,特别是物体反光度很低时,会导致大片(粗糙的)高光区域。 可以看到,在镜面高光区域的边缘出现了一道很明显的断层。出现这个问题的原因是观察向量和反射向量间的夹角不能大于90度。如果点积的结果为负数,镜面光分量会变为0.0。 当考虑漫反射光的时候,如果法线和光源夹角大于90度,光源会处于被照表...
2018-12-03 10:02:40
232
原创 零基础学习OpenGL(九)--抗锯齿
锯齿边缘(Jagged Edges)的产生和光栅器将顶点数据转化为片段的方式有关。这种现象被称之为走样(Aliasing)。有很多种抗锯齿(Anti-aliasing,也被称为反走样)的技术能够帮助我们缓解这种现象,从而产生更平滑边缘。 超采样抗锯齿(Super Sample Anti-aliasing, SSAA):使用比正常分辨率更高的分辨率(即超采样)来渲染场...
2018-11-30 16:19:05
243
原创 零基础学习OpenGL(八)--立方体贴图、天空盒、环境映射
立方体贴图 将多个纹理组合起来映射到一张纹理上的一种纹理类型:立方体贴图(Cube Map)。 立方体贴图:一个包含了6个2D纹理的纹理,每个2D纹理都组成了立方体的一个面:一个有纹理的立方体。之所以使...
2018-11-30 15:47:15
1767
原创 零基础学习OpenGL(七)--帧缓冲、后处理
用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲,也就是说我们能够定义我们自己的颜色缓冲,甚至是深度缓冲和模板缓冲。 我们目前所做的所有操作都是在默认帧缓冲的渲染缓冲上进行的。默认的帧缓冲是在你创建窗口的时候...
2018-11-29 20:22:16
1179
原创 零基础学习OpenGL(六)--面剔除
一个3D的图形,我们从任意方向同时可以看到的面数是少于图形的总面数的,如果看不到的面不执行着色,效率会大大提高。OpenGL能够检查所有面向观察者的面,并渲染它们,而丢弃那些背向的面,节省我们很多的片段着色器调用。OpenGL区分哪些是正向面哪些是背向面的方法是:分析顶点数据的环绕顺序。 当定义一组三角形顶点时,可以选择顺时针,也可以选择逆时针: ...
2018-11-29 16:30:47
180
原创 零基础学习OpenGL(五)--混合
OpenGL中,混合用来实现物体透明度。透明就是说一个物体的颜色是物体本身的颜色和它背后其它物体的颜色的不同强度结合。一个物体的透明度是通过它颜色的aplha值来决定的。 想加载有alpha值的纹理时,要在纹理生成过程中告诉OpenGL,我们的纹理现在使用alpha通道了: glTexImage2D(GL_TEXTURE_2D, 0, GL_RG...
2018-11-29 16:16:00
214
原创 零基础学习OpenGL(四)--模板测试
模板测试在深度测试之前。当片段着色器处理完一个片段后,模板测试会开始执行,被保留下来的才会进入深度测试。模板测试对应模板缓冲。 模板缓冲:每个模板值8位表示,这样每个片段就有2的8次方,256种模板值。因此可以利用这些不同的模板值,保留或丢弃某个片段。模板缓冲操作允许我们在渲染片段时将模板缓冲设定为一个特定的值。通过在渲染时修改模板缓冲的内容,写入模板缓冲。同一个渲染...
2018-11-27 17:27:35
319
原创 零基础学习OpenGL(三)--深度测试
深度缓冲:在每个片段中储存了信息,以16、24、32位float的形式储存它的深度值。(片段着色器运行之后,在屏幕空间中运行。) 当深度测试启用,OpenGL会将一个片段的深度值和深度缓冲的内容相比,如果测试通过,深度缓冲将更新为新的深度值;如果测试失败,片段丢弃。 启用深度测试: glEnable(GL_DEPT...
2018-11-27 15:30:38
217
转载 Unity Shader编程 (一)简单凹凸贴图和自选边缘颜色和强度的shader编写
代码转自: http://blog.youkuaiyun.com/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) Shader "浅墨Shader编程/0.TheFirstShader" { //-------------------------------【属性】-----------------------------------------...
2018-11-26 17:13:04
694
原创 零基础学习OpenGL(二)--材质、光照贴图
接上节: 我们给物体定义了一个材质的属性,这里包含了 环境光照(Ambient Lighting),漫反射光照(Diffuse Lighting),镜面光照(Specular Lighting)和反光度(Shininess)。 struct Material { vec3 ambi...
2018-11-26 16:18:06
296
原创 零基础学习OpenGL(一)--光照
序:今天开始主要写写OpenGL,顺带写写其他的Unity,C#,Shader,优化等。这个系列参考自https://learnopengl-cn.github.io,作者不详,系翻译了经典的OpenGL教程,讲的通俗易懂,大家可以参考一下。所以我也不知道该定义我的文章是转载还是原创还是翻译,因为文章里也有加自己的理解,不懂的欢迎大家来探讨。 定义: OpenGL:...
2018-11-23 15:47:01
308
原创 Unity光照系统,GI,光线追踪,LightMap,Enlighten,HDR等
GI:全局光照,指的是模拟光线是如何在场景中传播的算法。不仅会考虑直接光照的结果,还会计算光线被不同的物体表面反射产生的间接光照。 Unity使用的是预计算实时全局光照 : 实时(直接光照)+ 预计算(直接光照和间接光照) 模拟光照。(这里的实时指的就是物体移动光照效果也会变化。)实时光照没办法模拟光线的多次反射的效果,所以加了预计算光照。预计算光照效果就既有直...
2018-11-22 15:46:43
1863
原创 MatCap--用低廉的成本,达到类似PBR的渲染效果
序:上篇详细介绍了PBR(PBS),今天讲一下MatCap。PBR虽然渲染效果真实,但是性能要求较高。尤其是在移动平台,计算能力有限,采用MatCap思想的Shader,用较低的计算成本,就可以达到类似PBR一样真实的渲染效果,可谓是在移动平台实现次时代渲染效果的一种优秀解决方案。(上个星期买了行李架去装了一下,本来以为很简单,螺丝固定一下就好了,结果找店里的人装了一下午,而且还把车...
2018-11-20 16:54:33
1367
原创 零基础学习渲染--PBR(基于物理渲染)
序:说了几天的Unity,今天回到渲染吧,毕竟图形学才是我的最爱。 看到一个名字PBR,给人高大尚的感觉,下面我和大家一起扫雷,给不了解和想要了解的人学习学习。 PBR(Physicallly-Based-Rendering), 基于物理的渲染,有时也叫PBS(Physicallly-Based-Shading),(其实Unity自带的Stand...
2018-11-20 10:05:03
6194
1
原创 手游客户端的性能篇(三)----Unity和C#版(具体优化--UGUI,资源规范等)
接上篇:4、Enum:枚举当Key使用或枚举转换为String,都会有GC5、闭包:函数和与其相关的引用环境组合成的实体。闭包IL代码会出个新类,频繁调用一个函数时,尽量不用。6、其他 1>update中没必要每帧的。 2>不要常使用find,在start中缓存。 3>使用内建数值,比如Vector3.zero而不是new...
2018-11-14 11:00:09
460
原创 手游客户端的性能篇(二)----Unity和C#版之字符串拼接,Struct和Class的区别与应用
接着上篇文章:2、字符串拼接(简单,直接结论) 使用“a” + “b”在几次(10次以内吧)连接是不会产生gc的但是大量连接就会产生; 连接多的用StringBuilder,内部Buffer默认16,多的时候还会重新分配,也可指定值,也会有GC,但是当连接次数多时GC明显少于“+”。3、Struct和Class(顺便介绍一下C#中的Struct和Cla...
2018-11-13 17:44:16
601
原创 手游客户端的性能篇(一)----Unity和C#版之Foreach GC
序:昨天去了南京的汤山紫清湖温泉,安利一下,价格也不贵(不是打广告。。。不贴怎么订票之类的,有兴趣可以评论),还去见了多年未见的老友啊~不出意外的话下篇是手游客户端的性能篇(二)----Unity和C#版,想写优化和性能想写很久了,正好借机会总结一下。 先放一下2018年TX移动游戏技术评审标准:(摘自腾讯游戏学院) 1.foreach的...
2018-11-12 17:09:56
780
原创 NGUI和UGUI的区别
序:十分钟前还在想今天的知识总结点啥,偶然想起多年前某大厂有过这么一道面试题。我自己也是有过使用这两种UI使用经历的(说起来挺吓人的。。。一点不夸张,参与过的两个手游大ip的开发。。。一个用的NGUI, 一个用的UGUI),但你突然问我这个问题我也会好好思考一下,今天正好一起总结一下吧。下次你可以拿去吹牛bi,或者面试,都可以,再者也有利于深入对UI的了解。 据说UG...
2018-11-08 16:02:27
5971
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人