Unity Shader - Occlusion Map 遮挡贴图

本文详细介绍Unity中遮挡贴图(OcclusionMap)的概念及其应用。遮挡贴图能够增强模型的间接光照效果,通过定义哪些区域受环境光影响较大,哪些区域被遮挡,从而实现更加真实的光影表现。文章还解释了遮挡贴图的生成过程及如何在场景中应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录:Unity Shader - 知识点目录(先占位,后续持续更新)
原文:Occlusion Map
版本:2019.1

Occlusion Map

在这里插入图片描述

遮挡贴图用于提升模型间接光影效果。间接光源可能来自Ambient Lighting(环境光),因此模型中凹凸很明显的凹下去那部分,如裂缝或褶皱,实际上不会接收到太多的间接光。

遮挡纹理贴图通常有3D建模软件生成。

一张遮挡贴图应该就是张灰度图,白色代表应该接收到的间接光效果会多一些,黑色代表少一些(全黑说明一点间接光都不接收)。

另外,生成遮挡纹理稍微更复杂一些。例如,在场景中有个角色戴了一帽子,在帽子和角色的头之间会有些边缘是几乎接收不到间接光的。在这种情况,这种遮挡贴图通常是由美术同学使用3D软件根据模型自动生成的。
This occlusion map identifies areas on a character’s sleeve that are exposed or hidden from ambient lighting. It is used on the model pictured below.
遮挡贴图定义了角色的头戴的披肩附近的部分,哪些相对Ambient lighting(环境光)是曝光,哪些是挡光的。如下图显示。
Before and after applying an occlusion map. The areas that are partially obscured, particularly in the folds of fabric around the neck, are lit too brightly on the left. After the ambient occlusion map is assigned, these areas are no longer lit by the green ambient light from the surrounding wooded environment.
在应用遮挡贴图前后的效果图(左边没使用,右边使用了)。部分模型的区域被遮挡了,特别是在脖子周围的头戴饰品遮挡的那部分,左边的图片显示太亮了,右边的图片设置了环境光遮挡贴图后的效果,脖子那些绿色的、来自环境草木的环境光就没那么亮了。

### 关于Unity中实现眼球效果的Shader教程 在Unity中创建逼真的眼球效果可以通过自定义着色器来完成。为了达到理想的效果,通常会利用纹理映射、法线贴图以及透明度混合等技术[^1]。 对于初学者来说,可以从简单的球体模型入手,在其上应用带有虹膜图案的基础颜色纹理。接着通过编写Surface Shader或者Unlit类型的ShaderGraph节点配置,模拟角膜高光反射特性,使眼睛看起来更加有神。还可以加入视差遮挡贴图(Parallax Occlusion Mapping),进一步增强立体感[^2]。 当涉及到更高级别的交互式眼部动画时,则可能需要用到骨骼蒙皮(Skinned Mesh)配合Blend Shape变形机制控制瞳孔大小变化响应光源强度等因素影响下的自然反应[^3]。 ```csharp // 示例:基础版眼球材质脚本(未优化) Shader "Custom/EyeBall" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _BumpMap ("Normalmap", 2D) = "bump" {} _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1) _Shininess ("Shininess", Range (0.01, 1)) = 0.7 } SubShader { Tags { "RenderType"="Opaque" } CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; sampler2D _BumpMap; float4 _SpecColor; float _Shininess; struct Input { float2 uv_MainTex; float2 uv_BumpMap; }; void surf (Input IN, inout SurfaceOutput o) { fixed4 col = tex2D(_MainTex, IN.uv_MainTex); o.Albedo = col.rgb; o.Gloss = col.a; o.Alpha = col.a; o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); o.Specular = _SpecColor.rgb; o.Smoothness = _Shininess; } ENDCG } FallBack "Diffuse" } ``` 此代码片段展示了一个简化的眼球表面着色器设置方式,实际项目可根据需求调整参数以获得更好的视觉表现力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值