- 博客(153)
- 资源 (56)
- 收藏
- 关注
原创 「游戏引擎 浅入浅出」4.3 片段着色器
「游戏引擎 浅入浅出」从零编写游戏引擎教程,是一本开源电子书,PDF/随书代码/资源下载:https://github.com/ThisisGame/cpp-game-engine-book片段着色器(像素着色器)的功能就是:输出颜色。在上一节(顶点着色器)里介绍了,顶点着色器是并行的,当我们需要绘制3个顶点,GPU将3个顶点数据,分摊到3个GPU逻辑单元并行处理,每个GPU逻辑单元同时执行顶点着色器程序。片段着色器(像素着色器)也是并行的,不过执行的次数不是顶点个数,而是屏幕像素个数。举例绘制
2022-08-25 14:51:53
1305
原创 「游戏引擎 浅入浅出」4.1 Unity Shader和OpenGL Shader
「游戏引擎 浅入浅出」从零编写游戏引擎教程,是一本开源电子书,PDF/随书代码/资源下载:https://github.com/ThisisGame/cpp-game-engine-book4.1 Unity Shader和OpenGL Shader上一节提到,OpenGL Shader是配套出现的, Vertex Shader(顶点着色器)、Fragment Shader(片段着色器/像素着色器),两者缺一不可。但是我用了20年Unity都没有见过类似的代码,这是咋回事,Unity跳过OpenG
2022-07-27 12:27:03
1273
原创 「游戏引擎 浅入浅出」4. 着色器
着色器就是Shader,Shader就是一段GPU程序源码。我们大学就学过的C语言是CPU程序源码,Shader和C 语言有很多相似之处,也要写代码、编译、链接。通过下面的表格来做对照。C语言Shader目标硬件CPUGPU编译流程创建项目创建GPU程序创建多个代码文件创建Shader对象(顶点Shader和片...
2022-07-25 19:41:24
1047
原创 「游戏引擎 浅入浅出」1.1 Unity的组成
一个大型的软件,不可能每行代码都自己写,Unity这样一个大型的商用游戏引擎,也依赖特别多的开源库。
2022-05-31 00:19:32
548
原创 「游戏引擎 浅入浅出」项目介绍
「游戏引擎 浅入浅出」是一本开源电子书,Markdown、随书代码及资源下载: https://github.com/ThisisGame/cpp-game-engine-book 项目介绍 README本书以实际项目开发Timeline,完整介绍一个游戏引擎的所有模块,从最基础的OpenGL环境搭建,到骨骼动画、多线程渲染、阴影实现等等,最后实现一个完整的游戏引擎。章节内容 Chapter第 1 章介绍游戏引擎框架,以Unity为例,介绍游戏引擎组成。第 2 章介绍OpenGL开发环境搭建.
2022-04-13 01:20:38
3200
原创 「游戏引擎 浅入浅出」前言
「游戏引擎 浅入浅出」是一本开源电子书,Github地址: https://github.com/ThisisGame/cpp-game-engine-book为什么写这本书?在与同事沟通时,会提到如何使用Unity Profile做性能优化,对于内存、耗时大家都能理解到,打包图集、减少DrawCall这些都可以按照一定数值参考。但是对于内存为什么占用这么多,CPU使用率为什么会随着DrawCall数量上升而上升,大家又了解的比较少。12年末我大学实习进入手游公司,那个时候公司项目是自研引擎,做完项
2022-04-13 00:58:17
717
1
原创 「游戏引擎 浅入浅出」1. 游戏引擎框架介绍
1. 游戏引擎框架介绍「游戏引擎 浅入浅出」是一本开源电子书,Github地址: https://github.com/ThisisGame/cpp-game-engine-book 目前市面上的游戏引擎比较多,商用的有UE/Unity,开源的有OGRE/Cocos等。多年前,每个游戏公司都有自己的专有引擎,背靠优秀的引擎技术,可以将产品打磨的更加流畅,画面可以做的更加绚丽。例如13年网易 蜗牛等厂商进军手游,将一大票小型游戏公司压在脚下,又例如今腾讯做出的PUBGM/CODM等超大场景,无不依赖
2022-04-13 00:52:17
3329
原创 Failed to initialize Data Warehouse host process
Failed to initialize Data Warehouse host process在VS启动Profile时出现这个错误,要用管理员打开VS才行。如果设置为管理员无效,那么可以看下官方的一些回复。https://developercommunity.visualstudio.com/t/digonstic-tool-fails-unexpectedly/798631...
2022-01-12 12:14:48
953
原创 MultiThread SkinnedMeshRenderer原理及实现
最近在思考Unity AUP在OpenGLES里面的实现方式,原理就是OpenGL 多线程多Context状态共享,这个一时还没有比较完善的思路。不过我又想起另一件事,就是之前写的性能特别差的SkinnedMeshRenerer,性能特别差,主要有2方面的原因:从3dsMax导出文件时,有很多预计算没有做,全部放在代码中实时运算了。顶点坐标更新是单线程的。因为电脑上没有3dsmax2019了,所以第一点就先搁置。而这几天又在做多线程的工作,于是计划把第2点解决,即多线程SkinnedMeshRe
2021-02-13 00:14:44
756
原创 OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(二)
1.前言上一篇 OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(一) 介绍了使用Uniform数组实现GPU Instance的方法,但是由于Uniform变量数量有上限,所以这种方式受到很大限制。本篇介绍使用顶点缓冲区VBO的形式来实现GPU Instance,只要系统允许,可以绘制无限个实例。2.了解顶点缓冲区VBOVBO在之前的教程中介绍过了,请跳转 OpenGL ES 学习教程(五) 极速绘制,使用 VBO (顶点缓冲区对象)!3.使用V
2021-01-19 13:27:56
1274
原创 OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(一)
我们口中常说的Unity batch有2种形式,static/dynamic batch 和 GPU Instance。static/dynamic 都是在软件层面上对Mesh进行合并,而GPU Instance则是图形框架提供的功能,任何游戏引擎都可以实现上面2种形式的batch,这次我们就来探究下Unity GPU Instance的原理及实现。1.为什么要合并DrawCall?首先需要了解的是CPU与GPU交互,是CS架构的。我们口头上常说的一个DrawCall,指的是从指定GPU Pro
2021-01-16 16:29:20
2774
原创 RenderDoc[03] 还原粒子特效shader
对于未加密的ab,可以用对应版本的unity load出来。模型可以正常显示,但是粒子特效使用的是自制shader,所以显示为红色。这次的目标是还原粒子特效shader。最终还原效果如下图:1.查找对应shader代码选中粒子特效后,在属性面板可以看到shader名字。例如上图粒子特效,使用shader名为 Basic Additive。在RenderDoc中找到shader资源。来看动图2.创建shader在unity中新建Unlit shader。根据属性面板,添加对应Pro
2021-01-07 13:22:13
1249
原创 RenderDoc[02] 修改Shader,分析目标游戏阴影实现
1.背景继上一篇分析了目标游戏的一些实现后,在这几天的游玩中,我注意到游戏的阴影比较特殊 --物体之间没有遮挡产生阴影,阴影只显示在最底层背景之上。我的猜想:用深度贴图和背景图做混合。具体是怎样,来分析看看。2.目标借助RenderDoc的Shader分析修改功能,来分析目标游戏阴影实现。3.RenderDoc查看Shader在RenderDoc中截取一帧,这个操作,其实RenderDoc就把当前一帧所有命令都记录下来了,包括输入输出。在RenderDoc中查看一个Event,其实就是在重放
2020-12-28 18:42:32
2453
原创 RenderDoc[01] 使用RenderDoc 分析Android游戏(免Root)
1.背景这几天玩了一个美术表现不错的游戏,忍不住想扒点模型资源和效果。直接用UnityStudio解包拿到fbx。但是一起解压出来的三张贴图,一张普通贴图,一张法线,还有一张就难住我了。这个绿色的是什么用处的,在群里问了一圈小伙伴也表示不知道?没有什么头绪,那就只好用GPU分析软件来调试。上一次用GPU分析软件还是2年前了,用的是Mali的MGD,需要搭配Root的手机。现在手上只有一台自用红米Note8,没有Root,于是本次使用群大佬推荐的RenderDoc。RenderDoc之前我只
2020-12-25 11:34:00
13753
15
原创 Unity Animation Instancing 官方解决方案初试
Animation Instancing 是unity官方提出的高性能大规模动画解决方案,起初是为了解决企业用户的需求,后来在Github上开放。Github地址:https://github.com/Unity-Technologies/Animation-Instancing官方Blog地址:https://connect.unity.com/p/animation-instancing-gao-xing-neng-da-gui-mo-dong-hua-jie-jue-fang-an项
2020-11-18 01:19:05
4599
5
原创 Unity2019 Dots初试
主要参考Unity Connect上面的文章,原文链接:https://connect.unity.com/p/unityecs-yi按照文章,是创建 100x100 的立方体,以噪声作为Y轴值,进行波浪动作。测试环境Unity 2019.4.2f1 (64-bit)安装最新的Package测试结果原始组件模式:15-16fpsECS+JobSystem:60-70fpsECS+JobSystem+Burst:120-180fpsECS模式ECS是一种设计思想,和Unity之
2020-07-04 18:59:21
1630
原创 Unity使用顶点颜色 做混合 来实现SoftParticle 效果
简单的UV滚动 实现水面效果,在边缘处很生硬。使用SoftParticle 可以变得融合。但是手机上不能使用SoftParticle。可以采用刷入顶点颜色数据 作为Alpha 来源,在Shader中进行混合。边缘处的顶点,将顶点颜色 刷入透明。在Blender中操作。刷入之后,在shader中就可以取来作为Alpha了。修仙3...
2019-04-04 19:34:53
2449
原创 OpenGL ES 学习教程(十六) ShadowMap的理解
目前游戏上的阴影一般用ShadowMap实现。我一直在学习LearnOpenGL上的文章,ShadowMap这一篇,说实话我两年前就开始看了,一直没明白,或者说没有认真花时间去看。最近在给lives2d堆功能,终于也到了阴影的实现。LearnOpenGL上ShadowMap教程地址:http://learnopengl-cn.readthedocs.io/zh/latest/05%2...
2018-07-20 02:14:58
1053
原创 精度限定符很重要
今天早上写好了Diffuse光照,就开始编译到Android上。但是运行之后就是一片黑,查看logcat也没有错误日志。因为Win上面是好好的,故而猜测是不同的平台对GL处理上不同。于是最简单粗暴,一行一行把新加的Shader代码删除掉,最后定位到vec4 colorTexture=texture2D(m_texture,m_outUV);这行代码哪里有问题?最开始猜测难道texture2D这个函...
2018-05-27 14:58:08
587
原创 3dsmax 2019 插件开发要点
最近有个外包需求,模型那边使用max2019制作,所以我这边要对应编写max2019的导出插件。max2019的sdk使用和max2014上有一些不一样,下面的一些要点要注意。首先需要安装vs2017然后修改maxsdk\ProjectSettings\propertySheets\3dsmax.general.project.settings.props里面的winsdk 从 win10 修改到...
2018-05-20 14:27:03
4156
6
原创 利用Xcode GPU调试工具 找到渲染代码的BUG
这两天在做Lives2D 移植到IOS的工作,终于在23点完成了,这其中也碰到一些问题,记录一下。首先是图片显示不出来,显示为全黑。转自http://blog.youkuaiyun.com/huutu http://blog.youkuaiyun.com/huutu既然有显示全黑,而且坐标和尺寸都对,那顶点 数据应该是OK的。那就有以下2个地方可能出错。1:纹理采样出错2:GL设置出错1:纹理采样出错因为FreeImag
2017-12-31 23:36:16
4946
原创 MGD 调试 Lives2d 文字破碎问题 (MX2)
今天把FreeType加入到Lives2D中,在Win上表现正常,但是在Android上面,文字一闪而过,然后就糊掉了,猜测是Texture被损坏,于是计划用MGD来调试GLES查看具体问题。MGD需要Root手机,我手里的是魅族MX2,魅族的Flyme 首先需要在设置的个人中心里面开放权限,然后再安装KingRoot完全开启Root权限,其它Root软件是不行的。然后电脑连接手机,在MGD中安装
2017-10-22 00:56:01
1165
原创 Android GLES多线程处理
这几天在进行Lives2D的Android移植,lib的编译都OK,然后也简单的跑起来了,然后开始添加Android端的MediaPlayer来播放音效。MediaPlayer加入之后,问题就出现很多了,JNIEnv的存储、JMethod获取都是比较繁琐的事情,我对Android也不怎么熟悉,花了很多时间。但是测试发现,游戏各种崩溃。测试场景如上,一个按钮,点击就会调用JNI 来PlayAudio
2017-10-05 17:44:20
1376
原创 Profiler.BeginSample 在Release版本会执行吗?
为了在Profiler中 检测到具体是哪个 UIRect 的Update 会申请内存,在UIRect 的Update 里面调用了 Profiler 操作,并且传入的是 UIRect 的名字。在UWA的检测报告中,这里分配了很多堆内存,这是意料之中的事情,毕竟有大量的字符串拼接。转自http://blog.youkuaiyun.com/huutu http://www.liveslives.com但是问题是,R
2017-06-29 12:20:37
1638
原创 NGUI UILabel 文字破碎
项目使用NGUI,最近碰到 Loading界面的提示文字破碎的Bug。参考了以下文章http://blog.youkuaiyun.com/langresser_king/article/details/22095235转自http://blog.youkuaiyun.com/huutu http://www.liveslives.com下面先来了解一下为什么会出现这种问题。需要了解的是 NGUI的UILabel使用的是U
2017-03-13 18:33:14
2739
原创 自定义Mono,实现Unity Android平台代码更新
Unity是基于Mono的,我们写的代码都被编译成DLL,然后由Mono读取这个DLL并解析运行。在Mono眼里,DLL和普通的资源文件没什么区别。
2017-02-28 02:13:38
4439
原创 Unity 与 NGUI 坐标转换原理
在游戏中最常用到坐标转换的就是制作人物头顶的血条/名字 之类的显示,Unity提供了摄像机以下API供我们使用:1、将世界坐标转换到屏幕坐标Camera.WorldToScreenPoint()2、将屏幕坐标转换到世界坐标Camera.ScreenToWorldPoint()比如在游戏中的主角,我们知道他的世界坐标,通过场景摄像机,调用 WorldToScreenPoint 将坐标转换到屏幕坐标。
2017-01-24 01:21:02
2789
5
原创 OpenGL ES 学习教程(十五) 从 颜色缓冲区(FBO的颜色附着)中 读取颜色数据 保存到图片(FreeImage)
GL中提供读取像素数据的API glReadPixels,方便实现游戏中截屏功能。
2016-12-07 02:39:47
5491
1
原创 OpenGL ES 学习教程(十四) 帧缓冲区对象(FBO) 实现渲染到纹理(Render To Texture/RTT)
一般情况下,我们只需要系统提供的帧缓冲区作为绘图表面,但是又有些特殊情况,比如阴影贴图、动态反射、处理后特效等需要渲染到纹理(Render To Texture/RTT)操作的,如果使用系统提供的帧缓冲区,效率会比较低下。
2016-11-27 15:39:08
7969
原创 OpenGL ES 学习教程(十三) Stencil_TEST(模板缓冲测试)
模板缓冲测试,是指 将模版缓冲区中的值 与 一个参考值 进行比较,根据比较的结果,来对缓冲区中的值进行修改。进而决定该片段是否有效。在应用中的体现就比如:Unity中的Mask 。
2016-11-18 15:31:20
6192
原创 OpenGL ES 学习教程(十二) DEPTH_TEST(深度缓冲测试)
在OpenGL中,默认是没有开启深度检测的,也就是说,后绘制的物体覆盖先绘制的物体(颜色缓冲区中,先绘制的物体 被 后绘制的物体 覆盖)。
2016-11-03 00:46:25
8146
原创 Unity Shaders and Effects Cookbook (D-2) Cull Back背面剔除 -- 模型半边不可见
我们知道物体都有两面,一个立方体盒子,有外面和里面之分,对于我们游戏来说,玩家一般只能看到外面,里面其实是不需要的。所以默认Unity会开启背面剔除,把背对摄像机的面都剔除掉。
2016-09-21 22:41:44
4558
原创 Unity Shaders and Effects Cookbook (D-1) 设置 ZTest 来实现遮挡半透效果
在游戏里面经常看到这样的效果,英雄走到障碍物后面,但是我们能够透过障碍物看到英雄的身体,好像我们有了透视眼一般。
2016-07-31 01:18:16
2827
1
原创 UGUI 实现无限滚动
界面中大量使用了 Outline 以及界面复杂度较高,在邮件 等需要超长滚动列表的界面,就会十分卡顿。既然美术与策划同学不能妥协,那就来优化代码。按照滚动区域的属性,展示给玩家看的只是一小块区域,比如列表中有100封邮件,其实只要显示个七八封就够了,剩下的,在向上滑动的时候,把第一排移动到最后一排,替换内容。
2016-05-31 22:47:01
17111
9
原创 Unity Shaders and Effects Cookbook (7-3) 在地形中使用顶点颜色做混合
在地形中,原本我们应该要有一张图片存储 用来做混合的数据,但是多一张图就需要更多系统资源来处理。既然顶点数据中有color 数据,那么我们在做模型的时候可以把数据刷到顶点颜色中,就省了这一张图。
2016-05-13 00:14:14
7818
原创 Unity Shaders and Effects Cookbook (7-2) Surface Shader 中实现 顶点动画
使用顶点函数,我们可以访问网格中的每个顶点位置。这使我们在着色器运行的过程中可以动态的改变顶点位置。创造出丰富的效果。
2016-05-12 01:14:52
12012
1
原创 Unity Shaders and Effects Cookbook (7-1) 在Surface Shader 中 访问 顶点颜色
在OpenGL中,需要顶点着色器和片段着色器的支持才能进行正确的渲染,在顶点着色器中,每一帧 对 场景中物体的每个顶点都要执行一次处理。如果自己使用OpenGL,需要在C++ 代码读取模型数据,将顶点坐标、顶点颜色、UV坐标传递到顶点着色器中。所以在顶点着色器中 ,是可以对顶点数据进行修改的。
2016-05-11 01:19:34
8355
原创 Unity Shaders and Effects Cookbook (6-4) GUI 和 透明度
手机游戏越来越炫丽了,在各色游戏界面的背后离不开透明 的使用以及 渲染队列 控制。
2016-05-10 02:00:34
5354
原创 Unity Shaders and Effects Cookbook (6-3) 修改渲染队列Queue 来 修改渲染顺序
默认情况下,Unity是按照物体与 摄像机 的距离,来决定哪个物体先渲染。远处的物体先渲染,先渲染的物体,就会被都渲染的物体遮挡。但是有的时候,需要让远一点的物体 显示在 近一点的物体的上层,该怎么办?
2016-05-06 23:37:02
5399
原创 Unity Shaders and Effects Cookbook (6-2) 透明裁剪着色器
这一节学习透明裁剪着色器,效果类似于溶解,适合作为怪物死亡的效果。仍然是读取 RGB 通道值,赋值给 alpha,然后指定一个固定值作为标尺,如果 alpha < 标尺,就抛弃这个片段,也就是裁减掉不显示。
2016-05-06 14:47:18
5268
UGUI 屏幕适配 导致 BoxCollider无效 解决记录
2015-06-04
Unity3d调用Lua
2015-05-16
扩展Unity3d 组件方法,简化API使用 - C#特性之 Extension Method
2015-05-10
Unity3d 导入图片 自动修改Texture Type
2015-05-07
Unity3d游戏安装包 极限减少之 四分图、二分图 (NGUI向)
2015-04-14
Unity3d 性能优化 OnBecameVisible/OnBecameInvisible
2015-04-13
Ogre3d 之使用 Android NativeActivity
2015-03-28
Unity3d 人物换装之 一个Shader处理3张图片 减少DrawCall
2015-03-24
Unity3d 人物换装 之 Mesh 合并 (材质合并)
2015-03-23
Unity64 AStarPath 寻路失效 Bug解决 IOS64 IL2CPP - Bad date/time format in the zip file
2015-03-07
Unity3d 调用 C++ 函数 实现加密防破解 (Android向)
2015-02-07
OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(二)
2021-01-19
OpenGL ES 学习教程(十七) Unity GPU Instance 原理及 GLES 实现(一)
2021-01-16
使用Docker简化运维工作 星辉畅娱技术分享.pdf
2019-05-20
Lua 单例的实现
2015-11-04
使用Qt(mingw)编译FreeType为 .a 静态库
2015-08-26
Unity3d 在Inspector 中 设置添加回调函数
2015-07-16
LZMA C# SDK 子线程压缩与解压缩 Unity3d实例
2015-06-22
Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案
2015-06-20
Unity5 Assetbundle简单使用 及 打包Material文件超大的问题
2015-06-13
UGUI 实现Button长按效果(RepeatButton)
2015-06-10
慎用Outline ,UGUI Outline实现原理分析
2015-06-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人