- 博客(19)
- 收藏
- 关注
原创 算法基础知识
算法简单来说,所谓算法就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组作为输出。算法就是一系列的计算步骤,用来将输入数据转换成输出结果。数据结构数据结构是存储和组织数据的一种方式,以便于数据进行访问和修改。...
2019-01-08 14:53:40 245
原创 Unity Shader扩展
编译指令编译指令最重要的作用是指明该表面着色器的表面函数和光照函数,并设置一些可选参数。#pragma surface surfaceFunction lightModel [optionalparams]表面着色器的两个结构体一个表面着色器需要使用2个结构体:表面函数的输入结构体Input,以及存储了表面属性的结构体SurfaceOutput。Input结构体中内置的其他变量:...
2019-01-07 17:24:16 281
原创 Unity中的渲染优化技术
影响性能的因素对于一个游戏来说,它主要需要使用两种计算资源:CPU和GPU。它们会相互合作,来让我们的游戏可以在预期的帧率和分辨率下工作。其中,CPU主要负责保证帧率,GPU主要负责分辨率相关的一些处理。1.CPU1)过多的draw call2)复杂的脚本或者物理模拟2.GPU1)顶点处理。过多的顶点;过多的逐顶点计算。2)片元处理。过多的片元(既可能是由于分辨率造成的,也可能是由于...
2019-01-05 12:00:49 565 1
原创 Unity Shader使用噪声
消融效果消融效果常见于游戏中的角色死亡、地图烧毁等效果。其实现原理就是噪声纹理+透明度测试。我们使用对噪声纹理采样的结果和某个控制消融程度的阈值比较,如果小于阈值就使用clip函数把它对应的像素裁剪掉,这些部分就对应了图中被“烧毁”掉的区域。而镂空区域边缘的烧焦效果则是将两种颜色混合,在用pow函数处理后,于原纹理颜色混合后的结果。水波效果...
2019-01-04 14:56:03 372
原创 Unity Shader非真实感渲染
非真实感渲染的一个主要目标是使用渲染方法使得画面达到和某些特殊的绘画风格相似的效果,例如卡通、水彩风格等。卡通风格的渲染实现卡通渲染有很多方法,其中之一就是使用基于色调的着色技术。在实现中,我们往往会使用漫反射系数对一张一维纹理进行采样,一控制漫反射的色调。素描风格的渲染...
2019-01-04 11:23:08 487
原创 Unity Shader使用深度和法线纹理
深度纹理实际就是一张渲染纹理,只不过它里面存储的像素值不是颜色值,而是一个高精度的深度值。由于被存储在一张纹理中,深度纹理里的深度值范围是[0,1],而且通常是非线性分布的。这些深度值来自于顶点变换后得到的归一化的设备坐标(Normalized Device Coordinate,NDC)。全局雾效Unity内置的雾效可以产生基于距离的线性或指数雾效。如果想要在自己编写的顶点/片元着色器中...
2018-12-29 17:42:40 257
原创 Unity Shader屏幕后处理效果
屏幕后处理效果(screen post-processing effects)是游戏中实现屏幕特效的常见方法。通常是指在渲染整个场景得到屏幕图像后,再对这个图像进行一系列操作,实现各种屏幕特效。使用这种技术可以为游戏画面添加更多的艺术效果,例如景深(Depth of Firld)、动态模糊(Motion Blur)等。Unity为我们提供了这样一个方便的接口-OnRenderImage函数:Mo...
2018-12-29 12:19:22 924
原创 Unity Shader动画
纹理动画序列帧动画1.首先我们先声明多个属性,以设置该序列帧动画的相关参数:Properties { _Color("Color Tint",Color) = (1,1,1,1) _MainTex("Image Sequence",2D) = "while" {} _HorizontalAmount("Horizontal Amount&quo
2018-12-21 18:22:21 620
原创 Unity高级纹理
立方体纹理在图形学中,立方体纹理(Cubemap)是环境映射(Environment Mapping)的一种实现方法。环境映射可以模拟物体周围的环境,而使用了环境映射的物体可以看起来像镀了一层金属一样反射出周围的环境。立方体纹理一共包含了6张图像,这些图像对应了一个立方体的6个面,立方体纹理的名称也由此而来。太空盒子天空盒子(Skybox)是游戏中用于模拟背景的一种方法。天空盒子这个名字...
2018-12-21 17:32:45 166
原创 Unity 光照
向前渲染路径的原理每进行一次完整的向前渲染,我们需要渲染该对象的渲染图元,并计算两个缓冲区的信息:一个是颜色 缓冲区,一个是深度缓冲区。我们利用深度缓冲区来决定一个片元是否可见,如果可见就更新颜色缓冲区中的颜色值。Pass { for (each primitive in this model) { for(each fragment covered by this primitive...
2018-12-21 16:29:06 141
原创 Unity Shader透明效果
Unity中通常使用2种方法来实现透明效果:第一种是使用透明度测试(Alpha Test),这种方法无法得到真正的半透明效果;另一种是透明度混合(Alpha Blending)。透明度测试和透明度混合的基本原理如下:●透明度测试:只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会被舍弃。透明度测试是不需要关闭深度写入的,它和其他不透明物体最大的不同就是它会根据透明度来舍...
2018-12-20 15:29:05 933
原创 Unity Shader经常纹理
纹理最初的目的是使用一张图来控制模型外观。使用纹理映射(texture mapping)技术我们可以把一张图“黏”在模型表面,逐纹素(textl)地控制模型的颜色。单张纹理纹理缩小的过程比放大更加复杂一些,此时原纹理中的多个像素将会对应一个目标像素。纹理缩放更加复杂的原因在与我们往往需要处理抗锯齿问题,一个最常使用的方法就是使用多级渐远纹理(mipmapping)就是。凹凸映射纹理的另一种...
2018-12-19 17:17:29 316
原创 Unity中的基础光照
通常来讲,我们要模拟真实的光照环境来生成一张图像,需要考虑3种物理现象:1.光线从光源(light source)中被发射出来。2.光线和场景中的一些物体相交:一些光线被物体吸收了,而另一些光线被散射到其他方向。3.摄像机吸收了一些光,产生了一张图像。光源光不是从石头里蹦出来的,而是由光源发射出来的。在光学了,我们使用辐照度(irradiance)来量化光。吸收和散射光线有光源发射...
2018-12-18 17:56:23 319
原创 Unity Shader简单介绍
顶点/片元着色器顶点/片元着色器的结构大体如下:一个简单的Unity Shader:其中:#pragma vertex vert#pragma fragment frag它们告诉Unity,哪些函数包含了顶点着色器的代码,哪些函数包含了片元着色器的代码。通用的编译指令表如下:#pragma vertex name#pragma fragment name这是顶点着色器...
2018-12-18 16:02:57 615
原创 Shader所需的数学基础
笛卡尔坐标系二维笛卡尔坐标系一个二维笛卡尔坐标系包含了两个部分的信息:1.一个特殊的位置,即原点,它是整个坐标系的中心。2.两条过原点的相互垂直的矢量,即x轴和y轴。这些坐标轴也被称为是该坐标系的基矢量。三维笛卡尔坐标系三维笛卡尔坐标系分为2种不同的坐标系:左手坐标系(left-handed coordinate space)和右手坐标系(right-handed coordinate...
2018-12-17 12:33:57 673
原创 Unity Shader基础概述
什么是Shader?Shader就是:#GPU流水线上一些可高度编程的阶段,而由着色器编译出来的最终代码是会在GPU上运行的(对于固定管线的渲染来说,着色器有时等同于一些特定的渲染设置);#有一些特定类型的着色器;#依靠着色器我们可以控制流水线中的渲染细节;ShaderLabUnity Shader是Unity为开发者提供的高层级的渲染抽象层。在Unity Shader都是使用Sha...
2018-12-14 14:57:42 301
原创 渲染流水线
渲染流程的3个阶段1.应用阶段:通常由CPU负责实现,这一阶段最重要的输出信息是渲染所需要的几何信息(即渲染图元,rendering primitives)。2.几何阶段:这个阶段通常在GPU上进行,把顶点坐标变换到屏幕空间中,再交给光棚器进行处理。3.光棚化阶段:将上一个阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像。...
2018-12-13 17:57:11 133
原创 单例模式必须具备的3个元素
1.私有静态属性,用于存取类的唯一实例。2.公共静态方法,用于提供对该唯一实例的存取访问,如果实例未创建,则创建该实例。3.用于限制类再次实例化的方式。通常使用私有构建函数的方式来实现。
2017-09-15 18:06:49 2662
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人