docs.unity3d.com
    显示 / 隐藏目录

    Parallax Occlusion Mapping 节点

    描述

    视差遮挡贴图 (Parallax Occlusion Mapping, POM) 节点允许创建视差效果,这种效果可以对材质的 UV 和深度进行移位以便在材质内产生深度感。

    如果在包含自定义函数节点或子图形的图形中使用此节点时遇到纹理采样错误,可以通过升级到 10.3 或更高版本来解决这些问题。

    端口

    名称 方向 类型 描述
    Heightmap 输入 Texture2D 用于指定位移深度的纹理。
    Heightmap Sampler 输入 Sampler State 用于对高度贴图进行采样的采样器。
    Amplitude 输入 Float 应用于高度贴图的高度(以厘米为单位)的乘数。
    Steps 输入 Float 算法线性搜索执行的步骤数。
    UVs 输入 Vector2 采样器用来采样纹理的 UV。
    Lod 输入 Float 用于采样高度贴图的细节级别。
    Lod Threshold 输入 Float POM 效果开始淡出的高度贴图 Mip 级别。这等效于高清渲染管线 (HDRP) 光照材质中的 Fading Mip Level Start 属性。
    Depth Offset 输出 Float 应用于深度缓冲区以产生深度感的偏移。要启用依赖深度缓冲区的效果,例如阴影和屏幕空间环境光遮挡,请将此输出连接到主节点上的深度偏移 (Depth Offset)。
    Parallax UVs 输出 Vector2 添加视差偏移后的 UV。

    生成的代码示例

    以下示例代码表示此节点的一种可能结果。

    float3 ParallaxOcclusionMapping_ViewDir = IN.TangentSpaceViewDirection * GetDisplacementObjectScale().xzy;
    float ParallaxOcclusionMapping_NdotV = ParallaxOcclusionMapping_ViewDir.z;
    float ParallaxOcclusionMapping_MaxHeight = Amplitude * 0.01;
    
    // Transform the view vector into the UV space.
    float3 ParallaxOcclusionMapping_ViewDirUV    = normalize(float3(ParallaxOcclusionMapping_ViewDir.xy * ParallaxOcclusionMapping_MaxHeight, ParallaxOcclusionMapping_ViewDir.z)); // TODO: skip normalize
    
    PerPixelHeightDisplacementParam ParallaxOcclusionMapping_POM;
    ParallaxOcclusionMapping_POM.uv = UVs.xy;
    
    float ParallaxOcclusionMapping_OutHeight;
    float2 _ParallaxOcclusionMapping_ParallaxUVs = UVs.xy + ParallaxOcclusionMapping(Lod, Lod_Threshold, Steps, ParallaxOcclusionMapping_ViewDirUV, ParallaxOcclusionMapping_POM, ParallaxOcclusionMapping_OutHeight);
    
    float _ParallaxOcclusionMapping_PixelDepthOffset = (ParallaxOcclusionMapping_MaxHeight - ParallaxOcclusionMapping_OutHeight * ParallaxOcclusionMapping_MaxHeight) / max(ParallaxOcclusionMapping_NdotV, 0.0001);
    
    返回到顶部
    Copyright © 2023 Unity Technologies — 商标和使用条款
    • 法律条款
    • 隐私政策
    • Cookie
    • 不要出售或分享我的个人信息
    • Your Privacy Choices (Cookie Settings)