unity3d线渲染器_unity3d使用拖尾渲染器模拟管道 - CSDN
  • 一眨眼学习Unity3D 也有一段时间了,基本已经拿下了这套游戏引擎,回过头来想想以前写的RPG 游戏引擎,越来越发现以前写的就是垃圾。人果然是要不断学习与不断进步,好好学习,天天向上。哇咔咔~
    任何一个无规则曲线它都是有若干个线段组成,及时是圆形它也是又若干个线段组成的,也就是说将若干个线段拼接起来就是我们须要的无规则曲线~那么在3D 的世界中我们须要知道 X Y Z 三个点来确定一条3D线段。

    首先先使用Unity编辑器的方式来添加一条线~
    Unity -> GameObject -> Create Empty 创建一个空的对象,我命名为line。然后点击 Component -> Miscellaneous -> Line Renderer 给line添加一个线渲染器的属性,Line Renderer是非常中的属性,下面我会详细的说明。
        


    Create -> Material 创建一个材质,做来这个线段的贴图,下面我们看看Line Renderer的一些重要参数。
    Cast Shadows: 是否投射阴影。
    Receive Shadows: 是否接收阴影。
    Materials :设置材质,这里可以设置多个材质, line就是上面我们创建的材质,这里我给line这个材质涂上了红颜色。
    Positions:这个属性就比较重要了,它是专门设置线段在3D 世界中的点的坐标,size 设置点的数量 为3 那么将会有3个点,Element 0   Element 1 Element 2    这三个点将确定这条曲线分为两段,第一段是(0,0,1) 到  (0,0,2) ,第二段是 (0,0,2) 到(0,0,4)。



    Paramerters 
    StartWidth :设置起点的宽度  
    EndWidth:  设置终点的宽度 ,这两项数值默认为1,但是现实起来很宽,所以一般都设置为0.几~ 
    Start Color: 设置起点颜色
    Start Color: 设置终点颜色
    Use World Space 使用世界坐标系

    大家看看效果,清楚的可以看到曲线分为两部分,第一部分较短 第二部分较长。



    怎么样? 绘制线的方法不难学吧?在已知线段位置的情况下我们可以使用上面的方法去设置这条线,但是如果线段的位置是在游戏过程中动态的产生就得在代码中去动态的去设置。


    创建脚本Main.cs 绑定到摄像头上,运行游戏绘制线的话须要在Main中去拿到line这个对象的实例。这就是一个比较重要的知识点了。

    一些重要的方法,在编辑器中编辑的一些东西,在代码中也可以做到。

    LineRenderer.SetWidth(0.1,0.1) ; 设置线段起始点与结束点的宽度 (参数1 为起始点 参数2为结束点)
    LineRenderer.SetColor(Color.black,Color.white); 设置线段起始点与结束点的颜色 (参数1 为起始点颜色 参数2为结束点颜色)
    LineRenderer.SetVertexCount(5); 设置线段数量。
    LineRenderer.useWorldSpace = true; 是否使用世界坐标系,和上面编辑器对应。

    [csharp] view plaincopy
    1. using UnityEngine;  
    2. using System.Collections;  
    3. using System.Threading;  
    4.   
    5. public class Main : MonoBehaviour {  
    6.       
    7.     //游戏对象,这里是线段对象  
    8.     private GameObject LineRenderGameObject;  
    9.       
    10.     //线段渲染器  
    11.     private LineRenderer lineRenderer;  
    12.       
    13.     //设置线段的个数,标示一个曲线由几条线段组成  
    14.     private int lineLength = 4;  
    15.       
    16.     //分别记录4个点,通过这4个三维世界中的点去连接一条线段  
    17.     private Vector3 v0 = new Vector3(1.0f,0.0f,0.0f);  
    18.     private Vector3 v1 = new Vector3(0.0f,1.0f,0.0f);  
    19.     private Vector3 v2 = new Vector3(0.0f,0.0f,1.0f);  
    20.     private Vector3 v3 = new Vector3(1.0f,0.0f,0.0f);  
    21.       
    22.     void Start(){  
    23.           
    24.         //通过之前创建的对象的名称,就可以在其它类中得到这个对象,  
    25.         //这里在main.cs中拿到line的对象  
    26.         LineRenderGameObject = GameObject.Find ("line");  
    27.           
    28.         //通过游戏对象,GetComponent方法 传入LineRenderer  
    29.         //就是之前给line游戏对象添加的渲染器属性  
    30.         //有了这个对象才可以为游戏世界渲染线段  
    31.         lineRenderer = (LineRenderer)LineRenderGameObject.GetComponent ("LineRenderer");  
    32.           
    33.         //设置线段长度,这个数值须要和绘制线3D点的数量想等  
    34.         //否则会抛异常~~  
    35.         lineRenderer.SetVertexCount(lineLength);  
    36.           
    37.           
    38.     }     
    39.                    
    40.       
    41.     void Update() {  
    42.           
    43.         //在游戏更新中去设置点  
    44.         //根据点将这个曲线链接起来  
    45.         //第一个参数为 点的ID   
    46.         //第二个 参数为点的3D坐标  
    47.         //ID 一样的话就标明是一条线段  
    48.         //所以盆友们须要注意一下!  
    49.           
    50.         lineRenderer.SetPosition (0, v0);  
    51.         lineRenderer.SetPosition (1, v1);  
    52.         lineRenderer.SetPosition (2, v2);  
    53.         lineRenderer.SetPosition (3, v3);  
    54.   
    55.   
    56.     }  
    57.       
    58. }  

    通过上面代码的设置,运行游戏,发现全新的一个三角形曲线赫然的映入我们的眼帘,有了上面的方法我们就可以组合的绘制出各种各样的3D 游戏曲线了,这里MOMO使用的是颜色,大家也可以添加一个贴图~




    展开全文
  • LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意LineRenderer渲染出的线段的两个...
          LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意LineRenderer渲染出的线段的两个端点是3D世界中的点,即他是属于世界坐标(World Point)中的。
    

           LineRenderer是以组件形成存在的,首先我们新建一个空的Game Object,然后我们选择“Component→Effects→Line Renderer”,即可为其添加LineRenderer组件了。

     

    其实我们也可以通过脚本来为其添加LineRenderer组件:

    LineRenderer lineRenderer = gameObject.AddComponent<LineRenderer>();


     

    获取LineRenderer组件:

    lineRenderer = GetComponent<LineRenderer>();


     

    案例】根据鼠标左击的位置,来持续绘制线段

    首先我们在场景中新建一个空的GameObject,并Reset一下。然后将Script1脚本添加给他。

    using UnityEngine;
    using System.Collections;
    
    public class Script1 : MonoBehaviour {
        //LineRenderer
        private LineRenderer lineRenderer;
        //定义一个Vector3,用来存储鼠标点击的位置
        private Vector3 position;
        //用来索引端点
        private int index = 0;
        //端点数
        private int LengthOfLineRenderer=0;
    
        void Start()
        {
            //添加LineRenderer组件
            lineRenderer = gameObject.AddComponent<LineRenderer>();
            //设置材质
            lineRenderer.material = new Material(Shader.Find("Particles/Additive"));
            //设置颜色
            lineRenderer.SetColors(Color.red, Color.yellow);
            //设置宽度
            lineRenderer.SetWidth(0.02f, 0.02f);
            
        }
    
        void Update()
        {  
            //获取LineRenderer组件
            lineRenderer = GetComponent<LineRenderer>();
           //鼠标左击
            if (Input.GetMouseButtonDown(0))
            {
                //将鼠标点击的屏幕坐标转换为世界坐标,然后存储到position中
                position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,1.0f)); 
                //端点数+1
                LengthOfLineRenderer++;
                //设置线段的端点数
                lineRenderer.SetVertexCount(LengthOfLineRenderer);
                
            }
            //连续绘制线段
            while (index < LengthOfLineRenderer)
            {   
                //两点确定一条直线,所以我们依次绘制点就可以形成线段了
                lineRenderer.SetPosition(index, position);
                index++;
            } 
           
    
        }
    
        void OnGUI()
        {          
            GUILayout.Label("当前鼠标X轴位置:" + Input.mousePosition.x);
            GUILayout.Label("当前鼠标Y轴位置:" + Input.mousePosition.y);        
        }
        
    	
    }
    


     

    效果图:

     

     

    在这里我提一下,如果我们将Input.GetMouseButtonDown(0)改为Input.GetMouseButton(0)会产生什么样的效果呢?那就是我们拖动鼠标就可以持续的渲染线段了。

    展开全文
  • unity 线渲染器LineRender

    2018-04-04 09:13:39
    1.材质球2.起点终点LineRender.Setposition

    1.材质球

    2.起点终点

    LineRender.Setposition

    展开全文
  • 任何一个模型都是由若干个网格面组成,而网格面由若干个三角面组成。下面我们就创建一个三角面。 创建一个空物体GameObject.添加MeshFilter组件和MeshRenderer组件。 示例代码如下:  //三角形的三个顶点 ...

    任何一个模型都是由若干个网格面组成,而网格面由若干个三角面组成。下面我们就创建一个三角面。

    创建一个空物体GameObject.添加MeshFilter组件和MeshRenderer组件。

    示例代码如下:

    1.     //三角形的三个顶点
    2.     Vector3 v0 = new Vector3 (5, 0, 0);
    3.     Vector3 v1 = new Vector3 (0, 5, 0);
    4.     Vector3 v2 = new Vector3 (0, 0, 5);
    5.   //三角形的三个顶点
    6.     Vector3 v3 = new Vector3 (-5, 0, 0);
    7.     Vector3 v4 = new Vector3 (0, -5, 0);
    8.     Vector3 v5 = new Vector3 (0, 0, -5);
    9.     //三角形的贴图比例
    10.     Vector2 u0 = new Vector2 (0, 0);
    11.     Vector2 u1 = new Vector2 (0, 5);
    12.     Vector2 u2 = new Vector2 (5, 5);
    13.  //三角形的贴图比例
    14.     Vector2 u3 = new Vector2 (0, 0);
    15.     Vector2 u4 = new Vector2 (0, 1);
    16.     Vector2 u5 = new Vector2 (1, 1);
    17. //三角形的材质
    18.     public Material mat;
    19.     void Start ()
    20.     {
    21.         //获取MeshFilter组件
    22.         MeshFilter mf = gameObject.GetComponent<MeshFilter> ()as MeshFilter;
    23.         //网格对象
    24.         Mesh mesh = mf.mesh;
    25.        //网格的顶点
    26.         mesh.vertices = new Vector3[]{ v0, v1, v2, v3, v4, v5 };
    27.        //网格的贴图比例
    28.         mesh.uv = new Vector2[]{ u0, u1, u2, u3, u4, u5 };
    29.        //绘制三角形
    30.         mesh.triangles = new int[]{ 0, 1, 2, 3, 4, 5 };
    31.        //材质
    32.         MeshRenderer mr = gameObject.GetComponent<MeshRenderer> ()as MeshRenderer;
    33.         mr.material = mat;
    34.     }

     

     

    展开全文
  • Unity3D Shader 渲染流程

    2018-09-14 16:37:56
    Shader渲染流程是CPU和GPU合作渲染一帧的过程,绘制过程分为三个阶段: 应用程序阶段(CPU控制)、几何阶段(GPU控制)、光栅化阶段(GPU控制) 应用程序阶段:主要进行CPU和内存的算法。在这个阶段的主要工作是...

    Shader渲染流程是CPU和GPU合作渲染一帧的过程,绘制过程分为三个阶段:

    应用程序阶段(CPU控制)、几何阶段(GPU控制)、光栅化阶段(GPU控制)

    应用程序阶段:主要进行CPU和内存的算法。在这个阶段的主要工作是准备好那些对象要被渲染、被剔除等,然后加载到内存,设置好对象需要渲染的状态(材质、纹理等),最后输出渲染图元。

    几何阶段:它从CPU哪里接收来渲染图元,进行对顶点坐标转换、裁剪、投影以及屏幕映射的工作,然后输出经过变换和投影之后的顶点坐标、颜色、以及纹理坐标交给光栅器进行处理。

    光栅化阶段:该阶段通过接受几何阶段的数据用来在屏幕上生成像素,并渲染成最终的图像。该阶段主要进行像素操作

    ,任务是决定每个渲染图元中那些像素会被绘制在屏幕上。

    渲染流程-几何阶段

    1、顶点着色器

    顶点着色器是完全可编译的,处理单位是顶点,每个顶点都会调用一次顶点着色器,主要用于实现顶点的坐标转换、顶点着色两大功能。

    顶点变换有以下几个阶段:模型空间—世界空间—视图空间—剪裁空间

    2、投影

    着色之后渲染系统执行投影,将观察体置换到点(-1,-1,-1)到(1,1,1)的单位立方体,单位立方体也叫规则观察体。有两种常用的投影方法,分别是正交投影和透视投影(就是Unity这个选项,如图)

    观察体的正交视图通常就是一个矩形盒子,正交投影的主要特点是变换之后水平线依然是平等的,正交变换是平移和缩放的结合。如下为正交投影图(矩形的大小可以自行调节)。

    透视投影比较像是我们的眼睛,投影之后远离摄像机的物体看起来小一点,靠近摄像机的物体更大一点,观察体是锥体,同样被转换到单位立方体中。

    从一个体到另一个矩阵变换被称为投影,因为变换之后,z坐标是不会存储在生成的图像中的,经过投影模型从三维变成二维。

    3、剪裁

    只有图元全部或部分在观察体内才能被传递到光栅阶段,然后绘制到屏幕上,这一阶段主要是把不在视野范围内的图元给剔除掉,仅对部分可见的图元进行裁剪,同时会根据图片朝向或者背离相机来决定是否需要剔除。

    这一阶段是不可编程的,但是我们可以通过定义裁剪面或者设置正反面剔除模式来进行配置。

    4、映射

    这一阶段是不可配置也不可编程的,主要是用来实现图元的坐标转换到屏幕坐标

    渲染流程-光栅化阶段

    1、三角形设置

    根据上一个阶段输出的三角网格的三个顶点,计算光栅化一个三角形网格所需要的信息。简单来说就是通过计算每条边和边界像素的信息,来得到整个三角形对屏幕上像素的覆盖情况。

    2、三角形遍历

    检查每个像素是否被一个三角形网格所覆盖。如果覆盖就会生成一个片元。找到那些像素被三角网格覆盖的过程就是三角形遍历。三角形遍历阶段还会是使用三角网格的3个顶点信息对整个覆盖区域的像素进行差值。

    输出的片元并不是真正意义上的像素,而是包含了很多状态的集合,这些状态用来计算最终颜色。这些状态包括但不限于他的屏幕坐标,深度信息,法线,纹理坐标等。

    3、片元着色器

    在这一阶段会遍历上一阶段的片元序列并对每个片元执行片元着色器。在这个阶段最重要的技术就是进行纹理采样。

    注:片元着色器进影响单个片元。

    4、逐片元操作

    该阶段的主要目的是:将上一阶段输出的片元颜色与颜色缓冲区中的颜色进行混合。

    主要工作过程是:

    ①、检测片元的可见性:检测包括对片元进行模板测试和深度测试。

    ②、将通过检测的片元与颜色缓冲区中的颜色按照指定的方式进行混合,将没有通过检测的片元舍弃掉

     

    展开全文
  • Unity3D 渲染路径

    2017-06-14 18:26:28
    Unity渲染路径: Unity支持不同的渲染路径。您应具体取决于你的游戏内容和目标平台/硬件来选择使用哪一个。不同的渲染路径有不同的特点和性能特点,主要影响灯光和阴影如果图形卡不能处理选定的渲染路径,Unity将...
  • 近日在学习Unity3d的SRP,由于官方未正式发布,故几乎没有文档支持,考虑到官方一贯的风格,即使正式发布了,估计Shader部分也不会有详尽的文档。所以,干脆自己在研究学习源码之余,写了一份文档,既加深自己的理解...
  • Unity API-----Renderer(渲染器) 官方文档阅读记录 版本 : 2019.3 官方文档传送门 Renderer是UnityEngine命名空间下的一个类. Renderer继承于Component. 描述 : 所有渲染器的常规功能。 渲染器使对象出现在屏幕上。...
  • Unity渲染流水线理解

    2019-03-03 19:51:04
    基础名词解释 3D物体:由三角形组成的...渲染管线:又叫渲染流水线,将数据从3D场景转换成2D图像,最终在屏幕上显示出来的总过程,其主要分为应用阶段、几何阶段、光栅阶段 片元:不是真正意义上的像素,而是很多状...
  • Unity3D渲染优化技巧

    2014-09-06 19:58:38
    Unity3D引擎交流QQ群:【21568554】 优化图形性能 良好的性能对大部分游戏的成功具有决定作用。下面是一些简单的指导,用来最大限度地提高游戏的图形渲染。 图形需要哪些开销 游戏的图形部分主要开销...
  • Unity3d LineRenderer画线

    2016-02-18 16:29:52
    LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意LineRenderer渲染出的线段的两个...
  • Unity 线渲染器

    2013-07-12 17:16:03
    相关属性: ...Positions:这个属性就比较重要了,它专门用于设置线段在3D世界中的坐标,其中Size与线段的数量保持一致,Element节点中就是每个线段点的位置。 Start Width :设置线段起点的宽度。 End
  • Unity3D】计算机图形学-GPU渲染管线 1、GPU渲染管线:CPU传送给GPU一堆数据,最后渲染得出来一副二维图像,而这些数据就包括了”视点、三维物体、光源、照明模型、纹理”等元素。 渲染管线主要分为三个阶段...
  • unity3d渲染路径整理

    2017-09-18 16:33:45
    方向光源是最不消耗GPU资源的。点光源的阴影较消耗GPU资源。聚光灯是较消耗GPU资源的。 Area light区域光源无法用于实时光照,只适用于...unity3d渲染路径: 只有平行光在forward渲染模式下支持阴影,其它光源类型在pl
  • 目前收集整理了20个Unity3D着色插件,效果都不错。 1.Unity3D 毁灭着色特效 Damage FX v1.2 http://www.idoubi.net/unity3d/shader/2543.html 2.Unity3D 水下特效 Sleepless Underwater Effects ...
  • 渲染过程渲染过程 - 通常从是三维场景出发、生成一张二维图像,由CPU和GPU共同合作完成。
  • Unity3d编辑的使用

    2019-06-24 19:24:43
    第一步:双击Unity3d,点击New 第二步:填写项目信息,注意:工程必须放在空文件夹下 第三步:点击创建 第四步:工程创建完毕 文件夹介绍: Assets:放项目所有资源的文件夹 Library:文件资源库 ...
  • LineRenderer线渲染器主要是用于在3D中渲染线段,在这里要注意LineRenderer渲染出的线段的两个端点是3D世界中的点,即它是属于世界坐标(World Space)中的。 这里我设置了一组单选按钮,通过单选按钮控制线条颜色...
  • Unity渲染管线

    2018-09-26 11:01:51
    Unity的渲染管线 英文原文:https://docs.unity3d.com/Manual/SL-RenderPipeline.html 着色定义了对象的视觉效果(通过材质属性设置)以及对象如何与光线产生反应。因为光照计算必须内置到着色中,而且光源与...
  • 第一部分介绍了如何设置Unity3D ,第二部分介绍了如何 使用C#控制Unity3D 。 在本系列的最后一篇文章中,我们将深入研究如何使用Unity3D将代码实际制作成一个简单的游戏。 让我们开始吧 让我们建立一...
1 2 3 4 5 ... 20
收藏数 4,172
精华内容 1,668
关键字:

unity3d线渲染器