US4L8-4——水波效果
US4L8-4——水波效果 水波效果 水波效果指在计算机图形学中模拟水面波纹的视觉效果,通常用于游戏、动画或者其他虚拟场景中。 主要用于体现水体的动态感,比如水的波动、反射、折射、透明等,可以让人感觉像真实的水一样流动闪耀。 水波效果的核心特点就是: 动态波纹 光学特性(反射、折射、菲涅耳效应) 透明度 等等 水波效果基本原理 一句话总结水波效果基本原理:水波效果可以基于我们之前实现的带法线纹理的玻璃效果进行修改,通过添加噪声法线纹理结合 Shader 内置时间变量实现水波动态效果,加入菲涅耳计算公式实现水面的光学特性 关键点: 噪声纹理的使用 我们可以利用沃利噪声(细胞噪声)生成的噪声纹理灰度图,在 Unity 中将该噪声纹理灰度图作为高度图使用 用它代表水面的法线信息,只需要在 Unity 中将该灰度图设置为 Normal map,并勾选 Create from Grayscale 后应用即可 动态效果的实现 自定义两个属性,代表水平面 x 和 y 轴的速度。在片元着色器中利用 Shader 内置时间参数 _Time.y...
US4L8-3——消融效果
US4L8-3——消融效果 消融效果 消融效果是模拟物体逐渐从屏幕上消失或溶解的过程,它通常利用噪声纹理实现,使物体按照某种规则逐渐透明或完全不可见。 这种效果常用于: 角色死亡、传送场景 魔法消失,比如燃烧、消失等 消融效果基本原理 一句话总结消融效果基本原理:通过对比噪声纹理值与消融进度参数,剔除低于阈值的像素,同时在边缘添加渐变颜色实现动态溶解效果。 关键点: 如何剔除像素 我们在片元着色器中对噪声纹理进行采样,由于噪声纹理是灰度图,只需取出其中的RGB中的任意一通道的颜色来使用。 再自定义一个用于控制消融进度的参数(0~1),最后利用该片元的 噪声纹理值 减去 进度参数 若小于 0 则不渲染该片元,通过控制进度参数,便可以控制消融程度了 Unity Shader中 提供了一个内置函数 clip(x),它的作用就是在片元着色器中调用时来丢弃片元的, 传入的值x小于0,则会丢弃当前片元,被丢弃的片元不会被进一步处理也就不会被渲染了 相关内容可见:US3S3L4——透明度测试 123456fixed4 frag(v2f i) :...
US4L8-2——柏林噪声纹理生成工具实现
US4L8-2——柏林噪声纹理生成工具实现 本章代码关键字 12Mathf.PerlinNoise() // 传入柏林噪声空间中的xy值,返回噪声值texture2D.EncodeToPNG() // 将Texture2D对象保存为png格式的byte[]数据,之后方便保存 柏林噪声纹理生成工具 这里要实现的柏林噪声纹理生成工具,就是利用 Unity 提供给我们的 Mathf.PerlinNoise() 方法 将噪声数据存储在图片中的工具,我们利用程序代码去生成柏林噪声纹理 制作编辑器拓展UI界面 前置知识点:UED——Unity编辑器拓展 先将必要的 柏林噪声纹理参数 和 生成按钮 显示在窗口上 1234567891011121314151617181920212223242526272829303132333435363738394041using System.IO;using UnityEditor;using UnityEngine;public class PerlinNoiseTextureTool :...
US4L8-1——Photoshop生成噪声、渐变纹理
US4L8-1——Photoshop生成噪声、渐变纹理 Photoshop生成噪声纹理的步骤 新建 512*512 的灰度图片,设置为宽度和高度为512像素,颜色模式为灰度 新建一个图层(右下角位置) 在工具栏点击:滤镜 ——> 渲染 ——> 云彩 此时,图层上就会自动生成最简单的噪声图 在工具栏点击:图像 ——> 自动色调,可以调整噪声图的色调到 0~1 之间 最后,在工具栏点击:文件 ——> 导出为,然后选择好路径并导出为 .jpg 文件即可 Photoshop生成渐变纹理的步骤 新建 512*512 的RGB颜色图片,设置为宽度和高度为512像素,颜色模式为RGB颜色 点击左侧的渐变工具,然后就可以在上方设置渐变颜色 设置一个 白 —— 黄 —— 红 的渐变颜色 新建一个图层(右下角位置) 选择渐变工具,在从图片左侧拖到屏幕右侧,让图片显示出渐变效果 最后,在工具栏点击:文件 ——> 导出为,然后选择好路径并导出为...
US4L8——噪声相关效果
US4L8——噪声相关效果 噪声 噪声是一种程序生成的随机或伪随机数据,在图形学中常用来创建各种自然现象和复杂纹理效果。 它的本质是一种由数学算法公式生成的有规则性或可控的随机数据。 通过噪声算法生成的随机数据具有以下特点: 随机性:噪声数据本质上是随机的,这意味着它具有不规则性,无法通过简单的模式预测 平滑性:数据不会突然跳跃或变化,而是呈现出逐渐过渡的效果,适合模拟自然现象 周期性:随着坐标的变化,噪声值会重复出现,形成一个封闭的循环。也可以通过调整噪声的范围或修改算法来避免 可调性:大多数噪声算法的输出是可以调整的,这种可调性允许你根据需求灵活地控制噪声的表现,适应不同的视觉效果或逻辑处理需求 多维性:能够处理多维数据,这意味着它们可以生成二维、三维甚至更高维度的噪声数据 就因为噪声数据具有以上这些特点,我们可以利用噪声来实现一些特殊效果,比如: 地形生成 云层效果 烟雾效果 水面模拟 消融效果 等等 常用的噪声算法 Perlin Noise(柏林噪声)...
US4L7——素描风格渲染
US4L7——素描风格渲染 素描风格渲染 素描风格渲染(Hatching Style Rendering),是一种非真实感渲染(NPR),主要目的是使3D模型看起来像手绘素描的视觉效果。 这种风格的渲染常用于游戏、动画和电影中,用来创造一种独特的艺术风格 素描风格渲染基本原理 一句话总结素描风格渲染基本原理: 用漫反射系数决定采样权重,在多张具有不同密度和方向的素描纹理中,进行采样,并将采样结果进行叠加得到最终效果 关键点: 多张具有不同密度和方向的素描纹理 美术需要提供多张素描纹理,我们之后会根据不同位置的光照强度,决定从哪种纹理中进行采样 12345678910111213Properties{ _Color("Color", Color) = (1, 1, 1, 1) // 颜色叠加 _TileFactor("TileFactor", Float) = 1 // 纹理平铺密度 ...
US4L6——卡通风格渲染
US4L6——卡通风格渲染 卡通风格渲染 卡通风格渲染(Cartoon Shading),也称为非真实感渲染(NPR)或卡通渲染(Toon Shading) 主要目的是使 3D 模型看起来更像手绘的二维卡通或漫画风格,而不是逼真写实的 3D 渲染效果。 这种风格的渲染常用于游戏、动画和电影中,用来创造一种独特的艺术风格 卡通风格渲染基本原理 一句话总结卡通风格渲染基本原理:让光的过渡效果变硬并且实现轮廓描边! 关键点: 如何让光的过渡效果变硬 影响对象光照效果的部分主要是:漫反射的计算 + 高光反射的计算 因此,想要光的过渡效果变硬,只需要从这两方面去考虑即可 这里可以从 Blinn Phong 光照模型公式下手:详见:US3S1L7——Blinn-Phong光照模型 物体表面光照颜色=环境光颜色+兰伯特光照模型所得颜色+BlinnPhong式高光反射光照模型所得颜色物体表面光照颜色 = 环境光颜色 + 兰伯特光照模型所得颜色 +...
US4L5——翻页效果
US4L5——翻页效果 书本翻页效果 在游戏开发中,书本翻页效果就是,字面意思,用 Shader 模拟出书本翻页时的动态效果 这种效果常用与游戏和动画中,比如用于制作一些 3D UI,制作一些书本交互功能等等 一句话概括它的基本原理:对顶点进行平移 —> 矩阵旋转 —> 再平移,并利用三角函数相关知识制做出起伏感 关键点: 如何制作旋转 我们将利用以前学习的 旋转矩阵 相关知识,来对顶点进行旋转变换, 但是,旋转前我们需要先对顶点进行平移,否则模型将绕着模型中心点旋转。 因为旋转之前进行了平移,因此旋转结束后,我们需要再将顶点平移回来 如果不平移,旋转效果就变成了这样: 进行平移,才能让书页沿侧边一轴旋转,至于平移的距离,由书页本身宽度的一半决定: 旋转矩阵如下: 绕 x 轴旋转 β 度,旋转矩阵为: [10000cosβ−sinβ00sinβcosβ00001]\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & cos\beta & -sin\beta & 0...
US4L4——物体切割效果
US4L4——物体切割效果 本章代码关键字 123VFACE // 片元位于模型正面还是反面的语义,一般在片元着色器的浮点数参数中使用,Unity Shader会自动传入,1表示为正面,-1表示为背面#pragma target 3.0 // 设置着色器模型版本,可以让VFACE语义使用上的兼容性和稳定性更好step() // 传入两个参数,若第二个参数大于等于第一个参数,则返回1,否则返回0 物体切割效果 在游戏开发中,物体切割效果就是,物体看似被切割、分割或隐藏一部分的视觉效果。 这种效果常用与游戏和动画中,比如角色攻击时的切割效果,场景中的墙壁切割效果等等。 物体切割效果的基本原理 一句话描述它的基本原理:在片元着色器中判断片元的世界坐标是否满足切割条件, 如果满足则直接抛弃片元不渲染,判断片元在模型中的正反面,决定使用哪种纹理进行渲染 关键点: 如何判断世界坐标 在 Shader 中声明一个 Vector 坐标变量,通过 C# 代码把控制切割位置的物体世界空间位置传递给 Shader 在...
US4L3——遮挡半透明效果
US4L3——遮挡半透明效果 遮挡半透明效果 在游戏开发中,遮挡半透明效果就是物体被挡住的部分,也能呈现出一种半透明效果而被看到(具体效果可以自定义) 比如当角色在建筑物之间穿行时,被遮挡部分能够呈现出半透明效果而被我们看到。 遮挡半透明效果包含了两种显示效果,即挡住和没被挡住的部分,没被遮挡的部分正常显示,被遮挡的部分自定义显示(半透明、X光等等) 遮挡半透明效果的基本原理 一句话描述它的基本原理: 两个 Pass 渲染对象,一个 Pass 用于渲染被遮挡部分,一个 Pass 用于渲染未遮挡模型。 被遮挡部分通过修改深度测试规则和关闭深度写入达到目的。 关键点: 如何渲染遮挡部分 如何渲染未遮挡部分 首先进行一个关于 深度测试 和 深度写入 的知识回顾, 我们可以设置 Pass 的深度测试规则,只有通过了深度测试,该 Pass 才会执行进行渲染 1234567ZTest Less //小于当前深度缓冲中的值,就通过测试,写入到深度缓冲中ZTest Greater //大于当前深度缓冲中的值,就通过测试,写入到深度缓冲中ZTest...