自由学习记录(48)

发布于:2025-03-25 ⋅ 阅读:(56) ⋅ 点赞:(0)

When the material of an object disappears, the light and shadow also disappear (synchronized)

Tiling And Offset

显示的是四分之一前面的,不是中间的四分之一块,

准确的还是跟着视频学, ,AI一些回答会散发一种“奇怪的错味”,随便看看就行,也不能问深

Tiling And Offset 是一个用于修改 UV 坐标的节点。它会在 GPU 采样纹理之前,对 UV 进行缩放和平移,从而控制贴图的显示位置和重复频率。

可以把它理解为 GPU 在对纹理进行采样之前,对 UV 坐标做的一个数学操作:

UV_out = UV_in * Tiling + Offset;

参数说明:

输入 类型 含义
UV(2) float2 原始 UV 坐标(比如模型顶点传入的 UV0)
Tiling(2) float2 每个方向的缩放比例(放大 > 1,缩小 < 1)
Offset(2) float2 平移距离(决定贴图偏移的位置)
Out(2) float2 输出处理过的新 UV,供 Sample Texture 用

为什么贴图采样前要做这步?

因为 UV 是决定 模型表面如何映射纹理 的二维坐标系:

  • 默认 UV 是 [0, 1] 范围 → 刚好采样一整张贴图

  • 但你可能想让贴图重复(砖块纹理)、偏移(滑动 UV 动画)

举个例子:

设置 效果
Tiling = (2, 2) 贴图重复两次(缩小采样区域)
Offset = (0.5, 0) 水平偏移半个贴图单位(“滚动贴图”)

发生在片元着色器执行前,也就是:

  1. 顶点着色器阶段传入模型的原始 UV

  2. 片元着色器准备采样贴图前,把 UV 做了变换(乘缩放 + 加偏移)

  3. Sample Texture 2D 根据新 UV 去纹理图中“找颜色”

  4. 得到的颜色继续参与材质计算(比如和颜色混合,控制透明等)

最终纹理采样节点 Sample Texture 2D 只需要一个 UV(float2)输入,它不关心你 Tiling 和 Offset 怎么组合来的,只要你给它一个位置,它就能“从贴图上采颜色”。

所以 Tiling And Offset 节点内部就是:

UV_out.xy = UV.xy * Tiling.xy + Offset.xy;

Tiling(x, y) 控制贴图在 U、V方向 上的重复次数:

  • x = 横向(U)

  • y = 纵向(V)

🔸 举例效果
Tiling 值 效果说明
(1, 1) 正常贴图,原样显示一整张
(2, 2) 横向和纵向都重复两次(每块变成原图一半大)
(3, 1) 横向重复三次,纵向正常
(-1, 1) 横向翻转贴图(因为坐标是负的)

数值越大,图案越小;越小(0~1),图案越大。负数会翻转贴图。

Offset(x, y) 表示在 U、V方向 上的偏移量:

  • 通常以 0~1 为一整张贴图宽度/高度

🔸 举例效果
Offset 值 效果说明
(0, 0) 不偏移
(0.5, 0) 向右偏移半张贴图宽度
(0, 1) 向上偏移一整张贴图高度(循环)
(-0.25, -0.25) 向左下偏移四分之一

Offset 不会改变贴图大小,只控制贴图在模型上的起始位置。贴图是循环的,所以偏移不会导致“空白”。

正确解释:这并不是 Shader 或 Tiling 的重复,而是模型 UV 的设定

在 Unity 中,默认的 3D Cube(正方体)模型

  • 每一个面都有自己独立的 UV 区域

  • 每个面都将 UV 映射到 (0,0) ~ (1,1) 的标准范围

  • 所以就算贴图只重复一次(Tiling=1),每个面都会显示完整的一次贴图

也就是说:

🎲 默认 Cube 的六个面,其实等价于贴了六次贴图,因为 UV 是六份独立的标准矩形!

一般情况下,一个 Mesh 最常见包含:

UV 通道 用途
UV0(主 UV) 用于贴图显示(BaseMap、Normal、Emission 等)✅
UV1 常用于光照贴图(Lightmap UV)🟠
UV2, UV3, UV4 额外用途,如遮罩、粒子、混合动画、高级 Shader 等 🧪

📌 默认你用 Shader Graph 时,使用的是 UV0,也就是最标准的主贴图坐标。

UV 数据来自哪里?由什么决定?

