Unity中URP下的SimpleLit的 BlinnPhong高光反射计算

文章目录

  • 前言
  • 一、回顾Blinn-Phong光照模型
    • 1、Blinn-Phong模型:
  • 二、URP下的SimpleLit的 BlinnPhong
    • 1、输入参数
    • 2、程序体计算


前言

在上篇文章中,我们分析了 URP下的SimpleLit的 Lambert漫反射计算。

  • Unity中URP下的SimpleLit的 Lambert漫反射计算

我们在这篇文章中,进行 URP下的SimpleLit的 BlinnPhone 高光反射计算的分析。


一、回顾Blinn-Phong光照模型

  • 在BRP下,我们进行过Blinn-Phong高光反射的推导和实现.
  • Unity中Shader光照模型Blinn-Phong原理及实现

1、Blinn-Phong模型:

Specular = SpecularColor * Ks * pow(max(0,dot(N,H)),Shininess)

  • Specular:高光反射的最终颜色
  • SpecularColor:高光反射颜色
  • Ks:反射系数
  • N:顶点法向量
  • H:入射光线L 和 视线向量V的半角向量
  • Shininess:高光指数,用于模拟高光的范围

二、URP下的SimpleLit的 BlinnPhong

在这里插入图片描述

1、输入参数

  • lightColor:主光颜色
  • lightDir:主光方向
  • normal:法线信息
  • viewDir:视线方向向量

以上这些,我们在之前的步骤中,已经分析过了
我们主要看 specular 和 smoothness

  • specular:高光颜色
  • smoothness:光滑度
  • 这两个颜色都是在 初始化 SurfaceData 中完成的
    在这里插入图片描述
    在这里插入图片描述
  • SampleSpecularSmoothness
    在这里插入图片描述
    首先:对specularSmoothness进行了初始化
    在这里插入图片描述
    然后:如果赋予了高光纹理,则进行高光纹理的采样,赋值给specularSmoothness
    在这里插入图片描述
    在这里插入图片描述
    否则:将 高光 颜色赋予specularSmoothness
    在这里插入图片描述
    在这里插入图片描述
    最后:按 alpha 的来源给 specularSmoothness.a 赋值
    在这里插入图片描述
    在这里插入图片描述
    这个 a 经过处理后就是smoothness

half smoothness = exp2(10 * surfaceData.smoothness + 1);

  • 该处理扩大了,smoothness 的变化率,并且使其在[0,1]之间,从1开始
    在这里插入图片描述

2、程序体计算

  • 先计算出 L 和 V 的半角向量

float3 halfVec = SafeNormalize(float3(lightDir) + float3(viewDir));

  • 再计算出法线和半角向量的点积

half NdotH = half(saturate(dot(normal, halfVec)));

  • 使用 smoothness 调节高光的范围

half modifier = pow(NdotH, smoothness);

请添加图片描述

  • 混合高光颜色

half3 specularReflection = specular.rgb * modifier;

  • 混合主光颜色

return lightColor * specularReflection;

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/641402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基于沙箱环境实现支付宝支付

一、支付宝沙箱环境介绍 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境,开发者在沙箱环境中调用接口无需具备所需的商业资质,无需绑定和开通产品,同时不会对生产环境中的数据造成任何影响。合理使用沙箱环境,可以…

【2024最新-python3小白零基础入门】No5.python函数的使用

文章目录 一 定义一个函数二 函数语法三 函数举例3.1 让我们使用函数来输出"Hello World!":3.2 比较两个数,并返回较大的数: 四 函数调用五 函数参数传递5.1 可更改(mutable)与不可更改(immutable)对象5.2 python 传不可变对象实例…

