自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

凯奥斯的注释

新作《注释的108种编写技巧》正在创作中……(误)

  • 博客(172)
  • 资源 (4)
  • 收藏
  • 关注

原创 转战知乎

凯奥斯的知乎主页

2018-10-08 12:12:34 1958

原创 Unity3D白皮书(四) Unity3D在渲染方面都帮我们做了什么?

未尽和错误之处欢迎打脸…… 1、顶点数据:包括顶点位置、顶点色、法线、uv等。这些数据从模型文件(例如FBX)中读取出来,组织成一个数据结构——Mesh,但最终渲染的时候还是从Mesh中将这些数据(可能会被更改)取出来传给GPU。 2、Vertex shader & Fragment shader:对Unity3D开发者来说是透明的。Unity3D开发者使用ShaderLab编写Unity

2018-01-17 20:58:00 2223 2

转载 理解矩阵,矩阵背后的现实意义

原文链接(排版稍作调整) http://www.360doc.com/content/14/0824/14/202378_404267225.shtml这是很早以前已经看过的,最近无意中又把保存的文章翻出来时,想起很多朋友问过矩阵,虽对矩阵似懂非懂,但却很想弄懂它,希望这几篇文章能帮你一下,故转之:线性代数课程,无论你从行列式入手还是直接从矩阵入手,从一开始就充斥着莫名其妙。比如说,在全

2018-01-15 16:28:19 7038 7

转载 Shader山下(三十)移动平台上的优化

以下摘录自《Unity 3D ShaderLab开发实战详解》,第34章。(2015年第2版) 本章的大部分内容都是从 Unity 的官方论坛和文档收集的,在此只是简单地分享给读者。移动平台的特点相对于 PC 来说,移动平台上不论是内存还是运算速度,都相差了至少一个数量级,而且移动平台一般使用的是电源电池,而不是插线板,因此,其最大负荷是有限的,这就使我们不得不考虑如何最大化地优化 Shader

2017-12-12 19:28:10 2333

转载 Shader山下(二十九)基于渲染路径的优化

