unity3d火焰材质球_unity3d2018 材质球怎么换材质k帧 - CSDN
  • 3D游戏中,火焰特效是一种3D游戏中的一种常见特效,通常是使用粒子播放器播放序列帧或者直接使用粒子模拟,在本文中将实现一个区别于这两种方法的火焰效果(如下图),这个火焰的效果来源于一个朋友推荐给我的文章,...

    火焰材质



    概述

           3D游戏中,火焰特效是一种3D游戏中的一种常见特效,通常是使用粒子播放器播放序列帧或者直接使用粒子模拟,在本文中将实现一个区别于这两种方法的火焰效果(如下图),这个火焰的效果来源于一个朋友推荐给我的文章,是一个老外的作品(演示效果源代码),效果非常不错,还模拟了风的效果,美中不足的是这个shader只支持target 3.0以上,鉴于此我做一些修改,并做了一定的优化,右图就是本文实现的效果,使之能支持target 2.0。






    原理

           原作者火焰实现的效果主要使用了三张贴图(如下图),一张颜色梯度图,一张噪波图,以及一张alpha图;

           其shader主要通过几个个步骤实现火焰效果:

    • 将噪波贴图做了三次不同的uv位移动画采样,并将采样的颜色值叠加作为uv值,对颜色梯度图采样,实现火焰的流动效果以及火焰的絮状效果
    • 同时在vert函数中使用tex2Dlod函数(此函数需要target3.0以上支持)采样到噪波图的颜色值,对模型的顶点进行扰动,实现火焰的膨胀震动效果
    • 使用一个传入的向量结合模型的顶点色对模型顶点做偏移效果,实现火焰随风摆动的效果。
    • 第一步采样的噪波图颜色值做为uv值对alpha图采样作为火焰的alpha值,,当然还需要乘以一个边缘光的值使火焰的边缘透明。

           我实现的效果思路和这个基本一样,只是将第二步的顶点扰动效果,使用了unity内置的函数对模型顶点做的扰动,以保证对target 3.0以下版本的支持。





    shader实现

           在开始实现火焰效果时首先需要建一个火焰的模型,如下图所示,其中刷了顶点色,需要使用到顶点色的红色通道和alpha透明通道。



           为了便于调整火焰的颜色以及形态,需要开放了一些参数:

    • _WindFreqScale:控制模型波动的频率;
    • _WindPower :xyz分量控制风的方向,w分量控制风的强度;
    • _FlameColor  :  xyz分量控制火焰的颜色比重以及大小火焰扰动的效果,w分量控制火焰流动的速度。

           下面就从Vert函数讲起,首先是处理噪波贴图的uv,在这里分了三层,每层的uv比例缩放大小和移动速度都不一样,以丰富火焰效果的层次,并且在这里使用了_FlameColor的w分量控制uv流动的速度,代码如下:

    		VerttoFrag o;
    		o.uvCoord = v.uvCoord;
    
    		half3 scrollSpeedY = ((-0.41 * _Time.y),(-0.96 * _Time.y),(-2.36 * _Time.y))*_FlameColor.w;
    		half scrollSpeedX =  _Time.z*_FlameColor.w;
    		// half3 scales = (1, 2, 3);
    
    		o.transUV1 = v.uvCoord.xy * 1 ;
    		o.transUV1.y = o.transUV1.y + scrollSpeedY.x ;
    		o.transUV1.x = o.transUV1.x + scrollSpeedX ;
    
    		o.transUV2 = v.uvCoord.xy * 2 ;
    		o.transUV2.y = o.transUV2.y + scrollSpeedY.y ;
    		o.transUV2.x = o.transUV2.x + (-0.8 * scrollSpeedX) ;
    
    		o.transUV3 = v.uvCoord.xy * 3 ;
    		o.transUV3.y = o.transUV3.y + scrollSpeedY.z ;
    		o.transUV3.x = o.transUV3.x + (0.37 * scrollSpeedX) ;


           然后处理火焰模型的顶点律动效果以及随风摆动的效果,原作者是通过对噪波图的颜色采样获得随机律动的效果,在这里我使用了unity的内置函数SmoothTriangleWave( )   ,这个函数的函数原型在TerrainEngine.cginc里实现(源代码如下):

    float4 SmoothCurve( float4 x ) {     
        return x * x *( 3.0 - 2.0 * x );     
    }  
    float4 TriangleWave( float4 x ) {     
        return abs( frac( x + 0.5 ) * 2.0 - 1.0 );     
    }  
    float4 SmoothTriangleWave( float4 x ) {     
        return SmoothCurve( TriangleWave( x ) );     
    }  
    

           该函数可以生成循环波动效果,通过控制输入的参数,以及对输出值的修改,可以模拟出比较自然的随机波动效果,用于Unity Terrain系统植物随风摆动的效果,效率据说要比正弦或者余弦函数要高(未求证),在这里我把它直接用于模拟火焰律动的效果,代码如下:


    //将风的方向向量转换到世界坐标空间,并使用顶点色的红色通道控制
    		_WindPower.xyz =normalize( mul((float3x3)_World2Object,_WindPower.xyz));
    		_WindPower.w *=v.vertColor.r;
    //控制风的律动频率
    		float windTime = _Time.y * _WindFreqScale;
    
    		float4 vWaves = (frac( windTime.xxxx * float4(1.975, 0.793, 0.375, 0.193) ) * 2.0 - 1.0);
    		
    		vWaves = SmoothTriangleWave( vWaves );
    		float2 vWavesSum = vWaves.xz + vWaves.yw;
    //bellyGradient控制火焰膨胀的梭状形体
    		fixed bellyGradient = pow(v.uvCoord.y * (1-v.uvCoord.y),1.7);
    //使火焰模型的顶点有规律的震动,和随风摆动
    		v.vertex.xyz += normalize(v.inNormal.xyz) * bellyGradient * vWavesSum.xyx;
    		v.vertex.xyz += _WindPower.xyz * _WindPower.w *  (vWavesSum.y+0.5)*(bellyGradient+0.2);
    
    
    		o.outPos = mul(UNITY_MATRIX_MVP,v.vertex);
    //displayV用于传入frag函数,控制火焰随形体膨胀而忽明忽暗的效果
    		o.displaceV = vWavesSum.y*vWavesSum.x;

           vert函数最后一段代码,是用来控制模型的边缘透明的,和边缘光材质方法是一样的,只不过在这里是用来控制透明度,并且这里还使用顶点色的alpha通道控制模型的透明,代码如下:

    		half4 worldPos = mul(_Object2World , v.vertex );		
    		fixed3 viewDir = normalize(_WorldSpaceCameraPos.xyz - worldPos.xyz);
    		fixed3 normalDir = normalize(mul(_Object2World ,fixed4(v.inNormal.xyz,0) ).xyz);
    
    		o.edgeAlpha = pow(abs(dot(normalDir,viewDir)*1.7),2) * v.vertColor.a;
    		

           frag函数承接从vert函数传过来的参数,先对噪波图采样,得到的颜色值转化成颜色梯度图的uv值,求出火焰的颜色以及透明质,主要代码如下:

    		fixed2 noiseColor1 = tex2D(_NoiseTex,i.transUV1.xy).xy;
    		fixed2 noiseColor2 = tex2D(_NoiseTex,i.transUV2.xy).xy;
    		fixed2 noiseColor3 = tex2D(_NoiseTex,i.transUV3.xy).xy;
    
    		noiseColor1.y *= _FlameColor.x;
    		noiseColor2.y *= _FlameColor.y;
    		noiseColor3.y *= _FlameColor.z;
    
    		half2 noiseCoords = noiseColor1 + noiseColor2 + noiseColor3;
    
    		noiseCoords += i.uvCoord.xy;
    
    		fixed4 baseColor = tex2D(_ColorTex,clamp(noiseCoords,0.05,0.97));
    
    		fixed4 texColor = baseColor + baseColor * (i.displaceV - 0.2) * 0.2;
    
    		fixed Alpha1 = tex2D(_AlphaTex,i.uvCoord.xy).r;
    		fixed Alpha2 = tex2D(_AlphaTex,clamp(noiseCoords,0.05,0.98)).r;
    
    		texColor.a = Alpha1 * Alpha2 * i.edgeAlpha ;  
    
    		return texColor;	


    总结

           这个火焰效果总体来说还可以,但是不大适合顶视的效果,容易穿帮,这个是由模型的形状决定的;相对于原作者的代码,做了不少的优化,在差不多效果的情况下,本文的火焰效果可以支持target 2.0,当然还有进一步的优化空间,比如可以把颜色梯度图的尺寸从256*256改成2*256,并设置成真彩色,这么可以减少很多的贴图大小,同样对alpha图也可以做相对应的处理,另外一种方式是可以把alpha图放到噪波图其中的一个通道,可以节省一张贴图的使用,当然与此相对应的就得修改shader的代码了。


    下载链接

           火焰材质源代码







    展开全文
  • Unity3D-制作火焰效果

    2019-08-21 07:57:35
    1.插件的准备 ...输入网址unity3d.com在Assert Store上面搜索这个【LowPoly Environment Pack】插件,点击 Open in Unity ,此步将以exe方式选择链接打开,在打开的view里才能看到download按钮,无语...

    1.插件的准备
    随着官网上的迭代更新,连下载按钮都找了好久,今天制作的火焰效果要依赖一个插件,LowPoly Environment Pack
    输入网址unity3d.com在Assert Store上面搜索这个【LowPoly Environment Pack】插件,点击 Open in Unity ,此步将以exe方式选择链接打开,在打开的view里才能看到download按钮,无语了,跟着步骤import package 到新建好的项目

    2.火焰制作的效果图
    786645-20190105152237131-740714424.png

    3.制作过程

    • 创建粒子效果
      786645-20190105162138269-492502444.png

    找到植被,右键点击 Effects--Particle System ,如上图所示创建

    • 创建fire火焰材质
      786645-20190105162401870-1888708879.png

    右键 Create--Material

    • 赋值Shader
      786645-20190105162558076-1877720544.png

    • 赋值fire火焰材质
      786645-20190105162739363-1004375938.png

    • 修改模型渲染为立方体渲染
      786645-20190105162920179-1459786850.png

    • 勾选预热模式
      786645-20190105163038603-263126712.png

    • 将粒子开始速度降小
      786645-20190105163206840-1935662867.png

    • 将粒子开始大小变小
      786645-20190105163353519-1303750948.png

    • 将初始旋转量改成45°
      786645-20190105163501846-600424139.png

    • 将最大粒子数量改成50
      786645-20190105163556014-1695910897.png

    • 更改发热器形状为球形,设置半径
      786645-20190105163812336-816386481.png

    • 设置发射速度向上,发射出来
      786645-20190105163917371-234198300.png

    • 修改粒子颜色
      786645-20190105164050582-784921477.png

    • 随生命周期变化,更改粒子大小
      786645-20190105164246417-1456442778.png

    • 更改粒子旋转量为90
      786645-20190105164413939-521329939.png

    转载于:https://www.cnblogs.com/ButterflyEffect/p/10225158.html

    展开全文
  • Unity3d特效粒子 火焰刀光特效包 Strike Effects 1.0 Unity3d特效粒子 角色扮演类特效技能 RPG-FPS Fx Pack 特效包 Unity3d特效粒子 蓝色闪电特效包 Electro Particles Set Unity3d特效粒子 魔法游戏火焰特效 Game ...
  • 使用粒子系统创建火焰:在灯光下面...可用于创建烟雾、气流、火焰、涟漪等效果。 添加组件之后的效果:<ignore_js_op>点击Inspector中的Shape修改它的形状<ignore_js_op>Start Lifetime(生命周期)修改...

    使用粒子系统创建火焰:在灯光下面点击右键Effects-Particle System.
    Effects:效果/特效。
    Particle System:粒子系统。可用于创建烟雾、气流、火焰、涟漪等效果。

     

    添加组件之后的效果:
    <ignore_js_op> 

    点击Inspector中的Shape修改它的形状
    <ignore_js_op> 

    Start Lifetime(生命周期)修改合适的值。
    火焰是有随机速度的选择:Start Speed-Random Between Two Constants.设置两个随机数值。
    选择粒子材质覆给Material.-Texture sheet 勾选上。

    <ignore_js_op> 

    最终的效果就差不多有这个样子了。细节自己调整就可以了。
    <ignore_js_op> 

    初始化模块:此模块是效果组件固有的模块。

    Duration:粒子发射器,发射粒子的时间。单位为S(秒)。

    Looping:是否开启。如果开启了循环,Duration值只要大于最小值0.10即可。

    Prewarm:是否开启预热。只有在开启的循环的时候,预热才有效果,粒子量相似发射了一个粒子周期。

    Start Delay:预热延迟。游戏开始多长时间后,预热开启。单位为S。

    Start Lifetime:粒子从发射器出来,到消失的时间。单位为S。

    Start Speed:粒子发射的速度。

    Start Size:粒子大小。

    Start Rotation:粒子的旋转角度。

    Start Color:粒子的颜色。

    Gravity Multiplier:设置重力对粒子的影响,数值越大影响越大。

    Inherit Velocity:速度继承。当粒子系统是运动的时候,粒子的速度会继承运动的速度。但粒子坐标系必须在世界坐标系。

    Simulation Space:坐标系是本身还是世界坐标系。

    Play On Awake:在游戏开始播放,但不影响Start Delay效果。

    Max Particles:粒子释放的最大数量,当达到最大数量时,停止释放粒子,当有粒子消失时继续释放

    转载于:https://www.cnblogs.com/dingsiki/p/10013725.html

    展开全文
  • 一、火焰和烟的效果图 二、火焰的制作 1、创建Particle System(粒子系统) ...有关unity3D粒子系统基础属性大家可以参考这个 https://blog.csdn.net/alayeshi/article/details/46744521 copy来的/* Du

    一、火焰和烟的效果图

    在这里插入图片描述

    二、火焰的制作

    1、创建Particle System(粒子系统)
    (GameObject或鼠标右键->Effects->Particle System)
    然后将名字修改一下—> fire
    在这里插入图片描述在Hierarchy面板中选中fire不同运行程序就会看到如下的效果在这里插入图片描述
    2、fire的参数如下
    有关unity3D粒子系统基础属性大家可以参考这个
    https://blog.csdn.net/alayeshi/article/details/46744521
    还可以参考这个
    https://www.cnblogs.com/ButterflyEffect/p/10225158.html
    偷懒一下不整理了

    copy来的/*
    Duration:粒子发射器,发射粒子的时间。单位为S(秒)。
    Looping:是否开启。如果开启了循环,Duration值只要大于最小值0.10即可。
    Prewarm:是否开启预热。只有在开启的循环的时候,预热才有效果,粒子量相似发射了一个粒子周期。
    Start Delay:预热延迟。游戏开始多长时间后,预热开启。单位为S。
    Start Lifetime:粒子从发射器出来,到消失的时间。单位为S。
    Start Speed:粒子发射的速度。
    Start Size:粒子大小。
    Start Rotation:粒子的旋转角度。
    Start Color:粒子的颜色。
    Gravity Multiplier:设置重力对粒子的影响,数值越大影响越大。
    Inherit Velocity:速度继承。当粒子系统是运动的时候,粒子的速度会继承运动的速度。但粒子坐标系必须在世界坐标系。
    Simulation Space:坐标系是本身还是世界坐标系。
    Play On Awake:在游戏开始播放,但不影响Start Delay效果。
    Max Particles:粒子释放的最大数量,当达到最大数量时,停止释放粒子,当有粒子消失时继续释放。
    */

    • Emission—>Rate over Time 每秒发射的粒子数量

    • Shape—>Shape 发射器形状 Cone(锥体发射器)

    • Size over Lifetime—>Separate Axes勾上 随生命周期变化,更改粒子大小
      (看具体情况大家自己调就好了)
      在这里插入图片描述
      在这里插入图片描述
      3、制作fire的材质球(上图的Flame1)

    • 将图片导入项目工程中
      需要用到的图片
      参数如下:
      在这里插入图片描述

    • 创建材质球在这里插入图片描述

    • 把材质球的Shader改为Additive
      在这里插入图片描述

    • 给材质球附上图片在这里插入图片描述

    • 把材质球fire拖到fire组件里
      在这里插入图片描述
      好了火焰的就这么做好了

    三、烟的制作

    1、复制黏贴fire,修改名字为smoke
    2、制作烟的材质球
    参数如下
    在这里插入图片描述
    2、修改参数
    在这里插入图片描述
    好了完工

    四、整个场景的烟

    1、Window->Rendering->Lighting Settings
    在这里插入图片描述
    2、Lighting->Other Settings->Fog勾上
    参数自行调节
    在这里插入图片描述
    3、效果图
    在这里插入图片描述

    展开全文
  • 本章主要是 Unity3D 的基础快速入门篇,通过本章的学习,能让初学者们快速的掌握和 应用 Unity3D 软件。 本章导读 本章无论对于 Unity3D 初学者、或是以前从事建模工作的设计师、又或者是从事过 3D 编程的人群,...
  •  Scene【场景面板】:该面板为Unity3D的编辑面板;你可以将你所有的模型、灯光、以及其他材质对象拖放到该场景中。构建游戏中所能呈现景象。  Game【游戏面板】:与场景面板不同,该面板是用来渲染场景面板中...
  • Unity3D 优化总篇

    2015-05-08 09:35:32
    转载【整理】unity3d优化总结篇 -- yxriyin 对项目优化有很多点,如:mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等, 优化:  1. 更新不透明贴图的压缩格式为ETC 4bit,...
  • unity3d优化总结篇

    2018-07-31 17:42:11
    对项目优化有很多,如:mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等, 现在继续补上,该内容为本人经验以及网上收集整理,希望大家有更好的优化方法,能够继续跟帖,一起探讨,共同...
  • Unity3d 导入3dMax模型会产生的问题, 按照官方的说明,将max模型导成fbx档导入untiy似乎也不??能解决 x轴向偏转 3dmax模型导入后自动有一个x轴270度的偏转, 巧合的是,在unity中旋转模型的时候, 你会发现y轴参照方向...
  • Unity3d-Particle System系统的学习(一) 最近看了下Unity3d的粒子系统的相关视频,并且动手操作了下,感觉自己的美工技能又增进了下(开个小玩笑),发现粒子系统所需要记忆的东西还是有点多的。 所以为了不让...
  • 粒子系统使用的两个案例:爆炸,车辆尾气
  • Unity3d教程之导入3dMax模型产生问题的解决办法 更新时间2013-06-29 来源:本站整理 Unity3d 导入3dMax模型会产生的问题,按照官方的说明,将max模型导成fbx档导入untiy似乎也不行?能解决吗?答案当然...
  • Unity3d模型导入技巧 Unity3d导入3dMax模型会产生若干问题,按照官方的说明,将max模型导成fbx文件导入 untiy似乎也不能解决 1、x轴向偏转 3dmax模型导入后自动有一个x轴270度的偏转,巧合的是,在unity中旋转模型的...
  • 现在进入正题,十分钟带你打造unity3D第一人称射击游戏! 看完本篇博客,你将学会第一人称控制,粒子的添加,碰撞的检测,鼠标的监听,画2d图像,预制物体克隆,添加力,添加声音等等!(本篇博客假设你已经对unity...
  • Unity3d导入3dMax模型会产生若干问题,按照官方的说明,将max模型导成fbx文件导入untiy似乎也不能解决 1、x轴向偏转 3dmax模型导入后自动有一个x轴270度的偏转,巧合的是,在unity中旋转模型的时候,你会发现y...
  • 用Max导出Unity3D使用的FBX文件流程注解 从max导出FBX到Unity,以下环节需要特别注意。  1,单位设置  很多人在建模,动画的时候,默认的max system unit是设置的inch,建议修改成metres或者centimetres,...
  • unity3d 模型导入技巧

    2019-01-09 19:39:52
    Unity3d导入3dMax模型会产生若干问题,按照官方的说明,将max模型导成fbx文件导入untiy似乎也不能解决 1、x轴向偏转 3dmax模型导入后自动有一个x轴270度的偏转,巧合的是,在unity中旋转模型的时候,你会发现y轴...
  • 【整理】unity3d优化总结篇 来源:网络 编辑:admin 对项目优化有很多,如:mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等, 现在继续补上,该内容为本人经验以及网上收集...
1 2 3 4 5 ... 8
收藏数 160
精华内容 64
关键字:

unity3d火焰材质球