Unity_Shader
从理论到实践学习Shader之路
ThomasQxx
小菜鸡一个
展开
-
切线空间?切线空间的作用到底是什么?
关于切线空间的理解原创 2022-08-17 16:42:37 · 704 阅读 · 3 评论 -
噪声纹理-Dissolve进行消融效果Shader
Shader "QShader/Dissolve"{ Properties{ _MainTex("Main Texture",2D) = "white"{} _NoiseTex("Noise Texture",2D) = "white"{} _Threshold("Disappear Threshold",Range(0,1)) = 0 _BurnFirstColor("Burn First Color",Color) = (1.0,1.0,1.0,1.0) _BurnSecondC.原创 2021-10-02 19:33:12 · 199 阅读 · 0 评论 -
ToonShader-卡通渲染
Shader "QShader/ToonShadingOne"{ Properties{ _MainColor("Main Color",Color) = (1.0,1.0,1.0,1.0) //渐变纹理 _Ramp("Ramp Texture",2D) = "white"{} //控制轮廓线大小 _OutLine("Outline",Range(0,1)) = 0.1 _原创 2021-10-01 19:44:33 · 375 阅读 · 0 评论 -
Billboard_ByAll-全方位的BillBoard
由于需要面向视角方向。因此需要重新构建向上向量。1.先构建出View视角向量 然后和Up(0,1,0)向量叉积得到向右向量。这个时候向右向量和View向量是两两垂直的。3.再由View向量和向右向量叉积,得到重新计算后的向上向量Up1。4.这个时候由Up1 View Right三个正交基向量构建出旋转矩阵。Shader "QShader/Billboard_ByAll"{ Properties{ _MainTex("Main Texture",2D) = "white"{} } SubS原创 2021-09-28 19:56:44 · 102 阅读 · 0 评论 -
BillBoard-广告牌技术只旋转Y轴
通过计算旋转后的三个正交基 来构建旋转矩阵。1.首先要计算视角向量。模型的中点Center可以设置为(0,0,0)。ViewDir = 摄像机的位置 - Center可以得到视角向量。2.向上向量Up (0,1,0)这个最简单。3.构建向右向量可以通过叉积计算出垂直与Up和View的向右向量Right。4.再通过Up和Right向量叉积计算出新的视野View’向量。5.最后通过Up Right View’三个正交基构建出旋转矩阵。Shader "QShader/Billboard_ByY"{ Pr原创 2021-09-27 18:01:08 · 366 阅读 · 1 评论 -
顶点动画-VetexAnimation
Shader "QShader/VertexAnimation"{ Properties{ _MainTex("Main Texture",2D) = "white"{} _XSpeed("X Axis Speed",Float) = 1.0 _YSpeed("Y Axis Speed",Float) = 1.0 } SubShader{ pass { Tags{"Ligh原创 2021-09-27 16:14:48 · 131 阅读 · 0 评论 -
对纹理进行uv坐标偏移
Shader "UShaderMagicBook/UvOffsetAnimation"{ Properties{ _MainTex("Main Texture",2D) = "white"{} _XSpeed("X Axis Speed",Float) = 1.0 _YSpeed("Y Axis Speed",Float) = 1.0 } SubShader{ pass {原创 2021-09-27 15:45:21 · 402 阅读 · 0 评论 -
Shader实现帧动画-FrameAnimation
Shader "QShader/FrameAmination_One"{ Properties{ _MainTex("Animation Texture",2D) = "white"{} _BaseColor("BaseColor",Color) = (1.0,1.0,1.0,1.0) _XCount("XCount",Int) = 1 _YCount("YCount",Int) = 1 _Speed("Speed",R原创 2021-09-27 14:58:10 · 157 阅读 · 0 评论 -
菲涅尔反射
菲涅尔反射 :视线垂直于表面时,反射较弱,而当视线非垂直表面时,夹角越小,反射越明显.例如:如果你站在湖边,低头看脚下的水,你会发现水是透明的,反射不是特别强烈;如果你看远处的湖面,你会发现水并不是透明的,但反射非常强烈Schlick菲涅尔近似等式! F0是一个反射系数,用于控制菲涅尔反射的强度,v是视角方向,n是表面法线Shader "QShader/FresnelReflection_schlick"{ Properties{ _BaseColor("Base Color原创 2021-09-26 16:13:38 · 2484 阅读 · 0 评论 -
Refract-折射
斯涅尔定律-Snell’s Law :n1 * Sin a = n2 * Sin b,n1 和 n2就是两个物体的折射比,a = 入射角 b = 反射角 移动 :n1 / n2 = sin b / sin a = 透射比。Shader "QShader/Refract"{ Properties{ _BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0) _RefractColor("Refract Color",Color原创 2021-09-26 14:55:10 · 278 阅读 · 0 评论 -
ReflectCubeMap
Shader来实现反射效果:通过相机的视角方向和物体模型的法线方向来计算反射方向。然后通过反射方向在CubeMap当中进行采样。采样得到的结果和主纹理进行线性插值。Shader "QShader/ReflectCubeMap"{ Properties{ _MainTex("Main Texture",2D) = "white"{} _BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0) _ReflectC原创 2021-09-26 14:04:37 · 92 阅读 · 0 评论 -
ShadowMap-Example
Shader "QStudyShader/ShadowMap"{ Properties{ _MainTex("Main Texture",2D) = "white"{} _BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0) _Gloss("Gloss",Range(8.0,200)) = 20.0 } SubShader{ pass {原创 2021-09-25 17:35:29 · 44 阅读 · 0 评论 -
ScreenSpace-ShadowMap(屏幕空间的阴影映射技术)
Question1:阴影是如何产生的?当一个光源发射的一条光线遇到一个不透明物体时,这条光线就不可以再继续照亮其他物体了(这里不考虑光线反射的情况),因此这个物体就会向它旁边的物体投射阴影,那些阴影区域的产生是因为光线无法到达这些区域。ShadowMap?在Unity中,这个技术的实现是通过将摄像机位置与光源位置重合(光源空间),然后按照正常的渲染流程渲染出深度图来作为阴影映射纹理。但是需要注意的是,与正常渲染不同的是,由于我们只需要深度图信息,而正常的渲染流程会多出不必要的光照模型计算(Base P原创 2021-09-25 16:11:19 · 1602 阅读 · 0 评论 -
光照衰减-Lights
Shader "QStudyShader/Lights"{ Properties { _MainTex("Main Texture", 2D) = "white" {} _BaseColor("Base Color", Color) = (1.0,1.0,1.0,1.0) _Gloss("Gloss", Range(8.0,200.0)) = 20.0 _Scale("Scale",Range(0,1)) = 1.0原创 2021-09-24 09:39:06 · 249 阅读 · 0 评论 -
透明度混合-Blend
Blend-透明度混合什么是混合:当片元着色器产生一个颜色的时候,可以选择和颜色缓存中的颜色进行混合。这样看来,混合就和两个操作数有关系。1.源颜色-Source Color :指的就是由片元着色器产生的颜色2.目标颜色-Destination Color :指的就是从颜色缓存中读取到的颜色对源颜色和目标颜色进行混合后会得到输出颜色,它将重新写入到颜色缓存当中。需要注意的是当我们谈到混合中的源颜色和目标颜色时,它们都包含了四个通道RGBA- Red Green Bule Alpha,而不仅仅是RGB原创 2021-09-22 12:55:06 · 275 阅读 · 0 评论 -
透明度测试-AlphaTest
透明度测试依据透明度把指定的像素块剔除掉。Shader "QStudyShader/AlphaTest"{ Properties { _MainTex("Main Texture",2D) = "white"{} _BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0) _Alpha("Alpha Threshold",Range(0,1)) = 0 } SubShade原创 2021-09-22 09:33:43 · 569 阅读 · 0 评论 -
遮罩纹理-MaskTexture
遮罩纹理//所谓的遮罩纹理和渐变纹理是类似的//渐变纹理就是希望光照部分不要对所有的部分都一模一样 而是变换的//遮罩纹理就是希望高光部分不要都一模一样 而是高光部分各有不同Shader "QStudyShader/MaskTexture"{ Properties { _MainTex("Main Texture",2D) = "white"{} _BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0)原创 2021-09-21 17:53:43 · 479 阅读 · 0 评论 -
渐变纹理(光照渐变)
渐变纹理(光照渐变)在计算公式兰伯特光照模型 diffuse = I * albedo * saturate(normal * lightDir)当中 I=光照强度是固定的 albedo=主纹理也是固定的。只有后面计算是不固定的 所以先计算后面部分saturate(normal * lightDir) 对渐变纹理进行采样 然后和主纹理 表面颜色进行正片叠底混合Shader "QStudyShader/RampTexture"{ Properties { _MainTex("Texture",原创 2021-09-21 15:43:53 · 427 阅读 · 0 评论 -
凹凸映射Bump_Mapping
凹凸映射所谓凹凸映射(Bump Mapping)就是通过一张纹理贴图来轻微的修改模型表面的法线,让它可以为模型提供更多的细节Shader "QStudyShader/Bump Mapping"{ Properties { _MainTex("Texture", 2D) = "white" {} _BaseColor("BaseColor",Color) = (1.0,1.0,1.0,1.0) _BumpTex("Bump Texture",2D) = "bump"{} _BumpS原创 2021-09-20 18:40:32 · 358 阅读 · 0 评论 -
纹理映射-TextureMapping
纹理映射Shader "Unlit/TextureMapping"{ Properties { _MainTex ("MainTexture", 2D) = "white" {} _BaseColor("BaseColor",Color) = (1.0,1.0,1.0,1.0) } SubShader{ Pass{ Tags{ "LightModel" = "ForwardBase"原创 2021-09-20 16:31:27 · 299 阅读 · 0 评论 -
PhongAndBelinnPhong光照模型
Phong光照模型Shader "QStudyShader/Phong"{ Properties { _BaseColor("Base Color",Color) = (1.0,1.0,1.0,1.0) _Gloss("Gloss",Range(8,100)) = 20.0 } SubShader { Pass{ //我们需要先根据入射光方向和法线方向计算出反射光方向,然后通过反射光方向的和视角方向夹角的余弦值来决定高光的强度。 Tags { "LightModel.原创 2021-09-19 18:18:27 · 63 阅读 · 0 评论 -
半兰伯特光照模型
Shader "QStudyShader/Per_Fragment_HalfLambertLaw"{ Properties{ } SubShader{ Pass{ Tags{ "LightModel" = "ForwardBase"} CGPROGRAM #include "Lighting.cginc" #pragma vertex Vertex #pragma fragment Fragment struct a2v { float4 vert.原创 2021-09-19 15:18:56 · 124 阅读 · 0 评论 -
逐片元-兰伯特光照模型
Shader "QStudyShader/Per_Fragment_LambertLaw"{ Properties{ } SubShader{ Pass{ Tags{ "LightModel" = "ForwardBase"} CGPROGRAM #include "Lighting.cginc" #pragma vertex Vertex #p原创 2021-09-19 15:17:02 · 71 阅读 · 0 评论 -
光照模型-兰伯特光照模型
兰伯特光照模型理论基础原创 2021-09-18 10:35:42 · 123 阅读 · 0 评论 -
逐顶点-兰伯特光照模型
Per_VertexLambertShader "QStudyShader/Per_Vertext_LambertLaw"{ // 属性 Prorerty 复数 变Y为i加es Properties Properties{ //目前不需要任何属性 } SubShader{ //如果是在SubShader中设定Tags,则在所有的Pass中通用, //但是并不是所有的标签都可以在SubShader中使用,就比如LightMode是针对pass的 // 在Pass块中设定的的标签只能原创 2021-09-18 09:35:27 · 129 阅读 · 0 评论