Shader学习
文章平均质量分 70
子胤
这个作者很懒,什么都没留下…
展开
-
通俗讲解:图像傅里叶变换
转自某乎:通俗讲解:图像傅里叶变换 - 知乎这里我们主要要讲的是二维图像傅里叶变换,但是我们首先来看一张很厉害的一维傅里叶变换动图。妈耶~厉害哇!它把时域和频域解释的很清楚!什么!你看不懂!简单点说就是:所有的波都可以用很多个正弦波叠加表示。然而这些波又可以通过频率、幅值和相位来表示。这样你就可以从左边那张图中时域的视角转化为咱们高大上的频域视角啦。那首先来看一个例子~其实右边图的每一个点,可以理解为它在描述一种平面波。那…其实还是有两个点之间还是有半分钱关系的,转载 2021-12-17 15:30:16 · 1468 阅读 · 0 评论 -
Unity URP运动模糊效果Shader
实现原理见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度核心Shader代码Shader "Universal Render Pipeline/Dejavu/MotionBlur"{ Properties { _MainTex("Base (RGB)", 2D) ...原创 2021-10-30 11:54:58 · 1970 阅读 · 0 评论 -
Unity URP世界空间后处理扫描圈效果Shader
实现原理见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度核心Shader代码Shader "Universal Render Pipeline/Dejavu/WorldDepthScanCircle"{ Properties { _MainTex("Base (RGB)", 2D).原创 2021-10-30 11:46:37 · 1554 阅读 · 0 评论 -
Unity URP高度雾效果Shader
实现原理见这篇文章Unity Shader-深度相关知识总结与效果实现(LinearDepth,Reverse Z,世界坐标重建,软粒子,高度雾,运动模糊,扫描线效果)_puppet_master的专栏-CSDN博客_shader深度核心Shader代码Shader "Universal Render Pipeline/Dejavu/HeightFog"{ Properties { _MainTex("Base (RGB)", 2D) = "white" .原创 2021-10-30 10:58:32 · 4254 阅读 · 4 评论 -
Unity URP中根据深度重建世界坐标
通过深度值重建世界坐标,可以做出很多有意思的后处理效果,先实现下度值重建世界坐标这个功能。一.验证重建效果首先,得先找到一种证明反推回世界空间位置正确的方法。在相机前摆放几个物体,尽量使之在世界坐标下的位置小于1,方便判定颜色,然后将几个物体的shader换成如下的一个打印世界空间位置的shader://打印在世界空间位置Shader "Universal Render Pipeline/Dejavu/ReconstructPositionWithDepth/WorldPosPrint"原创 2021-10-24 18:50:10 · 11073 阅读 · 3 评论 -
Unity Built-in Shader转URP Shader 接口查询对照表
本篇文章转自Teofilo Dutra编写的《From Built-in to URP》,其中有很多在写URP管线Shader时需要用到的函数,作为备忘速查表非常实用,所以记录于此。本文经过精简和翻译,不一定适用于大家,可以点击上方链接跳转至作者原文。本文是基于7.3版本的URP编写的,有些暂时还不支持的内容可能在后续版本更新迭代。结构首先要在SubShader的Tags中添加”RenderPipeline” = “UniversalPipeline”,并且使用HLSL的宏代替旧版的CG语言宏。转载 2021-10-13 10:41:53 · 4214 阅读 · 0 评论 -
ZoomBlur 聚焦模糊效果Shader(URP)
修改自这篇文章【Unity】UniversalRPでカスタムポストプロセスを作る【ZoomBlur】 - Qiita1. VolumeEditor,用于在UnityVolume中控制自己写的后处理效果using UnityEngine;using UnityEngine.Rendering;using UnityEngine.Rendering.Universal;[System.Serializable, VolumeComponentMenu("Dejavu/ZoomBlur..原创 2021-10-04 16:29:47 · 1127 阅读 · 0 评论 -
Z深度相关知识
// Z buffer to linear depthinline float LinearEyeDepth( float z ){ return 1.0 / (_ZBufferParams.z * z + _ZBufferParams.w);} // Values used to linearize the Z buffer (http://www.humus.name/temp/Linearize%20depth.txt)// x = 1-far/near// y = far/n.原创 2021-10-02 14:02:21 · 1402 阅读 · 0 评论 -
Unity shader图集Atlas下的UV坐标归一化转换
unity中如果图片打入了图集中,在shader中取到的uv坐标默认是图集中的坐标,如果需要shader做一些类似流光的效果,需要转换成常用的0-1区间的归一化uv坐标,转换方法如下:步骤一:C#中向shader中传入图片在图集中的Rect信息和Scale信息 Vector4 UVRect = UnityEngine.Sprites.DataUtility.GetOuterUV(spriteRenderer.sprite); Rect originRect = spriteRenderer...原创 2021-05-06 14:14:57 · 3398 阅读 · 0 评论 -
ShaderToy效果学习(转成Unity URP) - MathEye
来自IQ大神的小教程,效果图:shaderToy源码:https://www.shadertoy.com/view/lsfGRr教程视频:https://www.bilibili.com/video/BV1KK4y1K7wM/Unity项目代码Git地址:https://github.com/Dejavu0709/Graphics.gitShader "Graphics/MathEye" { Properties{ //Properties } Su..原创 2021-04-19 00:46:31 · 529 阅读 · 0 评论 -
反向Z(Reversed-Z)的深度缓冲原理
https://zjinc36.github.io/2020/03/10/2020-20200309-%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3%E6%B5%AE%E7%82%B9%E6%95%B0%E4%B8%8E%E6%B5%AE%E7%82%B9%E6%95%B0%E7%9A%84%E7%B2%BE%E5%BA%A6%E9%97%AE%E9%A2%98/为什么会有精度问题在数学中,与浮点数对应的是小数 数学上区间[0,1]之间的小数有无穷多个 计算..原创 2020-11-16 22:02:06 · 1324 阅读 · 0 评论 -
Unity3D之Shader自定义编辑器功能拓展
一、前言 最近在开发一个关卡类的游戏,在导入一些3D物体的时候,发现很多时候同一个3D物体需要渲染的方式不一样,比如这颗树要双面渲染(Cull Off),但在很多情况下是可以剔除背面(Cull Back)的,之前在写Shader方面找不到什么好方法直接控制,干脆就写了两个Shader,这就造成了无谓的浪费跟资源管理的麻烦了,我们是可以更加方便地控制Shader的某些属性的。转载 2016-09-13 20:08:57 · 3244 阅读 · 1 评论 -
11.Wave Shader
这个shader是在这位博主点击打开链接的文章基础上进行修改得到的,原作是在shadertoy网站上。不得不说,被shadertoy上的大神们震精了,真的是令我叹为观止,啥也不说了,慢慢学吧。shader的效果:Shader的代码如下,甚是短小精悍Shader "Study/11_Waves"{ //see https://www.shadertoy.com/view/4d原创 2016-08-01 19:30:15 · 471 阅读 · 0 评论 -
13.图片圆角
Shader "Study/13_imageCircle" { Properties{ _image("image", 2D) = "white" {} _percent("_percent", Range(-5, 5)) = 1 _angle("angle", Range(0, 1)) = 0 } CGINCLUDE#include "UnityCG.cginc"转载 2016-08-04 16:23:46 · 488 阅读 · 0 评论 -
2.转动的地球shader
原理很简单,根据时间对uv中的x轴进行位移,对于地面和云层,取不同的移动速度,分别计算对应的uv坐标,再根据uv坐标从地面和云层的纹理中分别取出对应的值,最后把两者用lerp函数进行混合作为最终结果。下边的代码包含两个版本,一个是vertex fragment shader,是不带光照的,一个是surface shader版本,带Lambert光照,运行时场景里加上光照才会显得很明亮Sha原创 2016-06-30 17:33:10 · 1046 阅读 · 0 评论 -
8.平面阴影
public class CastShadow : MonoBehaviour { public Transform rec;//接受阴影的物体 // Use this for initialization void Start () { GetComponent().sharedMaterial.SetMatri原创 2016-07-13 16:14:09 · 666 阅读 · 0 评论 -
3.顶点外扩方法实现的描边shader
描边shader的实现有很多种,顶点外扩是其中之一。顶点外扩的原理是用2个Pass 渲染物体2次第一遍:描边,顶点沿法线方向外拓后用黑色渲染。外扩这一步的实现是在投影空间,也就是2D的,根绝法线的x和y值进行外扩,因为是沿着法线方向外扩,所以法线越和摄像机方向相同,也就是越接近面向摄像机的顶点,顶点的位置变化的越小,当法线和摄像机方向相同时,不会有任何变化。第一遍渲染后,实际的图像如下:原创 2016-07-01 22:40:49 · 4951 阅读 · 0 评论 -
9.球体阴影
上一篇讲的阴影shader是通过两个pass来渲染出的,第一个pass渲染要投影的物体本体,第二个pass渲染物体的阴影,也就是说阴影的渲染是在物体的shader中而不是地面的shader。下面要讲的球体阴影的shader是放在要接受阴影的地面上。 原理如下图:1.根据点的入射光矢量和点到球体的矢量计算【点积】求出【角度】。2.通过【角度】的sin值,求出【对边】并与【原创 2016-07-14 17:02:12 · 1381 阅读 · 0 评论 -
4.边缘光照的描边shader
【思路】:面向摄像机的物体,它的表面法线【normal】和视角向量【viewDir】的【夹角】越靠近边缘就越大。那么就可以根据这个夹角进行处理,夹角越大,那么发射光越强,就可以实现我们想要的效果。Shader "Study/4_OutLine"{ Properties { _MainTex("Base (RGB)", 2D) = "white" {} _BumpMap("原创 2016-07-04 15:17:16 · 596 阅读 · 0 评论 -
5.Lambert光照Diffuse Shader
http://blog.csdn.net/candycat1992/article/details/17355629 这篇文章写的很好,这里就直接上代码了Shader "Study/5_LambertDiffuse" { Properties{ _Color("Main Color", Color) = (1,1,1,1) _MainTex("Base (RGB)", 2D) = "原创 2016-07-05 19:05:47 · 383 阅读 · 0 评论 -
6.Half Lambert光照Diffuse Shader
简单来说,Lambert定律认为,在平面某点漫反射光的光强与该反射点的法向量和入射光角度的余弦值成正比(即我们之前使用dot函数得到的结果)。Half Lambert最初是由Valve(游戏半条命2使用的引擎即是其开发的)提出来,用于提高物体在一些光线无法照射到的区域的亮度的。简单说来,它提高了漫反射光照的亮度,使得漫反射光线可以看起来照射到一个物体的各个表面。而Half Lambert最初也原创 2016-07-06 10:52:45 · 416 阅读 · 0 评论 -
7.Phong 和 BlinnPhong
Lambert漫反射光照模型,这是一个用来模拟粗糙表面对光线的漫反射现象的经验模型,对于纸张、粗糙墙壁等等来说,这个模型或许够用,但对于金属这样的光滑表面来说,我们就需要使用Phong模型来模拟光滑表面对光线的镜面反射现象。同Lambert一样,这个模型也是经验模型,而且在程序中,我们经常同时使用Lambert和Phong两个模型,因为在现实世界中,任何表面都会同时发生漫反射和镜面反射两种现象,因原创 2016-07-07 18:39:51 · 2867 阅读 · 1 评论 -
12.屏幕高斯模糊
一、降采样与高斯模糊的原理 首先梳理一下在Unity中实现高斯模糊效果需用到的几个图像处理的知识点,说起来也很巧,正好和之前我写过一个关于OpenCV的系列博客里的这篇文章(http://blog.csdn.net/poem_qianmo/article/details/22745559)涉及的知识点类似。 1.1 关于转载 2016-08-04 16:17:16 · 669 阅读 · 0 评论 -
10.热空气扭曲效果
Shader "Study/10_Distortion" { Properties{ _NoiseTex("絮乱图", 2D) = "white" {} // 絮乱图 _AreaTex("区域图(Alpha):白色为显示区域,透明为不显示区域", 2D) = "white" {} // 区域图 _MoveSpeed("絮乱图移动速度", range(0,1.5)) =转载 2016-07-28 13:53:36 · 3043 阅读 · 0 评论 -
1.逐帧动画shader
最近项目压力不大,抽时间看了些关于shader和游戏引擎的书籍,准备开始shader的学习。在网上看到这位前辈(http://blog.sina.com.cn/s/articlelist_2312702844_6_1.html)写的博客,觉得很不错,学习曲线应该很适合自己,所以决定也从头一篇一篇每个shader自己实现一下,并加入自己的理解。今天就是调试的第一篇,很简单的逐帧动画shader。原创 2016-06-29 20:12:05 · 2089 阅读 · 0 评论