Unity渲染路径(Unity’s Rendering Path)详解1——前向渲染(Forward Rendering path)

「UnityShader笔记」12.Unity中的前向渲染(Forward Base) 介绍Unity中前向渲染原理 阅读详情

Unity渲染路径详解1

渲染路径概述

渲染路径可以理解为应用层信息在着色器当中接收怎样的数据输入,经过怎样的处理,最后以怎样的方式呈现在二维平面上。
不同的渲染路径要求的信息不同,计算方式不用,计算量不同,消耗便不同。针对不同的平台,不同的硬件环境,应该选择适合的渲染路径。

在Unity中不同的渲染路径对应着不同光照信息的输入,不同光照的处理方式,不同的阴影生成方式,最后不同的呈现方式等等。
在Unity当中通过为Pass定义特殊Tag和特定的编译指令来控制使用的渲染路径,获得对应的光照信息。

前向渲染、正向渲染(Forward Rendering Path)

在Unity当中使用定义LightMode为ForwardBase和ForwardAdd 两种Tag的两个Pass来实现前向渲染:

Pass{
   
   
Tags{
   
    "LightMode" = "ForwardBase" }

}
Pass{
   
   
Tags{
   
    "LightMode" = "ForwardAdd" }
}

在场景当中,一个物体可能会受到多个光源的影响,如果对这些光源都采取同一种光照计算方式(比如逐像素光照),那么对应的消耗可能会很高,而且一些光源本身对物体的影响并不大,所以应该根据光源的特质分类进行计算,达到可以令人满意的效果。

在前向渲染当中,采用的分类策略为:
最亮的光源采取逐像素光照;而后最多4个光源采用逐顶点光照;其余的光源采用SH光照(球谐函数光照,计算速度更快,这里暂时不做详解)

那么根据什么来对一个光源进行分类呢?主要有以下要求:
1. Render Mode设置为Not Important的光源总是采用逐顶点光照或者SH光照
2. 最亮的directional light总是逐像素光照
3. Render Mode设置为Important的光源总是采用逐像素光照
4. 如果以上分类之后逐像素光照的光源还是小于Quality Setting当中的Pixel Light Count ,则更多的光源按照逐像素光照进行处理,按照亮度排序。

将所有的光源分类之后,要在哪里进行处理呢?同样也有要求:
ForwardBase Pass处理一个逐像素directional light和所有的逐顶点/SH光源。
ForwardAdd Pass处理其余的逐像素光照。

其余实现细节

Bass Pass中一般还会实现光照贴图、环境光以及自发光效果。在这个Pass当中的directional light可以实现阴影。另外使用光照贴图的物体不会受到SH光源的影响。

如果使用OnlyDirectional Tag,那么Bass Pass将只会处理directional light、光照贴图、环境光以及自发光效果,不会处理SH光源和逐顶点光源。

Addtional Pass对每一个逐像素光源都处理一次,在这个Pass当中默认处理光源是没有阴影的,除非定义multi_compile_fwdadd_fullshadows指令。

Unity 具体代码实现

我找到一份比较有参考价值的Unity Forward Rendering 的代码实现(Unity Stander Shader内部实现),这里给到工程的链接
我们只截取和前向渲染相关的部分:

