最近项目中要用到镜子的反射特效,镜子反射由物理学知识可以知道,镜子中的景物是实际物体的对称表现。由此就衍生了俩种 思路,第一种是讲物体实实在在渲染到镜子之后,第二种是生成一个摄像机使其关于镜子对称,将此摄像机渲染出的场景作为贴图贴到地面。

第一种方法

具体做法就是将需要在镜子中反射的物体进行俩次渲染,在第二个pass的顶点着色器中改变其顶点位置。

Shader "Unlit/Mirror"
{Properties{_MainTex ("Texture", 2D) = "white" {}}SubShader{Tags { "RenderType"="Opaque" }Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{// sample the texturefixed4 col = tex2D(_MainTex, i.uv);return col;}ENDCG}//透明阴影// Tags {"Queue" = "Transparent"}Pass{Blend SrcAlpha OneMinusSrcAlphaCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;};sampler2D _MainTex;float4 _MainTex_ST;v2f vert (appdata v){v2f o;float4 pos;pos = mul(unity_ObjectToWorld, v.vertex);pos.y = -pos.y;pos = mul(UNITY_MATRIX_V, pos);pos = mul(UNITY_MATRIX_P, pos);o.vertex = pos;o.uv = TRANSFORM_TEX(v.uv, _MainTex);return o;}fixed4 frag (v2f i) : SV_Target{// sample the texturefixed4 col = tex2D(_MainTex, i.uv);return fixed4(col.rgb,0.5);}ENDCG}}
}

这种方式的缺点很明显,天空盒加不上去,需要修改镜子和反射物的Shader,镜子反射的模型过多,过于复杂的时候,这种方式根本行不通。

第二种

第二种方式
这个是GAD上http://gad.qq.com/article/detail/7157554上这位博主的方法。

Unity 镜子反射特效相关推荐

  1. Unity 3D 环境特效||Unity 3D 游戏场景设计实例

    Unity 3D 环境特效 一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程. Unity 3D 游戏开发引擎为了能够简单地还原真实世界中 ...

  2. Unity镜子效果的实现(无需镜子Shader)

    Unity镜子效果制作教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  3. 10万镜子反射月光,组成3.6平方公里巨幅头像,谷歌花式纪念登月50年

    点击上方 蓝字 关注我们 来源 | 公众号量子位 作者 | 晓查 责编 | linse 距离人类首次登月已过去 50 年,本周人们用各种方式纪念"阿波罗11号"登月计划.如此大事怎 ...

  4. Unity Shader 反射 折射 菲涅尔反射

    菲尼尔反射原理: 通过计算得到的反射值,采样CubeMap,得到环境反色颜色. 核心算法: 反射核心算法:Reflect(-viewDir,worldNormalDir) 折射核心算法:Refact( ...

  5. unity 特效_介绍几个 Unity 开源视觉特效项目

    今天为大家介绍几个日本 Unity 大神 Keijiro 的视觉特效项目.关于 Keijiro 可以参见下面的文章. https://connect.unity.com/p/unite-2019-zh ...

  6. Unity的一些特效和粒子特效插件

    Unity的插件 Kitchen Cooking FX 厨房烹饪效果和声音 Ultimate VFX 终极粒子特效资源包 Advanced Dissolve高级溶解插件 Translucent Ima ...

  7. unity 实现闪电特效

    之前尝试过用trail实现闪电特效,效果并不理想:计算量大.视觉尴尬. 所以后来改用序列帧来实现. step1.准备素材 所需工具: AfterEffect [PhotoShop] 步骤: 1.打开A ...

  8. [Unity]UGUI和特效MeshRender渲染层级问题

    相信点到这里进来的老哥们,八成也是遇到了我这样的问题: 美术做了一个特效,这个特效可能是粒子,也可能是一个MeshRender.然后策划想让这个特效显示在Image A上面,Image B下面. 就是 ...

  9. unity学习笔记-特效篇

    unity学习笔记 传送门特效 火焰特效 传送门特效 由于动画师的动画制作遇到了一些小问题,只能先做其他功能的摸索了~ 本来想记录一下服务器搭建的,但是在消息传输的部分遇到了一些bug,可能是消息解析 ...

  10. Unity Shader屏幕特效基础OnRenderImage()函数

    前言:  unity shader中的pass是会顺序执行的,但是由于在图像处理中我们常常需要使用一个pass的处理结果作为另一个pass的输入,这个时候就需要用到OnRenderImage()函数了 ...

最新文章

  1. 和ISP合作需要了解什么?—Vecloud微云
  2. android编程用真机模拟,android编程的广播,模拟器可接受,但真机不可接受。
  3. java mysql 全文索引_MySQL索引原理
  4. javaScript执行环境、作用域链与闭包
  5. Kalman Filter : 理解卡尔曼滤波的三重境界
  6. python 经纬度画北京地图_python basemap 画出经纬度并标定的实例
  7. ectouch 概述
  8. Arduino驱动MAX30102心率血氧传感器模块
  9. 个人成长:2021年8月记
  10. 为什么程序员容易猝死
  11. php开发地图导航,百度地图API使用方法详解
  12. 世界各国国家名和英文名-mysql数据库设计
  13. 如何向icloud上传文件_怎么把文件放进苹果icloud
  14. Python数据分析与机器学习9-Seaborn之多变量分析
  15. 集训队作业2018: 青春猪头少年不会梦到兔女郎学姐(多限制容斥)(生成函数)(组合数学)
  16. unity3d5.1物体椭圆旋转选择界面实现(一)
  17. android canvas广告牌,亚马逊广告后台创建CPC站内广告教程
  18. java 虚拟机设置 Xms Xmx PermSize MaxPermSize
  19. photoimpact快捷键大全
  20. 新员工从公司的git上下载代码步骤:

热门文章

  1. Simulink电力系统仿真-三相短路
  2. 《阿里巴巴Java开发手册》版本演进历史
  3. 移动办公平台忘记密码怎么办?移动办公平台下载
  4. Scratch作品(一)
  5. 电信中兴f452光猫路由改桥接最简单的方式,亲自体验成功。
  6. HTML静态网页作业-网上花店4个页面(HTML+CSS+JS)
  7. Axure中继器基础教程(增行、删当前、标记、全部、规则行) Mark
  8. java 线程面试题_8道Java多线程面试题,看过后你不会后悔!
  9. 用python实现千图成像工具,快给你的男/女神做一个吧~
  10. STM8S003F3 使用ADC:固件库版本与寄存器版本