- 博客(444)
- 资源 (56)
- 收藏
- 关注
原创 Shaders for Game Programmers and Artists(8) - Fog
简介在水汽充足、微风及大气层稳定的情况下,气温接近零点,相对湿度达到100%时,空气中的水汽便会凝结成细微的水滴悬浮于空中,使地面水平的能见度下降,这种天气现象称为雾。光线在照射到这些小颗粒的时候,方向发生改变,一些光被挡掉了,所有光的强度发生了改变,另一方面本不应该射向观察者的光线射向了观察者。 线性雾/指数雾/对数雾如今的显卡对雾已经有了硬件级别的支持,所以性能上的损耗非常小。通常硬件都会提供
2017-02-06 01:01:20
2134
1
原创 Shaders for Game Programmers and Artists(7) - Non-photorealistic rendering
边缘提取边缘提取有很多种,这里用的是屏幕空间的做法,首先把要提取边缘的物品用纯色绘制到一张rt上,然后用一个一个边缘检测的滤波器在ps中扫一遍。绘制纯色的的psfloat4 ps_main( float4 Diff: COLOR0 ) : COLOR{ return 1;}绘制完之后就像这样 边缘提取的滤波器称为Sobel filter。 边缘提取的ps如下sampler RT;c
2017-02-06 00:48:08
1502
原创 Shaders for Game Programmers and Artists(6) - 反射与折射
反射反射在上一篇的HDR中就已经用到了。简单说一下反射发生的原理就是光线打到一个物体的面上之后,一部分光被弹回去的现象,原理如下图 只要知道入射光线和发现,出射光线的方向就可以求出。通过这个方向对天空盒进行采样,就可以得到天空盒上的颜色了。在vs中计算出射光线的方向float4x4 view_proj_matrix;float4 view_position;struct VS_OUTPUT
2017-02-06 00:35:51
1870
1
原创 Shaders for Game Programmers and Artists(5) - HDR
简介颜色用8bit来表示就可以了,但是光强呢?High dynamic range is the science ofrecognizing the different intensity levels of light.Under normal rendering circumstances, wherethe average level of lighting is similar throu
2017-02-06 00:21:59
1554
原创 全面认识Depth - 这里有关于Depth的一切
作者:拳四郎链接:https://zhuanlan.zhihu.com/p/25095708来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Depth的由来从PerspectiveProjection 说起所谓的PerspectiveProjection 其实就是将顶点从view 坐标系下,转换到NDC下这里面包含了两个步骤,将view 坐标系下的顶点乘以透视矩阵,转
2017-02-05 22:56:12
8662
原创 Shaders for Game Programmers and Artists(4) - 热雾效果
一、原理先看下面的图产生的原理及其就是折射。深入探究的话,可以去搜搜波粒二象性,斯涅尔定律等等。当太阳照射地面的时候,靠近地面的空气会变得很热,热空气比较轻会往上走,冷的空气会往下沉。冷热空气由于有着不同的密度和折射率,就产生了折射现象。下面是折射的示意图这种特效可以用于喷气背包或者火箭升空时候火焰处空气扭曲的效果,也可以用于其他介质比如水或者刀光的处理。二、动手首先给场景添加一个天空球,Stea
2016-12-20 00:24:54
1757
原创 Shaders for Game Programmers and Artists(3) - DOF
DOF(景深)最简单的现象就是当你用眼睛聚焦到前景的地方,后面就会变模糊, 当用眼睛聚焦到远景的地方,前就会变模糊,相机也会有同样的情况,通过调节光圈和焦距就很容易出现景深的效果。如果要说景深形成的原理的话,可以用小孔成像来说一天,但是在图形学里面,要做的就一件事 Faking it!镜头前的东西被模糊,远离镜头的东西比较清晰Box filter 过于简单,高斯模糊需要两个pass,这里用一个稍微
2016-12-20 00:02:35
1128
原创 Shaders for Game Programmers and Artists(2) - Looking Through a Filter
渲染到 RenderTargetIn RenderMonkey, rendering to a temporary texture can be carried out using something called a render target. Render targets are a technique exposed by the different rendering APIs to a
2016-12-19 01:49:18
984
原创 Shaders for Game Programmers and Artists(1) - First Shaders
一模型纹理加载工程结构如下二 UV动画三
2016-12-19 00:29:13
1297
原创 游戏开发中的程序生成技术
简介PCG是程序生成游戏内容的简称,它使用了随机或者伪随机数的技术,给游戏带来了无限的可能。相比于传统的由设计师将游戏世界中的一草一木都精心配制,PCG的方法是去配置一些生成的规则,然后由生成算法自动去生成游戏世界。在过去的时候,由于游戏主机和PC性能的限制,PCG的内容非常的简单,比如随机地牢或者游戏的地图,但近年来随着sandbox品类的游戏的兴起,比如风靡全球的Minecraft,PCG能够
2016-10-09 11:26:51
9617
5
原创 OpenGL进阶(二十一) - 文字渲染
经典文字渲染:位图字体在早期渲染文字时,选择你应用程序的字体(或者创建你自己的字体)来绘制文字是通过将所有用到的文字加载在一张大纹理图中来实现的。这张纹理贴图我们把它叫做位图字体(Bitmap Font),它包含了所有我们想要使用的字符。这些字符被称为字形(Glyph)。每个字形根据他们的编号被放到位图字体中的确切位置,在渲染这些字形的时候根据这些排列规则将他们取出并贴到指定的2D方块中。上图展示
2016-10-07 12:02:14
11122
1
原创 基于分形的山脉河流生成
自相似所谓自相似,是一种尺度变换下的不变性(scale-invariance),即在不同尺度下观察分形可以看到近似相同的形象,若把整个对象的局部放大,再把局部的局部放大,都可以看到相似的结构特征。但是这种自相似并不像整形的相似那么严格,允许相似中的不相似,不需要也不可能完全相同。比如,科赫曲线,整体是闭合的,但任一部分都不是封闭曲线。分形自相似意味着部分与整体有一样的复杂性:一样曲折、琐碎、纷乱、
2016-10-07 11:49:56
5551
原创 Minecraft源码分析(6) - forge环境配置
OS Windows10 64bit1.Java 最好在1.8以上,这里用的jdk-8u71-windows-x64.exe,下载好之后直接双击安装,安装好之后命令行运行java -version2.gradle从官方网站获取最新的zip包 http://www.gradle.org/ 2.将其解压并配置环境变量指向gralde目录 如 %GRADLE_HOME%=E:\yourparh\grad
2016-09-29 22:20:40
7650
3
原创 Minecraft源码分析(5) - 饱食度
介绍介绍饥饿(Hunger)是一个在冒险元素更新中新增的一个游戏机制。在更新之前,玩家食用食物会直接回复生命值。现在,食用则会回复饥饿值,一种随着玩家的不同行动而降低的数值。饥饿条位于屏幕下方玩家的生命值的旁边,表示为10个火腿。当玩家在疾跑时,玩家的饥饿值将会下降的很快。当饥饿值变成6或者更少时,玩家便不能奔跑了。在和平模式下,饥饿值并不会减少,但是其对于玩家生命值的影响并没有消失,并且在游戏中
2016-09-29 21:58:03
4879
1
原创 详解MVP矩阵之ProjectionMatrix
简介透视投影是3D固定流水线的重要组成部分,是将相机空间中的点从视锥体(frustum)变换到规则观察体(Canonical View Volume)中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 具体的理论推导过程可以参考下面的几个Link,深入探索透视投影变换深入探索透视投影变换(续)OpenGL TransformationOpenGL Project
2016-09-29 21:39:40
23099
2
原创 使用Unity的Standard Assets进行原型制作
环境Unity5.3.5f1Windows 64bitAssets 导入首先导入Unity3D官方的一些Asset 如果没有这个菜单的话,就是没有安装Unity Standard assets包,去官网下载安装一下。 导入之后可以先用prototyping下面的prefab搭建一个场景先 随便搭一下,就像这样 FPS Contro
2016-09-27 01:57:01
10374
2
原创 OpenGL进阶(二十) - 绘制一个长方形和一个三角形
简介先看最终效果今天要学习的重点是怎样在场景中绘制两个(或者以上的)物体,方框的绘制方框其实是由两个三角形组成,看一下VBO, VAO, EBO的定义GLfloat vertices[] = { 0.5f, 0.5f, -1.0f, 0.5f, -0.5f, -1.0f, -0.5f, -0.5f, -1.0f, -0.5f, 0.5f, -1.0f};GLuint indices
2016-08-11 22:04:03
4435
原创 Unity中UICamera设置
默认状态下创建的UGUI的原点和世界坐标的原点是重合的,这样其实非常不方便。解决方法就是创建一个Camera专门用于绘制UI。具体步骤如下:1.新建一个Camera,参数如下尽量拉到一个比较远的位置Canvas需要设置一下Canvas Component这下UI就不会和场景中的物体有重合了。
2016-08-10 01:16:53
10753
1
原创 Muli3D源码分析(1) - 框架概览
Muli3D简介Muli3D是一个平台无关的软渲染库,实现了渲染流水线的特性,代码可读性高,模块性好,很适合去做一些原型或者研究一些新的特性。 编译环境Window 64bitVS2015Muli3D 0.8 https://sourceforge.net/projects/muli3d/用VS2015打开项目,随便找个工程进行编译,爆了下面的error. 链接器工具错误 LNK2026 XXX模
2016-08-01 13:18:29
2564
翻译 快速多人游戏(5) - 示例代码和Demo
这是一个简单的C-S架构的实现,用来证明这一系列文章里的一些观点。如果你没有阅读过之前的文章的话,下面的内容对你并没有什么意义。代码是JavaScript写的,都包含在这个网页里,不超过400行,并且包含了很多的注释,这也证明了你如果理解了其中的概念,实现它是相对简单的。
2016-06-02 22:05:25
3862
1
翻译 快速多人游戏(4) - 爆头!(AKA延迟补偿)
从上一篇文章到现在已经过了很久很久了(整整两年!哦耶!),不过让我开心的是收到了很多email来问我下一篇什么时候更新,所以,这里就是更新了!这篇文章的主题可以称作对延迟敏感事件的时间一致性,但是叫做爆头好像更加炫酷 : )
2016-05-31 00:28:13
4410
翻译 快速多人游戏(3) - Entity插值
介绍在系列的第一篇文章中,我们介绍了一种权威服务器的思想还有他在防止玩家作弊方面的优势。但是直接使用这种技术会引起可玩性和响应性方面的问题。在第二篇文章中,我们提出了一种客户端预测的方法来处理。到现在为止我们提出了一套解决方案,能够让玩家在多人游戏中得到单人游戏般流畅的体验,即使是在接入权威服务器并且有一定网络延迟的情况下。在这篇文章中,我们将会处理当有别的玩家连入相同的服务器的问题。服务器时间步
2016-05-29 23:35:45
5292
1
翻译 快速多人游戏(2) - 客户端预测和服务器校验
在第一篇文章中,我们介绍了一种权威服务器的C-S模型,在这种模型中,客户端只将输入发送到服务器中,当收到来自服务器的游戏状态更新的时候再将结果渲染出来。单纯地依赖这种模型会导致玩家输入命令和画面更新之间的延迟感,比如,当玩家按下向右的按钮,然后玩家等了半秒钟才开始移动,因为首先客户端需要把输入传给服务器,然后服务器处理了出入之后计算出新的游戏状态,然后再将新的游戏状态传回给客户端。
2016-05-29 15:50:24
6472
4
翻译 快速多人游戏(1) - 介绍
原文地址简介这是一系列的关于快速多人游戏的技术和算法的文章的第一篇,如果你对于多人游戏背后的技术非常熟悉,那么你可以直接跳到下一篇 - 因为接下来的内容只是介绍性质的。每一种游戏的开发技术都有各自的难点,多人游戏则给游戏开发添加了一系列要处理的问题,有趣的是,其中最核心的问题是让人看上去自然和物理模拟。关于作弊的问题所有的一切的起源都是作弊。作为一个游戏开发者,你一般不会去担心有人在你的单人游戏中
2016-05-27 00:19:49
4364
原创 赛式方法论笔记
原文链接:赛式方法论(上):为什么你的游戏做不完、做得烂?这究竟是为什么?赛式方法论(下):前期制作阶段究竟应该「做」些什么?前期制作的两个成果:1.首个可发布的可玩的版本(包含游戏中的精彩部分)2.游戏宏观设计。宏观设计:一份5页纸厂的文档,搭建出游戏的框架。玩法测试时,既要包含你的目标对象,也要包含非目标对象。游戏制作分为前期制作和正式制作阶段,前期制作太难,以至于很多团队直接放弃了这个部分,
2016-05-19 00:51:19
1690
1
原创 CoherentNoise(相干噪声)
Coherent noise定义Coherent noise is a function f (x) , such as any two values f (x0) and f (x1) are close together when x0 and x1 are close together, but donot correlate when x0 and x1 are far apart.lat
2016-05-17 00:47:57
10184
1
原创 Minecraft源码分析(4) - Item系统
Item简介物品(Item)是只会出现在玩家的物品栏和手上的物体,它们不能在游戏的世界中放置。一些物品在使用时会在游戏的世界中放置方块和实体,它们在物品栏是物品,放置时是方块。一些符合以上特性的物体包括在放置时会变成实体的物品展示框,以及在放置时会变成一组方块的床。物品(和方块)会简短地在HUD上面展示它们的名字。物品使用物品ID,方块使用方块ID。MC中的Item多种多样,各种块,各种家具,各种
2016-05-09 23:43:50
10010
3
原创 Minecraft源码分析(3) - 刷怪笼(MobSpawner)逻辑
Minecraft刷怪笼顾名思义就是刷怪的笼子,遍布Minecraft各地,除了在水中、浮空和末地不存在外,一般来说刷怪笼都存在于低于地平线的位置,但是也有一些刷怪笼生成于高于地面的山中,有时会出现多个刷怪笼密集生成于一片区域的情况,比如蜘蛛刷怪笼。每种刷怪笼只会刷出一种怪,比如骷髅刷怪笼只会刷出骷髅弓箭手。当周围有刷怪笼时,可以听到独特的嘶嘶声,并且如果感觉某种怪物数量骤增,前赴后继地来攻击你,那周围很可能有刷怪笼存在。另外大部分刷怪笼都处于一个特制的房间中,其特点就是地板和墙壁是苔石铺成的,如果在挖掘时
2016-05-05 00:44:31
16727
1
原创 Minecraft源码分析(2) - Block,Section和Chunk
Blockblock是Minecraft中最基本的组成元素,也就是常说的“块”。其类图如下简单说明一下Block基类:pos:块的位置lightOpacity:透光系数lightValue:当前块的光照值blockHardness:块的坚硬度,和挖掘次数有关slipperriness:摩擦系数stepSound:踩在Block上的脚步声函数主要是一些Get/Set方法,还有一些回掉函数。有了Blo
2016-05-03 23:27:28
11162
1
原创 Minecraft源码分析(1) - 刷怪逻辑
Entity种类生物大致划分为四种:攻击型,被动型,水生型(也就是鱿鱼)和环境型(也就是蝙蝠)。攻击型生物有一个每游戏刻(1/20秒)一次的生成周期。被动型和水生型生物只有每400刻(20秒)一次的生成周期。因为这一点,攻击型生物可以在任何时候生成,而动物生成则非常少。另外,大部分动物在建立世界时产生的区块中生成。源码中对应的类是
2016-05-02 01:51:47
24792
4
原创 一个通用的有限状态机(FSM)框架
吃饭,睡觉,打豆豆现在要实现一个游戏中的一个NPC的AI, 他只做三件事,吃饭,睡觉,打豆豆,最直接,最简答想到的代码应该是这样。void Update(){ if(Hungry) { Eat(); return; } if(Sleepy) { Sleep(); return; } if(Bored) { KickDD(); return; }
2016-04-19 02:08:34
26971
7
原创 碰撞检测之OBB-OBB的SweepTest
提要当物体在运动的时候,普通的每帧进行碰撞检测已经无法满足要求,比如子弹的运动两帧的位置已经直接将中间的板子穿过了,所以 t 时刻和 t +1 时刻的检测都是失效的。这时候需要用到的就是sweep检测了。今天要处理的就是AABB的Sweep检测。2D情况如下图,当前位置是蓝色Box所在位置,目的位置是绿色框所在位置。2D情况只用处理x,y方向的,利用SAP理论,分别在各个轴向计算可以移动的距离。代
2016-04-12 01:20:57
5315
2
原创 C#中常用容器的使用与底层数据结构
从使用的频率一个个来简单说一下。Array/ArrayList/List/LinkedListArray数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。string[] s=new string[2]; //赋值 s[0]="a"; s[1]="b"; //修改 s[1]="a1"; 但是数组存在一些不足的地方。在数组的两
2016-04-09 21:14:33
19247
6
原创 基于C#反射机制的工厂模式
简介反射提供了描述程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了特性,可以利用反射来访问它们。这里的类型信息包括类型的方法,变量名称,类型等信息。参考反射(C# 和 Visual Basic) - https://msdn.microsoft.com/zh-cn/library/
2016-04-09 19:11:22
7487
1
原创 详解MVP矩阵之ViewMatrix
ViewMatrix用于直接将World坐标系下的坐标转换到Camera坐标系下。已知相机的坐标系,还有相机在世界空间下的坐标.就可以求出ViewMatrix,下面进行具体推导。令UVN为相机坐标系下的三个基,,对于一个相机来说,它在开始的时候和世界坐标系是重合的,用户控制相机在世界空间中移动之后,相机的状态可以用两个属性来描述——朝向和位置。也就是说,有了这两个属性,一个相机模型在世界中的状态就
2016-03-28 21:15:23
37836
1
原创 详解MVP矩阵之齐次坐标和ModelMatrix
其次坐标(Homogeneous Coordinates)其次坐标这个概念在第一次看real-time rendering 这本书的时候就有提起到,但当时看的一头雾水,只知道其次坐标在某些计算中比较方便,而事实上齐次坐标有着非常重要的意义和作用,主要是在处理三维透视方面,常用的几个地方,比如texture mapping 透视矫正,Projection Matrix的计算等等。在笛卡尔坐标系中,两
2016-03-27 21:07:44
13100
3
原创 碰撞检测之OBB-OBB检测
2D情况首先回顾一下SAP两个凸包多边形,当且仅当存在一条线,这两个多边形在这条线上的投影不相交,则这两个多边形也不相交.这条线称为Separating Axis.垂直Separating Axis存在一条Separating Line将两个多边形分开。这里还有一个要确定的,就是如果两个矩形之间存在Separating Line,则一定存在一条和两个矩形中的一条边平行。每个矩形对边平行,则我们只需
2016-03-07 02:20:14
22351
11
原创 碰撞检测之Sphere-Box检测
检测思路首先要做的是将Box转为AABB,然后判断圆心是否在Box内,用的就是之前的SAT如果圆心在Box内,肯定相交,如果不在圆心内,则有四种情况,与顶点相交,与楞相交,与面相交,这里的确定也是通过SAT来确定。在二维中,如果圆心不box内,有两种情况只要对比红色线段的长度和圆的半径就可以了。代码 public static bool IntersectSphereBox(Sphere sphe
2016-03-06 02:22:53
3372
原创 碰撞检测之Sphere-Sphere检测
今天超级简单!判断两个球相交不相交,直接判断两个球心的距离是否大于两个半径的和就可以了。检测代码public static bool IntersectSphereSphere(Sphere sphere0, Sphere sphere1) { Vector3 delta = sphere0.center - sphere1.center;
2016-03-01 23:43:06
3024
原创 碰撞检测之Ray-Plane检测
平面定义public class Plane : CuGeometry{ // p satisfies normal.dot(p) + d = 0 public Plane() : base(GeometryType.Plane) { } public Plane(Vector3 _normal, float _d) : base(GeometryType
2016-03-01 01:30:37
3737
stanford_bunny
2013-08-17
Unity3D的 Shader例子
2014-09-26
Resources_airhockey
2013-12-28
基于Qt的图像采集系统
2013-09-18
g77_pack g77_pack
2013-08-28
ffmpeg-snapshot
2013-08-21
xvidcapi386.deb
2013-08-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人