Glow / Bloom Particle Shader [SOLVED]
[SOLVED] The final shader code I used is here: https://pastebin.com/HDdMr3Cr
Hi everyone, I've got a problem/question about shaders - which is a subject I'm new to. What I basically want to achieve is a glowing particle Shader/Material couple. I tried a couple of things but could not get the exact effect... Below I provide 2 images. The second sample (with white glowing particles) is the exact effect I want which is a shader I acquired from here: https://goo.gl/DQw4Js (Stack Overflow link). Both shaders were used on the same particle system with the exact same properties (size, emission, speed etc.)
So what I need is a shader to have the effect on the second sample but also works and looks like the Particle/Additive(Soft) shader.
First sample: Particle/Additive(Soft) shader
Second sample: https://goo.gl/DQw4Js (the shader in the answer called "Glow")
TL;DR: I need the effect on the second shader to be on the shader 1.
Any help would be greatly appreciated. Thanks in Advance to anyone who would be willing to help :)
Just including the original Paricles/Additive(Soft) code for convenience. https://pastebin.com/JfGhnBXs
Answer by ifurkend · May 01, 2017 at 02:31 PM
The issue with the shader from that Stackoverflow answer is the alpha blending mode "Blend SrcAlpha OneMinusSrcAlpha" which is used in the traditional "particle alpha blended" shader. For "additive" blending result, you change the blend mode to either "Blend One One" or "Blend SrcAlpha One". Also preferably change "ZWrite On" to "ZWrite Off". Shader receives color from renderer component via the "COLOR" semantic (all-caps).
The following code is modified from the official Particles/Additive shader, hence the copyright comment in the beginning:
// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
Shader "Particles/Additive Intensify" {
Properties {
_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
_MainTex ("Particle Texture", 2D) = "white" {}
_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
_Glow ("Intensity", Range(0, 127)) = 1
}
Category {
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" }
Blend SrcAlpha One
ColorMask RGB
Cull Off Lighting Off ZWrite Off
SubShader {
Pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#pragma multi_compile_particles
#pragma multi_compile_fog
#include "UnityCG.cginc"
sampler2D _MainTex;
fixed4 _TintColor;
half _Glow;
struct appdata_t {
float4 vertex : POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f {
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_FOG_COORDS(1)
#ifdef SOFTPARTICLES_ON
float4 projPos : TEXCOORD2;
#endif
UNITY_VERTEX_OUTPUT_STEREO
};
float4 _MainTex_ST;
v2f vert (appdata_t v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.vertex = UnityObjectToClipPos(v.vertex);
#ifdef SOFTPARTICLES_ON
o.projPos = ComputeScreenPos (o.vertex);
COMPUTE_EYEDEPTH(o.projPos.z);
#endif
o.color = v.color * _TintColor;
o.color.rgb *= _Glow;
o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
sampler2D_float _CameraDepthTexture;
float _InvFade;
fixed4 frag (v2f i) : SV_Target
{
#ifdef SOFTPARTICLES_ON
float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)));
float partZ = i.projPos.z;
float fade = saturate (_InvFade * (sceneZ-partZ));
i.color.a *= fade;
#endif
fixed4 col = 2.0f * i.color * tex2D(_MainTex, i.texcoord);
UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(0,0,0,0)); // fog towards black due to our blend mode
return col;
}
ENDCG
}
}
}
}
Thanks for the answer but that only helps my case partially. If you may help me on the complete issue I would be grateful, provided you can of course :) I need the second shader (from the answer) to also respond to Color Over Life Time property, particle emission (which seems extremely low compared to the other) and all the others... Anything on your $$anonymous$$d? :)
EDIT: By the way, the other way around is O$$anonymous$$ too obviously. If the glow part of the second shader can be added to the Additive(soft), that would work too I guess :)
Wow that was quick :) Thanks again but having an error in this line: fixed4 col = 2.0f * i.color col * _Glow * _TintColor * tex2D(_$$anonymous$$ainTex, i.texcoord);
Shader error in 'Particles/Additive Intensify': syntax error: unexpected token 'col' at line 81 (on d3d11)
I really am new to this but I think that might just indicate a simple syntax error perhaps? Thanks for the effort...
SOLVED! managed to fix myself by adjusting the line 81 to 2 lines like this; fixed4 col = 2.0f i.color; col = Glow _TintColor tex2D($$anonymous$$ainTex, i.texcoord);
THAN$$anonymous$$S A TON! :)
Your answer
![](https://koobas.hobune.stream/wayback/20220612121040im_/https://answers.unity.com/themes/thub/images/avi.jpg)