URP——着色器和材质——阴影模型Shading models

Shading models in Universal Render Pipeline

阴影模型定义了材料的颜色如何根据诸如表面方向、观察者方向和光照等因素而变化。您对阴影模型的选择取决于应用程序的艺术方向和性能预算。通用渲染管道(URP)提供了以下材质模型:

Physically Based Shading

物理基础着色(PBS)通过基于物理原理计算从表面反射的光,来模拟物体在现实生活中的样子。这可以让你创建逼真的物体和表面。

PBS模型遵循两个原则:

  • 能量守恒-表面反射的光不会超过入射光的总数。唯一的例外是当一个物体发出光。例如,霓虹灯。
  • 微观几何——表面在微观层面上具有几何形状。有些物体具有光滑的微观几何形状,这使它们具有类似镜面的外观。其他物体有粗糙的微观几何形状,这使得它们看起来更无趣。在URP中,您可以模拟被渲染对象表面的平滑程度。

当光线照射到被渲染物体的表面时,部分光线被反射,部分光线被折射。反射光称为镜面反射。这取决于相机的方向和光线照射到表面的点,也称为入射角。在这个着色模型中,高光的形状用GGX函数近似。

对于金属物体,表面吸收并改变光线。对于非金属物体,也称为介电物体,表面反射部分光。

光的衰减只受光强的影响。这意味着你不必增加光的范围来控制衰减。

以下URP着色器使用基于物理的阴影:

注意:这种材质不适合低端的移动硬件。如果你的目标是这个硬件,使用一个Simple Shading简单阴影模型着色器。

要阅读更多关于基于物理的渲染,请参阅this walkthrough by Joe Wilson on Marmoset

Simple shading

这种阴影模型适合于程式化的视觉效果或在功能较弱的平台上运行的游戏。有了这个阴影模型,材质就不再逼真了。着色器不保存能量。这个阴影模型是基于Blinn-Phong模型。

在这个简单的阴影模型中,材质反射漫射光和高光,两者之间没有相关性。漫射光和镜面光从材质反射的数量取决于你为材质选择的属性,因此总反射光会超过总入射光。镜面反射只随相机方向而变化。

光的衰减只受光强的影响。

下面的URP着色器使用简单的阴影:

Baked Lit shading

烘焙照明阴影模型没有实时照明。材料可以接收来自光图光探测器烘焙光。这以很小的性能代价为场景增加了一些深度。使用这种阴影模型的游戏可以在功能较弱的平台上运行。

URP烘焙光照着色器是唯一使用烘焙光照着色模型的着色器。

Shaders with no lighting

URP带有一些无光的着色器。这意味着它们没有方向光和烘烤光。因为没有光的计算,这些着色器编译比有光的着色器更快。如果你预先知道你的游戏对象或视觉不需要照明,在你的最终产品选择一个无照明的着色器来节省计算和构建时间。

以下URP着色器没有照明:

### Unity URP 基础着色器使用指南 #### 什么是URP基础着色器Unity的通用渲染管线(URP)中,基础着色器提供了创建高效且视觉上令人满意的材质所需的核心功能[^1]。这类着色器通常被优化以支持多种光照模式,并能很好地适应不同类型的场景需求。 #### 如何获取并配置URP基础着色器 为了开始使用URP的基础着色器,在项目中启用URP之后,可以通过Asset Store下载官方提供的URP包或者利用像`UnityURP-SurfaceShaderSolution`这样的第三方解决方案来获得预构建好的表面着色器模板。此外,也可以参考`SimpleURPToonLitOutlineExample`学习如何制作简单的卡通风格着色器实例[^2]。 #### 编写自定义URP基础着色器 当需要更复杂的材料属性时,则可以考虑编写自己的着色器。这可能涉及到修改现有的HLSL代码或是通过Shader Graph工具来进行可视化编程。例如,在`cc_unity_tools_URP`项目里就包含了详细的源码示例可以帮助理解如何针对特定应用定制化开发着色器逻辑[^3]。 #### 特殊效果实现案例——烟雾光照着色器 对于特殊的效果比如模拟真实的烟雾行为及其交互方式,《Unity-URP-SmokeLighting》提供了一套完整的基于VFX GraphShuriken粒子系统的解决方案,展示了如何运用高级技术创造出逼真的动态光影变化[^4]。 ```csharp // 创建一个新的Unlit Shader Shader "Custom/NewUnlitShader" { Properties { _BaseColor ("Base Color", Color) = (1,1,1,1) _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } Pass { HLSLPROGRAM #pragma vertex vert #pragma fragment frag struct Attributes { float4 positionOS : POSITION; float2 uv : TEXCOORD0; }; struct Varyings { float2 uv : TEXCOORD0; float4 positionHCS : SV_POSITION; }; sampler2D _MainTex; float4 _BaseColor; Varyings vert(Attributes IN) { Varyings OUT; OUT.positionHCS = TransformObjectToHClip(IN.positionOS); OUT.uv = IN.uv; return OUT; } half4 frag(Varyings IN) : SV_Target { half4 col = tex2D(_MainTex, IN.uv) * _BaseColor; return col; } ENDHLSL } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值