首页 > 其他分享 >UE5 blend normal map的四种方式

UE5 blend normal map的四种方式

时间:2023-10-05 22:33:06浏览次数:35  
标签:map normal detail shader maps UE5 UDN

前言

很多情况下玩家靠近物体想看看物体的细节纹理,如果仅仅使用base normal maps不会给予玩家好的观感,此时就需要用到detail normal maps。也就是说,当玩家靠近物体的,物体的法线将更偏向于detail normal maps,更准确地说是detail normal maps 和 normal map的blend。本篇将介绍blend normal maps的五种方法

四种方法的效果对比

Simple
image-20230905175631523

UDN
image-20230905175717195

Whiteout
image-20230905175549639

RNM
image-20230905180250448

Simple

image-20230905174109555

  • 方法

    将两个normal maps的RG通道进行add,再append值为1的z通道

  • 优缺点

    • 便宜,不会增加shader指令数(153)
    • 会损失不少normal的细节(强度)

该方法适用于水波纹

UDN

image-20230905174735663

  • 方法

    将两个normal maps的RG通道进行add,再append base normal maps的z通道

  • 优缺点

    • 相较于Simple方法,保留的normal map的强度较多
    • shader指令数159
    • 舍弃了detail normal maps的细节

Whiteout

image-20230905175328646

  • 方法

    将两个normal maps的RG通道进行add,随后将两个normal maps的z值相乘,最后将所得的值append

  • 优缺点

    • 细节法线相较于UDN更强
    • shader指令数(164)

RNM

image-20230905180336203

  • 优缺点
    • 相较于 UDN 和 Whiteout,detail 的normal效果更好
    • shader指令数为164

UE的BlendAngleCorrectedNormals节点用的是RNM

标签:map,normal,detail,shader,maps,UE5,UDN
From: https://www.cnblogs.com/chenglixue/p/17742947.html

相关文章

  • HashMap 的实现原理
    (1)简介HashMap基于map接口,元素以键值对方式存储,允许有null值,HashMap是线程不安全的。(2)基本属性初始化大小,默认16,2倍扩容;负载因子0.75;初始化的默认数组;sizethreshold。判断是否需要调整hashmap容量(3)HashMap的存储结构JDK1.7中采用数组+链表的存储形式。HashMap采取Entry数组来......
  • JUC工具类CountDownLatch、CyclicBarrier、Semaphore介绍
    CountDownLatch:它是一种同步工具,用于控制一个或多个线程等待其他线程完成操作后再继续执行。它的作用是让某个线程等待一组操作执行完成,再继续执行自己的任务。CountDownLatch内部有一个计数器,当计数器的值为0时,等待的线程将会被唤醒。通过CountDownLatch的构造函数可以指定计......
  • MapReduce之学习规约
    1、概念2、代码实现自定义一个类:在JobMain(与之前的基本一样)里面:......
  • MapReduce的排列和序列化的学习
    1、概念和原理--结构化对象转换为字节流2、编程流程(举例说明)1、读取文件为键值对<偏移量,文件内容>2、Map阶段3、排序4、Reduce阶段5、保存结果--使用TextOutputFormat类3、代码编写1、自定义类型和比较器--自定义命名为SortBean并实现接口WritableComparable,还需......
  • MapReduce分区的学习
    1、概念和原理同一个分区的数据会发送给同一个reduce;可以简单解释为————标记一样,放到一个reduce里面:2、代码编写步骤(以中奖编号是否>15进行分区)1、定义Mapper可以自定义名称为PartitionMapper,并继承Mapper类:并重写map方法:2、自定义partitioner可以自定义名称为MyPa......
  • MapReduce运行模式
    1、yarn集群运行先将之前写好的MapReduce程序进行打包--Maven-->package;打包完成之后的jar包在target目录下可以找到!!!之后将jar包上传到我们的虚拟机文件夹里面去;之后输入命令:hadoopjarjar包名称jar包主类的全路径名称回车之后开始运行;在hdfs的浏览器界面(9870)能够找到......
  • HashMap
    ......
  • MapReduce学习二之WordCount案例
    一、案例概述1、第一步--变成偏移量的K1,V1(这一步不需要我们自己写)2、进入Map阶段输出新的<K2,V2>的键值对;3、Shuffle阶段分区、排序、规约、分组输出新的键值对:4、Reduce阶段转换为<K3,V3>的新的形式的键值对;利用TextOutputFormat的类实现结果的输出;二、具体实践1......
  • VC++ MFC 编程--CMap的使用
    本文翻译自: CMapHow-to-CodeProject介绍像我这样的程序员,在CMap之前学习了STL::map,总是认为CMap很难使用,并且总是尝试以STL::map的方式使用CMap。在本文中,我将解释CMap,以及如何将它用于您自己的自定义类。在本文的最后,我将展示一个如何正确使用CMap与CString*的例子(注意,我......
  • python 中map模块
     map函数会根据提供的函数对指定的序列做映射。第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。 001、>>>deffun01(x):##测试函数...returnx*100...>>>list1=[8,3,2,7]>>>>>>list(map(fun01,......