Shader
文章平均质量分 73
SnoopyNa2Co3
莫生气静心研究技术
展开
-
unity 关于深度图优化(drawcall不翻倍)
深度图基础深度图里存放了[0,1]范围的非线性分布的深度值,这些深度值来自NDC坐标。在延迟渲染中,深度值默认已经渲染到G-buffer;深度图可以做什么效果https://www.jianshu.com/p/80a932d1f11e这里已经有详细说明深度图获取在C#中设置Camera.main.depthTextureMode = DepthTextureMode.Depth;在Shader中声明_CameraDepthTexture原理是Unity在背后利用Shade.原创 2021-03-02 15:28:36 · 1978 阅读 · 3 评论 -
Unity 特效扭曲效果(使用command buffer实现)
了解command bufferCommandBuffer携带一系列的渲染命令,可以指定在相机渲染的某个点执行本身命令(包括特殊渲染,保存当前rendertexture等)CommandBuffer可以使用的点看这里(官网文档)具体渲染流程和触发点如下特效扭曲的实现原理以及方案原理:就是抓取特效后面渲染的纹理进行扰动方案1:抓取特效后面渲染的纹理一般用grabpass,根据grabpass进行扰动方案2:利用command buffer在渲染天空盒之后保存一张屏幕纹理(.原创 2020-06-04 12:04:03 · 3074 阅读 · 2 评论 -
unity 关于surface存储alpha通道问题(修改失效)
之前解决standard存储alpha,这次看怎么处理surface shader alpha存储还是根据之前的主题,bloom效果根据存储的alpha来计算这个仅仅对于Opaque生效1.创建一个SurfaceShader2.添加属性_BloomFator("BloomFator", Range(0.0, 0.9)) = 03.利用_BloomFator来控制Alpha...原创 2019-03-07 10:44:08 · 1907 阅读 · 0 评论 -
unity 关于Particles shader的alpha通道存储(用于bloom效果)
接着之前写bloom,关于alpha通道存储不是半透物体可以改输出的alpha通道就可以存储alpha值对于粒子特效来说本身输出就带alpha通道,所以要控制这个alpha通道必须加一个pass来控制原理第一个pass需要加ColorMask RGB(避免影响alpha存储)第二个pass需要加ColorMask A(避免影响第一个pass输出颜色)由于遇到点光源(顶点模式...原创 2019-04-04 11:11:38 · 2281 阅读 · 0 评论 -
Unity shader打包Assetbundle之后自定义keyword失效问题
关于shader设置关键字有两种方法#pragma multi_compile#pragma shader_featuremulti_compile和shader_feature,唯一的区别在于shader_feature不会将不用的shader变体添加到程序中去由于这个原因会导致shader_feature的变体不会打进Assetbundle里面,从而导致失效解决方法1....原创 2019-04-03 16:38:50 · 1338 阅读 · 0 评论 -
unity 支持半透物体的流光效果(vf版本)
最近特效制作说要加个特效流光,就写了一下使用方法和之前部分模型流光效果一直https://blog.csdn.net/SnoopyNa2Co3/article/details/86690580这个是手动流光,方便特效k动画如果要自动流光则改改uv赋值 //流光图y轴偏移 uv.y += _Time.y * _SpeedY; //流光图x轴偏移 uv.x ...原创 2019-04-13 16:17:31 · 603 阅读 · 1 评论 -
unity 特效内发光和外发光实现(vf版本)
之前写过内外发光的surface版本https://blog.csdn.net/SnoopyNa2Co3/article/details/85288593下面是关于vf版本Shader "Effect/Ext/AlphaRimPro"{ Properties { _MainTex("Particle Texture", 2D) = "white" {} _RimC...原创 2019-04-13 16:21:51 · 3147 阅读 · 0 评论 -
unity 不使用GrabPass实现ui毛玻璃
由于有些手机不支持GrabPass,所以ui上面的毛玻璃不能用这种方式实现解决方案:用camera渲染出来的rendertexture代替GrabPass基本思路就这样,实现不麻烦,我直接拿别人写过用grabpass实现的shader,改成用rendertexture局限性:只能用于背景是场景的先看效果1.shader,只是把用到grabpass的改成用renderte...原创 2019-04-19 18:10:16 · 2920 阅读 · 1 评论 -
Unity UI图片实现模糊功能
原理:其实就是获取图片,然后根据偏移获取不同像素,然后根据不同的透明度叠加得出一张模糊图我这里没有优化正常情况用一个pass就足够先上个图拖动材质球Blur Size参数就有如上图效果下面完整的shader,注意材质球要调渲染层3000就可以使用(PS:移动平台验证过可以使用)Shader "Effect/ImageBlur"{ Properties { _Ma...原创 2019-08-06 20:20:48 · 1978 阅读 · 2 评论 -
Unity 半透物体(Transparent)写入摄像机深度图(解决半透物体景深不生效)
Transparent渲染队列 默认的camera深度纹理_CameraDepthTexture是不会将队列>2500的材质写进深度纹理的因为景深效果是使用深度图,如果Transparent不能写入深度问题,景深就会失效为了解决深度失效问题,最重要是解决Transparent写入深度纹理解决方案原来半透明效果不动情况下加多一个材质球,这个材质球的shader(Opaque)只...原创 2019-08-09 18:07:58 · 3860 阅读 · 2 评论 -
unity Rendertexture不显示半透物体或者粒子特效的解决
我看过雨凇大神是怎么解决半透明在rendertexture问题,直接在渲染模型特效背景加个sprite2d背景,其实这种非常不通用而且使用限制很大。我使用方案参考NGUI写一个给shader可以支持半透明就可以因为以前用过NGUI的Unlit/Premultiplied Colored这个shader,然后换上这个shader,观察效果,模型无描边,粒子也能正常显示所以就有必要看看N...原创 2019-08-19 17:39:09 · 7051 阅读 · 0 评论 -
Unity 实现物体上呼吸灯效果Shader
这次说的呼吸灯其实和之前写的流光有点类似,不过比流光更为简单呼吸灯效果其实就是一个周期变化,周期变化就想到一个cos和sin这两个函数原理:最终呼吸效果 = 当前颜色+ 周期变化的数值*呼吸灯颜色如果要部分位置要进行呼吸效果,就和之前流光一样加一个mask图来rgb其中一个通道来处理就行部分呼吸原理:最终呼吸效果 = 当前颜色+ 周期变化的数值*呼吸灯颜色*mask图某个通道原...原创 2019-08-20 20:08:28 · 6217 阅读 · 0 评论 -
unity 使用噪音图实现简单水材质
先上图原理:就是根据时间算噪音图颜色,来算原图每个像素偏移比较简单直接上ShaderShader "Effect/Ocean"{ Properties { _MainTex("Texture", 2D) = "white" {} //噪音图 _NoiseTex("Texture", 2D) = "white" {} //叠加颜色 _Color("Co.原创 2019-03-13 21:52:24 · 3616 阅读 · 5 评论 -
Unity通过修改内置cg文件来自定义standard Shader
我为什么自定义Standard?由于我要做一个屏幕泛光效果,需要存储一个alpha值到渲染图里面,然后bloom效果需要这张alpha图来进行亮度控制,standrd上面要一个变量控制PS:我不喜欢用standrd Shader,因为变体多,我更偏向于美术要什么shader,我这边写出来,而不是用了一大堆standrd然后来补锅,很多东西不是我能决定,哈哈哈哈,好好补锅使用的Un...原创 2019-02-26 21:06:57 · 4482 阅读 · 0 评论 -
Unity支持置灰的Alpha Blend Shader
支持置灰的Alpha Blend ShaderShader "SnoopyShader/Alpha Blend"{ Properties { _MainTex("Main Texture", 2D) = "white" {} //置灰开关 [Toggle(OpenGray)] _OpenGray("OpenGray", Int) = 0 } SubShader {...原创 2018-11-28 17:00:16 · 758 阅读 · 0 评论 -
Unity信号干扰Shader
崩坏3这种信号干扰效果用到噪音,其实就是把个噪音shader放到rendertexture对应的材质球就可以实现这个是完全把崩坏3的编译过的源码写出来的https://blog.csdn.net/SnoopyNa2Co3/article/details/86629436噪音里面最关键的代码frac(sin(dot(float2(x, y), float2(12.9898, 78.2...原创 2018-12-01 16:28:38 · 5895 阅读 · 19 评论 -
Unity 半透明shader以及扩展(外发光内发光)
半透shader什么时候用到呢1.如果主角被东西挡住,摄像机要不拉近要不把挡住的物体半透2.很多游戏用到残影,一般残影都是半透的,然后慢慢透明从左到右1.使用标准材质球2.使用半透材质球3.使用外发光的半透材质球4.使用内发光和外发光的材质球shader比较简单直接上代码这些都是surface shader1.半透shaderShader "Sno...原创 2018-12-27 17:00:45 · 5708 阅读 · 1 评论 -
Unity 溶解shader(通用)
今天我写一个最简单的溶解shader,在标准surface基础上写下面是新建的surface shaderShader "Custom/dissolve" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Sm...原创 2018-12-18 17:17:12 · 2564 阅读 · 0 评论 -
Unity 实现部分物体Bloom效果
之前研究了一下怎么让屏幕里部分东西显示bloom效果,例如只是特效显示bloom效果而角色不显示,现在记录一下我这里加了效果图和工程下载地址,方便大家了解PS:这个性能有问题,建议看看这边博客,用存储alpha来替换重新渲染一遍带来的性能问题https://blog.csdn.net/SnoopyNa2Co3/article/details/88075047扩展:可以修改替换...原创 2018-12-25 17:33:30 · 12944 阅读 · 0 评论 -
Shader内置函数(方便自己看)
一、内置包含文件 Unity中有类似于C++的包含文件.cginc,在编写Shader时我们可以使用#include指令把这些文件包含进来这样我们就可以使用Unity为我们提供的一些非常好用的函数、宏和变量。例如:#include"UnityCG.cginc"包含文件的位置:根目录\Editor\Data\CGIncludes知识点1:以下是Unity中常用包含文件: 文件...转载 2019-01-02 20:53:33 · 2678 阅读 · 1 评论 -
Unity信号干扰shader(参照崩坏3源码翻译剧情对话效果)
最近做的项目是二次元,二次元的标杆就是崩坏3,效果真的好学习崩坏3里面shader最好的方法就是看源码可以AssetStudio来看资源,因为崩坏3资源是没有加密直接可以看 不过shader源码是已经编译好的,其实大概算法都在我已经研究角色身上的shader,这个有空写博客,用到顶点绘制的工具来填充颜色来处理阴影这次我参考崩坏里面的信号干扰的shader之前搞个一个类...原创 2019-01-24 17:06:15 · 4416 阅读 · 1 评论 -
Unity屏幕后处理四周拉伸效果
最近要搞个效果就是屏幕周围要有种向后拉的感觉其实原理是uv偏移,就是越往里的偏移越少,越往外偏移越大实现:就是算uv和拉伸中心点距离来计算偏移 其实这个效果是全屏效果,靠近中心点位置也会进行偏移,只是偏移的幅度非常小,小到看不见我这里使用pow几次方来计算,次方越大则越靠近屏幕的强度越少,这样子很小的数值就会接近0下面是实现的shaderShader "Scre...原创 2019-01-26 17:04:19 · 2788 阅读 · 5 评论 -
Unity 实现部分模型流光效果
模型身上流光效果有两种实现方式1.用摄像机来算流光位置,不过这种比较固定,而且只能在展示用,战斗里面不太适用2.用一张流光图来进行uv位置计算发光位置和原来的贴图进行颜色叠加,这个不用管摄像机位置,不过对uv要求高,所以做之前确定效果再来进行uv布局,不然效果和你想象不一样我这里主要说第二种的实现方式先看看效果图这个有mask图的流光效果,这个mask图是来区分那些部位要流光...原创 2019-01-29 16:14:21 · 8139 阅读 · 6 评论 -
Unity 关于仿崩坏3部分Bloom(部分泛光)效果实现原理(附源码)
之前写每个物体的材质球控制屏幕bloom效果,由于性能问题,换了另外一种实现方式部分泛光的功能,这个是之前写的,不过性能不行,如果简单的游戏还可以,如果大场景的话就不行了回到正题我这边就研究崩坏3编译过的源码,下面是分析崩坏bloom效果实现1.我看崩坏编译过的源码基本所有shader都会有一个_BloomFactor,这个用于控制泛光强度,用于存储输入屏幕那张图的alpha...原创 2019-03-02 14:33:39 · 13354 阅读 · 13 评论 -
Unity SurfaceShader遮挡处理(XRay)和处理XRay失效问题
本文Xray shader是在SurfaceShader基础上写代码一般都想着复用,我把这个Xray写成一个pass根据usepass来加Xray shader功能首先理解一下深度和深度测试(1)什么是深度?深度其实就是该像素点在3d世界中距离摄像机的距离。离摄像机越远,则深度值(Z值)越大。(2)什么是深度缓存?深度缓存中存储着准备要绘制在屏幕上的像素点的深度值。如...原创 2018-08-22 19:54:12 · 923 阅读 · 0 评论