版权声明:

  • 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客"
  • 您可以自由转载,但必须加入完整的版权声明!

shader final

PBR渲染

Vertex and Fragment Shader Instance

glass shader

1.屏幕透明

            // 计算每个顶点相关的属性(位置,纹理坐标)
VertOutput vert(VertInput v)
{
VertOutput o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uvgrab = ComputeGrabScreenPos(o.vertex);
// 传入一个投影空间中的顶点坐标,此方法会计算出该顶点坐标在整个摄像机
// 此方法会以摄像机可视范围的左下角为纹理坐标0,0点,右上角为1,1点,计算出
// 当前顶点位置对应的纹理坐标
// 有了贴图的uv坐标之后就把贴图贴上去
return o;
} half4 frag(VertOutput i) : COLOR
{
// 将Unity光栅化阶段经过顶点插值得到的片元(像素)的属性进行计算,得到每个片元的颜色值
return tex2Dproj(_GrabTexture,i.uvgrab) * 0.5;
// tex2Dproj
}

2.屏幕扭曲

bump map rgb当做xyz坐标来用的

computeGrabScreenPos

tex2dproj

struct VertInput

{

float4 vertex:POSITION;

float4 color:COLOR;

float2 texcoord:TEXCOORD;

// 一个是自身的纹理坐标,还有一个是grab贴图的坐标

};

struct VertOutput

{

float4 vertex:POSITION;

fixed4 color : COLOR;

float2 texcoord : TEXCOORD0; // _Maintex的纹理坐标

float4 uvgrab:TEXCOORD1; // BumpMap的纹理坐标

};

        // 计算每个顶点相关的属性(位置,纹理坐标)
VertOutput vert(VertInput v)
{
VertOutput o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uvgrab = ComputeGrabScreenPos(o.vertex);
// 传入一个投影空间中的顶点坐标,此方法会计算出该顶点坐标在整个摄像机
// 此方法会以摄像机可视范围的左下角为纹理坐标0,0点,右上角为1,1点,计算出
// 当前顶点位置对应的纹理坐标
// 有了贴图的uv坐标之后就把贴图贴上去 o.color = v.color;
o.texcoord = v.texcoord; return o;
} half4 frag(VertOutput i) : COLOR
{
// 将Unity光栅化阶段经过顶点插值得到的片元(像素)的属性进行计算,得到每个片元的颜色值 half4 mainColor = tex2D(_MainTex, i.texcoord); //本身纹理采样
half4 bump = tex2D(_BumpMap, i.texcoord); // 法线贴图采样扰动值
half2 distortion = UnpackNormal(bump).rg;// 纹理值转换为法线值 i.uvgrab.xy += distortion * distortion * _Magnitude; // 对uvgrab进行扰动
fixed4 grabColor = tex2Dproj(_GrabTexture, i.uvgrab);// 玻璃背景后面的颜色 return mainColor * grabColor;
}

water shader

利用这种效果,可以对流动的水使用,也可以对火焰产生的空气流的冲击波进行模拟

Animated materials动画材质

_grabTexture // 抓取背景

_NoiseTex // 随机波纹

_CausticTex // 刻蚀纹理

float2 sinusoid(float2 x, float2 m, float2 M, float2 periodo)

{

float2 excursions = M - m;

float2 coefficiente = 3.1415 * 2.0 / periodo;

return excursions / 2.0 * (1.0 + sin(x * coefficiente)) + m;

}

half4 frag(VertOutput i) : COLOR

{

fixed4 noise = tex2D(_BumpMap,i.texcoord);

fixed4 mainColor = tex2D(_MainTex, i.texcoord);

            float time = _Time[1] * 0.5; // Time.time

            float2 waterDisplacement = sinusoid
(
float2(time , time) + noise.xy,
float2(-_WaterMagnitude, -_WaterMagnitude),
float2(_WaterMagnitude,_WaterMagnitude),
float2(_WaterPeriod,_WaterPeriod)
);//当前值,最小值,最大值,周期 i.uvgrab.xy += waterDisplacement;
fixed4 grabColor = tex2Dproj(_GrabTexture,i.uvgrab);
fixed4 causticColor = tex2D(_CausticTex, i.texcoord.xy*0.25 + waterDisplacement * 5); return grabColor * mainColor * causticColor * _WaterColor;
}

