1:先上图(参考shadertoy的)

2:在上代码:

Shader "Unlit/candle"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
        _iResolutionX("_iResolutionX", float) = 1920.0
        _iResolutionY("_iResolutionY", float) = 1080.0
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

#include "UnityCG.cginc"

struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

struct v2f
            {
                float2 uv : TEXCOORD0;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
            };

sampler2D _MainTex;
            float4 _MainTex_ST;

float _iResolutionX;
            float _iResolutionY;

float2x2 rotz(float angle)
            {
                float2x2 m;
                m[0][0] = cos(angle); m[0][1] = -sin(angle);
                m[1][0] = sin(angle); m[1][1] = cos(angle);
                return m;
            }

float rand(float2 co) {
                return frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453);
            }

float fbm(float2 uv)
            {
                float n = (tex2D(_MainTex, uv).r - 0.5) * 0.5;
                n += (tex2D(_MainTex, uv * 2.0).r - 0.5) * 0.5 * 0.5;
                n += (tex2D(_MainTex, uv * 3.0).r - 0.5) * 0.5 * 0.5 * 0.5;

return n + 0.5;
            }

// -----------------------------------------------
            float4 mainImage( in float2 fragCoord)
            {
                //float2 uv = fragCoord.xy / iResolution.xy;
                float2 uv = fragCoord;
                float2 _uv = uv;
                uv -= float2(0.5,0.0);
                uv.y /= _iResolutionX / _iResolutionY;
                float2 centerUV = uv;

// height variation from fbm
                float variationH = fbm(float2(_Time.x * 0.3,0.0)) * 1.1;

// flame "speed"
                float2 offset = float2(0.0, -_Time.x * 0.15);

// flame turbulence
                float f = fbm(uv * 0.1 + offset); // rotation from fbm
                float l = max(0.1, length(uv)); // rotation amount normalized over distance
                uv += mul(rotz(((f - 0.5) / l) * smoothstep(-0.2, 0.4, _uv.y) * 0.45) , uv);

// flame thickness
                float flame = 1.3 - length(uv.x) * 5.0;

// bottom of flame 
                float blueflame = pow(flame * .9, 15.0);
                blueflame *= smoothstep(.2, -1.0, _uv.y);
                blueflame /= abs(uv.x * 2.0);
                blueflame = clamp(blueflame, 0.0, 1.0);

// flame
                flame *= smoothstep(1., variationH * 0.5, _uv.y);
                flame = clamp(flame, 0.0, 1.0);
                flame = pow(flame, 3.);
                flame /= smoothstep(1.1, -0.1, _uv.y);

// colors
                float4 col = lerp(float4(1.0, 1.0, 0.0, 0.0), float4(1.0, 1.0, 0.6, 0.0), flame);
                col = lerp(float4(1.0, .0, 0.0, 0.0), col, smoothstep(0.0, 1.6, flame));
                float4 fragColor = col;

// a bit blueness on the bottom
                float4 bluecolor = lerp(float4(0.0, 0.0, 1.0, 0.0), fragColor, 0.95);
                fragColor = lerp(fragColor, bluecolor, blueflame);

// clear bg outside of the flame
                fragColor *= flame;
                fragColor.a = flame;

// bg halo
                float haloSize = 0.5;
                float centerL = 1.0 - (length(centerUV + float2(0.0, 0.1)) / haloSize);
                float4 halo = float4(.8, .3, .3, 0.0) * 1.0 * fbm(float2(_Time.x * 0.035,0.0)) * centerL + 0.02;
                float4 finalCol = lerp(halo, fragColor, fragColor.a);
                fragColor = finalCol;

// just a hint of noise
                fragColor *= lerp(rand(uv) + rand(uv * .45), 1.0, 0.9);
                fragColor = clamp(fragColor, 0.0, 1.0);

return fragColor;
            }

v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

fixed4 frag (v2f i) : SV_Target
            {

return mainImage(i.uv);
            }
            ENDCG
        }
    }
}

本人qq:344810449,欢迎探讨研究。

