去年还蛮流行镭射包的,特别是夏天,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——渐变映射实现镭射材质相关推荐

  1. SAS实验05 ——方差分析

    实验05 方差分析 一.实验目的 完成方差分析的实验,进行初步了解其作用功能 二.实验内容 ①某药物对小鼠ldl浓度的影响是否有显著差异 ②肉馅种类.厨师种类是否对包子肉馅的多少有显著差异 ③生理盐水 ...

  2. 超星高级语言程序设计实验作业 实验05 指针及其在程序设计中的应用

    超星高级语言程序设计实验作业 实验05 指针及其在程序设计中的应用 注:以下内容仅供交流,代码都是本人自己写的,还请同学们先自己编写再进行交流. 1.字符串长度 题目描述:编写程序实现:使用自编函数i ...

  3. 数字电路实验(05)二进制计数器设计

    数字电路实验(05)二进制计数器设计 一.实验要求 1.1.实验目的 认识二进制同步计数器的定义.工作状态及信号波形: 熟悉基于JK触发器实现二进制同步计数器的构成规则. 1.2.实验器材 VCC G ...

  4. Unity Shader 学习笔记(5)Shader变体、Shader属性定义技巧、自定义材质面板

    写在之前 Shader变体.Shader属性定义技巧.自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用 ...

  5. 几何级数 函数 matlab,matlab 实验05数据的统计分析

    数据的统计分析 在日常生活中我们会在很多事件中收集到一些数据(比如:考试分数.窗口排队人数.月用电量.灯泡寿命.测量误差.产品质量.月降雨量等数据),这些数据的产生一般都是随机的.这些随机数据乍看起来 ...

  6. 【猫猫的Unity Shader之旅】之玻璃材质

    今天我们用学过的Shader知识实现一个简单的玻璃材质. 首先,玻璃是半透明的 玻璃最主要的特点就是它是透明的,不同的玻璃有不同的不透明度,水杯的透明度比较低,而装药品的棕色玻璃瓶不透明度就比较高.当 ...

  7. Unity Shader Graph 使用安装步骤缺失材质球,以及场景原本物体材质球丢失问题解决

    Unity Shader Graph 使用安装步骤,以及原本物体材质球丢失问题 我是用的版本是2019.3.9版本的,仅供参考. 第1步:Window-PackageManager-点击All Pac ...

  8. 【猫猫的Unity Shader之旅】之双面材质和多Pass渲染

    默认情况下,我们编写的Shader都只对模型的正面进行渲染,因为大多数模型都是封闭的,我们看不到反面.在实际的开发过程中,也经常会遇到需要正反面都渲染的时候,比如开发手游的时候经常需要用一个面片+透明 ...

  9. Shader山下(十二)材质属性绘制器

    Unity5增加了一个叫MaterialPropertyDrawer的东西,可以使用它们标记在shader的Properties里面,扩充shader的一些参数在编辑器上的样式. 本文以Shader山 ...

最新文章

  1. 北航计算机考博C语言真题_北京航空航天大学计算机考研:严厉的老父亲,教会你本事,本科非211以上就不要去了...
  2. 《C++ Primer plus》学习笔记之”RTTI”
  3. [How TO]-如何使用Sphinx编写漂亮的文档
  4. 【CCF】201709-2公共钥匙盒
  5. 深入理解BFC和Margin Collapse
  6. c++模板类被继承时他的成员不能被子类看到
  7. 必须包含数字和字母,字符随意的正则表达式
  8. c语言栈的实现以及操作_C++语言实现顺序栈
  9. Capture One Pro 22 for Mac(RAW图像处理软件)中文版
  10. mongoDB在centos7上的安装
  11. 社会工程学之《反欺骗的艺术》的思考
  12. linux7启动ib子网管理器,IB_Switch交换机SB7890配置及Band网卡
  13. 日期转农历日期的一个插件
  14. 310实验室一点补充
  15. 人脸识别c语言正方形,Matlab实现的基于FLD的人脸识别系统源代码
  16. labview 网络通讯 TCP
  17. 金一文化推出“B站2233 x中央芭蕾舞团”限量手办
  18. 第一届 ACM省赛山东省 Emergency
  19. RecyclerView与CardView的使用
  20. ASEMI线性稳压电源芯片AMS1117-3.3参数及接线电路图

热门文章

  1. c++ 箭头符号怎么打_关于C/C++中的点操作符和箭头操作符
  2. MySQL:replace函数的几种实用场景
  3. html 提示语为英文,英文安全警示语
  4. 姑娘,你为什么要编程呢
  5. layui表格排序扩展自定义排序规则
  6. 新版本android studio 找不到task打包选项了
  7. 使用Adblock屏蔽知乎登录弹窗
  8. 发那科机器人网段_FANUC 机器人应用项目
  9. 320. 能量项链 (区间dp)
  10. python之place布局管理器