以下摘录自《Unity 3D ShaderLab开发实战详解》,第33章。 VertexLit 渲染路径下的优化VertexLit 渲染路径的特点虽然读者一般不会使用 VertexLit 渲染路径,但是,如果你觉得这是一个适合你项目的渲染路径,那么需要知道:在 VertextLit 渲染路径下,所有的光源数据都存放于 unity_LightPosition[] 和 unity_LightColor[

2017-12-12 18:30:58 756

转载 Shader山下(二十八) 切空间

以下摘录自《Unity 3D ShaderLab开发实战详解》,18.1。如果要理解法线贴图的用法,就要知道Tangent Space,即切空间。什么是切空间?想象一下这样一个假设的情形:“2013年2月14日,上帝创造完世界之后,没错,他刚刚把世界造好,然后他让全世界70亿人民全体力争,昂首挺胸,双脚着地,头朝上,面朝南,报告一下此时太阳的方位。”我可以肯定地告诉各位读者,会有70亿个不同的答案。

2017-12-11 15:58:49 2762 1

原创 Shader山下(二十七)平面阴影

以下摘录自《Unity 3D ShaderLab开发实战详解》,第10章。 转注:这是一个非常简单且廉价的实时假阴影,比较常用到,据我所知,王者荣耀中就使用了类似的手法。缺点就是比较假,只能投射到平面上,不能应对地面的凹凸,最明显的问题就是会插到墙里去。

2017-12-09 11:56:31 1334 1

转载 Unity3D开发小贴士(十八)各种事件的执行顺序

Unity3D各种事件的执行顺序

2017-12-08 12:49:53 655

转载 Shader山下(二十六)Forward渲染路径中的灯光信息

以下摘录自《Unity 3D ShaderLab开发实战详解》,7.7.1-7.7.2。

2017-12-07 20:59:51 844

转载 Shader山下(二十五)顶点照明中的灯光信息

以下摘录自《Unity 3D ShaderLab开发实战详解》,6.4.7-6.4.8。顺便吐槽自己:时隔一年多之后的更新。

2017-12-07 20:01:00 674

原创 Lua源码揭秘(五)绑定Lua之前你需要知道的

lapi.c和lauxlib.c里包含了大部分的lua的capi。所谓capi是指在c形式的api接口,可以在c/c++/c#/…中可以调用到的api,但是lua中并不一定有对应的方法。ldebug.c里有一些调试用的capi(后续文章会介绍)。另外一些capi,便是打开lua库函数的capi,在lualib.h里集中声明。lapi.c基础的capi。state相关lua_checkstatck检查

2017-12-02 13:21:48 4575

原创 浅入浅出LuaJIT

JIT什么是JITJIT = Just In Time即时编译,是动态编译的一种形式,是一种优化虚拟机运行的技术。 程序运行通常有两种方式,一种是静态编译,一种是动态解释,即时编译混合了这二者。Java和.Net/mono中都使用了这种技术。 然而IOS中禁止使用(不是针对JIT,而是所有的动态编译都不支持)!为什么要使用JIT解释执行:效率低。代码暴露。静态编译:不够灵活,无法热更新。

2017-11-25 10:18:06 22321

原创 Lua源码揭秘(四)一个不算难的string库扩展

前两篇Lua源码揭秘(二)一个简单的数学扩展库函数Lua源码揭秘(三)一个比较简单的table库扩展分别对math库和table库进行了扩展,本篇就继续扩展一下string库。 我们直接打开lstrlib.c(再次强调:在实际工作中的标准做法是在宿主语言中实现)。 添加以下代码:static int str_split(lua_State *L){ size_t l1 = 0;

2017-11-06 18:48:12 965

翻译 Peeking inside LuaJIT(窥探LuaJIT)

原文链接:https://pwparchive.wordpress.com/2012/10/16/peeking-inside-luajit/ LuaJIT is a high-performance virtual machine for Lua. I’ve recently started playing with it and this blog post talks about what

2017-11-01 13:57:58 1921

原创 Lua源码揭秘(三)一个比较简单的table库扩展

有了上一篇 Lua源码揭秘(二)一个简单的数学扩展库函数的经验之后,我们尝试写稍微复杂一点的库函数。 我们直接打开ltablib.c(再次强调:在实际工作中的标准做法是在宿主语言中实现)。 添加以下代码:static in values(lua_State *L){ luaL_checktype(L, 1, LUA_TTABLE); lua_newtable(L);

2017-10-30 21:12:39 1487

转载 Unity2D:Sprite和UI Image的区别

原文链接http://blog.csdn.net/zhaoguanghui2012/article/details/54089355Unity3D最初是一个3D游戏引擎,而从4.3开始,系统加入了Sprite组件,Unity也终于有了2D游戏开发的官方解决方案。4.6更是增加了新的UI系统uGUI,使得使用Unity开发2D游戏效率非常高。那么对于从事2D游戏开发的同学来说,想必都曾经遇到过2D元

2017-10-30 10:02:25 2979

原创 Lua源码揭秘(二)一个简单的数学扩展库函数

之前遇到过一个问题,在我们的游戏中大量使用了atan方法,但是atan的方法太费了,所以我们使用了泰勒展开式来求一个近似值。 arctan的泰勒展开式为: arctan(x)=x−13x3+15x5−17x7⋯+(−1)n−12n−1x2n−1arctan(x)=x-\frac{1}{3}x^3+\frac{1}{5}x^5-\frac{1}{7}x^7\cdots+\frac{{(-1)}^{

2017-10-28 17:05:21 1275

原创 Lua源码揭秘(一)概述

由于工作原因,需要撸一波lua源码。相关的文章有很多,其中就有云风未完成的《Lua源码鉴赏》,以及《Lua GC 的源码剖析》,也是我阅读源码过程中的重要参考。“纸上得来终觉浅,绝知此事要躬行”,于是开一个专栏,专门记录此间的心得。 lua版本是5.1.5,(⊙o⊙)…我们项目里实际上使用的是luajit-2.1(⊙o⊙)…莫名的觉得在读luajit之前应当先读一下对应的原生lua版本,于是就走上

2017-10-28 15:33:32 2563

原创 土圭垚㙓数学课(四)空间变换

我曾经在Shader山下(十六)坐标空间与转换矩阵中介绍过,一个物体要显示在平面上,需要经过四步空间变换(实际上是五步): 物体空间->世界空间->观察空间->裁剪空间(->归一化设备空间)->屏幕空间 (差不多就是这个意思) 实际上,在可编程渲染管线中,我们往往只需要操作从物体空间到裁剪空间的转换,可以用一个矩阵链乘M(odel)V(iew)P(rojection)表示。本文就介绍一下

2017-10-09 14:42:53 4893

翻译 决策树vs行为树

原贴地址https://gamedev.stackexchange.com/questions/51693/decision-tree-vs-behavior-tree(可能需要翻墙)The two are pretty different. The real indicator is in the names. Decision trees are just for making decisio

2017-09-22 12:40:34 12638

转载 luajit官方性能优化指南和注解

luajit是目前最快的脚本语言之一,不过深入使用就很快会发现,要把这个语言用到像宣称那样高性能,并不是那么容易。实际使用的时候往往会发现,刚开始写的一些小test case性能非常好,经常毫秒级就算完,可是代码复杂度一上去了,动辄几十上百毫秒的情况就会出现,性能表现非常飘忽。为此luajit的mailling list也是有不少人咨询,作者mike pall的一篇比较完整的回答被放在了官方wiki上: http://wiki.luajit.org/Numerical-Computing-Perfor

2017-09-15 10:45:48 1197

原创 Lua语法小贴士(十六)pairs和next

今天看到一个帖子,是关于lua优化的,上面说清空一个表的时候,pairs的效率是next的500倍。我记得for pairs循环实际上就是调用的就是next,还特意查了源码,应证了我的记忆。源码就不贴了,直接给结论。

2017-09-14 12:10:29 5367 1

原创 土圭垚㙓数学课(三)四元数

何为四元数?讲解四元数的文章往往会把四元数跟复数联系在一起。诚然,四元数的起源跟复数有关系,但是理解复数系统并不是理解四元数的必要条件。提到四元数,我们首先要提到一个人——莱昂哈德·欧拉(Leonhard Euler),根据欧拉旋转定理(wiki),在三维空间里,假设一个刚体在做一个位移的时候,刚体内部至少有一点固定不动,则此位移等价于一个绕着包含那固定点的固定轴的旋转。还有另外一种阐述:3D中的任意角位移都能表示为绕单一轴的单一旋转。

2017-09-11 20:57:34 3169

原创 Lua语法小贴士(十五)upvalue

我们都知道,Lua里面的function实际上都是闭包(closure),而upvalue便是它引用到的上下文变量(“引用到”三个字很关键),业界一般又称为外部局部变量(external local variable),如果要翻译的话,个人偏好翻译为“上文变量”。

2017-09-08 11:29:05 2988

原创 土圭垚㙓数学课(二)视锥体八个顶点的计算方法

视锥体是摄像机可见的空间,看上去像截掉顶部的金字塔。视锥体由6个裁剪面围成,构成视锥体的4个侧面称为上左下右面,分别对应屏幕的四个边界。为了防止物体离摄像机过近,设置近切面,同时为了防止物体离摄像机太远而不可见,设置远切面。本文将介绍一下视锥体八个顶点的计算方法。

2017-09-07 21:02:49 4059 1

原创 土圭垚㙓数学课(一)万向锁(Gimbal Lock)

何为万向锁,我们先抛弃掉那些理论,直接举个栗子。以你自身为对象。首先,原地旋转为第一个维度,也就是heading。其次,正翻跟头为第二个维度,也就是pitch。然后,侧翻跟头为第三个维度,也就是bank。这就是欧拉角的三个旋转维度,这三个是有顺序的,首先是原地旋转,然后是正翻跟头,最后是侧翻跟头。当然这些都是没有位移的。假设你一开始是朝北站立,这就是你:

2017-09-06 09:52:33 3224

原创 Unity3D白皮书(三)MeshRenderer设置

Unity3D白皮书(一)模型导入设置这边博文中,我们介绍了模型的导入设置。那么当模型导入之后,我们不可避免的要接触到的组件之一便是MeshRenderer。那么本文将介绍MeshRenderer的相关设置。

2017-08-26 17:18:24 12497

原创 C#性能优化黑科技(二)【反射】批量实例化对象的快速方法

在实际开发中,我们有时候会遇到这样的问题,我们知道某一个类的Type,如何实例化这个对象?答案很简单:object obj = Activator.CreateInstance(type);但是如果是需要批量实例化对象(例如读取自定义格式的配置文件),这种方法在效率和GC上都不太理想。(Mono2.0)我注意到System.Object有一个方法,叫做MemberwiseClone

2017-08-24 17:50:12 4906

原创 C#性能优化黑科技(一)【反射】修改属性的快速方法

当我们在撸码的时候,不可避免的要使用反射来修改属性的值。我们都知道这种反射是太阳一般的慢,如果属性类型是值类型,那么就会因为装箱拆箱产生额外的GC(垃圾回收)。那么加快速度并减少GC呢,本文将介绍一个名为“CreateDelegate”的黑科技。

2017-08-20 12:50:34 6519 2

原创 Unity3D白皮书(二)纹理导入设置

Unity3D中,纹理占据着很重要的位置,包括模型的贴图,UI的精灵等都需要使用纹理。而如何导入纹理,该怎样设置,变成了一个很重要的问题。前一篇Unity3D白皮书(一)模型导入设置介绍了Unity3D中的模型导入设置,本文继续介绍U3D中纹理的导入设置。

2017-08-07 14:12:28 6938 2

原创 Unity3D白皮书(一)模型导入设置

在研究一个东西的时候,我们首先要问三个问题?What?什么是导入设置?我们可以在资源文件的Inspector界面看到这个文件的相关设置,导入设置本质上是AssetImporter或其衍生类。Why?为什么我们要使用导入设置?我们导入的资源大部分是由第三方软件生成的,而这些资源需要指定一些参数或者附加一些信息才能被U3D使用或者更好的使用。How?导入设置是如何产生效果的?

2017-08-03 13:31:47 15736

原创 Newtonsoft.Json很给力

如题,比Unity的JsonUtility和MiniJson都给力。支持属性,支持泛型(Generic)集合(Collection)。github地址https://github.com/JamesNK/Newtonsoft.Json

2017-06-07 12:20:10 2087

原创 Unity3D开发小贴士(十六)SVN插件

这是针对Windows下的TortoiseSVN的插件,其他平台或软件的插件,以后可能会补上(也可能不补,看缘分吧)。using UnityEngine;using System.Diagnostics;using UnityEditor;#if UNITY_EDITOR_WINpublic static class TortoiseSVN{ const string S

2017-05-27 14:11:02 1438

原创 DotNet源码解读(一)Dictionary

先放源码,解读稍后补上核心数据结构 private struct Entry { public int hashCode; // Lower 31 bits of hash code, -1 if unused public int next; // Index of next ent

2017-05-11 08:53:15 882

转载 Unity 几种优化建议

原文地址:http://www.narkii.com/club/thread-327263-1.html最简单的优化建议:1.PC平台的话保持场景中显示的顶点数少于200K~3M,移动设备的话少于10W,一切取决于你的目标GPU与CPU。2.如果你用U3D自带的SHADER,在表现不差的情况下选择Mobile或Unlit目录下的。它们更高效。3.尽可能共用材质。4.

2017-05-09 21:16:11 843 2

转载 C#开发中的垃圾回收机制简析

GC的前世与今生虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久。早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现。Lisp的程序员认为内存管理太重要了,所以不能由程序员自己来管理。但后来的日子里Lisp却没有成气候,采用内存手动管理的语言占据了上风,以C为代表。出于同样的理由,不同的人却又

2017-05-04 21:39:26 992

原创 Unity3D开发小贴士(十五)状态机组件

在Unity3D中,我们除了可以为GameObject添加组建,还可以为AnimatorController中的状态添加组建。这样我们就可以在状态(机)的不同阶段内执行不同的操作。

2016-12-19 08:19:08 1641

原创 C#语法小知识(二十四)自定义类型转换

C#使用implicit和explicit来自定义类型转换运算符。

2016-11-30 22:48:45 1045

原创 C#语法小知识(二十三)重载运算符

C#里使用Operator关键字定义静态方法来重载运算符。

2016-11-29 22:49:23 2616

原创 Unity3D开发小贴士(十四)JsonUtility

Json是现在非常常用的数据格式,因为.Net的版本问题,所有没有很方便的方法可以直接在Unity里面使用C#官方的Json库,于是Unity3D自己提供了自己的一套Json工具——JsonUtility。

2016-11-28 22:10:23 8670

BunnyLOD demo

A Simple, Fast, and Effective Polygon Reduction Algorithm

2018-10-18

Unity3D合并Mesh

在Unity3D里合并Mesh,参考博客http://blog.csdn.net/ecidevilin/article/details/52490960

2016-09-12

绘制圆形/圆环/扇形/扇面Mesh

在Unity3D里绘制圆形/圆环/扇形/扇面Mesh

2016-09-07

三角形Mesh绘制

在Unity3D里绘制一个简单的三角形Mesh

2016-09-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除