Unity渲染流程(底层逻辑)

矩阵

概念

矩阵本质就是一个n*n 的数据,它可以在Unity中可以帮助GameObject进行平移、旋转和缩放。同样在渲染中它最大的作用是可以变换坐标空间。

矩阵在 Shader 中的实际应用

在Unity渲染中,不管是光线计算、顶点计算、像素计算、法线计算,所有的计算有一个公共的规则,就是需要在同一个坐标空间下计算(通常是在世界坐标或者视图空间)

渲染流程

当 GPU 处理顶点时,需要将模型坐标系下的点转换到屏幕空间,步骤是:
模型空间 -> 世界空间 -> 相机空间 -> 裁剪空间 -> 屏幕空间

每次的空间转换都是通过矩阵来计算的。

底层逻辑

接下来,我们了解下在Unity中模型空间坐标到底是如何转换到世界空间坐标的。

首先我们要弄清一些我们已知的信息

  1. 模型空间每个顶点的坐标位置
  2. Unity编辑器中模型的Transform数据,包括position , rotation , scale
  3. 相机的Transform数据,包括 position , rotation
  4. 相机信息,包括Field of View,Aspect,Near,Far等

然后我们要弄清楚我们需要什么信息

  1. 世界空间每个顶点坐标信息
  2. 相机空间每个顶点坐标信息
  3. 裁剪空间每个顶点坐标信息

最后我们就是要弄清楚我们怎么样得到需要的信息

  1. 模型的Transform数据可以得到TRS矩阵,通过矩阵跟模型空间坐标计算得到世界空间的坐标信息
  2. 相机的Transform数据可以得到Camera TR矩阵,(注意下,相机的scarl缩放数据是无用的,不参与矩阵变换计算),同理通过Camera TR矩阵计算得到相机空间坐标信息
  3. 至于得到裁剪空间坐标位置就是完全由Unity编辑器完成,它会通过Field of View,Aspect,Near,Far相机信息,从3D压缩到2D空间中,最终得到了我们裁剪空间坐标信息

裁剪空间 -> 屏幕空间

一开始,我混淆了这两个空间,以为裁剪空间就是屏幕空间,但其实裁剪空间就是Shader代码中的SV_Position 语义下数据信息。

那么从裁剪空间到屏幕空间Unity到底做了哪些操作呢

  1. NDC(标准化设备坐标)
  2. 绘制像素颜色值
  3. 深度测试,检测物体有没有被覆盖
  4. 生成片元,计算插值参数
NDC(标准化设备坐标)

概念:裁剪空间到屏幕空间中比较重要的一步,它的作用是

  1. 给裁剪空间的坐标信息进行归一化,统一成标准立方体
  2. 可以实现近大远小效果,根据距离来实现
  3. 能正确计算插值参数

总结

以上就是Unity渲染空间变换中每一步具体底层实现的逻辑步骤,希望对大家能有所帮助

内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略与效果评估体系,涵盖当前企业传播面临的预算、资源、内容与效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势与发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化与GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理与舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率与ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放与GEO优化,提升品牌在AI搜索中的权威性与可见性;④通过数据驱动评估体系量化品牌影响力与销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析与工具指南进行系统学习,重点关注媒体适配性策略与GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
### Unity 中 Render Texture 和 Mask 结合实现 3D 模型裁切 在 Unity 开发中,通过 `RenderTexture` 和 UGUI 的 `Mask` 组件可以高效地实现 3D 模型的裁切功能。以下是技术细节和方法: #### 使用 RenderTexture 进行画面捕获 为了实现裁切效果,首先需要创建一个 `RenderTexture` 来存储摄像机捕捉的画面。这一步骤的核心在于配置摄像机以仅渲染目标模型,并将其输出到指定的 `RenderTexture` 上。 ```csharp // 创建 RenderTexture 并分配给 Camera public class RenderTextureSetup : MonoBehaviour { public Camera renderCamera; public RenderTexture rt; void Start() { int width = Screen.width / 2; // 自定义分辨率宽度 int height = Screen.height / 2; // 自定义分辨率高度 if (rt == null || rt.width != width || rt.height != height) { DestroyImmediate(rt); // 销毁旧的 RenderTexture rt = new RenderTexture(width, height, 16); rt.Create(); renderCamera.targetTexture = rt; } } void OnDestroy() { if (rt != null) { DestroyImmediate(rt); // 清理资源 } } } ``` 此脚本确保每次运行时都会动态调整 `RenderTexture` 的大小,并绑定至特定摄像机[^1]。 --- #### 利用 UGUI Mask 完成裁切区域限定 一旦获得了包含所需模型图像的 `RenderTexture`,可以通过 UI 系统中的 `RawImage` 显示该纹理,并应用 `Mask` 控件来定义可见范围。例如,如果希望呈现圆形裁切,则可以在 Canvas 下放置一个带有圆形单位尺寸 Sprite 的 Image 对象作为掩码源。 ```csharp using UnityEngine.UI; public class ApplyMaskToRT : MonoBehaviour { public RawImage rawImage; public RectTransform maskRect; void Start() { rawImage.texture = GetComponent<RenderTexture>(); // 设置 Mask Target Graphic[] graphicsInChildren = GetComponentsInChildren<Graphic>(true); foreach (var graphic in graphicsInChildren) { graphic.maskable = true; } maskRect.anchorMin = Vector2.zero; maskRect.anchorMax = Vector2.one; maskRect.sizeDelta = new Vector2(100f, 100f); // 圆形直径设定为 100 单位像素 } } ``` 上述代码片段展示了如何将自定义生成的 `RenderTexture` 关联到 `RawImage`,并通过调节其父级容器(即 `maskRect`)属性控制实际显示窗口形状与位置。 --- #### Unity 渲染管线概述及其关联性分析 从更底层的角度来看,在整个渲染过程中涉及到了 CPU 和 GPU 不同阶段的操作。具体来说: - **应用程序阶段**: 此部分由开发者编写逻辑完成,主要负责筛选哪些对象应该参与当前帧绘制操作以及传递必要的参数信息给图形处理器。 - **几何处理阶段**: 当前场景内的所有有效网格会被送入硬件加速单元进行进一步变换运算,其中包括但不限于视角投影矩阵乘法、光照计算等复杂任务。 - **光栅化阶段**: 最终得到的一系列三角面片将会被打散成为独立像素点形式——也叫作 Fragment 或 Pixel 数据结构;随后经历一系列测试环节如深度比较判断遮挡关系或者透明度剔除等功能模块作用下形成最终颜色值写回屏幕缓冲区之中[^2]。 因此,利用 `RenderTexture` 实现局部截取本质上也是遵循这一通用框架下的特殊用途扩展而已。 --- ### 总结 综上所述,借助于 Unity 提供的强大工具链组合起来即可轻松达成预期目的:先单独抓拍感兴趣的部分存放到临时内存当中去,再配合标准 GUI 构建手段灵活定制外观样式从而达到理想视觉表现效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值