本文地址:https://blog.csdn.net/t163361/article/details/124551700 公司安排用Unity的HDRP做一个相对高质量的场景。选择还原公司附近的一个小公园。由于之前没有太多经验。决定参考Unity官方的枫丹白露场景作为技术参考对象。 整个Demo是Unity巴黎工作室制作的,使用照片建模技术还原工作室附近的枫丹白露森林。 Demo地址
Demo整体分析
整个演示场景包括演示相关的场景如下: Demo.unity:基础功能场景 Demo_GR.unity:地形场景 Demo_LI_Day.unity:白天光照场景 Demo_LI_Night.unity:夜晚光照场景 Demo_LI_Sunset.unity:夕阳光照场景 Demo_SD_Day.unity:白天声音场景 Demo_SD_Night.unity:夜晚声音场景 Demo_SD_Sunset.unity:夕阳声音场景 Photogrammety_Kit.unity:资产验证场景 Demo中自带一个很方便的查看场景窗口:Discover Fontainebleau 通过这个窗口可以很方便的打开4种模式
- Open Fontainebleau:同时开启Demo,Demo_GR,Demo_LI_Day,Demo_SD_Day场景,运行后就是一个完整的演示端。
- Open Day:同时开始Demo_GR,Demo_LI_Day。
- Open Night:同时开启Demo_GR,Demo_LI_Night。
- Open Sunset:同时开启Demo_GR,Demo_LI_Sunset。
- Open Photoprammerty_Kit:开启资产验证场景
这个窗口关了后,也可以通过Help->Discover Fontainebleau再次打开
以下分析主要针对Open Day模式进行分析
渲染细节分析
烘焙光照图
Demo_LI_Day:采用的Baked Indirect,相关参数调的比较小。 Demo_GR:猜测使用的是Baked Indirect,但是这个场景的光照图数据和Demo_LI_Sunset公用一个光照文件。具体如何生成的没有深入分析。 通过Demo_GR中的LightmapData物体上有Level Lightmap Data组件,在演示模式下支持动态切光照图。
光照探针
近地光照探侦组 半空光照探针组 场景光照探针采用两级光照探针组,近地光照探针组,半空光照探针组。 Demo_LI_GR场景中的LightProbes和LightProbes_low分别对应近地光照探针组和天空光照探针组。 演示场景提供了一个自动布置光照探针的工具,包含在PackageManager中的Light Probes Volumes。 这个工具提供一个组件:LightProbesVolumeSettings。这个组件需要BoxCollider和LightProbeGroup组件,设置好后点Create Light Probes in Selected Volume,就可以自动生成光照探针。
反射探针
反射探针被包含在Demo场景中。Lighting->ReflectionProbes的子物体都是光照探针。不同的反射探针会有不同的影响范围,猜测会通过碰撞盒来动态切换反射探针。具体影响范围没有分析。
后处理
后处理被分拆到不同的场景中 Demo_GR中包含的Shadows和Fog的后效,Volume挂在PlanarRefectionRenderingSettings物体上。这个主要用来解决水洼反射效果的穿帮问题。 Demo_LI_Day中有两类后效: POSTPROCESSING->Day物体上的Volume组件,包含White Balance,Exposure,Lift-Gamma-Gain,Color Adjustments四种后效。 SkyAndFogSettings物体上的Volume组件,包含VisualEnvironment,HDRI Sky,Fog,Physically Based Sky组件
阴影
地上云的影子:在Demo_LI_Day场景的Lights->Directional light组件上添加Cookie Cloud Animation组件来形成云层飘过形成的地面阴影效果。 物体阴影:Demo_GR场景中一些高大的树和石头都会直接产生阴影,但是地面的一些灌木就不会产生阴影。地上云的影子是通过Light上添加Cookies 补充阴影:Demo_LI_Day场景中,通过使用ShadowCasters->Realtime_shadowCasters下的子物体产生了额外的阴影效果。猜测应该是只有物体阴影比较单薄,然后又添加了一些假阴影来增强整个环境的阴影氛围。可以观察到添加这些阴影片后,树冠的叶子被人为的压暗了。
场景特效
Demo_LI_Day场景中有烟尘和落叶效果,包含着VFX Root节点下。
地形
地形使用了8张纹理,没有使用SpeedTree和实例草
镜头耀斑效果
Demo_LI_Day场景中包含两个物体Lights->Directional light是真正产生光照的灯光组件,看向太阳是的光斑效果是通过Sun->LensFlare上的HDRP Lens Flare组件来实现的。Sun物体上有Same Rotation As组件,这个组件保证光斑物体和方向光的朝向能保持一致。
水洼效果
通过Decal实现了简单的水洼反射效果,具体可以看Demo_GR场景中的DECALS下的子物体。同时还利用了一个后效来改善Decal的穿帮效果。
风
通过Demo_LI_Day场景中的Wind_Default物体上的Basic Wind Data,HDRP Global Settings里面的Basic Wind以及树和灌木上的定制Shader,实现了后处理的树木被风吹动的效果。
场景中远景
Demo_GR场景中使用了三个环形模型来营造了场景中的中远景的森林效果。具体都放到Background物体下面。
环境物体设置
整个演示的环境物体都在Demo_GR中的Props物体下面。下面简单分析下不同物体在设置上的区别
- Tree_03_01
场景中的大树,物体上包含LOD Group,LOD Group Override,Light Probe Proxy Volume三个组件。实现了树的LOD效果和光照探针代理效果。 包含以下8个子物体
物体 | 作用 | 是否产生阴影 | 是否贡献GI | 光照探针 | 着色器 | 静态标记 | 额外组件 |
---|
Branches02 | 树冠枝杈 | 是 | 否 | Blend Probes | Branches_Wind,采用Pine(Diffusion Profile Settings) | 无 | 无 | Thorn02 | 松针 | 是 | 否 | 使用父物体的光照代理 | Branches_Wind,采用Pine(Diffusion Profile Settings) | 无 | 无 | Trunk02_LOD0 | 树冠的L0D0级 | 是 | 是 | 使用父物体的光照代理 | Trunk_Wind | 只开启Contribute GI | Polybrush Mesh | Trunk02_LOD1~4 | 树冠的L0D1~4级 | 是 | 否 | 使用父物体的光照代理 | Trunk_Wind | 无 | 无 | Collider | 树的碰撞器 | | | | | | |
- Rock_06_Prefab
场景中的石头,物体上包含LOD Group组件。实现了石头的LOD效果 包含6个子物体,都是LOD的子级
物体 | 作用 | 是否产生阴影 | 是否贡献GI | 光照探针 | 着色器 | 静态标记 | 额外组件 |
---|
Rock06_LOD0 | 石头的L0D0级 | 是 | 贡献,接受Lightmaps的GI | 否 | LayeredLit | 全部开启 | Polybrush Mesh | Rock06_LOD1~5 | 石头的L0D1~4级 | 是 | 否 | 否 | LayeredLit | 开启 Batching,Navigation,Occludee,Off Mesh Link Generation,Reflection Probe | Lightmapped LOD |
- Pine_01
大树旁伴生的小松树,无子物体
物体 | 作用 | 是否产生阴影 | 是否贡献GI | 光照探针 | 着色器 | 静态标记 | 额外组件 |
---|
Pine_01 | 小松树 | 是 | 贡献,接受LightProbes的GI | Blend Probes | Branches_Wind | 关闭Batching标记,其他全部开启 | |
- Pine_Cone_Prefab
松果,物体上有LOD Group,Rigibody,On Awake Event Rigibody Action4个额外的组件,提供LOD和碰撞触发事件的功能。 包含5个子物体,都是LOD的子级
物体 | 作用 | 是否产生阴影 | 是否贡献GI | 光照探针 | 着色器 | 静态标记 | 额外组件 |
---|
Pine_Cone_LOD0 | 松果的LOD0级 | 是 | 否 | Blend Probes | Lit | 只开启Occludee | Capsule Collider | Pine_Cone_LOD1 | 松果的LOD1级 | 是 | 否 | Blend Probes | Lit | 只开启Occludee | | Pine_Cone_LOD2~4 | 松果的LOD2~4级 | 否 | 否 | Blend Probes | Lit,去掉了Mask和法线贴图 | 只开启Occludee | |
- Vegetation_1
覆盖地面的草丛,包含LOD Group组件。 包含3个子物体,都是LOD的子级
物体 | 作用 | 是否产生阴影 | 是否贡献GI | 光照探针 | 着色器 | 静态标记 | 额外组件 |
---|
Vegetation_01_LOD0 | 草的LOD0级 | 是 | 否 | Blend Probes | Branches_Wind,采用Leaves(Diffusion Profile Settings) | 开启Batching,Navigation, Occludee, Off Mesh Link Generation ,Reflection Probe | | Vegetation_01_LOD1~2 | 草的LOD1~2级 | 是 | 否 | Blend Probes | Branches_Wind,采用Leaves(Diffusion Profile Settings) | 开启Batching, Occludee | |
- Bush_01_04_Prefab
地面的草丛,包含LOD Group组件。 包含2个子物体,都是LOD的子级
物体 | 作用 | 是否产生阴影 | 是否贡献GI | 光照探针 | 着色器 | 静态标记 | 额外组件 |
---|
Bush_01_04_LOD0 | 草的LOD0级 | 是 | 否 | Blend Probes | Branches_Wind,采用Leaves(Diffusion Profile Settings) | 开启Reflection Probe | | Bush_01_04_LOD1 | 草的LOD1级 | 否 | 否 | Blend Probes | Branches_Wind,采用Leaves(Diffusion Profile Settings) | 开启Reflection Probe | |
- Bush_03_Prefab
地面的草丛,包含LOD Group组件。 包含2个子物体,都是LOD的子级
物体 | 作用 | 是否产生阴影 | 是否贡献GI | 光照探针 | 着色器 | 静态标记 | 额外组件 |
---|
Bush_01_04_LOD0 | 草的LOD0级 | 是 | 否 | Blend Probes | 两个材质球,Branches_Wind,采用Pine(Diffusion Profile Settings) 另一个着色器是Trunk_Wind | 无 | | Bush_01_04_LOD1 | 草的LOD1级 | 否 | 否 | Blend Probes | 两个材质球,Branches_Wind,采用Pine(Diffusion Profile Settings) 另一个着色器是Trunk_Wind | 无 | |
|