Pass
        {
   
   
            Name "FORWARD"
            Tags {
   
    "LightMode" = "ForwardBase" }

            Blend [_SrcBlend] [_DstBlend]
            ZWrite [_ZWrite]

            CGPROGRAM
            #pragma target 3.0

            // -------------------------------------

            #pragma shader_feature _NORMALMAP
            #pragma shader_feature_local _ _ALPHATEST_ON _ALPHABLEND_ON 
【Unity】什么是前向渲染、延迟渲染、单通道渲染、多通道渲染? 渲染路径深度解析:Unity光照计算的核心机制 本文系统剖析了前向与延迟渲染的技术原理及Unity优化实践。前向渲染采用逐物体处理方式,在片元着色器直接计算光源影响,优势在于天然支持半透明与MSAA,但受限于光源数量导致的Overdraw问题。Unity URP通过Clustered Forward技术将屏幕分块预处理光源分配,突破传统每物体4灯限制。延迟渲染则分离几何与光照阶段,通过G-Buffer存储表面数据,实现光源数量与几何复杂度的解耦,特别适合多光源场景,但存在高带宽消耗、透明渲染回退等问题。文章 阅读详情

相关推荐

Unity集成Gaussian Splatting实战:从照片到实时3D场景渲染

3D重建与实时渲染是计算机图形学领域的核心课题,旨在从2D图像高效生成高质量3D内容。其原理通常涉及从多视角图像中恢复场景几何与外观信息,并通过优化表示形式实现逼真渲染。这一技术的核心价值在于打通了真实世界数字化与实时交互应用之间的桥梁,极大地推动了数字孪生、AR/VR和沉浸式媒体等领域的发展。Gaussian Splatting作为一种新兴的显式3D场景表示技术,通过使用大量可学习的3D高斯椭球体来表征场景,实现了高质量与实时渲染性能的突破性结合。它充分利用了现代GPU的并行栅格化能力,将渲染过程转化为对

weixin_34234829的博客 443

UE5渲染技术选择指南:Lumen实时全局光照与Path Tracing路径追踪深度解析

全局光照是计算机图形学中模拟光线在场景中多次反弹、形成真实光影效果的核心技术。其原理在于通过算法计算光线从光源发出后,经物体表面反射、折射最终到达摄像机的完整路径,从而生成具有丰富间接照明和柔和阴影的图像。这项技术的价值在于能极大提升三维场景的真实感和沉浸感,是游戏开发、影视动画、建筑可视化等领域追求逼真画面的关键。在实时渲染领域,为了实现性能与质量的平衡,衍生出了不同的技术方案。其中,Lumen作为UE5引擎的实时全局光照系统,通过表面缓存、光线追踪与最终聚集等混合技术,在动态场景中实现了高性能的近似全局

congji3817的博客 399

Unity Render Streaming实战:基于WebRTC的低延迟远程渲染与交互部署指南

WebRTC(Web实时通信)是一项支持浏览器与设备间进行实时音视频和数据传输的开放标准,其核心原理是建立点对点(P2P)连接,通过信令服务器交换会话描述与网络地址,从而绕过中心服务器,实现毫秒级的低延迟通信。这项技术的核心价值在于为需要实时交互的应用场景,如远程协作、云游戏和工业仿真,提供了高响应性的网络传输基础。在实际工程中,将WebRTC与特定渲染引擎结合,例如用于构建**数字孪生**或**远程培训**系统,能够实现高质量的视觉内容流式传输与双向控制。本文聚焦于如何将Unity渲染内容通过WebRTC

weixin_34341117的博客 603

Blender到Unity模型导出:解决原点、缩放与坐标系对齐问题

在3D内容制作流程中,模型数据在不同软件间的无损传递是核心技术挑战之一,其核心在于对空间变换数据的统一处理。模型的原点(Origin)定义了物体的局部坐标锚点,变换(Transform)则记录了物体的位移、旋转与缩放信息,而坐标系(Coordinate System)决定了三维空间的轴向定义。理解这些底层原理,对于确保模型在游戏引擎中保持正确的空间关系至关重要,能有效避免动画失真、物理计算错误等问题。在游戏开发、虚拟现实等应用场景中,规范的模型导出流程是保障项目效率与视觉一致性的基础。本文聚焦于Blende

weixin_30367873的博客 320

Unity安卓VideoPlayer黑屏全解析:从编码格式到渲染管线的系统解决方案

视频播放是移动应用开发中的基础功能,其核心原理涉及多媒体解码、图形渲染与平台适配。在Unity引擎中,VideoPlayer组件通过调用系统原生解码器与图形API实现跨平台播放,其技术价值在于提供统一的视频播放接口。然而,由于安卓设备的硬件解码能力差异、图形API兼容性以及资源管理策略的不同,开发者常会遇到PC端正常但安卓端黑屏的典型问题。本文聚焦于Unity安卓端VideoPlayer黑屏的排查与解决,深入剖析视频编码格式兼容性、渲染管线适配等关键环节,并提供从资源路径验证到图形API配置的完整工程实践指

weixin_34290631的博客 474

告别Mumu!在Mac(M1/M2)上免费搭建Android Emulator的保姆级避坑指南

本文提供在Mac(M1/M2)上免费搭建高性能Android模拟器的详细指南,特别针对Apple Silicon芯片优化。通过使用Google官方的ARM原生模拟器,开发者可以获得3-5倍的性能提升,降低CPU占用,并避免x86转译的兼容性问题。文章涵盖从环境准备、工具安装到AVD创建与优化的全流程,帮助用户避开常见陷阱,实现接近原生性能的体验。

weixin_42531886的博客 601

告别卡顿!用LVGL+DMA刷新STM32F407的SPI屏幕,性能提升实战

本文详细介绍了如何通过LVGL+DMA技术优化STM32F407驱动SPI屏幕的性能,实现接近60FPS的流畅刷新。从硬件瓶颈分析到SPI与DMA的精细化配置,再到LVGL的双缓冲机制与局部刷新优化,提供了一套完整的性能提升方案。特别适合嵌入式GUI开发中面临卡顿问题的工程师参考。

weixin_42531588的博客 380

MATLAB实战:手把手教你搭建构网逆变器同步稳定性仿真模型(附避坑指南)

本文详细介绍了如何在MATLAB/Simulink平台上搭建构网逆变器同步稳定性仿真模型,涵盖从基础模块配置到虚拟同步机控制实现的完整流程。针对电力电子工程师常见的控制参数整定困难、仿真结果偏差等问题,提供了LCL滤波器谐振抑制、虚拟惯量优化等关键技术解决方案,并附有避坑指南和工程实践技巧,助力研究者高效完成仿真建模。

weixin_29051193的博客 299

2025年数学建模美赛(MCM)C题阅读与思考

2025年数学建模美赛(MCM)C题阅读与思考

carefreekid123的博客 7343

【Coze 扣子案例】第 23 期・商业篇:一键获取精准商机,自动化招标信息查询与分析

通过地区和项目类型等多维度组合查询全国招标信息网数据,实现招标公告的快速定位。自动解析招标公告内容,提取关键信息,并生成结构化摘要。帮助企业高效获取精准商机,提升市场竞争力,降低人工成本,解决 “信息过载” 与 “精准匹配难” 的双重问题。

weixin_72689845的博客 1928

SO逆向入门实战教程一:OASIS

文章目录一、前言二、准备三、Unidbg模拟执行四、ExAndroidNativeEmu 模拟执行五、算法分析六、尾声 一、前言 这是SO逆向入门实战教程的第一篇,总共会有十三篇,十三个实战。有以下几个注意点: 主打入门级的实战,适合有一定基础但缺少实战的朋友(了解JNI,也上过一些Native层逆向的课,但感觉实战匮乏,想要壮壮胆,入入门)。 侧重新工具、新思路、新方法的使用,算法分析的常见路子是Frida Hook + IDA ,在本系列中,会淡化Frida 的作用,采用Unidbg Hook + .

lilac的博客 2万+

解决用VScode写中文注释,Vivado打开之后是乱码的方法

这样就解决了中文注释乱码的问题,此外如果使用notepad++写verilog代码的话直接在notepad++上面将编码格式改为ANSI格式即可,更加方便快捷,所以此方法仅针对习惯用VScode写Verilog的同学,如果有其他好办法的话欢迎评论区补充。首先,VScode中的中文默认编码格式是UTF-8,然后Vivado的编码格式是vivado 默认的应该是ANSI编码格式,刚开始我先按照网上说明的,将VScode中的编码格式改为GBK格式(点击右下角->点击通过编码保存)。

weixin_50573305的博客 5817

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码

动作识别(三)Win10复现OpenPose1.7.0+ST-GCN代码1.Win10系统配置OpenPose1.7.0的Python API 本人最近在研究基于骨架的动作识别方法,有幸看到端到端的ST-GCN算法,于是决定自己复现一下。(具体原理这里不介绍,大家自行查阅,比如Openpose是个啥?ST-GCN又是个啥?) 1.Win10系统配置OpenPose1.7.0的Python API 安装步骤: (1) ...

QIANFANGshiwo的博客 3042

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: Unity ShaderLab 框架全解析4-1 —— Pass(结构、Tag、State Set-up)
「已注销」
博客等级 码龄8年 5粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值