screen shader and image effects

image effect

Unity进阶之:Shader渲染的更多相关文章

  1. unity之初识shader

    自己做个总结先.当然文中很多内容都是从各位大神的文档当中看的.我只是站在巨人的肩膀上.       首先什么是shader?其实就是一个在显示屏当中的显示程序,俗称着色器.它可以定义物体在硬件显示屏当 ...

  2. 【unity shaders】:Unity中的Shader及其基本框架

    shader和Material的基本关系 Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出.绘图单元可以依据这个输出来将图 ...

  3. 【浅墨Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法&颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨)  ...

  4. 【Unity Shaders】Shader学习资源和Surface Shader概述

    写在前面 写这篇文章的时候,我断断续续学习Unity Shader半年了,其实还是个门外汉.我也能体会很多童鞋那种想要学好Shader却无从下手的感觉.在这个期间,我找到一些学习Shader的教程以及 ...

  5. unity 内置shader

    几个有用的Unity 内置shader: (一)Standard RenderingMode:Opaque为实体渲染,更改Color的透明通道不会有影响:Cutout会把图片的透明通道显示出来,非严格 ...

  6. CSharpGL(14)用geometry shader渲染模型的法线(normal)

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(14)用geometry shader渲染模型的法线(normal) +BIT祝威+悄悄在此留下版了个权的信息说: 2016-08-13 ...

  7. 使用替换shader渲染

    相关函数: Camera.RenderWithShader(shader: Shader, replacementTag: string) 使用指定shader渲染,只影响一帧 Camera.SetR ...

  8. Three.js粒子特效,shader渲染初探(一篇非常详细的介绍)

    Three.js粒子特效,shader渲染初探 转载来源:https://juejin.im/post/5b0ace63f265da0db479270a 这大概是个序 关于Three.js,网上有不多 ...

  9. Unity内置shader 下载

    Unity内置shader  4.3.1 版本的  其他版本可以自己修改名称 下载地址 http://download.unity3d.com/download_unity/builtin_shade ...

随机推荐

  1. scala刷LeetCode--26 删除排序数组中的重复项

    一.题目描述 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完 ...

  2. Jenkins构建部署jar/war后,服务无法在后台持续运行的解决方案

    jenkins中自动构建helpcenter.jar文件,然后以在server上以shell脚本的形式启动jar服务.jenkins构建后,手动执行sh脚本,服务启动异常.但jenkins结合shel ...

  3. 每日一问:Android 滑动冲突,你们都是怎样处理的

    坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 在 Android 开发中,滑动冲突总是我们一个无法避免的话题.而对于解 ...

  4. [Usaco2007 Open]Fliptile 翻格子游戏题解

    问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec  内存限制: 128 MB 题目描述 Farmer John knows that an intell ...

  5. jekyll搭建个人博客1

    目录 配置环境 使用模板 配置环境 简介 jekyll是一个简单的免费的,生成静态网页的工具,不需要数据库支持.但是可以配合第三方服务,例如Disqus.最关键的是jekyll可以免费部署在Githu ...

  6. 和朱晔一起复习Java并发(三):锁(含锁性能测试)

    这个专题我发现怎么慢慢演化为性能测试了,遇到任何东西我就忍不住去测一把.本文我们会大概看一下各种锁数据结构的简单用法,顺便也会来比拼一下性能. 各种并发锁 首先,我们定一个抽象基类,用于各种锁测试的一 ...

  7. kali linux 常用文件与指令路径

    重启网络 : /etc/init.d/networking restart 语言设置文件 : /etc/default/locale apt 安装deb保存目录 : /var/cache/apt/ar ...

  8. Android 开发感想

    18年从.net转行做安卓开发,现在已经过去一年多了.说一下感想和心得体会! 一.开始 说一下我的经厉,从毕业开始出来工作一直是从事.net方向的开发工作.一开始也是没什么经验,加上也没有其他手艺就找 ...

  9. 关于java爬虫以及一些实例

    首先是工具介绍 Jsoup jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法 ...

  10. java反射构建对象和方法的反射调用

    Java反射技术应用广泛,其能够配置:类的全限定名,方法和参数,完成对象的初始化,设置是反射某些方法.可以增强java的可配置性. 1.1 通过反射构建对象(无参数): 例如我们使用 ReflectS ...