![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
shader学习
文章平均质量分 92
shader学习过程记录
钠皖泥痕桦
这个作者很懒,什么都没留下…
展开
-
URP-官网学习记录
URP-后整理Post-processing使用的是Volume framework做支持。效果展示未加后处理:加了后处理之后:可以看到,加了之后,效果更好。特别是光影。没有那种泛白的感觉。当然这只是对于这个电影而言。它只是使用了后处理效果的一部分。使用步骤1、先添加Volume组件2、添加配置文件1、增加具体的后处理效果对移动设备友好的效果Volume作用范围分为Global与local。Global模式,对全局生效。local模式,可以指定范围,且可以指定位置原创 2021-11-09 10:15:01 · 3975 阅读 · 0 评论 -
屏幕后处理-运动模糊(通过像素速度)
效果思路在相机上挂脚本,获得参数: 模糊程度、前一个视角投影矩阵、当前视角投影矩阵的逆矩阵,传递给到shader中shader中,先对深度纹理采样,得到深度值。再通过之前传递的矩阵,得到世界空间中,当前帧改点所在位置与前一帧改点所在位置。 再根据这两个点,求得速度值(也就是上一步求得的两个点的中心点)。使用传入的模糊程度值*速度值,得到新的采样点。将这些采样点求和再求平均值,得到最终点。进行返回。实现c#代码using System;using System.Collections;us原创 2020-09-25 11:35:05 · 384 阅读 · 0 评论 -
ColorMask-通道遮罩
语法ColorMask RGB | A | 0 | 其他R,G,B,A的组合ColorMask R,意思是输出颜色中只有R通道会被写入ColorMask 0,意思是不会输出任何颜色默认值为RGBA,即四个通道都写入效果总结由此可知,四个参数是可以任意组合的...原创 2020-09-19 11:44:22 · 680 阅读 · 0 评论 -
屏幕后处理-bloom效果, 使画面中较亮的区域“扩散”到周围的区域
效果使画面中较亮的区域“扩散”到周围的区域,造成一种朦胧的效果。思路对原贴图大于某个阀值的区域进行提取,并缓存到渲染图。再利用高斯模糊,对这张纹理进行模糊处理,模拟光线扩散的效果。最后将其和原图进行混合。实现c#using System.Collections;using System.Collections.Generic;using UnityEngine;public class BloomTest : PostEffectBaseTest { publi原创 2020-09-18 15:50:29 · 487 阅读 · 0 评论 -
屏幕后处理-高斯模糊
效果思路使用高斯核,进行卷积计算。可简化为使用两个一维的高斯核,做为采样的权重点,对图像先后进行水平与竖直方向的滤波处理。采样点为当前像素点的左右各扩展2个单位,上下各扩展2个单位。可自定义后乘以系数,缩放采样的范围。采样的过程,一般是水平一次,竖直方向一次。可将这个过程进行多次,以达到加强模糊程度的效果。实现c#using System;using System.Collections;using System.Collections.Generic;using UnityEng原创 2020-09-17 11:34:21 · 297 阅读 · 0 评论 -
屏幕后处理-边缘检测
效果原图渲染图思路如上图所示,使用卷积核,计算屏幕图像每个点的像素和当前点周围的像素,进行卷积操作,可以得到梯度值。主要算法如下: for( int it=0;it<9; it++ ){ texColor = luminance(tex2D(_MainTex,i.uv[it])); //分别对九宫格,九个位置的颜色取样,并计算明亮度 edgeX += texColor * Gx[it];//将X轴方向的九个颜色的明亮度乘以梯度索引,并原创 2020-09-16 17:36:47 · 388 阅读 · 0 评论 -
shader常见语义
模型→顶点着色器常用语义POSITION :顶点位置NORMAL:顶点法线TANGENT:顶点切线TEXCOORD0-TEXCOORDn(Unity内置结构好像支持到6):顶点纹理坐标COLOR:顶点颜色顶点着色器→片段着色器SV_POSITION:裁剪空间中的顶点坐标 COLOR0:顶点颜色 COLOR1:顶点颜色 TEXCOORDn:纹理坐标 片段着色器输出语义:SV_Target:输出值直接用于渲染了...原创 2020-09-16 16:31:13 · 498 阅读 · 0 评论 -
屏幕后处理-饱和度,亮度,对比度处理
效果亮度:饱和度对比度思路通过后处理技术,在图片渲染完成后,c#获取得到相机所渲染的区域的图像,通过参数在shader中对其rgb值进一步进行显式处理,将处理的结果再生成目标图形,最后显示出来。实现 shaderShader "Custom/BritnessSiturationConstract" { Properties { _MainTex("_MainTex",2D) = "white" {} _Brightness("_Brightness原创 2020-09-16 11:14:22 · 267 阅读 · 0 评论 -
顶点动画-广告牌效果
效果转动摄像机时,无论从哪个方向对着物体,会看到物体看起来总是正对着摄像机。思路为了使物体不会随着摄像机的角度的不同,而成像的面向不同。可以使用旋转矩阵,对物体实时进行旋转上的修正。即求得模型空间下,以视角方向做为法线方向,并计算出其他两个坐标方向,up与right,构成一组正交基。再使用它对原顶点进行转换。实现Shader "Custom/BillBoard" { Properties{ _MainTex("MainTex",2D) = "white" {} _Color原创 2020-09-15 18:00:22 · 135 阅读 · 0 评论 -
顶点动画-水流效果
效果思路1、横向方面,使顶点随着uv做正弦波动,进行“波纹”效果2、纵向方面,使uv的y值随着时间进行累加滚动,形成“流动”效果实现Shader "Custom/Water" { Properties { _MainTex ("Main Tex", 2D) = "white" {} _Color ("Color Tint", Color) = (1, 1, 1, 1) _Magnitude ("Distortion Magnitude", Float) = 1 _Freque原创 2020-09-15 11:48:26 · 335 阅读 · 0 评论 -
纹理动画,滚动背景
纹理动画,滚动背景效果思路实现效果思路1、取样时,随着时间不断移动uv的x轴,形成动画效果。2、两张图片,前置图片带有透明通道,后置不带,然后按alpha权重进行取样。实现Shader "Custom/ScrollingBackground" { Properties{ _MainTex("BaseLayer",2D) = "white" {} _DetailTex("2ndLayer", 2D) = "white" {} _ScrollX("BaseSpeed原创 2020-09-14 21:15:25 · 117 阅读 · 0 评论 -
帧动画
原图思路, 按行与列,根据时间在uv中依次取样对应的小图进行渲染即可。效果实现Shader "Custom/ImageSquenceAnimation" { Properties { _Color ("Color", Color) = (1,1,1,1) //颜色修正 _MainTex("Image", 2D) = "white"{} //帧动画主图 _HorizontalAmount ("_HorizontalAmount"原创 2020-09-14 16:38:18 · 150 阅读 · 0 评论 -
镜子效果
镜子效果效果思路实现效果移动物体时,墙上的“镜子”里的物体一起移动思路1、新建RenderTexture和相机,相机中赋值改renderTexture,进行渲染2、在shader中对renderTexture的ui取样,因为是镜子,镜子是反的,所以对x坐标取 1-x3、将“镜子”物体竖立在合适的位置实现// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Un原创 2020-09-10 20:22:39 · 185 阅读 · 0 评论 -
高级纹理-菲涅耳反射
菲涅耳反射定义效果思路实现定义当光线照射到物体表面时,一部分发生反射,一部分进入物体内部,发生折射或散射。效果思路近似公式如下:实现// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/Fresnel" { P原创 2020-09-10 16:34:21 · 321 阅读 · 0 评论 -
shader-立方体纹理,折射
参考《shader入门精要》// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Custom/Refract" { Properties { _Color("Color", Color) = (1,1,1,1)原创 2020-09-10 15:22:00 · 146 阅读 · 0 评论 -
shader高级纹理
天空盒子原理:使用立方体纹理视线,立方体纹理需要使用到六张纹理,前后左右上面。然后进行以立方体中心为出发点,进行采样。与纹理相交时的交点,即使采样点。原创 2020-09-09 16:19:06 · 100 阅读 · 0 评论 -
光照衰减
光照衰减意义原理意义如下图所示, 参数都相同的两个点光源, 因距离被照射物的远近不同,表现出的光照强度不同,即使光照的衰减。原理使用一张纹理作为查找表来在片元着色器中计算逐像素光照的衰减。...原创 2020-09-09 14:51:22 · 1440 阅读 · 0 评论 -
透明度混合的双面渲染
透明度混合的双面渲染效果思路实现效果思路渲染两次,第一个pass渲染背面, 第二个pass再渲染正面实现Shader "Custom/AlphaBlendBothSides" { Properties{ _Color("MainTint",Color) = (1,1,1,1) _MainTex("MainTex", 2D) = "white" {} _AlphaScale("AlphaScale", Range(0,1)) = 1原创 2020-09-07 20:21:58 · 189 阅读 · 0 评论 -
透明度测试的双面渲染
透明度测试的双面渲染原创 2020-09-07 19:58:49 · 113 阅读 · 0 评论 -
shader-透明度混合, 深度写入处理
透明度混合, 深度写入处理思路实现缺陷思路由于做透明度混合时,关闭了深度写入。关闭原因如下:导致无法对模型进行像素级别的排序,即排序错误,使得半透明效果异常。所以,可以使用两个pass, 第一个pass专门用来做深度写入,不处理其他,第二个pass块再处理颜色。这样可以使得排序正常,透明效果也正常。实现Shader "Custom/AlphaBlendZWrite" { Properties{ _Color("MainTint",Color) = (1,1,原创 2020-09-07 17:52:25 · 398 阅读 · 0 评论 -
shader-透明度混合
透明度混合思路实现思路关闭深度写入,使用纹理本身的a值,乘以自定义材质属性scale,得到最后的a值,并返回主要代码:return fixed4(ambient + diffuse,texColor.a * _AlphaScale);实现Shader "Custom/AlphaBlend" { Properties{ _Color("MainTint",Color) = (1,1,1,1) _MainTex("MainTex", 2D) = "原创 2020-09-07 15:44:03 · 166 阅读 · 0 评论 -
shader-透明度测试
透明度测试思路实现思路提前定义好剔除的边界值和透明通道图,使用clip函数,进行筛选。小于0的片元剔除,大于0的显示。实现Shader "Custom/AlphaTest" { Properties{ _Color("MainTint", Color) = (1,1,1,1) _MainTex("MainTex", 2D) = "white" {} _Cutoff("Alpha Cutoff", Range(0,1)) =原创 2020-09-07 14:21:55 · 156 阅读 · 0 评论 -
shader-遮罩纹理
遮罩纹理用途思路实现用途在原有基础上,强化或者弱化某方面的显示思路使用一张类似明暗的灰图,原有uv颜色的基础上, 乘以这个比例,达到针对性改变亮度变化的效果。fixed3 specularMask = tex2D( _MaskTex, f.uv ).r * _MaskScale;fixed3 specular = _LightColor0.rgb * _Specular * pow(saturate( dot( halfDir,tangentNormal )), _Gloss ) * spec原创 2020-09-07 10:50:00 · 211 阅读 · 0 评论 -
shader-渐变纹理
渐变纹理效果思路实现效果思路在漫反射计算时,对渐变纹理进行针对性取样。在模型背光面的顶点颜色,取样渐变纹理uv上,较暗的即可。比如在背光面时,法线方向与光源方向相反,进行点乘后结果为负数,再进行半兰伯特计算,得到的最终结果会是接近0的正数,对应渐变纹理上就是左边偏暗的地方。核心算法如下:fixed halfLambert = 0.5 * dot ( worldNormal, worldLightDir ) + 0.5;//这里使用半兰伯特计算后的结果,去取样渐变图uv颜色fixed3原创 2020-09-04 19:29:13 · 584 阅读 · 0 评论 -
shader-凹凸纹理
凹凸纹理效果过程代码效果过程使法线纹理上存储的信息,将相关变量转到切线空间进行统一计算。漫反射由法线方向和光源方向求得,高光由半方向和法线方向求得,半方向由光源方向和法线求得,环境光可以由系统内置变量拿到,代码Shader "Custom/NorMalTangentSpaceMat" { //9 Properties{ //定义变量 _Color ( "Color", Color) = (1,1,1,1)//总颜色参数 _Mai原创 2020-09-03 11:32:23 · 325 阅读 · 0 评论 -
shader-单张纹理+光照
单张纹理+光照效果代码原理:效果代码Shader "Custom/t1" { //9 //单张纹理+光照 Properties{ //属性 _Color ("Color", Color) = (1,1,1,1) //贴图整体颜色 _Specular ("_Specular", Color) = (1,1,1,1)//高光颜色 _Gloss("Gloss", Range(2,200)) = 20//高光范围 _MainT原创 2020-09-02 11:31:41 · 106 阅读 · 0 评论