Shader实现玻璃效果
一、类似镜子窗户似的玻璃表现
这是一张燥波图片
提供给玻璃的具有透明效果的,一般用黑白灰贴图,Alpha通道里有一种说法是黑透白不透,灰色是半透 。
Shader为
Shader "Mirrors/Transparent Bumped Specular Flat" {
Properties {_Transparency("Transparency", Range (0, 1)) = 1_Distortion ("Distortion", range (0,1)) = 0_Color ("Main Color", Color) = (1,1,1,1)_MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}_BlendLevel("Main Material Blend Level",Range(0,1))=1_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)_Shininess ("Shininess", Range (0.01, 1)) = 0.078125_BumpMap ("Normalmap", 2D) = "bump" {}_Bumpness ("Bump Rate",Range(0,1))= 1_Ref ("For Mirror reflection,don't set it!", 2D) = "white" {}
}SubShader {Tags { "Queue"="Transparent" "RenderType"="Opaque" }GrabPass { Name "BASE"Tags { "LightMode" = "Always" }}CGPROGRAM
#pragma surface surf BlinnPhong
#pragma target 3.0
#pragma debugsampler2D _MainTex;
sampler2D _BumpMap;
sampler2D _Ref;
fixed4 _Color;
half _BlendLevel;
half _Transparency;
half _Bumpness;
half _Shininess;
sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
half _Distortion;struct Input {float2 uv_MainTex;float2 uv_BumpMap;float4 screenPos;
};void surf (Input IN, inout SurfaceOutput o) {fixed3 nor = UnpackNormal (tex2D(_BumpMap, IN.uv_BumpMap));fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);float2 screenUV = IN.screenPos.xy / IN.screenPos.w;screenUV += nor.xy * _Distortion ;fixed4 ref = tex2D(_Ref, screenUV);float4 screenUV2 = IN.screenPos;#if UNITY_UV_STARTS_AT_TOPfloat scale = -1.0;#elsefloat scale = 1.0;#endifscreenUV2.y = (screenUV2.y - screenUV2.w*0.5)* scale+ screenUV2.w * 0.5;screenUV2.xy = screenUV2.xy / screenUV2.w;screenUV2.xy += nor.xy * _Distortion;fixed4 trans = tex2D(_GrabTexture,screenUV2.xy);o.Albedo = tex.rgb * _Color.rgb * _BlendLevel;o.Emission = lerp(ref.rgb,trans.rgb,_Transparency);o.Normal = nor.rgb * _Bumpness;o.Gloss = tex.a;o.Alpha = tex.a * _Color.a;o.Specular = _Shininess;
}
ENDCG
}FallBack "Transparent/VertexLit"
}
不需要法线贴图只调透明度参数就可以了
二 、水杯,高脚杯似的玻璃表现Shader
Shader "Mirrors/Transparent Specular Sphere" {
Properties {_Transparency("Transparency", Range (0, 1)) = 1_Distortion ("Distortion", range (0,30)) = 10_Color ("Main Color", Color) = (1,1,1,1)_MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}_BlendLevel("Main Material Blend Level",Range(0,1))=1_SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)_Shininess ("Shininess", Range (0.01, 1)) = 0.078125_Ref ("For Mirror reflection,don't set it!", 2D) = "white" {}
}SubShader {Tags { "Queue"="Transparent" "RenderType"="Opaque" }GrabPass { Name "BASE"Tags { "LightMode" = "Always" }}CGPROGRAM
#pragma surface surf BlinnPhong
#pragma target 3.0
#pragma debugsampler2D _MainTex;
sampler2D _Ref;
fixed4 _Color;
half _BlendLevel;
half _Transparency;
half _Shininess;
sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
half _Distortion;struct Input {float2 uv_MainTex;float4 screenPos;
};void surf (Input IN, inout SurfaceOutput o) {fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);#if UNITY_UV_STARTS_AT_TOPfloat scale = -1.0;#elsefloat scale = 1.0;#endiffloat4 screenUV = IN.screenPos;float2 offset = (_Distortion * o.Normal) ;screenUV.xy += offset ;float3 ref = tex2Dproj( _Ref, screenUV);float4 screenUV2 = IN.screenPos;screenUV2.y = (screenUV2.y - screenUV2.w*0.5)* scale+ screenUV2.w * 0.5;offset = _Distortion * o.Normal;screenUV2.xy += offset ;float3 trans = tex2Dproj( _GrabTexture, screenUV2);o.Albedo = tex.rgb * _Color.rgb * _BlendLevel;o.Emission = lerp(ref.rgb,trans.rgb,_Transparency);o.Gloss = tex.a;o.Alpha = tex.a * _Color.a;o.Specular = _Shininess;
}
ENDCG
}FallBack "Transparent/VertexLit"
}
Shader实现玻璃效果相关推荐
- Unity shader学习之Grab Pass实现玻璃效果
GrabPass可将当前屏幕的图像绘制在一张纹理中,可用来实现玻璃效果. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7201324.html shader ...
- Unity Shader之磨砂玻璃与水雾玻璃效果
导读 玻璃效果是游戏场景中常见的效果之一,除却普通的透明玻璃外,磨砂玻璃也是较为常见的效果.玻璃与场景中的其他物体也会有交互,例如,浴室中的玻璃.雨天的窗户会在水汽的作用下带有一定差别的雾效.本文以U ...
- (十六)unity shader之——————高级纹理之渲染纹理(镜子、玻璃效果)
在之前的学习中,一个摄像机的渲染结果会输出到颜色缓冲中,并显示到我们的屏幕上.现在的GPU允许我们把整个三维场景渲染到一个中间缓冲中,即渲染目标纹理(Render Target Texture,RTT ...
- shader 玻璃效果
玻璃效果主要是折射效果的计算和反射效果的计算. 折射: 1.利用Grass Pass对当前屏幕的渲染图像进行采样 2.得到法线贴图对折射的影响 3.对采集的屏幕图像进行关于法线方向上的扭曲和偏移,以模 ...
- Unity Shader 玻璃效果
一个玻璃效果主要分为两个部分,一部分是折射效果的计算,另一部分则是反射.下面分类进行讨论: 折射: 1.利用Grass Pass对当前屏幕的渲染图像进行采样 2.得到法线贴图对折射的影响 3.对采集的 ...
- shader入门精要读书笔记23 高级纹理-渲染纹理-镜子效果、玻璃效果
一.前言 现代GPU允许我们把整个三维场景目标渲染到一个中间缓冲中,即渲染目标纹理(RTT). 多重渲染目标(MRT),这种技术指的是GPU允许我们把场景同时渲染到多个渲染目标纹理中,而不再需要为每个 ...
- 【Unity Shader】Unity中利用GrabPass实现玻璃效果
<入门精要>中模拟玻璃是用了Unity里的一个特殊的Pass来实现的,这个Pass就是GrabPass,比起上一篇博客实现镜子的方法,这个方法我认为相对复杂,因此在实现之前需要对GrabP ...
- Unity Shader 入门精要——镜面效果、玻璃效果
渲染纹理 在之前的学习中,一个摄像机的渲染结果会输出到颜色缓冲中,并显示到我们的屏幕上.现代的GPU允许我们把整个三维场景渲染到一个中间缓冲中,即渲染目标纹理(RenderTarget Texture ...
- UnityShader入门精要-渲染纹理 镜子 玻璃 效果
通常模式是一个摄像机的渲染结果输出到颜色缓冲内并显示到屏幕上,现代GPU允许我们把场景渲染到一个中间缓冲(渲染目标纹理RTT),与之相关的是多重渲染目标MRT允许我们把场景同时渲染到多个渲染目标中而不 ...
最新文章
- 使用U-Nets和深度学习进行自动缺陷检查
- linux c daemon 程序后台运行函数
- HDU 3308 线段树求区间最长连续上升子序列长度
- 最新发布!《阿里云实时计算 Flink 版解决方案白皮书-2021版》开放下载
- PCM音频基础知识及采样数据处理
- python代码删掉了几行怎么撤回_78行Python代码实现现微信撤回消息功能
- epoll的两种模式
- 基础选择器之通配符选择器(CSS、HTML)
- [草稿]尝试从 same.com 的视角观察简书的用户社交网络
- jmeter导出测试报告
- Python--sort()函数的用法
- 高薪程序员晒出银行转账记录,网友:羡慕
- iQOO手机如何打开高清通话volte?
- 系统启动故障恢复控制台应用实例
- oracle11g 读写分离代理,OneProxy5.8.1数据库读写分离特性试验
- android webView 全屏播放网络视频
- win7家庭版桌面没有计算机图标,Win7 home basic家庭普通版显示桌面图标的方法
- 安卓微信浏览器使用input file图片上传无法触发change事件
- Centos 进入recovery模式,单用户模式
- 民间炒股高手绝招(转)
热门文章
- CSS3实现一个小风车
- C. Link Cut Centroids(树的重心性质)
- Android 自定义RadioButton 实现文字上下左右方向的图片大小设置
- IT工程师造“飞机维修安全卫士”,百度飞桨EasyDL担当“算法团队”
- 360如何设置远程连接到服务器,惠普服务器360 G8 ilo远程管理口怎么远程安装服务器系统...
- golang实现TCP网络编程
- 精读《维护好一个复杂项目》
- 以色列网络安全行业的繁荣还将持续向前
- 抢占万亿“氢”机,第六届国际氢能与燃料电池汽车大会亮点前瞻
- PASCAL VOC的评估代码voc_eval.py解析