- 博客(172)
- 资源 (4)
- 收藏
- 关注
原创 Unity3D白皮书(四) Unity3D在渲染方面都帮我们做了什么?
未尽和错误之处欢迎打脸…… 1、顶点数据:包括顶点位置、顶点色、法线、uv等。这些数据从模型文件(例如FBX)中读取出来,组织成一个数据结构——Mesh,但最终渲染的时候还是从Mesh中将这些数据(可能会被更改)取出来传给GPU。 2、Vertex shader & Fragment shader:对Unity3D开发者来说是透明的。Unity3D开发者使用ShaderLab编写Unity
2018-01-17 20:58:00
2357
转载 理解矩阵,矩阵背后的现实意义
原文链接(排版稍作调整) http://www.360doc.com/content/14/0824/14/202378_404267225.shtml这是很早以前已经看过的,最近无意中又把保存的文章翻出来时,想起很多朋友问过矩阵,虽对矩阵似懂非懂,但却很想弄懂它,希望这几篇文章能帮你一下,故转之:线性代数课程,无论你从行列式入手还是直接从矩阵入手,从一开始就充斥着莫名其妙。比如说,在全
2018-01-15 16:28:19
7609
7
转载 Shader山下(三十)移动平台上的优化
以下摘录自《Unity 3D ShaderLab开发实战详解》,第34章。(2015年第2版) 本章的大部分内容都是从 Unity 的官方论坛和文档收集的,在此只是简单地分享给读者。移动平台的特点相对于 PC 来说,移动平台上不论是内存还是运算速度,都相差了至少一个数量级,而且移动平台一般使用的是电源电池,而不是插线板,因此,其最大负荷是有限的,这就使我们不得不考虑如何最大化地优化 Shader
2017-12-12 19:28:10
2445
转载 Shader山下(二十九)基于渲染路径的优化
以下摘录自《Unity 3D ShaderLab开发实战详解》,第33章。 VertexLit 渲染路径下的优化VertexLit 渲染路径的特点虽然读者一般不会使用 VertexLit 渲染路径,但是,如果你觉得这是一个适合你项目的渲染路径,那么需要知道:在 VertextLit 渲染路径下,所有的光源数据都存放于 unity_LightPosition[] 和 unity_LightColor[
2017-12-12 18:30:58
808
转载 Shader山下(二十八) 切空间
以下摘录自《Unity 3D ShaderLab开发实战详解》,18.1。如果要理解法线贴图的用法,就要知道Tangent Space,即切空间。什么是切空间?想象一下这样一个假设的情形:“2013年2月14日,上帝创造完世界之后,没错,他刚刚把世界造好,然后他让全世界70亿人民全体力争,昂首挺胸,双脚着地,头朝上,面朝南,报告一下此时太阳的方位。”我可以肯定地告诉各位读者,会有70亿个不同的答案。
2017-12-11 15:58:49
2926
1
原创 Shader山下(二十七)平面阴影
以下摘录自《Unity 3D ShaderLab开发实战详解》,第10章。 转注:这是一个非常简单且廉价的实时假阴影,比较常用到,据我所知,王者荣耀中就使用了类似的手法。缺点就是比较假,只能投射到平面上,不能应对地面的凹凸,最明显的问题就是会插到墙里去。
2017-12-09 11:56:31
1416
1
转载 Shader山下(二十六)Forward渲染路径中的灯光信息
以下摘录自《Unity 3D ShaderLab开发实战详解》,7.7.1-7.7.2。
2017-12-07 20:59:51
916
转载 Shader山下(二十五)顶点照明中的灯光信息
以下摘录自《Unity 3D ShaderLab开发实战详解》,6.4.7-6.4.8。顺便吐槽自己:时隔一年多之后的更新。
2017-12-07 20:01:00
761
原创 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
4737
原创 浅入浅出LuaJIT
JIT什么是JITJIT = Just In Time即时编译,是动态编译的一种形式,是一种优化虚拟机运行的技术。 程序运行通常有两种方式,一种是静态编译,一种是动态解释,即时编译混合了这二者。Java和.Net/mono中都使用了这种技术。 然而IOS中禁止使用(不是针对JIT,而是所有的动态编译都不支持)!为什么要使用JIT解释执行:效率低。代码暴露。静态编译:不够灵活,无法热更新。
2017-11-25 10:18:06
22669
原创 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
1052
翻译 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
2041
原创 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
1590
转载 Unity2D:Sprite和UI Image的区别
原文链接http://blog.youkuaiyun.com/zhaoguanghui2012/article/details/54089355Unity3D最初是一个3D游戏引擎,而从4.3开始,系统加入了Sprite组件,Unity也终于有了2D游戏开发的官方解决方案。4.6更是增加了新的UI系统uGUI,使得使用Unity开发2D游戏效率非常高。那么对于从事2D游戏开发的同学来说,想必都曾经遇到过2D元
2017-10-30 10:02:25
3311
原创 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
1365
原创 Lua源码揭秘(一)概述
由于工作原因,需要撸一波lua源码。相关的文章有很多,其中就有云风未完成的《Lua源码鉴赏》,以及《Lua GC 的源码剖析》,也是我阅读源码过程中的重要参考。“纸上得来终觉浅,绝知此事要躬行”,于是开一个专栏,专门记录此间的心得。 lua版本是5.1.5,(⊙o⊙)…我们项目里实际上使用的是luajit-2.1(⊙o⊙)…莫名的觉得在读luajit之前应当先读一下对应的原生lua版本,于是就走上
2017-10-28 15:33:32
2660
原创 土圭垚㙓数学课(四)空间变换
我曾经在Shader山下(十六)坐标空间与转换矩阵中介绍过,一个物体要显示在平面上,需要经过四步空间变换(实际上是五步): 物体空间->世界空间->观察空间->裁剪空间(->归一化设备空间)->屏幕空间 (差不多就是这个意思) 实际上,在可编程渲染管线中,我们往往只需要操作从物体空间到裁剪空间的转换,可以用一个矩阵链乘M(odel)V(iew)P(rojection)表示。本文就介绍一下
2017-10-09 14:42:53
5045
翻译 决策树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
13300
转载 luajit官方性能优化指南和注解
luajit是目前最快的脚本语言之一,不过深入使用就很快会发现,要把这个语言用到像宣称那样高性能,并不是那么容易。实际使用的时候往往会发现,刚开始写的一些小test case性能非常好,经常毫秒级就算完,可是代码复杂度一上去了,动辄几十上百毫秒的情况就会出现,性能表现非常飘忽。为此luajit的mailling list也是有不少人咨询,作者mike pall的一篇比较完整的回答被放在了官方wiki上: http://wiki.luajit.org/Numerical-Computing-Perfor
2017-09-15 10:45:48
1280
原创 Lua语法小贴士(十六)pairs和next
今天看到一个帖子,是关于lua优化的,上面说清空一个表的时候,pairs的效率是next的500倍。我记得for pairs循环实际上就是调用的就是next,还特意查了源码,应证了我的记忆。源码就不贴了,直接给结论。
2017-09-14 12:10:29
5583
1
原创 土圭垚㙓数学课(三)四元数
何为四元数?讲解四元数的文章往往会把四元数跟复数联系在一起。诚然,四元数的起源跟复数有关系,但是理解复数系统并不是理解四元数的必要条件。提到四元数,我们首先要提到一个人——莱昂哈德·欧拉(Leonhard Euler),根据欧拉旋转定理(wiki),在三维空间里,假设一个刚体在做一个位移的时候,刚体内部至少有一点固定不动,则此位移等价于一个绕着包含那固定点的固定轴的旋转。还有另外一种阐述:3D中的任意角位移都能表示为绕单一轴的单一旋转。
2017-09-11 20:57:34
3327
原创 Lua语法小贴士(十五)upvalue
我们都知道,Lua里面的function实际上都是闭包(closure),而upvalue便是它引用到的上下文变量(“引用到”三个字很关键),业界一般又称为外部局部变量(external local variable),如果要翻译的话,个人偏好翻译为“上文变量”。
2017-09-08 11:29:05
3286
原创 土圭垚㙓数学课(二)视锥体八个顶点的计算方法
视锥体是摄像机可见的空间,看上去像截掉顶部的金字塔。视锥体由6个裁剪面围成,构成视锥体的4个侧面称为上左下右面,分别对应屏幕的四个边界。为了防止物体离摄像机过近,设置近切面,同时为了防止物体离摄像机太远而不可见,设置远切面。本文将介绍一下视锥体八个顶点的计算方法。
2017-09-07 21:02:49
4267
1
原创 土圭垚㙓数学课(一)万向锁(Gimbal Lock)
何为万向锁,我们先抛弃掉那些理论,直接举个栗子。以你自身为对象。首先,原地旋转为第一个维度,也就是heading。其次,正翻跟头为第二个维度,也就是pitch。然后,侧翻跟头为第三个维度,也就是bank。这就是欧拉角的三个旋转维度,这三个是有顺序的,首先是原地旋转,然后是正翻跟头,最后是侧翻跟头。当然这些都是没有位移的。假设你一开始是朝北站立,这就是你:
2017-09-06 09:52:33
3327
原创 Unity3D白皮书(三)MeshRenderer设置
Unity3D白皮书(一)模型导入设置这边博文中,我们介绍了模型的导入设置。那么当模型导入之后,我们不可避免的要接触到的组件之一便是MeshRenderer。那么本文将介绍MeshRenderer的相关设置。
2017-08-26 17:18:24
12704
原创 C#性能优化黑科技(二)【反射】批量实例化对象的快速方法
在实际开发中,我们有时候会遇到这样的问题,我们知道某一个类的Type,如何实例化这个对象?答案很简单:object obj = Activator.CreateInstance(type);但是如果是需要批量实例化对象(例如读取自定义格式的配置文件),这种方法在效率和GC上都不太理想。(Mono2.0)我注意到System.Object有一个方法,叫做MemberwiseClone
2017-08-24 17:50:12
5091
原创 C#性能优化黑科技(一)【反射】修改属性的快速方法
当我们在撸码的时候,不可避免的要使用反射来修改属性的值。我们都知道这种反射是太阳一般的慢,如果属性类型是值类型,那么就会因为装箱拆箱产生额外的GC(垃圾回收)。那么加快速度并减少GC呢,本文将介绍一个名为“CreateDelegate”的黑科技。
2017-08-20 12:50:34
6673
1
原创 Unity3D白皮书(二)纹理导入设置
Unity3D中,纹理占据着很重要的位置,包括模型的贴图,UI的精灵等都需要使用纹理。而如何导入纹理,该怎样设置,变成了一个很重要的问题。前一篇Unity3D白皮书(一)模型导入设置介绍了Unity3D中的模型导入设置,本文继续介绍U3D中纹理的导入设置。
2017-08-07 14:12:28
7113
1
原创 Unity3D白皮书(一)模型导入设置
在研究一个东西的时候,我们首先要问三个问题?What?什么是导入设置?我们可以在资源文件的Inspector界面看到这个文件的相关设置,导入设置本质上是AssetImporter或其衍生类。Why?为什么我们要使用导入设置?我们导入的资源大部分是由第三方软件生成的,而这些资源需要指定一些参数或者附加一些信息才能被U3D使用或者更好的使用。How?导入设置是如何产生效果的?
2017-08-03 13:31:47
15934
原创 Newtonsoft.Json很给力
如题,比Unity的JsonUtility和MiniJson都给力。支持属性,支持泛型(Generic)集合(Collection)。github地址https://github.com/JamesNK/Newtonsoft.Json
2017-06-07 12:20:10
2145
原创 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
1494
原创 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
923
转载 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
892
转载 C#开发中的垃圾回收机制简析
GC的前世与今生虽然本文是以.NET作为目标来讲述GC,但是GC的概念并非才诞生不久。早在1958年,由鼎鼎大名的图林奖得主John McCarthy所实现的Lisp语言就已经提供了GC的功能,这是GC的第一次出现。Lisp的程序员认为内存管理太重要了,所以不能由程序员自己来管理。但后来的日子里Lisp却没有成气候,采用内存手动管理的语言占据了上风,以C为代表。出于同样的理由,不同的人却又
2017-05-04 21:39:26
1056
原创 Unity3D开发小贴士(十五)状态机组件
在Unity3D中,我们除了可以为GameObject添加组建,还可以为AnimatorController中的状态添加组建。这样我们就可以在状态(机)的不同阶段内执行不同的操作。
2016-12-19 08:19:08
1701
原创 Unity3D开发小贴士(十四)JsonUtility
Json是现在非常常用的数据格式,因为.Net的版本问题,所有没有很方便的方法可以直接在Unity里面使用C#官方的Json库,于是Unity3D自己提供了自己的一套Json工具——JsonUtility。
2016-11-28 22:10:23
8728
Unity3D合并Mesh
2016-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人