有unity,shader,小程序等需求也可以联系本人,非常乐于助人。

如果觉得还不错给博主来个小惊喜,纯属自愿,不强求:

unity 蜡烛火光shader相关推荐

  1. unity自发光透明shader

    unity自发光透明shader 这本来是一个glass的shader,但是我发现也可以用到自发光+透明,这两个脚本都是unity文档里面的.呵呵~~~ [html] view plaincopypr ...

  2. Unity学习之Shader

    Shader 是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序.其中Vertex Shader(顶点着色器)主要负责顶点的几何关系等的运算,Pixel Shader(像素着色器)主要负责片元颜色 ...

  3. Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...

  4. unity 水晶 石头 shader

    unity 水晶 石头 shader 上shader Shader "Unlit/CrystalTest" {Properties{_LayerTex ("Layer T ...

  5. Unity双面材质Shader

    Unity双面材质Shader. 正面渲染支持漫反射贴图.法线贴图.高光度等.背面渲染支持漫反射贴图. Shader代码如下: Shader "LiangHaoXiangShaders/Do ...

  6. Unity 3D开发--Shader入门基础

    Shader "Unlit/xxShader" {Properties{//基础属性 并可以显示在属性板上_MainTex ("Texture", 2D) = ...

  7. unity 半透明效果shader

    Shader "Unlit/半透明" {Properties{_Diffuse("Diffuse",Color) = (1,1,1,1) // 漫反射_Main ...

  8. Unity 3D 图形学 Shader之顶点与片段着色器(五)

    通过实现一个只有颜色属性可调节的简单材质效果更好的了解顶点与片段着色器 一.顶点着色器 顶点着色器就是处理顶点的着色器,每个顶点都会执行一次顶点着色器.我们先认识下顶点函数的结构: 顶点着色器函数的名 ...

  9. Unity内置Shader解读3——Decal

    1.Shader在什么情况下使用 Decal(贴花)贴花就是类似于CF里的喷漆,或者汽车/墙上等贴一个贴纸. image.png 2.Shader的价值(用的多不多),Shader的难度 这个应该是极 ...

最新文章

  1. java%3e%3e=符号_android中一些特殊字符(如:←↑→↓等箭头符号)的Unicode码值...
  2. 何为Web App,何为Hybird App
  3. UA PHYS515 电磁理论I 麦克斯韦方程组基础4 介质中的麦克斯韦方程
  4. Andoid自定义View的OnMeasure详解和自定义属性
  5. Codeforces round 396(Div. 2) 题解
  6. 1s后跳转 android_优雅保活方案,原来Android还可以这样保活
  7. 实现自动带密码登陆远程机执行shell命令(linux)
  8. Mysql 数据 导入 导出
  9. PowerDesigner生成数据库刷库脚本
  10. 垃圾回收算法与实现系列-锁在应用层的优化思路
  11. 第1章 Ext JS快速入门示例[4/4]
  12. 用canvas实现图片滤镜效果
  13. OmniCppComplete实现C代码自动补全
  14. python 车牌识别简单_如何用 Python 识别车牌
  15. 注册github账号详细中文版教程【精选】
  16. autojs切换输入法
  17. DFD图练习(图书管理系统)
  18. xfce-因为面板在 kiosk 模式下运行,所以不允许作为普通用户的您更改面板配置
  19. Opcode指令解析
  20. ${param.xxx}获取url中的参数

热门文章

  1. python翻译成中文蟒蛇_python为什么叫大蟒蛇
  2. CSP初赛篇·知识大纲(未完成)
  3. 记一次软考高项【信息系统项目管理师】重点
  4. c语言微信小程序编程,微信小程序实现类似微信点击语音播放效果
  5. Ubuntu18.04系统备份与恢复软件推荐——Systemback
  6. ABP学习笔记:领域服务 和 应用服务 区别
  7. 男生如何正确的识别绿茶婊
  8. Nginx服务器启停命令
  9. 开启手机找回连接服务器失败,原神连接服务器失败什么意思?连接服务器失败解决方法...
  10. biti_rainy