Unity Shader 学习系列(十)第一个 Dissolve Shader
这一篇把前面的 Alpha Clip 升级成真正可用的 Dissolve。核心是三步:噪声控制裁剪、边缘带提取、边缘发光叠加。 1. 先新建 Shader 文件建议在这个目录新建文件: Assets/Shaders/Effects/S09_Dissolve.shader 2. 完整代码Shader "Study/S09_Dissolve" { Properties { _BaseMap ("Base Map", 2D) = "white" {} _NoiseMap ("Noise Map", 2D) = "white" {} _BaseColor ("Base Color", Color) = (1, 1, 1, 1) _DissolveAmount ("Dissolve Amount", Range(0, 1)) = 0.0 _EdgeWidth ("Edge Width", Range(0.001, 0.2)) =...
Unity Shader 学习系列(九)第一个 Fresnel Shader
这一篇做很多特效都会用到的“边缘光”:Fresnel。简单说,就是视线越贴近表面边缘,亮度越强。 1. 先新建 Shader 文件建议在这个目录新建文件: Assets/Shaders/Effects/S08_Fresnel.shader 2. 完整代码Shader "Study/S08_Fresnel" { Properties { _BaseColor ("Base Color", Color) = (0.1, 0.2, 0.6, 1.0) _FresnelColor ("Fresnel Color", Color) = (0.3, 0.9, 1.0, 1.0) _FresnelPower ("Fresnel Power", Float) = 4.0 _FresnelIntensity ("Fresnel Intensity", Float) = 1.0 } SubShader { Tags ...
Unity Shader 学习系列(八)第一个 Alpha Clip Shader
这一篇我们开始做“裁剪型透明”。它不是半透明混合,而是满足条件就显示,不满足就直接丢弃像素,边缘非常干脆。 1. 先新建 Shader 文件建议在这个目录新建文件: Assets/Shaders/Effects/S07_AlphaClip.shader 2. 完整代码Shader "Study/S07_AlphaClip" { Properties { _BaseMap ("Base Map", 2D) = "white" {} _MaskMap ("Mask Map", 2D) = "white" {} _BaseColor ("Base Color", Color) = (1, 1, 1, 1) _ClipThreshold ("Clip Threshold", Range(0, 1)) = 0.5 } SubShader { Tags { ...
Unity Shader 学习系列(七)第一个顶点波浪 Shader
这一篇我们把“动画”从片元阶段挪到顶点阶段:直接改顶点位置,做出波浪起伏。这是理解“顶点动画”和“像素动画”区别的一篇关键练习。 1. 先新建 Shader 文件建议在这个目录新建文件: Assets/Shaders/Effects/S06_VertexWave.shader 2. 完整代码Shader "Study/S06_VertexWave" { Properties { _BaseColor ("Base Color", Color) = (1, 1, 1, 1) _WaveAmplitude ("Wave Amplitude", Float) = 0.2 _WaveFrequency ("Wave Frequency", Float) = 2.0 _WaveSpeed ("Wave Speed", Float) = 2.0 } SubShader { Tags { ...
Unity Shader 学习系列(六)第一个颜色脉冲 Shader
这一篇不依赖贴图,我们直接让颜色做“呼吸感”脉冲。做 UI 高亮、道具提示、可交互物体闪烁时,这个套路非常常见。 1. 先新建 Shader 文件建议在这个目录新建文件: Assets/Shaders/Effects/S05_ColorPulse.shader 2. 完整代码Shader "Study/S05_ColorPulse" { Properties { _BaseColor ("Base Color", Color) = (1, 1, 1, 1) _PulseSpeed ("Pulse Speed", Float) = 2.0 _PulseMin ("Pulse Min", Float) = 0.2 _PulseMax ("Pulse Max", Float) = 1.0 } SubShader { Tags { "RenderType" =...
Unity Shader 学习系列(五)第一个动态 UV 流动 Shader
从这一篇开始,我们让贴图“动起来”。核心思路非常直接:让 UV 随时间持续偏移,这样采样点就会在贴图上不断移动。 1. 先新建 Shader 文件建议在这个目录新建文件: Assets/Shaders/Effects/S04_UVScroll.shader 2. 完整代码Shader "Study/S04_UVScroll" { Properties { _BaseMap ("Base Map", 2D) = "white" {} _BaseColor ("Base Color", Color) = (1, 1, 1, 1) _ScrollSpeed ("Scroll Speed", Vector) = (0.2, 0.0, 0.0, 0.0) } SubShader { Tags { "RenderType" = "Opaque" ...
Unity Shader 学习系列(四)第一个支持 Tiling 和 Offset 的 Texture Shader
这一篇我们在“第一个 Texture Shader”的基础上,补上材质里最常用的两个能力:Tiling 和 Offset。做完后你会发现,很多“贴图滚动、流光、平铺细节”其实都离不开这一步。 1. 先新建 Shader 文件建议在这个目录新建文件: Assets/Shaders/Effects/S03_TextureTilingOffset.shader 2. 完整代码Shader "Study/S03_TextureTilingOffset" { Properties { _BaseMap("Base Map", 2D) = "white" {} _BaseColor("Base Color", Color) = (1, 1, 1, 1) } SubShader { Tags { "RenderType" = "Opaque" ...
Unity Shader 学习系列(三)第一个 Texture Shader
前两篇我们把“纯色 Shader”跑通了,这一篇进入第一个贴图 Shader。目标很直接:把一张纹理正确采样到模型上,再和颜色参数做乘法控制。 1. 先准备代码文件新建(或继续使用): Assets/Shaders/Basic/S02_Texture.shader 示例代码如下(这篇先不做 Tiling/Offset,下一篇再讲): Shader "Study/S02_Texture" { Properties { _BaseMap ("Base Map", 2D) = "white" {} _BaseColor ("Base Color", Color) = (1, 1, 1, 1) } SubShader { Tags { "RenderType" = "Opaque" "RenderPipeline" =...
Unity Shader 学习系列(二)第一个纯色 Shader
这篇正式进入第一个纯色 Shader:S01_SolidColor.shader。目标很简单:先让模型稳定显示纯色,同时把最基础的 Shader 结构吃透。 1. 先创建文件新建: Assets/Shaders/Basic/S01_SolidColor.shader 填入代码: Shader "Study/S01_SolidColor" { Properties { _BaseColor ("Base Color", Color) = (1, 1, 1, 1) } SubShader { Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline" "Queue" = "Geometry" } Pass { ...
Unity Shader 学习系列(一)发展历程与 URP 学习环境搭建
这篇是系列第一篇。先不急着写特效,我们先把大方向搞清楚:Unity Shader 这些年怎么演进、为什么换代、现在该学哪套,以及怎么从 0 搭一个靠谱的学习工程。 1. Shader 学习最容易踩的坑最常见的问题是:上来就抄代码,能跑但不知道为什么。所以这套系列会按这个节奏走: 先把环境搭好。 再从最小可运行 Shader 开始。 每篇只加一点新知识,稳步推进。 2. Unity Shader 发展历程2.1 早期:Built-in 管线时代常见写法是 CGPROGRAM、Surface Shader、UnityCG.cginc。优点是资料多、历史项目多;缺点是可控性和扩展性一般。 2.2 后来:SRP 时代Unity 推出 SRP(Scriptable Render Pipeline)后,主流分成两条: URP:跨平台,性能和画质比较均衡。 HDRP:偏高端画质,适合重型项目。 2.3 现在:手写 HLSL 和 Shader Graph 并行 Shader Graph:效率高,适合快速迭代。 手写...
深入理解点乘:从数学到应用
深入理解点乘:从数学到应用在数学和计算机科学中,点乘(也称为内积或标量积)是一个基础但非常重要的运算,广泛应用于线性代数、机器学习、计算机图形学以及物理等领域。本文将详细介绍点乘的各种作用和应用场景,帮助你更好地理解和掌握这一概念。 什么是点乘?点乘是两个向量之间的运算,其结果是一个标量。给定两个向量$\mathbf{a} = [a_1, a_2, \ldots, a_n]$和 $\mathbf{b} = [b_1, b_2, \ldots, b_n]$,它们的点乘 $\mathbf{a} \cdot \mathbf{b}$ 计算为: $\mathbf{a} \cdot \mathbf{b} = a_1b_1 + a_2b_2 + \ldots + a_nb_n$ 点乘的作用1. 计算向量的夹角点乘可以用来计算两个向量之间的夹角,这对于判断向量之间的相似性和方向非常重要。具体步骤如下: 计算点乘:计算两个向量的点乘 $\mathbf{a} \cdot \mathbf{b}$。 计算模:分别计算两个向量的模(长度),记为 $|\mathbf{a}|...
计算机基础 补码
在计算机中,负数使用补码(Two’s Complement)表示法来处理,而不是简单的取反。这种表示法有其特定的原因和优势。让我们详细解释一下。 补码表示法补码表示法是一种用于表示有符号整数的方法。对于一个 n 位的二进制数,补码表示法定义如下: 正数的补码:正数的补码就是其本身的二进制表示。 负数的补码:负数的补码表示法通过以下步骤得到: 取反:将正数的二进制表示的每一位取反(0 变为 1,1 变为 0)。 加1:在取反后的结果上加1。 例如,假设我们使用8位二进制数来表示整数,正数 96 的二进制表示为 01100000。那么,负数 -96 的补码表示法为: 取反: 01100000 (96) 取反后: 10011111 加1: 10011111 + 1 ---------------- 10100000 (-96) 原因补码表示法被采用的原因主要有以下几点: 简化加法和减法操作: 使用补码表示法可以将减法操作转换为加法操作,简化硬件设计。例如,a - b 可以表示为 a + (-b),而 -b...





