unity 蜡烛火光shader
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相关推荐
- unity自发光透明shader
unity自发光透明shader 这本来是一个glass的shader,但是我发现也可以用到自发光+透明,这两个脚本都是unity文档里面的.呵呵~~~ [html] view plaincopypr ...
- Unity学习之Shader
Shader 是用来实现图像渲染的,用来替代固定渲染管线的可编辑程序.其中Vertex Shader(顶点着色器)主要负责顶点的几何关系等的运算,Pixel Shader(像素着色器)主要负责片元颜色 ...
- Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...
- unity 水晶 石头 shader
unity 水晶 石头 shader 上shader Shader "Unlit/CrystalTest" {Properties{_LayerTex ("Layer T ...
- Unity双面材质Shader
Unity双面材质Shader. 正面渲染支持漫反射贴图.法线贴图.高光度等.背面渲染支持漫反射贴图. Shader代码如下: Shader "LiangHaoXiangShaders/Do ...
- Unity 3D开发--Shader入门基础
Shader "Unlit/xxShader" {Properties{//基础属性 并可以显示在属性板上_MainTex ("Texture", 2D) = ...
- unity 半透明效果shader
Shader "Unlit/半透明" {Properties{_Diffuse("Diffuse",Color) = (1,1,1,1) // 漫反射_Main ...
- Unity 3D 图形学 Shader之顶点与片段着色器(五)
通过实现一个只有颜色属性可调节的简单材质效果更好的了解顶点与片段着色器 一.顶点着色器 顶点着色器就是处理顶点的着色器,每个顶点都会执行一次顶点着色器.我们先认识下顶点函数的结构: 顶点着色器函数的名 ...
- Unity内置Shader解读3——Decal
1.Shader在什么情况下使用 Decal(贴花)贴花就是类似于CF里的喷漆,或者汽车/墙上等贴一个贴纸. image.png 2.Shader的价值(用的多不多),Shader的难度 这个应该是极 ...
最新文章
- java%3e%3e=符号_android中一些特殊字符(如:←↑→↓等箭头符号)的Unicode码值...
- 何为Web App,何为Hybird App
- UA PHYS515 电磁理论I 麦克斯韦方程组基础4 介质中的麦克斯韦方程
- Andoid自定义View的OnMeasure详解和自定义属性
- Codeforces round 396(Div. 2) 题解
- 1s后跳转 android_优雅保活方案,原来Android还可以这样保活
- 实现自动带密码登陆远程机执行shell命令(linux)
- Mysql 数据 导入 导出
- PowerDesigner生成数据库刷库脚本
- 垃圾回收算法与实现系列-锁在应用层的优化思路
- 第1章 Ext JS快速入门示例[4/4]
- 用canvas实现图片滤镜效果
- OmniCppComplete实现C代码自动补全
- python 车牌识别简单_如何用 Python 识别车牌
- 注册github账号详细中文版教程【精选】
- autojs切换输入法
- DFD图练习(图书管理系统)
- xfce-因为面板在 kiosk 模式下运行,所以不允许作为普通用户的您更改面板配置
- Opcode指令解析
- ${param.xxx}获取url中的参数