内容简介:【博物纳新】是UWA重磅推出的全新栏目,旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。今天给大家安利一个keijiro的光环特效项目Isaura(Aura effect with a isoline shader),工程结构非常简单,只有必要的测试资源,代码量也不大,对新手非常友好。
【博物纳新】是UWA重磅推出的全新栏目,旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。
导读
今天给大家安利一个keijiro的光环特效项目Isaura(Aura effect with a isoline shader),工程结构非常简单,只有必要的测试资源,代码量也不大,对新手非常友好。
一、效果展示
二、项目概述
作者利用等值线Shader,将普通的粒子系统效果转化成绚丽漂亮的不规则圆环效果,调整美化后最终得到上图中“跟随角色招式的光环效果”,实现思路值得借鉴。
三、实现步骤
接下来,带大家简单看一看项目中漂亮的光环效果是如何实现的。
准备基础模型及动作
首先准备一个人形模型及对应的动作,由于希望在角色的左右手上制作出光环效果,故项目中保留了模型上的左右手节点使其暴露出来,并在节点下添加了两个紫色点光源。效果如下图:
在角色手上添加粒子特效
第二步,在角色的右手节点(希望有特效的部位)下创建两个粒子特效,项目中使用了一个Billboard粒子和一个Mesh粒子,效果如下:
将粒子系统效果渲染到一张RenderTexture上
新建一个RenderTexture资源Aura,格式设为R8,Size设为1920x1080。
新建Layer,命名为Isaura,并将第二步添加的粒子系统的Layer设为Isaura。
新建一个Camera 命名为Isaura Camera,并将其CullingMask设为Isaura层,TargetTexture设为Aura。
完成上述步骤后,第二步创建的粒子系统的渲染效果就被以R8格式存储在Aura这张RenderTexture上了。
编写等值线Shader,用于将图像转换成“等值线图”
项目中IsauraEffect.shader的部分代码:
Shader "Hidden/Isaura/Isaura Effect"
{
Properties
{
_MainTex("", 2D) = "" {}
_AuraTex("", 2D) = "" {}
_Color("", Color) = (1, 1, 1)
}
HLSLINCLUDE
#include "PostProcessing/Shaders/StdLib.hlsl"
TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex);
TEXTURE2D_SAMPLER2D(_AuraTex, sampler_AuraTex);
float4 _AuraTex_TexelSize;
half _Threshold; //等值线检测值
half _Thickness; //等值线厚度(粗细)
half4 _Color; //等值线颜色
half Contour(float2 uv)
{
float4 duv = _AuraTex_TexelSize.xyxy * float4(1, 1, -1, 0) * _Thickness;
half3x3 m = half3x3(
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv - duv.xy).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv - duv.wy).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv - duv.zy).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv - duv.xw).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv ).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv + duv.zw).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv + duv.zy).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv + duv.wy).r,
SAMPLE_TEXTURE2D(_AuraTex, sampler_AuraTex, uv + duv.xy).r
);
m = m > _Threshold;
half gx = m._11 + m._12 * 2 + m._13 - m._31 - m._32 * 2 - m._33;
half gy = m._11 + m._21 * 2 + m._31 - m._13 - m._23 * 2 - m._33;
return saturate(sqrt(gx * gx + gy * gy));
}
float4 Fragment(VaryingsDefault input) : SV_Target
{
float4 src = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, input.texcoord);
return src + Contour(input.texcoord) * _Color;
}
ENDHLSL
SubShader
{
Cull Off ZWrite Off ZTest Always
Pass
{
HLSLPROGRAM
#pragma vertex VertDefault
#pragma fragment Fragment
ENDHLSL
}
}
}
这个Shader的原理类似于边缘检测算法,通过计算周围点的色值梯度值,判断是否是等值线上的点。以第三步中的RenderTexture截图为例,Shader中的Contour(input.texcoord) * _Color输出结果如下图右:
新建PostProcessEffect,将粒子效果的等值线渲染到屏幕上
项目使用Post Processing v2添加后处理效果:
- 首先使用第4步中的Shader新建一个栈前(Before Stack)后处理效果,MenuItem设为“Isaura/Isaura
Effect”(具体代码可查看项目中的IsauraEffect.cs)。 - 新建Layer,命名为Post Fx。
- 新建一个GameObject PostFx,Layer设为Post Fx,并添加Post Process Volume组件,在Post
Process Volume上添加之前定义好的“Isaura/Isaura Effect”效果,如下图:
在MainCamera上添加Post Process Layer组件,Layer选择Post Fx(必须和Post Process Volume的Layer相同),如下图:
最后,为了避免MainCamera重复拍摄粒子系统效果,将Isaura层从Main Camera的Culling Mask中去除。运行一下可以得到如下的效果,至此已经基本实现了光环效果:
添加Bloom等效果,并适当调整参数
最后,在Post Process Volume组件上添加Unity的Bloom等效果,让光环更好看。
四、性能测试
作为负责任的小编,当然要测一测项目的性能。趁着UWA GOT Online还在打折,小编不惜花费了5块软妹币,使用小米8做了2分钟的性能测试,得到了一份这样的数据。
为了让数据更有说服力,我又做了两个版本共三个版本进行性能对比:
原版:原工程未做修改。
无特效版:关闭PostProcess和Isaura Camera,只保留基础角色动画和点光源。
优化版:修改Auara的尺寸为960x540,关闭Post Process Volume组件中对效果影响不大的特效如下图:
从数据图标中可以看出,虽然优化版的Isaura效果帧率已接近60帧,但考虑到测试场景简单的因素,更应该关注Camera.Render的渲染耗时。而在Camera.Render耗时均值的对比图表中可以看到,即使是优化版也比无特效版多出11.29ms耗时,说明这个效果还是非常吃性能的。
因此,不建议大家在中低端设备上直接使用Isaura效果,可以进一步优化或在高端设备上使用。
五、总结
综上所述,给你三个下载它的理由:
- 这是一个有颜有料易上手的小例子,适合也许是新手的你;
- 这是一个不需要复杂美术资源就能做出的漂亮特效,适合也许需要新思路的你;
- 这是一个Post Processing Stack v2的简单小例子,适合也许需要它的你。
此外,Isaura的渲染开销较高,建议开发者谨慎使用。
推荐使用版本:Unity 2018.1或更高版本。
打包注意事项:将IsauraEffect.shader添加到Always-Included-Shaders中。
该项目来自UWA开源库,您可以下载、收藏或评论Isaura项目。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 光环大数据 一名数据挖掘工程师给新人整理
- 【博物纳新】Unreal 海洋场景构建
- 【博物纳新】Unity海洋场景构建
- 【博物纳新】2D破碎效果开源库测评
- 【博物纳新】Procedural开源库合辑
- 【博物纳新】水面涟漪反射效果开源库测评
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Game Engine Architecture, Second Edition
Jason Gregory / A K Peters/CRC Press / 2014-8-15 / USD 69.95
A 2010 CHOICE outstanding academic title, this updated book covers the theory and practice of game engine software development. It explains practical concepts and techniques used by real game studios,......一起来看看 《Game Engine Architecture, Second Edition》 这本书的介绍吧!