博客
关于我
【实时渲染】Unity Shader实现视差贴图 法线贴图
阅读量:324 次
发布时间:2019-03-04

本文共 1426 字,大约阅读时间需要 4 分钟。

视差贴图与陡峭视差贴图

视差贴图(Parallax Mapping)是一种用于增强3D物体表面的立体感的图形技术。相比于传统的法线贴图,视差贴图能够更逼真地模拟光线在物体表面反射的效果。

视差贴图的原理

视差贴图的核心思想是利用观察者的视角信息,根据高度图对纹理坐标进行调整,从而模拟远近视效应。具体来说:

  • 高度图的作用:高度图记录物体表面的高度信息。观察者看向物体时,视线会与高度图相交于某一点,这一点决定了视差贴图的纹理采样位置。

  • 视图方向的计算:通过计算观察者视图方向(viewDir),可以确定视线与高度图的交点。该交点决定了纹理坐标的偏移量。

  • 纹理坐标的调整:根据偏移量调整纹理坐标,使得观察者看到的视差效果更真实。

  • 视差贴图的效果主要体现在远处物体表面看起来更具立体感,尤其在斜视或低角度观察时表现明显。

    陡峭视差贴图的实现

    陡峭视差贴图(Steep Parallax Mapping)是视差贴图的升级版,通过对深度图的处理,进一步提升了贴图的精度和效果。其核心步骤如下:

  • 深度图的使用:借助深度图(Depth Map),记录物体表面的深度信息。深度图反映了物体表面离观察者有多远。

  • 层次遍历的方法:从远到近遍历深度图中的每一层,计算该层与纹理贴图的对应点。通过对比深度值,确定最终的纹理坐标偏移量。

  • 精度提升:通过增加遍历层数和调整深度分辨率,可以显著提高贴图的精度,使得纹理坐标的偏移更加精确。

  • 相比传统视差贴图,陡峭视差贴图的效果更为逼真,尤其在光线反射和阴影模拟方面表现更佳。

    技术实现代码示例

    以下是实现视差贴图和陡峭视差贴图的核心代码片段:

    视差贴图代码片段

    float height = tex2D(_DepthMap, i.uv.zw);float2 p = viewDir.xy / viewDir.z * (height * _HeightScale);i.uv.zw = i.uv.zw - p;

    陡峭视差贴图代码片段

    float numLayers = 10;float layerDepth = 1.0 / numLayers;float currentLayerDepth = 0.0;float2 p = viewDir.xy * _HeightScale;float deltaTexCoords = p / numLayers;float2 currentTexCoords = i.uv.zw;float currentDepthMapValue = tex2D(_DepthMap, currentTexCoords).r;while (currentLayerDepth < currentDepthMapValue) {    currentTexCoords -= deltaTexCoords;    currentDepthMapValue = tex2D(_DepthMap, currentTexCoords).r;    currentLayerDepth += layerDepth;}i.uv.zw = currentTexCoords;

    实现总结

    视差贴图和陡峭视差贴图通过利用深度信息和视图方向,显著提升了3D物体表面的视觉效果。这些技术在游戏开发和VR/AR应用中具有广泛的应用前景。

    通过合理设置高度图和深度图的分辨率,以及优化视图计算算法,可以进一步提升贴图的精度和性能。

    转载地址:http://kduh.baihongyu.com/

    你可能感兴趣的文章
    paip.spring3 mvc servlet的配置以及使用最佳实践
    查看>>
    Palindrome Number leetcode java
    查看>>
    Palo Alto Networks Expedition 未授权SQL注入漏洞复现(CVE-2024-9465)
    查看>>
    Palo Alto Networks Expedition 远程命令执行漏洞(CVE-2024-9463)
    查看>>
    Palo Alto Networks PAN-OS身份认证绕过导致RCE漏洞复现(CVE-2024-0012)
    查看>>
    Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现
    查看>>
    Springboot中@SuppressWarnings注解详细解析
    查看>>
    Panalog 日志审计系统 sprog_deletevent.php SQL 注入漏洞复现
    查看>>
    Panalog 日志审计系统 sprog_upstatus.php SQL 注入漏洞复现(XVE-2024-5232)
    查看>>
    Panalog 日志审计系统 前台RCE漏洞复现
    查看>>
    PANDA VALUE_COUNTS包含GROUP BY之前的所有值
    查看>>
    Pandas - 有条件的删除重复项
    查看>>
    pandas -按连续日期时间段分组
    查看>>
    pandas -更改重新采样的时间序列的开始和结束日期
    查看>>
    SpringBoot+Vue+Redis前后端分离家具商城平台系统(源码+论文初稿直接运行《精品毕设》)15主要设计:用户登录、注册、商城分类、商品浏览、查看、购物车、订单、支付、以及后台的管理
    查看>>
    pandas :to_excel() float_format
    查看>>
    pandas :加入有条件的数据框
    查看>>
    pandas :将多列汇总为一列,没有最后一列
    查看>>
    pandas :将时间戳转换为 datetime.date
    查看>>
    pandas :将行取消堆叠到新列中
    查看>>