Unity Shader 自制无光照的光晕效果
2021/9/9 23:05:59
本文主要是介绍Unity Shader 自制无光照的光晕效果,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
这个光晕效果的关键是检测物体边缘,利用模型顶点到摄像机对象的方向和模型法线的夹角大小来判断,不多说上代码:
Shader "Unlit/HaloShader" { Properties { // 指定颜色,默认为红色信号灯 halo_color("Color", Color) = (1, 0, 0, 1) // 手动调节闪烁频率 flicker("flicker", float) = 4.0 } SubShader { Tags { "Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True" } Pass { // 关闭深度写入 ZWrite Off // 生成的颜色乘以 src,屏幕已有颜色乘以 dst Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #include"UnityCG.cginc" #pragma vertex vert #pragma fragment frag #define PI 3.14159265359 struct a2v { float4 pos : POSITION; float3 n : NORMAL; }; struct v2f { float4 pos : SV_POSITION; float3 n : NORMAL; float3 dir : TEXCOORD0; }; fixed4 halo_color; float flicker; v2f vert(a2v data) { v2f f; f.pos = UnityObjectToClipPos(data.pos); f.n = data.n; f.dir = normalize(ObjSpaceViewDir(data.pos)); return f; } fixed4 frag(v2f f) : SV_Target { // 计算 cos( x ) cos(x) 越接近1,则渲染的像素则越处于模型中心 float c = abs(dot(f.n, f.dir)); float pct = abs(sin(_Time * flicker * PI)); // 采用造型函数 y = abs(sin(x)) 得到一个闪烁的信号灯效果 // 调整 x 可以调解闪烁频率abs(sin(x * _Time * PI)) return pct * c * halo_color; } ENDCG } } }
效果如下:
这篇关于Unity Shader 自制无光照的光晕效果的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03万字长文聊聊Web3的组成架构
- 2024-07-02springboot项目无法注册到nacos-icode9专业技术文章分享
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?