We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在进行第一个VR应用开发之前,我们来看看几个重要的概念:
我们需要编写大量3D操作的代码来表现我们的想法,可以直接通过OpenGL和DirectX来渲染3D视图,但是这样做太浪费时间了,unity3D游戏引擎来做这件事,Unity用于快速构建VR内容非常合适,最主要的是它非常容易掌握。
依照国际惯例先放几张完成后的截图:
四不四很高大上啊
如果有兴趣想学习Unity 一、可以按照下面的学习路线
推荐几个学习Unity的网站: Unity中文官方论坛http://forum.china.unity3d.com/forum.php Unity官方文档https://unity3d.com/cn/learn/ Unity知乎话题http://www.zhihu.com/topic/19568806
二、Unity开发VR的流程
三、Unity重要模块的类图
Component的类如下:
四、Unity Component的生命周期
五、简单介绍几个常用组件
2.Particle System组件 Particle System组件用于创作烟雾、气流、火焰、瀑布、喷泉、涟漪等效果 (建议使用realflow制作)
六、Shuriken粒子系统
Shuriken粒子系统采用了模块化管理,个性化的粒子模块配合粒子曲线编辑器使用户更容易创作出各种缤纷复杂的粒子效果。
创建一个粒子系统的方式有两种: 1.分别选择菜单栏中的 GameObject - Create Other - Particle System 2.创建一个Empty对象,在Component - Effects - Particle System
下面是粒子系统的属性面板
创建一个粒子系统后, 1.默认展开的是粒子系统的初始化模块:此模块为固有模块,不可删除或者禁用。该模块定义了粒子初始化时的持续时间、循环方式、发射速度、大小等一些列基本的参数。
2.Emission:发射模块 控制粒子的发射速率(Rate),在粒子持续时间内,可实现某个特定时间生成大量粒子的效果,可模拟爆炸效果生成一大堆的粒子。
3.Shape :形状模块 定义粒子发射器的形状,可提供沿形状表面法线或随机方向的初始力,并控制粒子的发射位置以及方向。
4.Velocity over Lifetime :生命周期速度模块 制着生命周期内每一个粒子的速度,对有着物理行为的粒子效果更明显,但对于那些简单视觉行为效果的粒子,如烟雾飘散效果以及与物理世界几乎没有互动行为的粒子,此模块的作用就不明显了。
5.Limit Velocity over lifetime :生命周期速度限制模块 控制粒子在生命周期内的速度限制以及速度衰减,可以模拟类似拖动的效果。若粒子的速度超过设定的限定值,则粒子速度之会被锁定到该限定值。
6.Force over Lifetime:生命周期作用力模块 控制粒子在生命周期内的受力情况。
7.Color over lifetime:生命周期颜色模块 控制粒子在生命周期内的颜色变化。
8.Color by Speed:颜色的速度控制模块 此模块可让每个粒子的颜色根据自身的速度变化而变化。
9.Size Over Lifetime :生命周期粒子大小模块 控制每一颗粒子在其生命周期内的大小变化。
10.Size by Speed:粒子大小的速度控制 此模块可让每颗粒子的大小根据自身的速度变化而变化。
11.Rotation Over Lifetime :生命周期旋转模块 控制每颗粒子在生命周期内的旋转速度变化。
12.Rotation by Speed :旋转速度控制模块 此模块可让每颗粒子的旋转速度根据自身速度的变化而变化。
13.External Forces:外部作用力模块 此模块可控制风域的倍增系数。
14.Collision:碰撞模块 可为每颗粒子建立碰撞效果,目前只支持平面碰撞,该碰撞对于简单的碰撞检测效率非常高。
15.Sub Emitters:子发射器模块 此模块可时粒子在出生、消亡、碰撞等三个时刻生成其他的粒子。
16.TextureSheet Animation:序列帧动画纹理模块 可对粒子在其生命周期内的UV坐标产生变化,生成粒子的UV动画。可以将纹理划分成网格,在每一格存放动画的一帧。同时也可以将文理划分为几行,每一行是一个独立的动画。需要注意的是,动画所使用的纹理在Renderer模块下的Material属性中指定。
17.Renderer:粒子渲染器模块 该模块显示了粒子系统渲染相关的属性。
七、Shader(着色器)和Material(材质) ps:补充下可能用到的计算机图形学内容光照与材质
Unity中Shader分为三种基本类型: 1.固定功能着色器(Fixed Function Shader) 2.表面着色器(Surface Shader) 3.顶点着色器&片段着色器(Vertex Shader & Fragment Shader)
固定功能着色器便是我们所说的固定功能渲染管线(fixed-functionrendering pipelines)的具体表现,而表面着色器、顶点着色器以及片段着色器便属于可编程渲染管线。
首先是一些属性定义,用来指定这段代码将有哪些输入。接下来是一个或者多个的子着色器,在实际运行中,哪一个子着色器被使用是由运行的平台所决定的。子着色器是代码的主体,每一个子着色器中包含一个或者多个的Pass。在计算着色时,平台先选择最优先可以使用的着色器,然后依次运行其中的Pass,然后得到输出的结果。最后指定一个Fallback,即备胎,用来处理所有SubShader都不能运行的情况。
ps:在实际进行表面着色器的开发时,我们就是直接在SubShader这个层次上写代码,系统会将把我们的代码编译成若干个合适的Pass。 ps:SubShader在UnityShader的代码段中必须有且至少有一个,而properties和fallback对于追求简单的Shader,是可以不写出来的。而复杂一点的Shader,当然各种properties、fallback什么的肯定都有,甚至有多个SubShader,而每个SubShader中又有多个Pass。
ps:最后完成的工程并不适配oculus SDK,需将oculus SDK的摄像机设置为胶囊型刚体
The text was updated successfully, but these errors were encountered:
No branches or pull requests
使用Unity开发Virtual Reality
在进行第一个VR应用开发之前,我们来看看几个重要的概念:
我们需要编写大量3D操作的代码来表现我们的想法,可以直接通过OpenGL和DirectX来渲染3D视图,但是这样做太浪费时间了,unity3D游戏引擎来做这件事,Unity用于快速构建VR内容非常合适,最主要的是它非常容易掌握。
依照国际惯例先放几张完成后的截图:
四不四很高大上啊
如果有兴趣想学习Unity
一、可以按照下面的学习路线
推荐几个学习Unity的网站:
Unity中文官方论坛http://forum.china.unity3d.com/forum.php
Unity官方文档https://unity3d.com/cn/learn/
Unity知乎话题http://www.zhihu.com/topic/19568806
二、Unity开发VR的流程
三、Unity重要模块的类图
Component的类如下:
四、Unity Component的生命周期
五、简单介绍几个常用组件
2.Particle System组件
Particle System组件用于创作烟雾、气流、火焰、瀑布、喷泉、涟漪等效果
(建议使用realflow制作)
Physics组件分为Physics和Physics 2D两种。Unity拥有内置的NVIDIA PhysX物理引擎,可以模拟真实的物理行为。
Image Effects组件用于提高画面的画质感(图像后处理特效)。Image Effects可以为游戏画面补充很多外观和视觉上的效果。
(也可以用AE)
用于添加到Game Object上实现各种交互操作及其它功能
六、Shuriken粒子系统
Shuriken粒子系统采用了模块化管理,个性化的粒子模块配合粒子曲线编辑器使用户更容易创作出各种缤纷复杂的粒子效果。
创建一个粒子系统的方式有两种:
1.分别选择菜单栏中的 GameObject - Create Other - Particle System
2.创建一个Empty对象,在Component - Effects - Particle System
下面是粒子系统的属性面板
创建一个粒子系统后,
1.默认展开的是粒子系统的初始化模块:此模块为固有模块,不可删除或者禁用。该模块定义了粒子初始化时的持续时间、循环方式、发射速度、大小等一些列基本的参数。
2.Emission:发射模块
控制粒子的发射速率(Rate),在粒子持续时间内,可实现某个特定时间生成大量粒子的效果,可模拟爆炸效果生成一大堆的粒子。
3.Shape :形状模块
定义粒子发射器的形状,可提供沿形状表面法线或随机方向的初始力,并控制粒子的发射位置以及方向。
4.Velocity over Lifetime :生命周期速度模块
制着生命周期内每一个粒子的速度,对有着物理行为的粒子效果更明显,但对于那些简单视觉行为效果的粒子,如烟雾飘散效果以及与物理世界几乎没有互动行为的粒子,此模块的作用就不明显了。
5.Limit Velocity over lifetime :生命周期速度限制模块
控制粒子在生命周期内的速度限制以及速度衰减,可以模拟类似拖动的效果。若粒子的速度超过设定的限定值,则粒子速度之会被锁定到该限定值。
6.Force over Lifetime:生命周期作用力模块
控制粒子在生命周期内的受力情况。
7.Color over lifetime:生命周期颜色模块
控制粒子在生命周期内的颜色变化。
8.Color by Speed:颜色的速度控制模块
此模块可让每个粒子的颜色根据自身的速度变化而变化。
9.Size Over Lifetime :生命周期粒子大小模块
控制每一颗粒子在其生命周期内的大小变化。
10.Size by Speed:粒子大小的速度控制
此模块可让每颗粒子的大小根据自身的速度变化而变化。
11.Rotation Over Lifetime :生命周期旋转模块
控制每颗粒子在生命周期内的旋转速度变化。
12.Rotation by Speed :旋转速度控制模块
此模块可让每颗粒子的旋转速度根据自身速度的变化而变化。
13.External Forces:外部作用力模块
此模块可控制风域的倍增系数。
14.Collision:碰撞模块
可为每颗粒子建立碰撞效果,目前只支持平面碰撞,该碰撞对于简单的碰撞检测效率非常高。
15.Sub Emitters:子发射器模块
此模块可时粒子在出生、消亡、碰撞等三个时刻生成其他的粒子。
16.TextureSheet Animation:序列帧动画纹理模块
可对粒子在其生命周期内的UV坐标产生变化,生成粒子的UV动画。可以将纹理划分成网格,在每一格存放动画的一帧。同时也可以将文理划分为几行,每一行是一个独立的动画。需要注意的是,动画所使用的纹理在Renderer模块下的Material属性中指定。
17.Renderer:粒子渲染器模块
该模块显示了粒子系统渲染相关的属性。
七、Shader(着色器)和Material(材质)
ps:补充下可能用到的计算机图形学内容光照与材质
Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适的renderer(渲染器)来进行渲染(输出)了。
Shader只是一段规定好输入(颜色,贴图等)和输出(渲染器能够读懂的点和颜色的对应关系)的程序。而Shader开发者要做的就是根据输入,进行计算变换,产生输出而已。
计算机图形学中的渲染管线一般可以分为两种类型:
1.固定功能渲染管线(fixed-functionrendering pipelines)
2.可编程渲染管线(programmablerendering pipelines)
Unity中Shader分为三种基本类型:
1.固定功能着色器(Fixed Function Shader)
2.表面着色器(Surface Shader)
3.顶点着色器&片段着色器(Vertex Shader & Fragment Shader)
固定功能着色器便是我们所说的固定功能渲染管线(fixed-functionrendering pipelines)的具体表现,而表面着色器、顶点着色器以及片段着色器便属于可编程渲染管线。
没有嵌套CG语言,也就是代码段中没有CGPROGARAM和ENDCG关键字的,就是固定功能着色器。
嵌套了CG语言,代码段中有surf函数的,就是表面着色器。
嵌套了CG语言,代码段中有#pragma vertex name和 #pragma fragment frag声明的,就是顶点着色器&片段着色器。
Unity中Shader整体的框架写法可以用如下的形式来概括:
Shader "name" { [Properties] SubShaders[Fallback] }
ps:所有用于这个着色器的代码必须放置在之后的大括号中:{ }(称为“块”)。该名字应该是短且描述性的文字。它并不需要和shader文件名相同。而想要把着色器加入到Unity的子菜单里,名字需要用斜线(/)。
首先是一些属性定义,用来指定这段代码将有哪些输入。接下来是一个或者多个的子着色器,在实际运行中,哪一个子着色器被使用是由运行的平台所决定的。子着色器是代码的主体,每一个子着色器中包含一个或者多个的Pass。在计算着色时,平台先选择最优先可以使用的着色器,然后依次运行其中的Pass,然后得到输出的结果。最后指定一个Fallback,即备胎,用来处理所有SubShader都不能运行的情况。
ps:在实际进行表面着色器的开发时,我们就是直接在SubShader这个层次上写代码,系统会将把我们的代码编译成若干个合适的Pass。
ps:SubShader在UnityShader的代码段中必须有且至少有一个,而properties和fallback对于追求简单的Shader,是可以不写出来的。而复杂一点的Shader,当然各种properties、fallback什么的肯定都有,甚至有多个SubShader,而每个SubShader中又有多个Pass。
ps:最后完成的工程并不适配oculus SDK,需将oculus SDK的摄像机设置为胶囊型刚体
The text was updated successfully, but these errors were encountered: