文章目录

  • 自言自语
  • 一、效果
  • 二、Shader(Builltin)
  • 三、修改版来了
    • 效果
    • Shader
  • 总结

自言自语

最近一直工作比较忙,但也没有放弃shader学习,今天又从同事那里GET到了一个效果,比较简单,但是效果还不错。性价比应该还不错。笔记下来,以后可以拿来用用。 不过自己计算的改动就是没啥道理。所以要论证理论正确性可能是没有的。不过我是美术,好看就完事儿了。

一、效果


二、Shader(Builltin)

Shader "TNShaderPractise/GlassBottle"
{Properties{_MainTex ("Texture", 2D) = "black" {}_MainTex2 ("Texture2", 2D) = "black" {}_MaskTex ("_MaskTex", 2D) = "black" {}_MatCap01Pow("_MatCap01Pow",Float)=1_refract("_refract",Float) =1[HDR]_refacColor("_refacColor",Color)=(0,0,0,1)}SubShader{Tags { "RenderType"="Transparent"  "Queue" = "Transparent"}Pass{Blend SrcAlpha OneMinusSrcAlphaCull OffZWrite OffCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct a2v{float4 vertex : POSITION;half3 normal : NORMAL;float2 texcoord : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;half3 normalWS : TEXCOORD1;     float4 pos : SV_POSITION;float4 posWS : TEXCOORD2;float4 vPOS : TEXCOORD3;};sampler2D _MainTex;float4 _MainTex_ST;     sampler2D _MainTex2;float4 _MainTex2_ST;  sampler2D _MaskTex;float4 _MaskTex_ST;float _MatCap01Pow;float _refract;float4 _refacColor;v2f vert (a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.posWS = mul(unity_ObjectToWorld,v.vertex);o.normalWS = UnityObjectToWorldNormal(v.normal);o.uv = v.texcoord;o.vPOS = o.posWS - v.vertex;return o;}fixed4 frag (v2f i) : SV_Target{half3 viewDir = normalize(UnityWorldSpaceViewDir(i.posWS));half3 normalVS = normalize(mul(UNITY_MATRIX_V,i.normalWS));//改进版matCapUVfloat3 posVS = normalize(mul(UNITY_MATRIX_V,i.posWS));normalVS = cross(posVS,normalVS);normalVS.y = - normalVS.y;half thickMask = tex2D (_MaskTex,i.uv).g;half NdotV = abs(dot(i.normalWS,viewDir));half fresnel = smoothstep(1,0,NdotV);fresnel = fresnel+thickMask;float uvOffset = fresnel*_refract;float2 matCapUV = normalVS.yx*0.5+0.5;float2 matCapUV2 = uvOffset+matCapUV;half4 matCap01 = tex2D(_MainTex,matCapUV)*_MatCap01Pow;half4 matCap02 = tex2D(_MainTex2,matCapUV2);matCap02 = lerp (_refacColor*0.5,_refacColor*matCap02,clamp(0,1,uvOffset));float alpha = saturate(max(matCap01.r,fresnel*fresnel));half4 col = matCap01+ matCap02;return float4(col.rgb,alpha);}ENDCG}}FallBack "Diffuse"
}

三、修改版来了

效果

Shader

Shader "TNShaderPractise/GlassBottle"
{Properties{_MainTex ("Texture", 2D) = "black" {}_MainTex2 ("Texture2", 2D) = "black" {}_MaskTex ("_MaskTex", 2D) = "black" {}_MatCap01Pow("_MatCap01Pow",Float)=1_refract("_refract",Float) =1[HDR]_refacColor("_refacColor",Color)=(0,0,0,1)_DecalTex ("DecalTex",2D) = "black"{} [HDR]_DecalColor("DecalColor",Color)=(1,1,1,1)}SubShader{Tags { "RenderType"="Transparent"  "Queue" = "Transparent"}Pass{Blend SrcAlpha OneMinusSrcAlphaCull FrontZWrite OffCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct a2v{float4 vertex : POSITION;half3 normal : NORMAL;float2 texcoord : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;half3 normalWS : TEXCOORD1;       float4 pos : SV_POSITION;float4 posWS : TEXCOORD2;float4 vPOS : TEXCOORD3;};sampler2D _MainTex;float4 _MainTex_ST;     sampler2D _MainTex2;float4 _MainTex2_ST;  sampler2D _MaskTex;float4 _MaskTex_ST;    sampler2D _DecalTex;float4 _DecalTex_ST;float4 _DecalColor;float _MatCap01Pow;float _refract;float4 _refacColor;v2f vert (a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.posWS = mul(unity_ObjectToWorld,v.vertex);o.normalWS = UnityObjectToWorldNormal(v.normal);o.uv = v.texcoord;o.vPOS = o.posWS - v.vertex;return o;}fixed4 frag (v2f i) : SV_Target{half3 viewDir = normalize(UnityWorldSpaceViewDir(i.posWS));half3 normalVS = normalize(mul(UNITY_MATRIX_V,i.normalWS));//改进版matCapUVfloat3 posVS = normalize(mul(UNITY_MATRIX_V,i.posWS));normalVS = cross(posVS,normalVS);normalVS.y = - normalVS.y;half thickMask = tex2D (_MaskTex,i.uv*_MaskTex_ST.xy+_MaskTex_ST.zw).g;half NdotV = abs(dot(i.normalWS,viewDir));half fresnel = smoothstep(1,0,NdotV);fresnel = fresnel+thickMask;float uvOffset = fresnel*_refract;float2 matCapUV = normalVS.yx*0.5+0.5;float2 matCapUV2 = uvOffset+matCapUV;half4 matCap01 = tex2D(_MainTex,matCapUV)*_MatCap01Pow;half4 matCap02 = tex2D(_MainTex2,matCapUV2);half4 Decal = tex2D(_DecalTex,i.uv*_DecalTex_ST.xy+_DecalTex_ST.zw)*_DecalColor;matCap02 = lerp (_refacColor*0.5,_refacColor*matCap02,clamp(0,1,uvOffset));float alpha = saturate(max(matCap01.r,fresnel*fresnel));float alphaDecal = smoothstep(0,0.1,Decal.r);half4 col = matCap01+ matCap02;col = lerp(col,Decal,alphaDecal);float finalAlpha =  lerp(alpha,alphaDecal,alphaDecal);return float4(col.rgb,finalAlpha);}ENDCG}Pass{Blend SrcAlpha OneMinusSrcAlphaCull BackZWrite OffCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct a2v{float4 vertex : POSITION;half3 normal : NORMAL;float2 texcoord : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;half3 normalWS : TEXCOORD1;        float4 pos : SV_POSITION;float4 posWS : TEXCOORD2;float4 vPOS : TEXCOORD3;};sampler2D _MainTex;float4 _MainTex_ST;     sampler2D _MainTex2;float4 _MainTex2_ST;  sampler2D _MaskTex;float4 _MaskTex_ST;    sampler2D _DecalTex;float4 _DecalTex_ST;float4 _DecalColor;float _MatCap01Pow;float _refract;float4 _refacColor;v2f vert (a2v v){v2f o;o.pos = UnityObjectToClipPos(v.vertex);o.posWS = mul(unity_ObjectToWorld,v.vertex);o.normalWS = UnityObjectToWorldNormal(v.normal);o.uv = v.texcoord;o.vPOS = o.posWS - v.vertex;return o;}fixed4 frag (v2f i) : SV_Target{half3 viewDir = normalize(UnityWorldSpaceViewDir(i.posWS));half3 normalVS = normalize(mul(UNITY_MATRIX_V,i.normalWS));//改进版matCapUVfloat3 posVS = normalize(mul(UNITY_MATRIX_V,i.posWS));normalVS = cross(posVS,normalVS);normalVS.y = - normalVS.y;half thickMask = tex2D (_MaskTex,i.uv*_MaskTex_ST.xy+_MaskTex_ST.zw).g;half NdotV = abs(dot(i.normalWS,viewDir));half fresnel = smoothstep(1,0,NdotV);fresnel = fresnel+thickMask;float uvOffset = fresnel*_refract;float2 matCapUV = normalVS.yx*0.5+0.5;float2 matCapUV2 = uvOffset+matCapUV;half4 matCap01 = tex2D(_MainTex,matCapUV)*_MatCap01Pow;half4 matCap02 = tex2D(_MainTex2,matCapUV2);half4 Decal = tex2D(_DecalTex,i.uv*_DecalTex_ST.xy+_DecalTex_ST.zw)*_DecalColor;//志诚大佬纠正我透明度取值的问题 提出用灰度计算不会影响后边的颜色计算half DecalAlpha = Decal.r*0.2125+Decal.g*0.7154+Decal.b*0.0721;matCap02 = lerp (_refacColor*0.5,_refacColor*matCap02,clamp(0,1,uvOffset));float alpha = max(matCap01.r,fresnel*fresnel);float alphaDecal = smoothstep(0,0.08,DecalAlpha);half4 col = matCap01+ matCap02;col = lerp(col,Decal,alphaDecal);float finalAlpha =  lerp(alpha,alphaDecal,alphaDecal);return float4(col.rgb,finalAlpha);}ENDCG}}FallBack "Diffuse"
}

总结

继续加油

简单的玻璃材质效果——UnityShader学习笔记相关推荐

  1. 模板测试+一个好玩的顶点动画效果——UnityShader学习笔记

    文章目录 一.自言自语 效果 模板测试效果(图传错了就懒得继续换了) 模板测试代码 顶点动画面板 顶点动画效果 顶点动画shader代码 总结 一.自言自语 嗯,又是很久没写笔记了.学习的进度和效率没 ...

  2. 带顶点动画的护盾效果——UnityShader学习笔记

    文章目录 自言自语 一.效果 二.C# 三.Shader 总结 自言自语 最近又是很久没有更新笔记了.原因有二. 一.最近一直再啃一个看起来酷炫的护盾效果 啃了好久啊.直至效果满意 也理解了. 这个是 ...

  3. 方块粒子动画效果——UnityShader学习笔记

    文章目录 自言自语 一.效果和面板 二.Shader 总结 自言自语 很早以前学B站一个UP主的东西.今天突然想起来.果然发现看不懂了.不理解了.然后自己又啃了一遍.总算理解了.并且发现了一些不合适的 ...

  4. Unity-shader学习笔记(七)

    文章目录 Unity-shader学习笔记(七) 15 更复杂的光照 15.1 Unity的渲染路径 15.1.1 前向渲染路径 15.1.1.1 前向渲染路径的原理 15.1.1.2 Unity中的 ...

  5. Unity材质球个人学习笔记

    Unity材质球个人学习笔记 Shader FX: Lighting and glass effects.( 灯光.玻璃) GUI and UI: For user interface graphic ...

  6. UnityShader学习笔记:Caustic水纹焦散与鱼群制作水族馆

    UnityShader学习笔记:Caustic水纹焦散 贴图 代码部分 关于聚散色彩分离的疑惑 鱼群动画 本文教程原地址:https://www.alanzucconi.com/2019/09/13/ ...

  7. 消散效果shader实践含clip阴影pass——UnityShader学习笔记

    文章目录 自言自语 一.效果部分 二.Shader部分 总结 自言自语 消融效果shader学习练习笔记 没啥可说得了 写完看不见模型了 ORZ 然后晚上回来把绕不明白的几个函数给绕明白了...再加上 ...

  8. 简单的builltin下的PBRshader手撸练习——UnityShader学习笔记

    文章目录 自言自语 一.截图效果 二.shader 总结 自言自语 又是很久没有写笔记了.因为一直在啃PBR.总算在昨晚算是啃通了一遍.不过这只是个简单的builltin下的相对简单的PBR框架的sh ...

  9. 玉石效果?——UnityShader学习笔记

    文章目录 自言自语 一.效果 第一版效果 第二版效果 二.Shder 总结 自言自语 shader的能做的效果太多,又学习一种方法做了个效果.但总感觉不是那么回事儿.. 先笔记下吧 又更新了一下 调整 ...

  10. 基金投资好简单,从入门到精通 -学习笔记day1

    本系列笔记是我通过在喜马拉雅平台,跟随"威尼斯摆渡人"出品的"基金投资好简单,入门到精通"系列时学习记录的笔记,如果大家对基金投资感兴趣,并不知道怎么入手的话, ...

最新文章

  1. matlab的dft谱分析,数字信号处理基于matlab(用DFT作谱分析,窗函数的设计)
  2. Linux 进程管理命令之pidof
  3. 数据存储方案-闭包表
  4. Oracle数据库管理›oracle内部的jdk版本
  5. 编程常用英语词汇 | GitHub
  6. 神秘七年、融资23亿美元,Magic Leap终于发售首款产品,被吐槽full of shit
  7. android 5.0 字体,QC8916 修改系统默认字体(Android 5.0)
  8. 试题18 四平方和(枚举法)
  9. Mybatis中是否需要依赖配置文件的名称要和mapper接口的名称一致 params错误
  10. MongoDB数据库操作和程序基础文档
  11. 计算机辅助药物设计中的分子动力学模拟
  12. Hello, CSDN
  13. 如何利用excel中的数据源制作数据地图
  14. Leetcode 1653. Minimum Deletions to Make String Balanced [Python]
  15. Elasticsearch 之(6)kibana嵌套聚合,下钻分析,聚合分析
  16. 凸优化学习笔记 6:共轭函数
  17. .sh执行文件sed命令出错 bad flag in substitute command: ‘U‘ Mac终端
  18. 打赢下一场游戏大战!PlayStation能满足玩家一切需求?
  19. IMDB影评数据集无法通过keras下载
  20. .py文件图标为白纸以及右键没有Edit with IDLE的解决办法

热门文章

  1. activity工作流引擎
  2. Dragdealer拖动组件
  3. 优派 ELITE XG320Q、XG320U / UG 评测
  4. 新手如何当好办公室主任?傻瓜才做“二当家的”,高手都懂这5个潜规则
  5. Zabbix 服务器修改时区时间
  6. 一些常用意大利语 1000个单词
  7. 家用路由器与企业路由器有什么区别
  8. GIS 地图坐标系相互转换的方法学习笔记
  9. c语言 lis的nlogn算法,LCS (nlogn)
  10. 根据两点的经纬度求方位角和距离