接上文 :渲染纹理(上)之截屏功能实现四、GrabPass 抓取图象GrabPass 是 UnityShader 中的一个特殊 Pass,它的目的很简单:立刻获取当前的屏幕图象代码也非常简单:Tags { "Queue" = "Transparent" "RenderType" = "Opaque" } GrabPass { "_RefractionTex" } LOD 200 PAS
GrabPass GrabPass是unity为我们提供的一个很方便的功能,可以直接将当前屏幕内容渲染到一张贴图上, 我们可以直接在shader中使用这张贴图而不用自己去实现渲染到贴图这样的一个过程。GrabPass的使用非常简单,我们在写vertex fragment shader额时候都需要写一个pass,GrabPass也是一个pass,只不过是 unity为我们实现好的一个pass。 我
转载 2024-06-28 15:25:11
97阅读
GrabPass GrabPass是Unity为我们提供的一个很方便的功能,可以直接将当前屏幕内容渲染到一张贴图上,我们可以直接在shader中使用这张贴图而不用自己去实现渲染到贴图这样的一个过程,大大的方便了我们的shader编写。GrabPass的使用非常简单,我们在写vertex fragme
转载 2019-06-20 12:38:00
551阅读
一、如何获得颜色缓冲网上搜索Unity的后处理或者获得屏幕缓冲,大部分会提到用grabpass到一张指定纹理上或者写一个后处理脚本挂在摄像机上。但是这种方式在Urp管线下已经不生效了。urp取消了默认管线抓取颜色缓冲的grabpass,同时也取消了MonoBehaviour.OnRenderImage,需要使用ScriptableRenderPass 来完成类似的功能。ScriptableRend
1.渲染利用reflect probe代替反射、折射,尽量不用RTT、GrabPass、RenderWithShader、CommandBuffer.Blit (BuiltinRenderTextureType.CurrentActive...)建立统一后处理框架(bloom、hdr、DOF等)代替多后处理,可以共用模糊函数,减少多次blit;另外要注意RTT的尺寸。空气折射、热浪扭曲等使用Gra
转载 2024-09-02 13:51:53
633阅读
在知乎上看到一篇不错的性能优化文章,进行了比较系统的概括,下面分享一下,利用reflect probe代替反射、折射,尽量不用RTT、GrabPass、RenderWithShader、CommandBuffer.Blit (BuiltinRenderTextureType.CurrentActive...)建立统一后处理框架(bloom、hdr、DOF等)代替多后处理,可以共用模糊函数,减少多次
1.渲染利用reflect probe代替反射、折射,尽量不用RTT、GrabPass、RenderWithShader、CommandBuffer.Blit (BuiltinRenderTextureType.CurrentActive...)建立统一后处理框架(bloom、hdr、DOF等)代替多后处理,可以共用模糊函数,减少多次blit;另外要注意RTT的尺寸。空气折射、热浪扭曲等使用Gra
1.渲染 利用reflect probe代替反射、折射,尽量不用RTT、GrabPass、RenderWithShader、CommandBuffer.Blit (BuiltinRenderTextureType.CurrentActive…) 建立统一后处理框架(bloom、hdr、DOF等)代替多后处理,可以共用模糊函数,减少多次blit;另外要注意RTT的尺寸。 空气折射、热浪扭曲等使用Gr
转载 2024-06-24 17:20:12
66阅读
  而GrabPass在单次DC没有Finish时,就去GPU取其他BUFF的信息,会比较慢,具体不知道GPU的工作原理(日后慢慢不上GPU结构与工作原理方式),可以查看一篇相关的文章:Unity ImageEffect 效率分析。实现思路是:先使用_Camera.SetTargetBuffers(colorRT.colorBuffer, depthRT.depthBuffer
项目里用了个比较简化的水(手机上用的),  角色也会倒影在很远的水面上。 因为用了  GrabPass{"_GrabTexture"} 接取相机的数据 再做水面效果的处理。 策划希望只过滤掉 角色的影子。本来想换相机 设一下mask 排除角色,用相机的RenderTexture ,网上有些例子就是这样的。但开销肯定变大不少。
文章目录1.前言2.抓取屏幕2.1 Unity C#接口2.2 CommandBuffer2.3 GrabPass3.获取屏幕坐标3.1 ComputeScreenPos方法3.2 VPOS语义3.3 SV_POSITION 语义3.4 ComputeGrabScreenPos4.背景模糊5.最后 1.前言在unity实现毛玻璃(磨砂玻璃)效果,则需要三要素:抓取屏幕、根据渲染体在屏幕上
最*正在学习利用Unity制作动画,遇到了较多水面问题,正好来研究一下水面是如何渲染的。我们首先来看一下经典教程《Shader入门精要》中的水面渲染。一、CubeMap,《Shader入门精要》中的水面渲染  使用立方体纹理(Cubemap)模拟反射,GrabPass模拟折射。使用菲涅尔系数混合折射和反射效果。    fresnel = pow(1-saturate(dot(v,n)),4);  
转载 2024-02-12 21:50:16
641阅读
1 前言        立方体纹理(Cubemap)和天空盒子(Skybox)中介绍了生成立方体纹理和制作天空盒子的方法,本文将使用立方体纹理进行采样,实现反射、菲涅耳反射和折射效果。另外,本文还使用了 GrabPass 抓取屏幕图像,替代立方体纹理,作为折射的采样纹理。  &n
最近需要用到这个shader,就稍微研究了一下,这里做一下笔记,免得回来自己忘了~思路:看了不少文章,其实都大同小异,分为3步完成。 1,先建一个平面出来(也可以是个精灵),来显示效果。当然你要是准备做屏幕特效那就当我没说,这里不讨论了,只是用法不同。 2,建立我们的shader,我们先用 unity 自带的 GrabPass 采样到当前平面下的像素数据(你就可以想象成屏幕截图) 3,将抓取
实现思路今天来实现一个简单的水面效果。水面的话主要是以下几个效果叠加 1.水面的动态波浪效果,我们这里使用最简单的正弦波加上法线贴图来模拟。如果想要更精确的波动效果可以考虑使用Gerstner波 2.不同水深颜色不同的效果,使用该顶点深度和顶点坐标的差值来计算深度,然后映射到颜色 3.浪涌效果,还是根据顶点深度和顶点坐标的差值来计算深度,然后叠加上一层浪涌 4.折射效果,用grabpass,采样之
1、水面波浪起伏的效果是如何实现的?波光粼粼的效果又是如何实现的?水面的动态波浪效果,我们这里使用最简单的正弦波加上法线贴图来模拟。如果想要更精确的波动效果可以考虑使用Gerstner波不同水深颜色不同的效果,使用该顶点深度和顶点坐标的差值来计算深度,然后映射到颜色浪涌效果,还是根据顶点深度和顶点坐标的差值来计算深度,然后叠加上一层浪涌折射效果,用grabpass,采样之后进行偏移,最后叠加上去。
CommandBufferCommandBuffers是预先写好一系列的渲染指令,然后在摄像机渲染时可以在适当的时机插入这一段指令,总之还是先看一下官方的案例第一个是一个毛玻璃的案例,commandBuffers的任务就是为毛玻璃材质的shader提供一张模糊后的屏幕截图,类似GrabPass下面放的是我为了方便理解删减过的代码,不过用的shader仍然是案例的shader,一个用于高斯模糊的sh
转载 10月前
175阅读
unity屏幕扭曲效果这个效果其实比较简单,但要根据具体情况来选择具体的实现方案;对于全屏扭曲,并且扭曲效果后没有其他物体的绘制(除了UI),这个时候可以选择使用全屏后处理效果;比如全屏雨幕效果;如果是半透明物体对背景的扭曲,可以使用内部的GrabPass或者CommandBuffer来实现;比如火焰效果、刀光效果、玻璃效果等;扭曲效果注意事项对于半透明物体对背景的扭曲情况下有一些注意事项:使用C
转载 2024-04-09 10:39:43
118阅读
水波纹效果 在模拟实时水面的过程中,我们往往也会使用噪声纹理。此时,噪声纹理通常会用作一个高度图,以不断修改水面的法线方向。为了模拟水不断流动的效果,我们会使用和时间相关的变量来对噪声纹理进行采样,当得到法线信息后,再进行正常的反射+折射计算,得到最后的水面波动效果。我们使用一张立方体纹理(Cubemap)作为环境纹理,模拟反射。为了模拟折射效果,我们使用GrabPass来获取当前屏幕的渲染
在这里,使用一张立方体纹理(cubemap)作为环境纹理,模拟反射。为了模拟折射效果,我们使用GrabPass来获取当前屏幕的渲染纹理,并使用切线空间下的法线方向对像素的屏幕坐标进行偏移,再使用该坐标对渲染纹理进行屏幕采样,从而模拟近似的折射效果。与之前不同的是,水波的法线纹理是由一张噪声纹理生成而得,而且会随着颜色变化不断平移,模拟波光粼粼的效果。除此之外,在这里并没有使用一个定值来混合反射和折
转载 2024-04-08 13:46:31
71阅读
  • 1
  • 2