Android14实战:调整A2DP音量曲线(五十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

【Linux install】Ubuntu和win双系统安装及可能遇到的所有问题

文章目录 1.前期准备1.1 制作启动盘1.2关闭快速启动、安全启动、bitlocker1.2.1 原因1.2.2 进入BIOSshell命令行进入BIOSwindows设置中高级启动在开机时狂按某个键进入BIOS 1.2.3 关闭Fast boot和Secure boot 1.3 划分磁盘空间1.3.1 查看目前的虚拟内存大小 2.开始安装2.1 使用…

大模型的学习路线图推荐—多维度深度分析【云驻共创】

🐲本文背景 近年来,随着深度学习技术的迅猛发展,大模型已经成为学术界和工业界的热门话题。大模型具有数亿到数十亿的参数,这使得它们在处理复杂任务时表现得更为出色,但同时也对计算资源和数据量提出了更高的要求。 …

源 “MySQL 5.7 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确

Is this ok [y/d/N]: y Downloading packages: 警告:/var/cache/yum/x86_64/7/mysql57-community/packages/mysql-community-server-5.7.44-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY 从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql 检…

redis pipeline实现,合并多个请求,可有效降低redis访问延迟

上代码 import redistry:pool redis.ConnectionPool(hosthost, portport)r redis.Redis(connection_poolpool) except Exception as e:print(f"Failed to connect to {host} with error: {e}") try:pipeline r.pipeline(transactionFalse) # Use the last Redis…

RK3568 Ubuntu关于rootfs大小问题

有关如何移植Ubuntu可以参考博客: RK3568 移植Ubuntu-CSDN博客 但是移植完成之后会发现一个问题,就是文件系统的容量已经满了,若想安装软件和库是不可能的,所以需要在打包镜像文件那里做个修改,以及修改parameter.txt文件 打包镜像文件 1、创建空镜像文件,大小为2048…

Linux防火墙常用命令

1、CentOS-7 注意:下列命令要用root账号/权限执行 1.1、查看防火墙状态 systemctl status firewalld1.2、非永久性关闭防火墙 systemctl stop firewalld1.3、非永久性开启防火墙 systemctl start firewalld1.4、重启防火墙 systemctl restart firewalld1.5、设…

C语言代码 打印100-200之间的素数

打印100-200之间的素数 编程思路&#xff1a; 素数判断规则&#xff1a;只能被1和它本身整除的数 第一步&#xff1a;先找出100-200的整数。第二步&#xff1a;在这些数中筛选出只能被1和它本身出能整除的数打印出来。 代码示例&#xff1a; #include <stdio.h> #incl…

Spring Boot 2.x 到 3.2 的全面升级指南

Spring Framework 是一种流行的开源企业级框架&#xff0c;用于创建在 Java Virtual Machine (JVM) 上运行的独立、生产级应用程序。而Spring Boot 是一个工具&#xff0c;可以让使用 Spring 框架更快、更轻松地开发 Web 应用程序和微服务。随着 Spring Boot 的不断发展&#x…

canvas绘制旋转的椭圆花

查看专栏目录 canvas实例应用100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

MySQL-函数-日期函数

常见的日期函数 案例

Flutter中extension扩展类介绍及使用指南

Flutter 是一种流行的跨平台移动应用开发框架&#xff0c;由Google推出。在Flutter的世界中&#xff0c;扩展类(extension)是一种强大的工具&#xff0c;可以帮助开发者更好地组织和重用代码。本文将介绍Flutter中扩展类的基本概念&#xff0c;并展示如何在你的应用程序中有效地…

Hypervisor 和Docker 还有Qemu有什么区别与联系?

Hypervisor Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层&#xff0c;可以让多个操作系统和应用共享硬件资源&#xff0c;也叫做虚拟机监视器&#xff08;VMM&#xff09;。 Hypervisor有两种类型&#xff1a;Type I和Type II。 Type I 直接运行在硬件上&a…

Http常用状态码

200 OK 请求成功。 201 Created 该请求已成功&#xff0c;并因此创建了一个新的资源。这通常是在PUT请求之后发送的响应。 204 No Content 服务器成功处理了请求&#xff0c;但不需要返回任何实体内容&#xff0c;并且希望返回更新了的元信息。响应可能通过实体头部的形式…

LabVIEW电火花线切割放电点位置

介绍了一个电火花线切割放电点位置分布评价系统&#xff0c;特别是在系统组成、硬件选择和LabVIEW软件应用方面。 本系统由两个主要部分组成&#xff1a;硬件和软件。硬件部分包括电流传感器、高速数据采集卡、开关电源、电阻和导线。软件部分则由LabVIEW编程环境构成&#xf…

复杂高层建筑环境多模态导航服务和引导管理机器人系统设计(预告)

课题基础 机器人工程ROS方向应用型本科毕业设计重点课题学生验收成果 将上面这篇所涉及的算法等应用到如下环境中。 Gazebo新环境AWS RoboMaker Hospital医院场景适用于ROS1和ROS2 高层可以简化为多层测试。最典型的就是两层及以上。 简介 随着城市化进程的加速和高层建筑…

[系统安全] 五十五.恶意软件分析 (7)IDA Python基础用法及CFG控制流图提取详解[上]

您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系…

数据结构(更新至链表)

数组 数组的代码 public class Myarr<T> {private int capacity0;private int size0;private T[]arr;//如果是空的则强制将容量扩充为10public Myarr(int capacity) {if (this.size 0) {this.capacity 10;this.arr(T[]) new Object[this.capacity];}}//按顺序添加数据…