
Shader
毛甘木
我的博客,严格来说,应该称作随手记,只是为了增强自己对知识点的理解,或者简单的记录一下知识点,方便自己日后查阅
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Shader收藏大杂烩
ShaderDemo压扁效果实现原理:1、通过脚本求得物体的的最高顶点和最低顶点;2、传给shader,得到最高顶点和最低顶点的范围,并计算各顶点到最高顶点的距离归一化比;3、在通过一个参数,来控制压缩程度,即是 模型 顶点 y的偏移程度,实现压缩效果;注意事项:1、 使用 max(0,_Control-normalizedDist) 来调整压缩2、因为使用了归一化顶点比例,所以最终偏移顶点y 的时候需要乘以一个 最高顶点与最低顶点的距离;3、因为这是世界位置上的压缩,所以记得把计算的顶原创 2021-12-02 18:31:39 · 1798 阅读 · 0 评论 -
UnityShader 折射
**光的折射定律:**n1* sin(a1) = n2 * sin(a2)入射光和折射光位于同一平面n1, n2 为介质的折射率a1,a2 为 入射角和折射角原创 2021-05-04 22:40:12 · 215 阅读 · 0 评论 -
UnityShader 光照模型
UnityShader 光照模型**逐顶点兰伯特** v2f vert(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; fixed3 worldNormal = UnityObjectToWOrldNormal(v.normal); fixed3 worldLight = normalize原创 2021-05-04 15:14:24 · 192 阅读 · 0 评论 -
清华大学计算机图形学笔记
清华大学计算机图形学笔记**颜色模型:**RGB模型 8位 [0,255]C= xR + yG + zBCMY模型:Cyan, Magenta, Yellow 红绿蓝的补色,也称之位减色系统和 RGB 模型 刚好相反主要用于印刷行业HSV模型:Hue(色相) Saturation(饱和度) value of brightness(亮度)用于图形处理是一个圆锥饱和度越低, 颜色越白**图像和像素**f(x,y)=col(r,g,b) f(x,y)=col(r,g,b,原创 2021-05-03 17:47:52 · 240 阅读 · 0 评论 -
UnityShader投影纹理映射
UnityShader投影纹理映射 v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); float ux = o.vertex.x*0.5 + o.vertex.w * 0.5; float uy = o.vertex.y*0.5 + o.vertex.w * 0.5; o.uv_P = float3(ux, uy, o.vertex.w); return o原创 2021-05-03 16:35:52 · 614 阅读 · 0 评论 -
UnityShader地形系统Shader
UnityShader地形系统Shader原创 2021-05-01 21:19:31 · 1916 阅读 · 0 评论 -
UnityShader凹凸映射
UnityShader凹凸映射原创 2021-05-01 11:08:28 · 150 阅读 · 0 评论 -
UnityShader 遮挡部分渲染为半透明Shader
UnityShader 遮挡半透明Shader//渲染被遮挡部分的Passpass{ blend SrcAlpha OneMinusSrcAlpha ZTest greater // 把被遮住的部分的深度值写入深度缓存,和平时情况正好相反 Zwrite ON //开启深度写入 frag{ fixed4 col=fixed4(1,0,0,0.5); }}//渲染没有被遮挡部分的Passpass{ blend SrcAlpha OneMinusSrcAlpha ZTes原创 2021-05-01 10:29:30 · 753 阅读 · 0 评论 -
使用UnityShader实现星空效果
使用UnityShader实现星空效果实现原理: y=ASin(wx+Q)//使用不同的频率采样同一张纹理即可Shader "zclShader/流动的星空Shader"{ Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass原创 2021-04-30 23:35:32 · 1778 阅读 · 1 评论 -
UnityShader 实现模糊效果
UnityShader 实现模糊效果使用UV进行模糊 //Pragma target 3.0 使用导数查询纹理可以获取模糊效果 //fixed4 col=tex2D(_MainTex,uv,float2(0.01,0.01),float2(0.01,0.01)); float dx=ddx(uv.x)*10; float2 dsdx=float2(dx,dx); fixed4 col=tex2D(_MainTex,uv,dsdx,float2(0.0,0.0)原创 2021-04-30 19:22:45 · 659 阅读 · 1 评论 -
unityShader实现点击波
unityShader实现点击波实现原理float2 uv=IN.uv;float dis=distance(uv,float2(0.5,0.5)); // 点击的位置, 外部传入float scale=_A * sin(-dis*3.14*_F + _Time.y); // -dis 向外波动, dis 向内波动uv+=uv*scale; // uv延圆形偏移fixed4 col=tex2D(_MainTex,uv);// fixed4(1,1,1,1)*saturate(Sc原创 2021-04-30 19:04:14 · 323 阅读 · 1 评论 -
unityShader采样光照贴图
unityShader采样光照贴图sampler2D _MainTex;float4 _MainTex_ST;sampler2D unity_Lightmap; //光照贴图float4 unity_LightmapST; //光照贴图的缩放和偏移v2f vert(appdata_full v){ v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTe原创 2021-04-30 18:09:54 · 941 阅读 · 1 评论 -
汽车变色Shader
"汽车变色Shader"实现原理 v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.y = v.vertex.y; return o; }fixed4 frag (v2f i) : SV_Target原创 2021-04-30 17:31:53 · 228 阅读 · 1 评论 -
unity 顶点范围检测
Unity顶点范围检测 using System.Linq; Vector3[] verts=meshfilter.mesh.vertices; float max=verts.Max(v=>v.y); float min=verts.Min(v=>v.y);原创 2021-04-30 01:17:57 · 354 阅读 · 1 评论 -
Shader属性和函数查询工具
"Shader属性和函数查询工具"属性规范:函数规范:声明函数: void func(out float4 c);#include值Copy传参数学函数:lit(dot(n,l),dot(n,h),m) // m为高光系数, 计算环境光,散射光,镜面光的贡献,返回4元向量// x 代表环境光的贡献, y 代表散射光的贡献, z 代表镜面光的贡献, w 始终为1.0 noise(x) //噪声函数lerp(a,b,f) // a + (a-b)*fisnan(x) isinf原创 2021-04-29 14:10:46 · 205 阅读 · 0 评论 -
unityShader模拟星空效果和雾效
unityShader模拟星空效果,不使用透明模式,只使用一张纹理_Speed1("_Speed1",Range(0,0.2))=0.05_Speed2("_Speed2",Range(0,15))=5_Speed3("_Speed3",Range(0,5))=1fixed frag(v2f IN):COLOR{ float2 uv=IN.uv; //使用sin函数控制偏移的范围 float offset_uv=_Speed1*sin(IN.uv*_Speed2+_Time.x*_原创 2021-04-29 08:24:38 · 1305 阅读 · 0 评论 -
UnityShader使用渐变纹理
UnityShader使用渐变纹理实现原理------------------------------------------------------------------------------------1. rampCol=使用半兰伯特模型对 渐变纹理采样;2. col=diffuse * rampCol.a*litCol;原创 2021-04-28 12:54:05 · 210 阅读 · 0 评论 -
使用UnityShader实现序列帧
使用UnityShader实现序列帧实现原理------------------------------------------------------------------------------------正确计算UV的偏移即可 fixed4 frag (v2f i) : SV_Target { float width= 1 / _SizeX; float height = 1 / _SizeY; float2 finalUV = i.原创 2021-04-28 12:30:57 · 552 阅读 · 0 评论 -
使用UnityShader实现模型的边缘流光效果
使用UnityShader实现模型的边缘流光效果实现原理------------------------------------------------------------------------------------边缘发光+流光效果fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); //边缘外发光原创 2021-04-28 01:34:31 · 3072 阅读 · 1 评论 -
使用UnityShader实现Mask边框效果
使用UnityShader实现Mask边框效果实现原理------------------------------------------------------------------------------------把透明度小于阈值的像素舍弃, 缺点是锯齿很严重透明度混合,需要开启透明队列fixed frag(v2f i):SV_Target{ fixed4 col=tex2D(_MainTex,i.uv); fixed4 maskCol=tex2D(_MaskTex,i.uv);原创 2021-04-26 00:30:44 · 651 阅读 · 0 评论 -
复习基础数学知识之三角函数
复习基础数学知识之三角函数三角函数:y=Asin(ωt+φ)振幅 :A 波动的范围T=2π/ω频率: f=1/T相位: ωx+φ初相为:φ原创 2021-04-25 23:47:06 · 380 阅读 · 0 评论 -
使用UnityShader实现河流流动或岩浆流动效果
使用UnityShader实现河流流动或岩浆流动效果实现原理------------------------------------------------------------------------------------1. 使用纹理偏移,注意设置纹理为 Repeat模式fixed4 frag (v2f i) : SV_Target { float2 UV = i.uv; float offsetX = _SpeedX * _Tim原创 2021-04-25 23:36:01 · 2236 阅读 · 0 评论 -
使用UnityShader实现2D流光效果
使用UnityShader实现2D流光效果实现原理------------------------------------------------------------------------------------1. 使用纹理偏移,注意设置纹理为 Repeat模式 fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); //流光UV f原创 2021-04-25 21:32:56 · 1574 阅读 · 1 评论 -
使用UnityShader实现积雪效果
使用UnityShader实现积雪效果实现原理------------------------------------------------------------------------------------法线和落雪方向的夹角小于某一个阈值,修改表面颜色为雪的颜色; if (saturate(dot(_SnowDir, worldNormal)) > _SnowRatio) { o.Albedo = _Color.rgb; } else { o.Albe原创 2021-04-25 00:30:53 · 927 阅读 · 0 评论 -
使用UnityShader实现模型变大效果
使用UnityShader实现外发光效果实现原理------------------------------------------------------------------------------------模型顶点延法线方向延伸即可v2f vert (appdata v) { v2f o; v.vertex.xyz += v.normal * _Scale; //顶点在法线方向上延长 o.ve原创 2021-04-24 18:12:42 · 1031 阅读 · 0 评论 -
Shader学习笔记 《一》
// 1. unityShader的基础结构/* Shader "ShaderName"{ Properties{ } SubShader{ //显卡A } SubShader{ //显卡B } SubShader{ //显卡C } Fallback "VertexLit" //Fallback off }*/// 2. Sha...原创 2019-11-24 23:31:03 · 158 阅读 · 0 评论 -
使用UnityShader实现X光效果
使用UnityShader实现外发光效果实现原理------------------------------------------------------------------------------------改造外发光shader, 添加透明度混合,输出的透明度为计算出的外发光的透明度效果展示------------------------------------------------------------------------------------------------------原创 2021-04-24 17:24:27 · 559 阅读 · 0 评论 -
使用UnityShader实现外发光效果
使用UnityShader实现外发光效果实现原理------------------------------------------------------------------------------------法线和视角向量的点积值为 Cos(angle), 夹角越大,值越小;Color * (1- Cos(angle))可以模拟边缘亮内部暗的现象;Color * (1- Cos(angle))^power, 使用指数控制边缘光的范围;效果展示------------------------原创 2021-04-24 15:53:01 · 4353 阅读 · 2 评论 -
使用unityshader实现图片扭曲效果
使用unityshader实现图片扭曲效果实现原理------------------------------------------------------最近项目中需要使用屏幕扭曲效果,实现原理很简单,把场景渲染到RT纹理上,再对RT纹理进行扭曲变换,输出到屏幕扭曲前扭曲后Shader源码------------------------------------------------------------------Shader "zclShader/whirShader"{原创 2021-04-24 13:25:13 · 2978 阅读 · 0 评论 -
使用UnityShader实现2D阴影效果
使用UnityShader实现2D阴影效果实现原理使用2个Pass,第二个Pass渲染2D角色,第一个Pass渲染阴影,使用矩阵的旋转变换和平移变换控制阴影的旋转和偏移,修改阴影的颜色即可,注意透明队列的渲染顺序#效果展示Shader源码Shader "zclShader/ShadowShader"{ Properties { _MainTex ("Texture", 2D) = "white" {} //变换矩阵,xy存阴影的旋转值, zw存阴影的偏移原创 2021-04-24 01:23:53 · 4263 阅读 · 2 评论 -
shader中的常用矩阵变换
unity shader 矩阵学习矩阵运算法则(1)矩阵和标量的乘法(2)矩阵和矩阵的乘法矩阵相乘的条件 和 结果的行数和列数变换的基本概念(1)变换(2)线性变换(3)平移变换(4)仿射变换(5)齐次坐标2D 矩阵变换(1)绕坐标中心旋转 a 角度的变换矩阵(2)沿坐标轴缩放的变换矩阵(3) 沿任意N轴缩放的变换矩阵3D 矩阵变换(1)绕X轴旋转的变换矩阵(2)绕Y轴旋转的变换矩阵(3)绕Z轴旋...原创 2019-01-27 01:42:14 · 1839 阅读 · 0 评论