自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 游戏服务器PhotonServer(一)———PhotonServer环境配置

一、PhotonServer介绍Photon Server是一款实时的Socket服务器和开发框架,快速、使用方便、容易扩展,服务端架构在Windows系统平台上,采用C#语言编写,Photon Server发布包括两个部分,Client SDK Release和Server SDK Update,Server SDK的版本是v2.4.5,而Client SDK的版本是v6.2.0。客户端SD...

2018-08-22 11:36:31 9676 4

原创 UnityShader案例(九)——透明效果(2)

一、原理透明度混合:这种方法可以得到 真正的半透明效果。它会使用当前片元的透明度作为混合因子,与已经存储在颜色缓冲中的颜色值进行混合,得到新的颜色。但是,透明度混合需要关闭深度写入。透明度混合只是关闭了深度写入,但并没有关闭深度测试。二、实现// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "Cust

2017-06-16 15:06:03 421 1

原创 UnityShader案例(八)——透明效果(1)

一、实现原理透明度测试:它采用一种这样一种机制,只要一个片元的透明度不满足条件(通常是小于某个阈值),那么它对应的片元就会舍弃。被舍弃的片元将不会进行任何的处理,也不会对颜色缓冲产生任何影响;否则,就会按照普通的不透明的物体来处理它,即进行深度测试。 通常我们就是根据这个原理来实现透明效果的,我们会在片元着色器中使用clip函数来进行透明度测试。Clip是CG中的一个函数。二、代码实现Shader

2017-06-16 14:57:24 523 1

原创 UnityShader案例(七)——遮罩纹理

一、使用遮罩纹理的一般流程通过采样得到遮罩纹理的纹素值,然后使用其中某个(或某几个)通道的值(例如texel.r)来与某种表面属性进行相乘,这样该通道的值为0,时,可以保护表面而不受该属性的影响。二、具体实现Shader "Custom/Texture/MaskTexture"{ Properties { _Color("Main Color",Color)=(1,

2017-06-16 14:29:54 642

原创 UnityShader案例(六)——渐变纹理

一、使用渐变纹理控制漫反射光的结果Shader "Custom/Texture/RampTexture"{ Properties { _Color("Color",Color)=(1,1,1,1) _RampTex ("RampTexture", 2D) = "white" {} _Specular("Specular",Color)

2017-06-16 14:20:07 2145

原创 UnityShader案例(五)——法线纹理

一、在切线空间下,法线纹理映射的shader实现1、基本思想在片元着色器中通过对纹理的采样得到切线空间下的法线,然后再与切线空间下的视角方向,光照方向等进行计算,得到最终的光照结果。2、源码Shader "Custom/Texture/TangentNormalTextute"{ Properties { //主纹理的贴图 _MainTex ("Te

2017-06-15 10:53:16 1194

原创 UnityShader案例(四)——单张纹理

一、单张纹理映射实现的shaderShader "Custom/Texture/SingleTexture"{ Properties { _Color("Color",Color)=(1,1,1,1) _MainTex ("Texture", 2D) = "white" {} _Specular("Specular",Color)=(

2017-06-15 10:18:55 394

原创 UnityShader案例(三)——BlinnPhong高光反射

一、BlinnPhong高光原理1、计算公式 :高光颜色 :入射光线的颜色和强度 :材质的高光反射颜色 :表面法线 :由以下公式可以获取 :光照方向 :视角方向2、BlinnPhong高光的原理图 二、BlinnPhong高光的Shader实现1、Unity表面着色器实现BlinnPhong高光模型Shader "Custom/BlinnPhong" { Properties

2017-06-15 09:44:25 665

原创 UnityShader案例(二)——Phong高光反射

一、Phong 高光反射原理这里的高光反射是一种经验模型,也就是说他并不完全符合真实世界的高光反射现象。它可用于计算那些沿着完全镜面反射方向被反射的光线,这样可以看起来更有光泽。例如金属 计算高光反射需要知道的信息比较多,如表面法线、视角方向、光源方向、反射反向等1、计算公式: :最终的高光颜色 :光源颜色 :材质的高光反射颜色,它用于控制该材质对于高光反射的强度和颜色。 :材质的光泽度,

2017-06-14 14:31:11 1001

原创 UnityShader案例(一)——漫反射

一、漫反射原理1、兰伯特模型(1)定义:反射光线的强度与表面法线和光源的方向之间夹角的余弦值成正比。 (2)计算公式::最终的漫反射颜色 :入射光的颜色和强度 :材质的漫反射系数 :表面法线 :指向光源单位矢量2、半兰伯特模型(1)定义:与原兰伯特相比,半兰伯特光照模型没有使用max函数操作来防止向量n向量l的点积为负值,而是对结果进行了一个0.5倍的缩放再加上0.5大小的偏移 (2)计

2017-06-14 08:30:14 973

原创 Unity顶点着色器和片段着色器

顶点着色器和片段着色器的处理流程: 3d模型—>Vertex shader and flagment shader(—>vertex data inputs结构体—>vertex function—>Vertex shader outputs and fragment shader inputs结构体—>flagment function)—>color 理解:首先,几何点被送到顶点处理单元,得

2017-05-29 17:28:01 1323

原创 Unity shader 编译指令

程序片段被写在CGPROGRAM和ENDCG之间;在程序片段被编译之前需要个程序加上预编译(#pragma)。一、顶点着色器和片段着色器的编译指令1、#pragma vertex name:编译name函数为顶点着色器 2、#pragma fragment name:编译name函数为片段着色器 3、#pragma geometry name:编译name函数为DX10的几何着色器,会自动开启#

2017-05-28 19:00:31 1054 1

原创 ShaderLab基础语法

一、ShaderLab介Shader "主色器名称"{ Propertes{} //属性定义 SubShader{} //子主色器 SubShader{} //子主色器2 ………… FallBack "备用着色器名称" //如果所有子着色器不能运行,则使用备用着色器}1、properties属性定义用来定义主色器中使用的贴图资源或者数值参数等。这些属性会在i

2017-05-27 19:44:28 3175

原创 光照模型

内容简介光照模型有:ambient,diffuse,specular,emittion,即: vertex color=ambient+diffuse+specular+emittion; 物体的最终颜色有多个结果叠加而成;Anbient light(环境光)Diffuse light(漫反射光)Specular light(高光)Emittion light(自发光)一、Anbien

2017-05-27 10:18:08 659

原创 Unity 表面主色器组成及编译指令

内容简介surface shader 重组成部分:两个结构体以及编译指令一、两个结构体(Input和SurfaceOutput)二、编译指令三、渲染管线中的流程(两个结构体和四个函数)一、两个结构体(Input和SurfaceOutput)1、Input结构体(1)允许我们自定义(2)内置变量:a:float3 viewDir 定义视角方向b:float4 screenPos 屏幕坐标位置

2017-05-26 22:44:56 258

转载 接口与抽象类

内容简介抽象类接口抽象类与接口的区别一、接口1、不能实例化; 2、包含未实现的方法声明; 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员); 4、接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只

2017-05-03 20:46:36 248

原创 C++中*与&的区别

一、*运算符1、在定义时,* 是一个标识符,声明该变量是一个指针 例1:int *p; a=5;p=&a;定义一个int类型的指针变量p,通过取值地址符&获取存储5的变量a地址,将他赋值给p,即指针p存储的是变量a的地址2、在调用是,*是一个取值运算符,指向指针存储的地址的变量例2:在例1的基础上获取指针p指向地址存储的值,int  b=*p;二、&运算符1、取地址运算

2017-05-03 20:10:46 1354

空空如也

空空如也

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

TA关注的人

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