✅ 核心答案:来自 Mesh 本身,也就是模型的顶点数据中。

Unity 中的 UV 是存储在 Mesh 中的一个或多个通道里,而 并不是 Mesh Renderer 决定的

来源 是否定义 UV
Unity 默认模型(Cube / Sphere) ✅ Unity 内建定义好的 UV
你从 3D 软件导入的 FBX / OBJ ✅ 由你在建模软件中展开的 UV 决定
Procedural Mesh / 代码生成 Mesh ❌ 如果不赋值 UV,则贴图无法正确映射

查看 / 修改 UV 的位置

✅ 方法一:通过模型预览

  • 选中某个模型资源(.fbx.obj

  • Inspector 面板 → Preview → UV Layout,可以查看 UV 展开图

✅ 方法二:通过脚本访问 UV

Mesh mesh = GetComponent<MeshFilter>().sharedMesh;

Vector2[] uv0 = mesh.uv; // 主 UV 通道

Vector2[] uv1 = mesh.uv2; // 第二通道

✅ 方法三:在 Shader Graph 中使用 UV

  • 使用 UV 节点 → 选择 UV0, UV1, … UV4

Mesh Renderer

  • 负责把你传入的 Mesh、材质、Shader 渲染到屏幕上

  • 它本身不决定 UV 内容,但使用 Mesh 中的 UV 来做贴图

✅ 也就是说: Mesh Renderer 是“使用 UV”的那一层,Mesh 是“定义 UV”的那一层

glowing edge

Fresnel 是基于 1 - dot(Normal, ViewDir) 的计算,即视线和法线越垂直,越亮!

Fresnel 遮罩值Rim Color(边缘颜色) 相乘,生成带颜色的边缘光

Multiply 在这里的作用是:让 Fresnel 的黑白遮罩乘上你想要的“发光颜色”

这个值表示“每个点上边缘效果的强度”,通常用于控制透明度或作为发光遮罩使用。

Fresnel Effect 的计算发生在哪个阶段?

👉 在 Fragment Shader(片元着色器)阶段

因为:

  • Fresnel 效果依赖于视角方向(View Direction)

  • View Direction 是 相机 → 当前像素点方向

  • 这个方向每个像素都不同,所以必须在片元阶段计算

如果你在 Vertex 阶段计算视角方向,只能得出“顶点到相机”的方向,传到片元时会被插值,会出问题(尤其在光滑表面)

模型法线(Normal)确实是在顶点阶段就定义好的,但是注意:

  • 顶点法线 → 插值 → 得到片元法线(像素级法线)

  • 如果有法线贴图,还会进一步扰动法线方向

  • Shader Graph 传入的是 World Space 法线向量,最终 Fresnel 用它与 ViewDir 做角度计算

float fresnel = pow(1.0 - saturate(dot(normalize(N), normalize(V))), power);

变量 含义
N 世界空间下的法线方向
V 世界空间下的视线方向(像素到相机)
power 控制边缘亮度的衰减程度(越大越细)

为什么这段逻辑不能放在顶点阶段?

因为:

  • 顶点数远少于像素数(一个三角形可能包含数百个像素)

  • 把 Fresnel 放在顶点阶段只会得出“角落粗略数据”,在边缘动画、高光渐变等场景中会破坏精度

  • 边缘高光必须精准计算每一个像素的视角差异,这就需要片元阶段完成

用一个灰度控制整个颜色值的强度(比如发光、边缘、透明等)

步骤 描述
Fresnel Effect 输出一个灰度值 表示边缘强度
② 与 Rim Color(float4) 相乘 每个通道都乘这个强度值
③ 输出带颜色的透明边缘发光(float4) 作为最终边缘高光

float3 × float2 是不合法的,不能广播

Multiply(逐通道乘法)result = A * B;

float fresnel = 0.7;
float3 rimColor = float3(0, 1, 1); // 青色边缘
float3 final = fresnel * rimColor; // 最终发光值

Dot(点乘,求相似度)

点乘是向量间的余弦相似度 × 长度乘积,常用于方向性判断:

dot(A, B) = |A| * |B| * cos(θ)
A 和 B 都是归一化的单位向量(如法线和视线),则 dot = cos(角度)

用途(颜色控制):

  • 控制方向性高光、模拟 光照角度

  • 制作渐变遮罩(例如从某个方向来的光线才有颜色)

  • 边缘光粗略控制(比 Fresnel 更便宜)

Lerp(线性插值)

根据插值因子 t 在两个值之间做线性混合:

result = A * (1 - t) + B * t
// 等价于:lerp(A, B, t)

根据深度或高度插混合贴图(岩石 → 草地)

淡入淡出(从 A 淡到 B)

float mask = 0.3; // 可来自噪声、距离、边缘等
float3 base = float3(0.2, 0.2, 0.2);
float3 glow = float3(0, 1, 1);
float3 result = lerp(base, glow, mask);

Add 节点会对 输入 A(4)输入 B(4) 进行 逐通道加法

通道 计算公式 结果
R 0.2 + 0.5 0.7
G 0.8 + 0.4 1.2
B 0.9 + 0.3 1.2
A 1.0 + 1.0 2.0

加法在图像处理中,通常表示叠加亮度、或增强光效

Add → Out(4) 是 float4 类型,而 Fragment → BaseColor 要求 float3 类型。自动丢弃 Alpha 通道

和 Multiply 的区别

操作 意义 效果
Multiply 控制强度、遮罩某个区域 “有颜色 → 某部分变淡/变黑”
Add 叠加亮度、合成发光 “让颜色变亮 / 增加发光感”

粒子系统的模块就是“效果拼装件”

模块名称 用途说明 是否常用
Main 基础属性(生命周期、初始颜色、速度等) ✅ 必选
Emission 控制发射速率、爆发生成 ✅ 常用
Shape 控制从什么形状发射(球/锥体/面) ✅ 常用
Size over Lifetime 控制粒子大小随时间变化 ✅ 常用(缩放/消散)
Color over Lifetime 控制颜色渐变(从红变透明) ✅ 常用(火焰、魔法)
Velocity over Lifetime 控制粒子运动轨迹 🟡 用于曲线轨迹/飘散
Rotation over Lifetime 旋转特效 🟡 魔法/能量球飞旋
Force over Lifetime 模拟风/重力场 🟡 辅助表现
Texture Sheet Animation 播放帧动画贴图 🟡 烟雾火花序列帧
Sub Emitters 子粒子系统(粒子再生成粒子) 🔥 高阶特效核心!
Trails 尾迹(比如子弹拖尾、剑气) 🔥 非常视觉抓眼
Renderer 材质、渲染排序、面朝相机等控制 ✅ 必调
Collision / Triggers 粒子与环境交互 🔧 特效 + Gameplay 联动
Lights 每个粒子发光 🔧 成本高但逼真

Ports(端口翻译)

名称(Name) 方向(Direction) 类型(Type) 绑定(Binding) 描述(Description)
Texture 输入 Texture 输入的纹理贴图
Sampler 输入 Sampler State 纹理采样器(与 Texture 搭配使用)
Position 输入 Vector 3 世界空间坐标 当前片元在世界空间的位置
Normal 输入 Vector 3 世界空间法线 当前片元在世界空间的法线
Tile 输入 Vector 1 控制生成的 UV 的平铺倍率
Blend 输入 Vector 1 控制三个方向贴图之间的混合平滑度
Out 输出 Vector 4 最终输出的颜色或法线值(float4)

 Shader Graph 中 Vertex Block(顶点上下文)

Position(3):顶点位置(Object Space)

  • 表示当前顶点在**物体本地空间(Object Space)**中的位置。

  • 这是顶点着色器阶段最基础的输入。

Normal(3):顶点法线(Object Space)

  • 表示模型顶点的法线方向。

  • 默认是物体空间的法线,你可以选择转换为 World Space 等。

  • 常用于计算方向性效果、发光遮罩、动态风动等。

Tangent(3):顶点切线(Object Space)

  • 用于构建 切线空间(Tangent Space),主要用于法线贴图。

  • 与 Normal 一起组成 TBN 矩阵(Tangent, Bitangent, Normal),支持表面细节贴图的光照计算。

  • 没有这个,无法正确解析法线贴图。

默认这些数据都是来自模型导入的本地坐标空间(Object Space),因为:

  • 顶点原始数据就存储在物体空间中

  • 对 GPU 而言,所有变换(模型→世界→视图)都在渲染管线后续完成

tangent变化不明显,(顶点着色器单独连接后,offset)

是与其他物体之间的反射渲染问题

想自己先捏一个夜神月,,用模型可以捏个大致的样子的,

Position (World) 的输出连接到了 Tiling And Offset 节点

使用世界空间的位置坐标(World Position)来代替传统的 UV 坐标

“世界坐标和 UV 完全不沾边,为什么可以用它来贴图?”

“UV 应该是为 texture2D 定义采样位置的啊?”

这个问题本质上触及到了图形编程里非常关键的一个概念:
🌍 纹理坐标只是一个取值参考系,本质是一个二维采样参数,而不一定要来源于 UV 展开。

先来还原我们对“UV”的传统认知:

传统意义上的 UV 特点
模型作者在 3D 软件中手动展开 UV0、UV1... 是模型自带的顶点属性
每个顶点都有一个 UV 值(float2) 指定纹理如何映射到模型表面
采样贴图时,传入 Sample Texture 的 UV 是模型局部面上的 2D 坐标

Shader 的世界里,任何你传入 Sample Texturefloat2,都可以作为纹理的“采样坐标”。

float2 uv = worldPos.xy;
float4 col = tex2D(_MainTex, uv);

这也能采样贴图,只不过这个贴图不再“跟着模型表面”,而是“贴在世界空间里”!

传统贴图是贴在“模型表面”,也就是 跟着 UV 坐标跑
而“贴在世界空间”指的是:

贴图的显示不再跟着模型动,而是跟世界坐标静止对齐,像投影、壁纸、地毯一样。

你可以把它想成:
🗺️“这个贴图是固定在世界这个‘房间’里的,而不是缝在模型上。”

在 Shader Graph 中,你只需要这样连:

Position (World) → Split (XY) → Sample Texture 2D

就等于告诉 Shader:

“我每个像素的贴图坐标 = 世界坐标的 XY 值”

当前片元在世界坐标下的位置 worldPos.xy 决定了它所采样的纹理区域。

就是所谓的 world-aligned texturing,或称 triplanar / world projection mapping 等技术的基础。

当你将 worldPos.xy 作为贴图采样坐标时:

  • 贴图位置是 世界空间一致的,即纹理的空间分布不随模型的变换(如位置移动)而变化;

  • 任何模型穿过同一世界坐标位置时,都会采样到相同的纹理颜色

  • 贴图视觉上表现为“固定在世界中”,如同地面纹理、投影光照、风场扰动、环境扫描等。

---

这些可以直接使用的node,是哪里来的信息,是每个像素都有的是吧,为什么可以直接用,是谁提供的

screen Position是干什么的这个node

scene depth又是什么时候得到的数据

可以做到的 吗,在一个材质上写,但另一个材质因此受到渲染变化

每个材质的渲染是 GPU 独立执行的。

可以间接“观察另一个材质的存在”,当前材质通过“读取深度缓冲区”,判断前方是否有其他物体 → 决定自己的表现

读取缓冲区的?缓冲区是上一帧的还是当前这一帧

Scene Depth / Scene Color / Screen Position 等 Shader 节点读取的不是“上一帧的数据”

当前帧、当前相机渲染过程中,在这个像素位置 的实时结果(实时的渲染缓冲区)。

Unity 渲染流程中,有多个 帧内的缓冲区(Buffer)

缓冲区 说明 Shader 中访问方式
Color Buffer 当前场景颜色 Scene Color 节点(或 GrabPass)
Depth Buffer 每个像素的深度值(距离摄像机多远) Scene Depth 节点
Normals Buffer(有时) 法线信息(G-buffer 阶段) HDRP 中可用
Shadow Map、Light Buffer 光照/阴影信息 Unity 内部管理

这些缓冲区是 当前帧的实时中间结果,在相机渲染主通道中动态构建的。

为什么它可以“感知别的材质”?

因为场景中有多个物体时,Unity 会先渲染靠前的对象(深度排序),它们的颜色和深度就会被写入缓冲区。

当水面等效果材质渲染时:

  • 它正好“晚于”其他物体

  • 所以可以读取这些已经被写入的深度 / 颜色数据

  • 实现“对前方物体做出反应”的效果

Unity 渲染路径:Forward

Deferred

Legacy Vertex Lit
Legacy Deferred

渲染路径(Render Path)是渲染管线中的“光照计算阶段”是如何进行的方式

具体某个物体如何进行光照计算”的策略。比如:逐像素光照 vs 逐顶点光照。

ShaderLab/Pass 是渲染路径选择后,会调用的“底层 shader 代码”部分,负责真正执行每一像素或每一顶点的绘制。

Unity 有哪些渲染管线?

渲染管线 简介 特点 适合场景
内置管线(Built-in RP) Unity 最早的默认管线 通过设置 RenderPath 控制 Forward / Deferred / VertexLit 老项目、简单快速
URP(Universal Render Pipeline) 面向通用设备的现代化管线 性能优秀、可自定义、跨平台支持好 手机、独立游戏、VR、性能敏感项目
HDRP(High Definition Render Pipeline) 面向高端平台的管线 高质量光照(PBR、体积雾、屏幕反射)、基于物理的渲染准确度极高 高端 PC、主机、写实 AAA 游戏
自定义 SRP 你可以完全自定义一套渲染管线 极度灵活 专业团队、特殊渲染技术、研究型项目

每一个 Pass 都是 Unity 在渲染特定阶段时调用你 Shader 的入口

不同的 Pass(每个都有一个 Tags { "LightMode" = "xxx" }

重点记住前五个标签名

标签:"LightMode" = "ForwardBase"

主要计算内容:

  • 一个最主要的逐像素方向光(通常是 Directional Light)

  • 所有的逐顶点光源(点光/聚光灯也可以设置为逐顶点)

  • 球谐光照(SH,环境光)

  • 光照贴图(Lightmap)

  • 自发光(Emission)

  • 环境光遮蔽(AO)

每个物体只会调用一次 Base Pass。

“每个光源执行一次 Pass”——是指 ForwardAdd 会为每个光源单独 Draw 一次

对比点 逐顶点光照(per-vertex) 逐像素光照(per-pixel)
光照计算位置 顶点着色器 中计算光照 片元着色器 中计算光照
计算频率 每个顶点一次,然后插值到像素 每个像素都独立计算

Forward 渲染路径 中:

  • 最多一个逐像素光源(主光源,一般是 Directional Light)

  • 其他光源默认为逐顶点,除非你使用 ForwardAdd 添加

  • 你要写在 ForwardAdd 的 Pass 中才能逐像素处理这些额外光源

LightMode = "ForwardAdd" → 就是逐像素光源的计算区域

Unity 自带的 Standard Shader,它默认主光源就是逐像素光源

// 逐像素光照:每个像素都计算光线方向、法线角度
fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
fixed NdotL = max(0, dot(normal, lightDir));
这个是写在 fragment shader(片元着色器)里,所以每个像素都这样算一次。

_WorldSpaceLightPos0.xyz,Unity 内置的光照变量,代表主光源的方向或位置(取决于光源类型),坐标是世界空间下的坐标(world space),完整类型是:float4 _WorldSpaceLightPos0

它的 前 3 个分量 .xyz 是你要用来计算光照方向的内容

第 4 个分量 .w 代表光源类型:

_WorldSpaceLightPos0.w 表示光源类型 .xyz 含义
0 方向光(Directional Light) .xyz 是一个方向向量(从光源指向物体的方向)
1 点光源 / 聚光灯(Point / Spot) .xyz光源的位置

Unity 在渲染时,会自动把当前场景的“主光源”信息填进去。

只要你在场景里有一个激活的 Light(一般是 Directional Light),它会:

  1. 把光源方向或位置转换到世界空间

  2. 赋值到这个变量 _WorldSpaceLightPos0

你在 Shader 里就可以直接用,不需要自己传。

_WorldSpaceLightPos0 为什么能在 Shader 里直接用?

不是“另一个 Shader 文件里写了它”,而是 Unity 在每次渲染物体时自动传给 GPU 的内置变量,属于 全局 uniform(uniform buffer)的一部分

所以它“不是你写在哪个 Shader 文件里就能用的变量”,而是:

  • Unity 的内置渲染系统(在 C++ 层)定义了这个名字,并负责 在渲染每个物体前自动设置这个值

  • 所以你在任意 Shader 中写:

uniform float4 _WorldSpaceLightPos0;

就可以使用它(就像你可以写 gl_PositionUNITY_MATRIX_MVP 一样)

  • Shader 文件之间没有链接、没有导入导出(不像模块化编程)

  • 每个 Shader 都是独立编译的 GPU 程序

在 SRP(URP/HDRP)中,这种机制还在吗?

是的,但发生了改变:

  • Unity 不再使用 ShaderLab 自带的“全自动变量”,而是:

    • 使用 CBUFFER 显式声明变量块

    • 通过 RenderFeatureHLSL include 文件手动传值

  • 默认变量名很多被隐藏在 include 文件或 C# 的 render context 设置中

Forward 渲染路径 下,Unity 为了节省性能,只允许一个光源以“逐像素精度”参与主要光照计算,这个光源就叫 主光源(Main Light)

其他光源,要么:

  • 降为 逐顶点光照(便宜但粗糙)

  • 要么 额外加一个 Pass 来单独处理(性能消耗大)

nity 如何判断哪个是“主光源”?类型必须是 Directional Light(方向光),必须勾选 Scene 中的“Sun Source”(默认只取第一个激活的方向光)

Window > Rendering > Lighting > Environment

Deferred 渲染路径 下:

  • 没有“主光源”概念,所有光源都等价(统一处理)

Forward 渲染路径 下:

  • 其他光源被转成 逐顶点光照

  • 或用 ForwardAdd 单独计算

如何查看当前的渲染管线是什么类型

UniversalRenderPipeline

  • Unity 为这个管线起名为 “Universal” —— 表示它是通用型渲染管线。

  • 目标是:能跑在移动端、PC、VR、主机上,性能与画质之间取得平衡

和 HDRP 对比:

管线名称 含义 目标平台
URP (Universal) 通用的、跨平台的 从手机到主机都适用
HDRP (High Definition) 高画质,重写实 主要用于高端 PC / 主机游戏

PipelineAsset

这是 Unity SRP 架构里的标准命名,它是一种:

ScriptableRenderPipelineAsset 的派生类,用来作为你项目的“渲染管线入口配置”。

它:

  • 决定你用的是什么样的 SRP

  • 包含了渲染参数(比如抗锯齿、阴影距离、贴图限制、Render Feature 等)

  • 被设置在 GraphicsSettings.currentRenderPipeline

为什么不叫 UniversalRenderPipelineSetting 或 Manager?

因为:

  • 它本质是一个 Unity 的资源文件(Asset),所以命名上遵循 xxxAsset 习惯

  • Unity 的很多系统都通过 Asset 来驱动(例如:AudioMixerAsset、InputActionAsset、TimelineAsset)

  • 你可以创建多个 URP Asset,针对不同平台设置不同配置(比如高配 vs 低配),就像多个材质那样切换

一旦在 Graphics Settings 里启用了 URP 的 Asset,整个项目就切换到了 URP 渲染管线,Unity 内部的渲染路径、材质、相机、光照、后处理等逻辑都会发生变化,不再走内置管线的老逻辑

影响范围一览(非常实际):

系统模块 切换到 URP 后的变化
相机 Camera Inspector 面板不同,启用了 URP 相机渲染结构(Renderer Feature 等),默认使用 Forward+ 渲染。
Light 光源 面板结构变化,很多选项(比如 Cookie、阴影模式)表现方式不同。
材质 Shader 原来的 Standard Shader 会失效或变粉,需要使用 URP/LitShader Graph 或自己适配的 Shader。
后处理 PostProcessing 不再使用旧版 PostProcessing Stack v2,而是内建在 URP 的 Volume System(比如 Bloom、Depth of Field)。
RenderSettings(如 Fog、Skybox) 许多效果改为通过 Volume Override 控制,不再受旧系统控制。
Scriptable 渲染行为 可以插入 Render Feature 实现自定义渲染通道(后处理、自定义 Pass、全屏效果)。

❗ 注意:不是兼容 + 增加功能,而是“完全切换”

所以你会发现:

  • 原来的 Standard Shader 全变粉(Shader 不兼容)

  • 原来的后处理无效

  • 原来的 Camera 设置缺了 / 多了很多选项

  • 原来的脚本调用一些内置 Pass 会失效(比如命令缓冲调用)

配置 URP Asset 意味着切换渲染管线,引擎内部的渲染逻辑、资源加载方式、组件属性都将根据 URP 接管和重构,不是“附加功能”,而是“全面替代”。所以你看到相机、光照、材质等行为都发生变化,是完全合理的。

浅入深出,带你了解光照渲染_哔哩哔哩_bilibili

由此可见phong的模型消耗较高

这up讲的好,浅入深出

浅入深出,带你了解抗锯齿_哔哩哔哩_bilibili

浅入深出,带你了解纹理过滤_哔哩哔哩_bilibili