合集-Unity Shader

摘要:【Unity3D】固定管线着色器一### 1 前言 ​ 着色器(Shader)是渲染管线中最重要的一环,Unity3D 底层基于 OpenGL 实现,读者可以通过 [渲染管线](https://zhyan8.blog.csdn.net/article/details/126715869) 了解 Unity3D 渲染流程。 ​ Ope 阅读全文
posted @ 2023-03-21 09:48 little_fat_sheep 阅读(206) 评论(0) 推荐(0)
摘要:【Unity3D】固定管线着色器二### 1 前言 ​ [固定管线着色器一](https://zhyan8.blog.csdn.net/article/details/126811503) 中介绍了 Shader 中外部属性、光照、贴图等基础用法,本文将进一步讲解固定管线着色器,介绍正面与反面剔除、Alpha 测试、深度测试、混合、 阅读全文
posted @ 2023-03-21 09:48 little_fat_sheep 阅读(50) 评论(0) 推荐(0)
摘要:【Unity3D】表面着色器### 1 前言 ​ [固定管线着色器一](https://zhyan8.blog.csdn.net/article/details/126811503)、[固定管线着色器二](https://zhyan8.blog.csdn.net/article/details/126824063) 中介绍了 阅读全文
posted @ 2023-03-21 09:50 little_fat_sheep 阅读(89) 评论(0) 推荐(0)
摘要:【Unity3D】顶点和片元着色器### 1 前言 ​ 上文介绍了渲染管线、固定管线着色器和表面着色器,如下: - [渲染管线](https://zhyan8.blog.csdn.net/article/details/126715869) - [固定管线着色器一](https://zhyan8.blog.csdn.net/arti 阅读全文
posted @ 2023-03-21 09:50 little_fat_sheep 阅读(100) 评论(0) 推荐(0)
摘要:【Unity3D】选中物体描边特效### 1 前言 ​ 描边的难点在于如何检测和识别边缘,当前实现描边特效的方法主要有以下几种: ​ **1)基于顶点膨胀的描边方法** ​ 在 SubShader 中开 2 个 Pass 渲染通道,第一个 Pass 通道渲染膨胀的顶点,即将顶点坐标沿着法线方向向外扩展,并使用纯色给扩展后的顶点着色, 阅读全文
posted @ 2023-03-21 09:52 little_fat_sheep 阅读(663) 评论(0) 推荐(1)
摘要:【Unity3D】水波特效1 水波特效原理 ​ 水面特效 中基于 Shader Graph 实现了模拟水面特效,包含波纹、起伏、折射、泡沫等细节,本文将基于屏幕后处理实现环形水波特效。 ​ 水波特效属于 Unity3D 后处理特效,其原理是:对渲染后的纹理进行局部挤压和拉伸变换,即对局部 uv 坐标进行周期性的偏移运动,实现 阅读全文
posted @ 2023-03-21 09:52 little_fat_sheep 阅读(341) 评论(0) 推荐(0)
摘要:【Unity3D】卷轴特效### 1 原理 ​ 当一个圆在地面上沿直线匀速滚动时,圆上固定点的运动轨迹称为旋轮线(或摆线、圆滚线)。本文实现的卷轴特效使用了旋轮线相关理论。 ​ 以下是卷轴特效原理及公式推导,将屏幕坐标 (x) 映射到纹理坐标 (u)。 ![img](https://img-blog.csdnimg.cn/f 阅读全文
posted @ 2023-03-21 09:52 little_fat_sheep 阅读(196) 评论(0) 推荐(0)
摘要:【Unity3D】半球卷屏特效### 1 原理 ​ [凸镜贴图](https://zhyan8.blog.csdn.net/article/details/123469983) 和 [渐变凸镜贴图](https://zhyan8.blog.csdn.net/article/details/123650387) 中介绍了使用 Op 阅读全文
posted @ 2023-03-21 09:52 little_fat_sheep 阅读(117) 评论(0) 推荐(0)
摘要:【Unity3D】基于模板测试和顶点膨胀的描边方法1 前言 ​ 选中物体描边特效 中介绍了基于模板纹理模糊膨胀的描边方法,该方法实现了软描边,效果较好,但是为了得到模糊纹理,对屏幕像素进行了多次渲染,效率欠佳。本文将介绍另一种描边方法:基于模板测试和顶点膨胀的描边方法,该方法绘制的是硬描边,但效率较高。 ​ 基于顶点膨胀的描边方法都会遇到以下问题: 阅读全文
posted @ 2023-03-21 11:16 little_fat_sheep 阅读(153) 评论(0) 推荐(0)
摘要:【Unity3D】激光灯、碰撞特效### 1 需求描述 ​ 本文将模拟激光灯(或碰撞)特效,详细需求如下: - 从鼠标位置发射屏幕射线,检测是否与物体发生碰撞 - 当与物体发生碰撞时,在物体表面覆盖一层激光灯(或碰撞)特效 ![img](https://img-blog.csdnimg.cn/7f13c98b94be4e659c95 阅读全文
posted @ 2023-03-21 20:47 little_fat_sheep 阅读(184) 评论(0) 推荐(0)
摘要:【Unity3D】Shader常量、变量、结构体、函数1 源码路径 ​ Unity Shader 常量、变量、结构体、函数一般可以在 Unity Editor 安装目录下面的【Editor\Data\CGIncludes\UnityShader】目录下查看源码,主要源码文件如下: UnityCG.cginc UnityShaderUtilities.c 阅读全文
posted @ 2023-03-21 20:52 little_fat_sheep 阅读(344) 评论(0) 推荐(0)
摘要:【Unity3D】空间和变换# 1 空间 ## 1.1 左右手坐标系及其法则 ### 1.1.1 左右手坐标系 ![img](https://img-blog.csdnimg.cn/cf64950ca3e2419391edc866be4cb3be.jpeg) 左手坐标系与右手坐标系 ​ Unity 局部空间、世界空间、裁剪空间 阅读全文
posted @ 2023-03-21 20:53 little_fat_sheep 阅读(345) 评论(0) 推荐(0)
摘要:【Unity3D】法线贴图和凹凸映射### 1 法线贴图原理 ​ [表面着色器](https://zhyan8.blog.csdn.net/article/details/126882367)中介绍了使用表面着色器进行法线贴图,实现简单快捷。本文将介绍使用顶点和片元着色器实现法线贴图和凹凸映射,实现更灵活。 ​ 本文完整代码资源见→[ 阅读全文
posted @ 2023-06-18 20:20 little_fat_sheep 阅读(106) 评论(0) 推荐(0)
摘要:【Unity3D】阴影原理及应用## 1 阴影原理 ​ 光源照射到不透明物体上,会向该物体的后面投射阴影,如果阴影区域存在其他物体,这些物体不被光源照射的部分就需要渲染阴影。因此,我们可以将阴影的生成抽象出 2 个流程:物体投射阴影、物体接收阴影。 ![img](https://img-blog.csdnimg.cn/ebc92b 阅读全文
posted @ 2023-06-18 20:21 little_fat_sheep 阅读(493) 评论(2) 推荐(0)
摘要:【Unity3D】反射和折射### 1 前言 ​ [立方体纹理(Cubemap)和天空盒子(Skybox)](https://zhyan8.blog.csdn.net/article/details/130791333)中介绍了生成立方体纹理和制作天空盒子的方法,本文将使用立方体纹理进行采样,实现反射、菲涅耳反射和折射效果。另 阅读全文
posted @ 2023-08-08 22:51 little_fat_sheep 阅读(400) 评论(1) 推荐(1)
摘要:【Unity3D】广告牌特效### 1 前言 ​ 广告牌特效是指:空间中的一个 2D 对象始终(或尽可能)面向相机,使得用户能够尽可能看清楚该 2D 物体。广告牌特效一共有以下 3 种: - 正视广告牌:广告牌始终以正视图姿态面向相机,即广告牌的 x、y、z 轴正方向始终指向相机的 x、y、z 轴正方向; - 血条广告牌:游戏 阅读全文
posted @ 2023-08-09 21:11 little_fat_sheep 阅读(305) 评论(0) 推荐(0)
摘要:【Unity3D】调整屏幕亮度、饱和度、对比度### 1 屏幕后处理流程 ​ 调整屏幕亮度、饱和度、对比度,需要使用到屏幕后处理技术。因此,本文将先介绍屏幕后处理流程,再介绍调整屏幕亮度、饱和度、对比度的实现。 ​ 本文完整资源见→[Unity3D调整屏幕亮度、饱和度、对比度](https://download.csdn.net/downloa 阅读全文
posted @ 2023-08-09 21:13 little_fat_sheep 阅读(864) 评论(0) 推荐(0)
摘要:【Unity3D】边缘检测特效### 1 边缘检测原理 ​ 边缘检测的原理是:检测每个像素周围的像素亮度差,如果亮度差异较大,就将该像素识别为边缘,并进行边缘着色。 ​ 本文完整资源见→[Unity3D边缘检测特效](https://download.csdn.net/download/m0_37602827/87858084) 阅读全文
posted @ 2023-08-10 21:01 little_fat_sheep 阅读(164) 评论(0) 推荐(0)
摘要:【Unity3D】高斯模糊特效### 1 高斯模糊原理 ​ [边缘检测特效](https://zhyan8.blog.csdn.net/article/details/130997882)中使用了卷积运算进行了边缘检测,本文实现的高斯模糊特效同样使用了卷积运算,关于卷积核和卷积运算的概念,读者可以参考[边缘检测特效](https 阅读全文
posted @ 2023-08-10 21:10 little_fat_sheep 阅读(619) 评论(0) 推荐(0)
摘要:【Unity3D】Bloom特效1 Bloom 特效原理 ​ Bloom 特效是指:将画面中较亮的区域向外扩散,造成一种朦脓的效果。实现 Bloom 特效,一般要经过 3 个阶段处理:亮区域检测、高斯模糊、Bloom 合成。 ​ 本文完整资源见→Unity3D Bloom 特效。 ​ 1)亮区域检测 ​ 根据亮度阈值检测亮区,如下 阅读全文
posted @ 2023-08-11 21:02 little_fat_sheep 阅读(158) 评论(0) 推荐(0)
摘要:【Unity3D】运动模糊特效### 1 运动模糊原理 ​ 开启混合(Blend)后,通过 Alpha 通道控制当前屏幕纹理与历史屏幕纹理进行混合,当有物体运动时,就会将当前位置的物体影像与历史位置的物体影像进行混合,从而实现运动模糊效果,即模糊拖尾效果。主要代码如下: ```cpp Pass { Blend SrcAlpha 阅读全文
posted @ 2023-08-11 21:03 little_fat_sheep 阅读(538) 评论(0) 推荐(0)
摘要:【Unity3D】屏幕深度和法线纹理简介## 1 前言 ​ **1)深度纹理和法线纹理的含义** ​ 深度纹理本质是一张图片,图片中每个像素反应了屏幕中该像素位置对应的顶点 z 值相反数(观察坐标系),之所以用 “反应了” 而不是 “等于”(或 “对应” ),因为深度纹理中颜色的值域是 [0, 1],而顶点 z 值相反数不一定在该区间,另 阅读全文
posted @ 2023-08-12 09:11 little_fat_sheep 阅读(232) 评论(0) 推荐(0)
摘要:【Unity3D】激光雷达特效## 1 由深度纹理重构世界坐标 ​ [屏幕深度和法线纹理简介](https://zhyan8.blog.csdn.net/article/details/131056029)中对深度和法线纹理的来源、使用及推导过程进行了讲解,本文将介绍使用深度纹理重构世界坐标的方法,并使用重构后的世界坐标模拟激光 阅读全文
posted @ 2023-08-12 09:13 little_fat_sheep 阅读(568) 评论(1) 推荐(2)
摘要:【Unity3D】流动雾效### 1 前言 ​ [屏幕深度和法线纹理简介](https://zhyan8.blog.csdn.net/article/details/131056029)中对深度和法线纹理的来源、使用及推导过程进行了讲解,[激光雷达特效](https://zhyan8.blog.csdn.net/articl 阅读全文
posted @ 2023-08-12 10:32 little_fat_sheep 阅读(197) 评论(0) 推荐(0)
摘要:【Unity3D】基于深度和法线纹理的边缘检测方法1 前言 ​ 边缘检测特效中使用屏后处理技术,通过卷积运算计算梯度,检测每个像素周围像素的亮度差异,以识别是否是边缘像素;选中物体描边特效中也使用了屏后处理技术,通过 CommandBuffer 获取目标物体渲染后的模板纹理,并将模板纹理模糊化,使得模板纹理的边缘向外扩张,再将模糊化后的模板纹理与原 阅读全文
posted @ 2023-08-12 22:57 little_fat_sheep 阅读(292) 评论(0) 推荐(0)
摘要:【Unity3D】平面光罩特效1 前言 ​ 屏幕深度和法线纹理简介中对深度和法线纹理的来源、使用及推导过程进行了讲解,激光雷达特效中讲述了一种重构屏幕像素点世界坐标的方法,本文将沿用激光雷达特效中重构像素点世界坐标的方法,实现平面光罩特效。 ​ 假设平面光罩的高度为 shieldHeight,高亮线的宽度为 lineWidth, 阅读全文
posted @ 2023-08-12 22:55 little_fat_sheep 阅读(68) 评论(0) 推荐(0)
摘要:【Unity3D】素描特效### 1 非真实渲染 ​ [法线贴图和凹凸映射](https://zhyan8.blog.csdn.net/article/details/129510719)中讲述了普通光照的渲染原理,实现的效果比较贴近真实世界(照相写实主义,Photorealism),非真实渲染(Non-Photoreali 阅读全文
posted @ 2023-08-13 10:14 little_fat_sheep 阅读(407) 评论(0) 推荐(0)
摘要:【Unity3D】选中物体消融特效1 消融特效原理 ​ 消融特效 中基于 Shader Graph 实现了消融特效,本文将基于 Shader 实现消融特效。 ​ 当前实现消融特效的方法主要有 Alpha 测试消融、clip(或 discard)消融,它们的本质都是随机丢弃一些片元,以实现消融效果。 ​ 本文完整资源见→Unity3D 阅读全文
posted @ 2023-10-12 23:58 little_fat_sheep 阅读(172) 评论(0) 推荐(0)
摘要:【Unity3D】动态路径特效1 前言 ​ 本文通过导航系统(NavMeshAgent)和线段渲染器(LineRenderer)实现了角色走迷宫和绘制路径功能,同时实现动态路径特效。 ​ 导航系统的介绍详见博客:导航系统、分离路面导航、动态路障导航。线段渲染器的介绍详见博客:线段渲染器LineRenderer。 ​ 动态路径特效 阅读全文
posted @ 2023-10-12 23:59 little_fat_sheep 阅读(672) 评论(1) 推荐(1)
摘要:【Unity3D】伽马校正1 伽马相关概念 1.1 人眼对亮度变化的感知 ​ 人眼对亮度变化的感知不是线性的,如下图,人眼对亮区的亮度变化不太敏感,对暗区的亮度变化较敏感。另外,我们可以想象一下,在一个黑暗的房间里,由 1 根蜡烛到 2 根蜡烛的变化,我们很容易感知到,但是由 100 根蜡烛到 101 根蜡烛的变化,我们就不 阅读全文
posted @ 2023-10-13 23:54 little_fat_sheep 阅读(262) 评论(0) 推荐(0)
摘要:【Unity3D】地面网格特效1 前言 ​ 本文实现了地面网格特效,包含以下两种模式: 实时模式:网格线宽度和间距随相机的高度实时变化; 分段模式:将相机高度分段,网格线宽度和间距在每段中对应一个值。 ​ 本文完整资源见→Unity3D地面网格特效。 2 地面网格实现 ​ SceneController.cs using Sys 阅读全文
posted @ 2023-10-14 23:37 little_fat_sheep 阅读(249) 评论(0) 推荐(0)
摘要:【Unity3D】花瓣特效1 花瓣绘制原理 ​ 如下图是实现的花瓣特效效果,为方便描述,我们将每个红色的扁状长条称为花瓣,每个花瓣中心的绿点称为花蕊,花朵的正中心称为花心。 ​ 我们在 xOz 平面上绘制花朵,假设花心为 O 点,其世界坐标为 _Center, 花瓣个数为 _PetalNum,花瓣半长度和半宽度分别为 _Pe 阅读全文
posted @ 2023-10-15 12:46 little_fat_sheep 阅读(192) 评论(0) 推荐(0)
摘要:【Unity3D】Renderer Feature简介1 3D 项目迁移到 URP 项目后出现的问题 ​ 3D 项目迁移至 URP 项目后,会出现很多渲染问题,如:材质显示异常、GL 渲染不显示、多 Pass 渲染异常、屏幕后处理异常等问题。下面将针对这些问题给出一些简单的解决方案。 ​ URP 官方教程和 API 详见→Universal RP 文档 阅读全文
posted @ 2023-10-16 21:37 little_fat_sheep 阅读(325) 评论(0) 推荐(0)