【Shader】实验05——渐变映射实现镭射材质
去年还蛮流行镭射包的,特别是夏天,blingbling的特别好看
仔细观察这种材质,大概就是彩虹色渐变+反光+透明,光的原理涉及到光的干涉。
猜想是这种材质对于不同波长的光吸收率不同导致光的干涉?改天去查一查……
用一个彩虹渐变的纹理对漫反射进行渐变映射,光最强处为红色,光最暗处为紫色。使用法线与光线的点积对渐变纹理进行采样即可。为了防止紫色(暗处)过多,使用半兰伯特模型,把NdotL*0.5+0.5,映射到【0,1】范围再进行采样。
而对于透明度alpha,是紫色部分alpha最大,红色部分alpha最小,所以NdotL越大,alpha越小,所以把NdotL映射到【0,1】范围,不过是0.5-0.5*NdotL。
fixed alpha = _AlphaScale * (0.5 - NdotL * 0.5);
最后结果
Shader源码
Shader "MyShaderTest/6_Laser"
{Properties{_Color ("Color",Color) = (1,1,1,1)_RampTex("Ramp Texture", 2D) = "white" {}_RampScale("Ramp Scale", Range(0,1)) = 1_AlphaScale("Alpha Size",Range(0,1)) = 1}SubShader{Tags { "RenderType"="Transparent" "Queue" = "Transparent" "IgnoreProjector" = "True" }Pass{Blend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"#include "Lighting.cginc"struct appdata{float4 vertex : POSITION;float3 normal : NORMAL;};struct v2f{ float4 pos : SV_POSITION;float3 worldPos : TEXCOORD0;half3 worldNormal : TEXCOORD1;};fixed4 _Color;sampler2D _RampTex;half _RampScale;half _AlphaScale;v2f vert (appdata v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.worldPos = mul(unity_ObjectToWorld, v.vertex);o.worldNormal = UnityObjectToWorldNormal(v.normal);return o;}fixed4 frag (v2f i) : SV_Target{fixed3 worldLightDir = normalize(UnityWorldSpaceLightDir(i.worldPos));fixed3 worldNormal = normalize(i.worldNormal);fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyx;fixed NdotL = dot(worldNormal, worldLightDir);fixed alpha = _AlphaScale * (0.5 - NdotL * 0.5);//alpha = _AlphaScale * (0.5 + NdotL * 0.5);fixed diff = 0.5 + NdotL * 0.5;fixed3 diffuse_Ramp = _LightColor0 * tex2D(_RampTex,fixed2(diff,diff)).rgb; fixed3 diffuse = _LightColor0 * diff;fixed3 finalColor = lerp(diffuse, diffuse_Ramp, _RampScale) + ambient;return fixed4(_Color.rgb * finalColor,alpha);}ENDCG}}
}
【Shader】实验05——渐变映射实现镭射材质相关推荐
- SAS实验05 ——方差分析
实验05 方差分析 一.实验目的 完成方差分析的实验,进行初步了解其作用功能 二.实验内容 ①某药物对小鼠ldl浓度的影响是否有显著差异 ②肉馅种类.厨师种类是否对包子肉馅的多少有显著差异 ③生理盐水 ...
- 超星高级语言程序设计实验作业 实验05 指针及其在程序设计中的应用
超星高级语言程序设计实验作业 实验05 指针及其在程序设计中的应用 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流. 1.字符串长度 题目描述:编写程序实现:使用自编函数i ...
- 数字电路实验(05)二进制计数器设计
数字电路实验(05)二进制计数器设计 一.实验要求 1.1.实验目的 认识二进制同步计数器的定义.工作状态及信号波形: 熟悉基于JK触发器实现二进制同步计数器的构成规则. 1.2.实验器材 VCC G ...
- Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板
写在之前 Shader变体.Shader属性定义技巧.自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用 ...
- 几何级数 函数 matlab,matlab 实验05数据的统计分析
数据的统计分析 在日常生活中我们会在很多事件中收集到一些数据(比如:考试分数.窗口排队人数.月用电量.灯泡寿命.测量误差.产品质量.月降雨量等数据),这些数据的产生一般都是随机的.这些随机数据乍看起来 ...
- 【猫猫的Unity Shader之旅】之玻璃材质
今天我们用学过的Shader知识实现一个简单的玻璃材质. 首先,玻璃是半透明的 玻璃最主要的特点就是它是透明的,不同的玻璃有不同的不透明度,水杯的透明度比较低,而装药品的棕色玻璃瓶不透明度就比较高.当 ...
- Unity Shader Graph 使用安装步骤缺失材质球,以及场景原本物体材质球丢失问题解决
Unity Shader Graph 使用安装步骤,以及原本物体材质球丢失问题 我是用的版本是2019.3.9版本的,仅供参考. 第1步:Window-PackageManager-点击All Pac ...
- 【猫猫的Unity Shader之旅】之双面材质和多Pass渲染
默认情况下,我们编写的Shader都只对模型的正面进行渲染,因为大多数模型都是封闭的,我们看不到反面.在实际的开发过程中,也经常会遇到需要正反面都渲染的时候,比如开发手游的时候经常需要用一个面片+透明 ...
- Shader山下(十二)材质属性绘制器
Unity5增加了一个叫MaterialPropertyDrawer的东西,可以使用它们标记在shader的Properties里面,扩充shader的一些参数在编辑器上的样式. 本文以Shader山 ...
最新文章
- 北航计算机考博C语言真题_北京航空航天大学计算机考研:严厉的老父亲,教会你本事,本科非211以上就不要去了...
- 《C++ Primer plus》学习笔记之”RTTI”
- [How TO]-如何使用Sphinx编写漂亮的文档
- 【CCF】201709-2公共钥匙盒
- 深入理解BFC和Margin Collapse
- c++模板类被继承时他的成员不能被子类看到
- 必须包含数字和字母,字符随意的正则表达式
- c语言栈的实现以及操作_C++语言实现顺序栈
- Capture One Pro 22 for Mac(RAW图像处理软件)中文版
- mongoDB在centos7上的安装
- 社会工程学之《反欺骗的艺术》的思考
- linux7启动ib子网管理器,IB_Switch交换机SB7890配置及Band网卡
- 日期转农历日期的一个插件
- 310实验室一点补充
- 人脸识别c语言正方形,Matlab实现的基于FLD的人脸识别系统源代码
- labview 网络通讯 TCP
- 金一文化推出“B站2233 x中央芭蕾舞团”限量手办
- 第一届 ACM省赛山东省 Emergency
- RecyclerView与CardView的使用
- ASEMI线性稳压电源芯片AMS1117-3.3参数及接线电路图