unity3d后期特效 - CSDN
  • 在Unite ShangHai 2016 Keynote中,《Adam》的图形技术介绍,令人印象深刻:可以与电影效果相媲美、近乎次时代大作、好莱坞大片效果的3分钟实时渲染的短片,淋漓尽致的展现了unity 5.4的奋发图强,和对VR开发者的...
    Unite ShangHai 2016 Keynote中,《Adam》的图形技术介绍,令人印象深刻:可以与电影效果相媲美、近乎次时代大作、好莱坞大片效果的3分钟实时渲染的短片,淋漓尽致的展现了unity 5.4的奋发图强,和对VR开发者的潜台词–“相信Unity 5.4,VR没错的。”
    本文就Image Effect进行实践,所用版本是Unity 5.4.0b14 beta版本。

     

    下载Image Effect插件

    Unity内置的特效,已经于2015.12.10免费开源了:CINEMATIC IMAGE EFFECTS (PRE-RELEASE)
    • 下载方式1:Asset Store   Cinematic Image Effects pre-release          版本: 1.0.5 (Apr 06, 2016)文件大小: 714.5 kB

    • 下载方式2:bitbucket 开源社区   cinematic-image-effects          为了持续增强Image Effect的功能和提高性能,官方还设立一个论坛版块:
              Forums>Unity Community Support>Graphics>Image Effects

    部分渲染特效实践
    使用渲染特效,非常简单,直接在Camera添加组件即可—下载完Image Effect插件后,导入Unity即可使用。

    Screen Space Reflection屏幕空间光线追踪反射(SSRR)倒影效果Screen Space Ambient Occlusion (SSAO)  屏幕空间环境遮挡特效 —模拟全景漫反射

    反|抗锯齿(Anti Aliasing | SMAA).

    Bloom 泛光 场景变得梦幻
    色调映射 ToneMapping【HDR模式有用】–  [和Bloom混合使用]
    深入学习文档
    Unity自带的英文文档,非常好,下载Unity的时候直接安装一下,遇到问题,点击问号,即可打开本地的英文文档,便于深入快速学习。

    然后,输入Image Effect关键字搜索,即可打开Unity内置提供的特效帮助–有图、有文字说明,学习还是挺方便的。

    后期屏幕渲染原理
    屏幕后期渲染,使用的是Graphics的Blit方法,他和相机的Render方法不同之处在于Blit在屏幕上做了一个和屏幕大小一样的平面,用第三个参数(材质—Shader)进行从当前面到新面的替代。 即Blit是在渲染一个平面,而Render在渲染一个物体。
    Graphics.Blit函数
    public static void Blit(Texture source, RenderTexture dest, Material mat);

    MonoBehaviour.OnRenderImage函数
    void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)

    Shader文件:写一个顶点片段shader
    #pragma vertex vert_img 
    #pragma fragment frag

    备注:
    • 参考文档 《Unity 5.X 从入门到精通》
    • 参考文档 《Unity Shaders and Effects Cookbook》
    • demo Git地址:Shader_ImageEffects

    转载请注明转自《unity3d for VR 学习(11): 后期屏幕渲染特效(Image Effect)
    展开全文
  • Lutify unity3d后处理特效
  • Unity3d屏幕特效-摄像机特效插件-Camera Filter Pack 4.0.0
  • The Vignetting image effect introduces darkening, blur and chromatic aberration (spectral color separation) at the edges and corners of the image. This is usually used to simulate a view through a ca

    The Vignetting image effect introduces darkening, blur and chromatic aberration (spectral color separation) at the edges and corners of the image. This is usually used to simulate a view through a camera lens but can also be used to create special effects.

    渐晕图像特效变在图像的边缘和拐角区域进行变暗、模糊和色差 (光谱颜色分离)操作。这通常用于模拟通过摄像机镜头的显示视图,但也可用于创建一些特殊的效果。

    Example of Vignetting. Notice how the screen corners get darker and more blurred and also show color separation.

    渐晕特效例子。注意屏幕的边角区域是如何变暗、模糊和颜色分离的。

     

    As with the other image effects, this effect is only available in Unity Pro and you must have the Pro Standard Assets installed before it becomes available.

    和其他图像特效一样,该特效只能在Unity Pro上进行使用,并且在使用之前必须安装Pro Standard Assets

     

    Properties           属性

    Intensity

    亮度

    The degree of darkening applied to the screen edges and corners.

    应用于屏幕边角区域的调暗强度。

    Chromatic Aberration

    色差

    The degree of chromatic aberration. A value of 0.0 will disable chromatic aberration entirely

    色差程度。0.0表示完全关闭色差功能。.

    Blur

    模糊

    The amount of blur that is added to the screen corners

    在屏幕拐角区域添加的模糊程度.

    Blur Spread

    模糊扩散

    The blur width used when Blur is added.

    当模糊添加时所用模糊宽度。

     

    Hardware support        硬件支持

    This effect requires a graphics card with pixel shaders (2.0) or OpenGL ES 2.0. PC: NVIDIA cards since 2003 (GeForce FX), AMD cards since 2004 (Radeon 9500), Intel cards since 2005 (GMA 900); Mobile: OpenGL ES 2.0; Consoles: Xbox 360, PS3.

    这个特效需要显卡拥有像素着色器(2.0)或者OpenGL ES 2.0。台式机:2003年以后的NVIDIA显卡(GeForce FX),2004年以后的AMD显卡(Radeon 9500),2005年以后的Intel卡(GMA 900);移动设备:OpenGL ES 2.0控制台: Xbox 360 PS3

     

    All image effects automatically disable themselves when they can not run on end-users graphics card.

    所有图像特效如果无法在用户显卡上运行时将会自动被关闭。
    展开全文
  • 全屏特效 黑白(对于《着色器和屏幕特效开发秘籍》的学习)  可实现死亡效果或需要黑白特效的效果  原理是通过OnRenderImage()函数在摄像机渲染的时候,改变颜色(饱和度) 新建一个c#脚本,将要...
    全屏特效 黑白(对于《着色器和屏幕特效开发秘籍》的学习) 


    可实现死亡效果或需要黑白特效的效果 

    原理是通过OnRenderImage()函数在摄像机渲染的时候,改变颜色(饱和度)


    新建一个c#脚本,将要放在摄像机中

    [ExecuteInEditMode]
    就是让这个脚本不开始也直接运行,方便观察效果


    using UnityEngine;
    using System.Collections;
    [ExecuteInEditMode]
    public class ShaderTest : MonoBehaviour
    {



    开始声明所需变量

    curshader 需要用到的shader;
    grayscaleAmount 灰度大小;


    	public Shader curShader;
    	public float grayScaleAmount = 1.0f;
    	private Material curMaterial;
    开始时检测 
    如果!SystemInfo.supportsImageEffects(如果计算机不支持图像处理的话) 
    或者无curshader(一会会用到)再或者!curShader.isSupported(不能在终端用户的图形卡上运行这个着色器) 
    就取消这个脚本 
    enabled = false;


    void Start () {
    		if (SystemInfo.supportsImageEffects == false) {
    			enabled = false;
    			return;
    		}
    
    		if (curShader != null && curShader.isSupported == false) {
    			enabled = false;
    		}
    	}
    OnRenderImage()抓取摄像机的渲染图像(我们在里面改动它) 
    往材质里传灰度值 

    然后改动完毕就Graphics.Blit()(拷贝源纹理到目的渲染纹理)


    	void OnRenderImage (RenderTexture sourceTexture, RenderTexture destTexture){
    		if (curShader != null) {
    			material.SetFloat("_LuminosityAmount", grayScaleAmount);
    
    			Graphics.Blit(sourceTexture, destTexture, material);
    		} else {
    			Graphics.Blit(sourceTexture, destTexture);
    		}
    	}

    在update中放入这句 
    grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f); 
    的目的是,方便你随时改动灰度值。如果灰度值确定了这句可以不要。

    	void Update () {
    		grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f);
    	}


    便于删除回收

    	void OnDisable () {
    		if (curMaterial != null) {
    			DestroyImmediate(curMaterial);
    		}
    	}


    再看shader



    书上用的是纯CG代码,不是UNITY内置着色器语言,所以屏幕特效会更加优化,因为只需要对渲染纹理的像素进行处理操作。

    首先在Properties 中声明变量
    包括maintex和灰度值

    	Properties {
    		_MainTex ("Base (RGB)", 2D) = "white" {}
    		_LuminosityAmount ("GrayScale Amount", Range(0.0, 1.0)) = 1.0
    	}

    加入pass模块 
    用#pragma声明一些新的


    SubShader {
    		Pass {
    			CGPROGRAM
    			#pragma vertex vert_img
    			#pragma fragment frag
    			
    			#include "UnityCG.cginc"

    核心就在这个frag函数中 
    tex2d()返回一个纹理的数据 
    把红*0.299,绿*0.587,蓝*0.114,来获取一个亮度值(也就是颜色深浅值)luminosity 

    最终的颜色值  finalColor   是renderTex与灰度值的一个线性插值,根据亮度值(颜色深浅值) 
    ok,死亡效果的屏幕特效就这么完成了 


    fixed4 frag(v2f_img i) : COLOR
    			{
    				//Get the colors from the RenderTexture and the uv's
    				//from the v2f_img struct
    				fixed4 renderTex = tex2D(_MainTex, i.uv);
    				
    				//Apply the Luminosity values to our render texture
    				float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b;
    				fixed4 finalColor = lerp(renderTex, luminosity, _LuminosityAmount);
    				
    				return finalColor;
    			}


    以下全部代码


    using UnityEngine;
    using System.Collections;
    [ExecuteInEditMode]
    public class ShaderTest : MonoBehaviour
    {
    	#region Variables
    	public Shader curShader;
    	public float grayScaleAmount = 1.0f;
    	private Material curMaterial;
    	#endregion
    
    	#region Properties
    	public Material material {
    		get {
    			if (curMaterial == null) {
    				curMaterial = new Material(curShader);
    				curMaterial.hideFlags = HideFlags.HideAndDontSave;
    			}
    			return curMaterial;
    		}
    	}
    	#endregion
    
    	// Use this for initialization
    	void Start () {
    		if (SystemInfo.supportsImageEffects == false) {
    			enabled = false;
    			return;
    		}
    
    		if (curShader != null && curShader.isSupported == false) {
    			enabled = false;
    		}
    	}
    
    	void OnRenderImage (RenderTexture sourceTexture, RenderTexture destTexture){
    		if (curShader != null) {
    			material.SetFloat("_LuminosityAmount", grayScaleAmount);
    
    			Graphics.Blit(sourceTexture, destTexture, material);
    		} else {
    			Graphics.Blit(sourceTexture, destTexture);
    		}
    	}
    	
    	// Update is called once per frame
    	void Update () {
    		grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f);
    	}
    
    	void OnDisable () {
    		if (curMaterial != null) {
    			DestroyImmediate(curMaterial);
    		}
    	}
    }
    

    shader

    Shader "Custom/imageTest" {
    	Properties {
    		_MainTex ("Base (RGB)", 2D) = "white" {}
    		_LuminosityAmount ("GrayScale Amount", Range(0.0, 1.0)) = 1.0
    	}
    	SubShader {
    		Pass {
    			CGPROGRAM
    			#pragma vertex vert_img
    			#pragma fragment frag
    			
    			#include "UnityCG.cginc"
    			
    			uniform sampler2D _MainTex;
    			fixed _LuminosityAmount;
    			
    			fixed4 frag(v2f_img i) : COLOR
    			{
    				//Get the colors from the RenderTexture and the uv's
    				//from the v2f_img struct
    				fixed4 renderTex = tex2D(_MainTex, i.uv);
    				
    				//Apply the Luminosity values to our render texture
    				float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b;
    				fixed4 finalColor = lerp(renderTex, luminosity, _LuminosityAmount);
    				
    				return finalColor;
    			}
    			
    			ENDCG
    		}
    	}
    	FallBack "Diffuse"
    }
    


    展开全文
  • 系列目录 【Unity3D基础】让物体动起来①--基于UGUI的鼠标点击移动 【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动 时光煮雨 Unity3D让物体动起来③—UGUI DoTween...时光煮雨 Unity3D实现2D人物动画② Un...

    系列目录

    【Unity3D基础】让物体动起来①--基于UGUI的鼠标点击移动

    【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动

    时光煮雨 Unity3D让物体动起来③—UGUI DoTween&Unity Native2D实现

    时光煮雨 Unity3D实现2D人物动画① UGUI&Native2D序列帧动画

    时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&资源效率

    时光煮雨 Unity3D实现2D人物动画② Unity2D 动画系统&资源效率

    前言

    上篇提到的引用的“图片切换法”,以及这篇要讲的“图片截取法”(这两个说法都是引用的大牛深蓝色右手的原话),实际上序列帧动画的本质就是定时器,已经反复强调过了。这里“图片切换法”和“图片截取法”主要是针对纹理资源的获取途径方式来划分的,主要原因还是渲染效率的问题,如果会写网页的同学也一定都知道有CSS有一种Sprite雪碧技术,就是把松散的小图合并成一张大图来减少网络请求数,这里原理是可以类比的。实际上在Unity3D中这个问题已经很好的解决了,这也是本文的一个主题。

    本文的两个主题分别是

    一、使用Animation编辑器实现2D人物序列帧动画

    二、Unity3D中2D资源的优化工具简介

    效果图

    1(1)

    实现

    一、使用Animation编辑器实现2D人物序列帧动画

    这里由于方面的教程很多,所以这里也就是点到为止,记录关键点和关键部分,需要学习的朋友自己按照其它教程实现一遍自然明白,这里就不用浪费口舌了。

    A、制作素材,这里直接引用深蓝的原话了

    准备工作:这里我以创建主角向右方向施法动画为例。首先需要将10帧150*150的图片通过Photoshop或其他方式合成为一张1500*150的大图,如下图:

    5

    从图上可以很清晰的看出主角的整个流畅的施法流程。接着,我将该文件取名叫PlayerMagic.png保存。还记得上篇引用的文字吗,个人觉得挺赞的 (因为是提取的素材,初始宽和高是不均衡值,所以必须扩大成自己的需求,这样人物会在图片中居中,并且为后期加入武器或坐骑留好余地。稍微的偏离也可以在后期进行微调

    红字部分觉得比较赞的。将该图导入到Unity3d中(很多种方法拖拽即可)

    B、使用Sprite Editor工具(点击Project下的图片)进行分割,这里有了A的上下文思想,所以个人觉得使用静态分割是比较合理的,图片素材由美工或者自己按照规格调好,符合单一原则,以下是截图

    spriteEditor

    2

    C、使用Animation工具窗口,制作序列帧动画即可(其实我觉得有点像关键帧动画不知道为什么叫序列帧),这里需要注意的就是制作动画必须选中GameObject(也是Animation工具必须的)这样动画控制组件和动画就自动挂接绑定到了选中的GameObject上,

    两个关键点:

    1、移动关键帧的时候,可以使用滚轮放大时间线,然后逐个拖拽(感觉不是很方便,不知道有没有更方便的方法)

    2、注意调节采样率已达到最好的显示效果

    animation

    二、Unity3D中2D资源的优化工具简介

    实际我们通过一,已经介绍了一个纹理分割的工具Sprite Editor了,下面还有一个工具,就是针对上篇中的非组合打包的图片,Unity3d也提供了一个工具,叫做sprite Packer,使用很简单了(注意下图红圈即可),主要的疑问是性能的提高的效果,这里就需要介绍Unity3d 性能查看工具了,但是发现Unity3d 5.x以后和很多教程上显示的不一样(可能是更新了,这里先不深究以后慢慢研究了)

    sprite Packer

    Stats

    总结

    万里长征第二步终于完成了,没有什么好说的,简单还是简单。

    转载于:https://www.cnblogs.com/IlidanStormRage/p/6043865.html

    展开全文
  • unity3d 各大插件评测

    2018-01-30 15:00:43
    原创文章如需转载请注明:转载自风宇冲Unity3D教程学院 引言:想用Unity3D制作优秀的游戏,插件是必不可少的。工欲善其事必先利其器。本文主旨是告诉使用Unity3D引擎的同学们如何根据需求选择适当的工具...
  • 本篇文章将分析如何在Unity中基于Shader实现高斯模糊屏幕后期特效。 首先放出最终的实现效果。如下几幅图,是在Unity中使用本文所实现的Shader得到的高斯模糊屏幕后期特效与原始图的效果对比图。 写实风格的...
  • Unity3d不久之前正式发布了Unity3d 2017.1, 这个版本的发布也宣告了Unity3d正式告别了5.x时代,并且开始已年份直接命名,开启了新的纪元。那么Unity3d 2017相较上一版本到底有哪些改进呢?这介绍这些改进之前先放出...
  • 为了让开发者能够系统全面的学习Unity3D知识,CSDN特邀请了Unity3D方面的知名专家,资深程序员一起打造了Unity3D知识库,经过各位特邀编辑的层层筛选,目前已收录的核心知识点精华文章已达300多篇,包括视...
  • Unity3D性能优化--- 收集整理的一堆 官方优化文档--优化图像性能 http://docs.unity3d.com/Documentation/Manual/OptimizingGraphicsPerformance.html Unity3D性能优化专题 性能优化是一个异常繁琐而又涉及到...
  • Unity 3D 重建 和3d 扫描特效
  • 转载于:https://www.cnblogs.com/Firepad-magic/p/5797533.html
  • Unity 特效drawcall优化

    2017-12-19 17:07:53
    参考原文地址: 1.... ... 在做动作游戏中总会有很多重复的特效出现。比如:受击特效,治疗特效等公用特效。我们的程序跟我们说为了减少DC(DrawCall),要求说受击后播放
  • 继续第一篇的实战项目学习,完成游戏“弹道精英”后期开发,特效、音效的控制等至打包上线。
  • 目前,Unity3D应用范围非常广泛,从手机游戏到联网的大型游戏,从严肃游戏到电子商务,再到VR虚拟现实均可完美呈现。Unity3D是一软专业3D游戏引攀,其具备跨平台发布、离效能优化、高性价比,AAA级游戏画面演染效果...
  • Begin这个冬天积雪的屏幕特效,从效果上看还是不错的。实现的原理还是挺简单的。首先获取到屏幕像素的深度纹理信息,得到每个像素的法线。利用法线的Y值得到积雪的程度。然后把积雪贴图和原本的贴图进行混合。
  • 3dsmax2010安装插件,输出FBX的类型导入Unity3D中。默认情况下,3dsmax8可以和U3D软件直接融合,自动转换为FBX物体。 1.面数控制 在MAX软件中制作单一Game Object物体的面数不能超过65000个三角形,即32500个...
  • 发现好文章,迫不及待转载。我也在学习的路上,一起加油!!! unity3d交流群:836901775 转载自:https://blog.csdn.net/poem_qianmo/article/details/51871531
  • Unity3D Shader编程】之八 Unity5新版Shader模板源码解析 径向模糊屏幕特效的实现
1 2 3 4 5 ... 20
收藏数 845
精华内容 338
热门标签
关键字:

unity3d后期特效