自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 资源 (6)
  • 收藏
  • 关注

原创 冰火围城过场动画

概述冰火围城里的过场动画,犹如一团火焰,把地图烧毁,气势磅礴。效果如下图: 原理首先我们需要给当前游戏画面截个屏,作为背景图。通过gradientmain(以下简称gmain)这张图控制燃烧进程。白色部分就是未燃烧到的截屏图,黑色部分是已经烧掉的部分,中间的渐变就是正在燃烧的部分。 仔细的同学已经注意到了,gradientfire(以下简称gfire)这张图和gmain有点相似。gfire的

2015-12-30 17:37:33 722

原创 【Unity Shader】剖析Unity Surface Shader背后机制(二)

上一篇结尾,给出了一个最简单的Diffuse的surface shader翻译成vertex/fragment shader之后的代码。乍看上去可能一头雾水,下面将会一一分解。 整体来看,相较于surface shader,unity自动生成了两个pass(ForwardBase,ForwardAdd),这两个pass的作用,在上一篇中也已经说明。接下去,对照着代码,我们来分解下unity具体做了些什么。

2015-12-24 16:36:28 4076 2

原创 【Unity特效】永恒战士3中的死亡特效

概述玩过永恒战士3的玩家,应该对它的怪物死亡特效记忆犹新,没玩过也不要紧,先放一张效果图。 原理首先,我们需要2张控制图,如下所示。 模型由它原本的贴图,逐渐过渡到storm贴图的,看上去类似尘埃的效果。timeline则用于显示效果的控制,随着uv的x方向的逐渐递增,会看到光环闪过,并且x坐标接近1时,alpha会快速递减。 我们看到,模型有一个顶点外扩的过程。这里加了一个控制,

2015-11-13 15:31:00 1258

原创 【Unity Shader】剖析Unity Surface Shader背后机制(一)

概要Unity自3.x起,推出了surface shader功能,极大地简化了shader的编写,尤其是光照处理这块。surface shader说白了就是一套代码生成器,最终还是转换为vertex/fragment shader,优点在于隐藏了许多很少会被改动,然而工作量却巨大的细节,例如处理不同光照类型,lightmap,阴影等。开放给开发者的是最多被修改的一些参数,例如颜色,法线等。当然还提供

2015-09-09 11:46:34 2225

原创 投影矩阵推导

概要投影变换是计算机图形学的基础,理解并推导投影矩阵也是很有必要的。正交投影比较简单,没有透视失真效果(近大远小)。而透视投影比较符合人类的眼睛感知,平行线在远处会相交于一点。 投影是通过一个4x4的矩阵来完成的,将视锥映射成标准观察体(齐次裁剪空间)。正交投影OpenGLOpenGL采用的是右手坐标系,z轴朝屏幕向外,因此观察方向是朝着z轴负方向的,那么将x,y,z坐标从区间[l, r],

2015-08-04 18:41:39 3612

原创 图形渲染管线

概述图形渲染管线(Graphics Pipeline),简单的说就是把摄像机看到的东西,绘制成一幅2D图像的过程。可以分为3个阶段: 1. 应用程序阶段 2. 几何阶段 3. 光栅化阶段 [图1-1 可编程渲染管线]应用程序阶段这个阶段是在CPU上执行的,例如batching,遮挡剔除(occlusion culling)等加速算法。因为视锥裁剪(frustum culling)是在v

2015-07-09 12:07:49 1182

原创 Lua程序设计(第2版)第六章学习随笔——深入函数

1. 函数作为“第一类值”,可以存储在变量或table中,可以作为函数实参,或者函数返回值。2. 函数是匿名的,诸如print的函数名,只是持有该函数的变量。    a = {p = print}    a.p("Hello World!")   --> Hello World!    print = math.sin            a.p(print(1))     

2009-03-16 09:38:00 370

原创 Lua程序设计(第2版)第五章学习随笔——函数

1. 函数名后面必须加(),只有当函数只有一个参数,并且此参数是一个字面字符串或table构造式时,()可有可无。dofile a.lua        dofile(a.lua)f{x = 10, y = 20}    f({x = 10, y = 20})type{}       type({}) 2.  多重返回值     1. 将函数调用作为一条单独的语句,

2009-03-13 16:49:00 391

原创 Lua程序设计(第2版)第四章学习随笔——语句

1. 多重赋值来交换两个变量a[i], a[j] = a[j], a[i]  -- 交换a[i]与a[j] 2.  local foo = foo  创建一个局部变量foo,用全局变量foo初始化它。这样可以加速当前作用域中对foo的访问。而且如果后续函数改变全局foo的值,那么可以在这里先将它的值保存起来。 3. repeat-until   1. 测试在循环体之后做

2009-03-13 15:54:00 419

原创 Lua程序设计(第2版)第三章学习随笔——表达式

1.  a = {}; a.x = 1; a.y = 0b = {}; b.x = 1; b.y = 0c = a结果: a == c; a ~= b。对于table, userdata和函数,Lua作引用比较(当引用同一个对象时才相等)。 2.  and : 如果第一个操作数为真, 就返回第二个操作数;反之返回第一个操作数。or : 如果第一个操作数为为真,就返回第一

2009-03-13 13:56:00 318

原创 Lua程序设计(第2版)第二章学习随笔——类型和值

1.  print(type(type(X))) --> string    type()函数返回值一个string 2.  Lua中的布尔值false和nil为假,其他情况为真(包括0和空字符串) 3. page = [[                    ]]                 一对匹配的双方括号来界定一个字母字符串。 4. [

2009-03-13 11:15:00 356

原创 Lua程序设计(第2版)第一章学习随笔——开始

1. 块注释:--[[  code --]] 2. print(b) --> nil       对于未初始化的变量,其值为nil 第一章是整本书的开头,也是LUA的开始,讲的内容都很简单,列出以上两个小细节备忘。

2009-03-13 10:16:00 319

冰火围城过场动画资源

冰火围城中的过场代码,包括shader,材质,图片和mesh

2015-12-30

永恒战士死亡效果资源

永恒战士3中的死亡效果,包括贴图资源和源代码。

2015-11-13

siggraph2010_vlachos_waterflow

Portal 2中逼真的水面效果的实现细节。

2015-07-06

GDC2004_Half-Life2_Shading

介绍在半条命2中的渲染技术。涉及到Radiosity Normal Mapping, 反射和折射等。

2015-07-06

FastMobileShaders_siggraph2011

Unity在siggraph发表的论文,帮助优化移动平台上的shader效率。

2015-07-06

Siggraph2011_SpecialEffectsWithDepth_WithNotes

介绍了在Unity中,利用深度缓存,能做出哪些炫酷的效果。

2015-07-06

空空如也

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

TA关注的人

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