当前位置: 首页 > news >正文

Blinn-Phong优化phong模型的数学依据

代码层面分析:

phong模型中的高光代码

float spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);
vec3 specular = specularStrength * spec * lightColor;

blinn-phong模型中的高光代码

float spec = pow(max(dot(normal, halfwayDir), 0.0), shininess);
vec3 specular = lightColor * spec;

代码层面的区别:

reflectDir(反射向量)被halfwayDir(半程向量)代替

本质区别:

“反射向量” 和 “观察向量” 的夹角(phong模型)——α(读作:阿尔法)

换成了

“半程向量” 和 “法线向量” 的夹角(blinn-phong)——θ(读作:西塔)

有人问我,公式中没有角度,为啥要分析角度的区别?

其实角度是隐藏在dot点积中,dot本质就是求角度的cos值

我的疑惑:

当我看到,用θ代替α的时候,我当时感觉,好像这2个角度有点关系。

但是,不用数学方法来计算和量化,总感觉差点意思!

那么我就用数学方法算一下α和θ之间的关系吧

(很简单,初中数学就可以)

数学证明:

已知:

OH是∠LOV的角平分线——∠LON=∠RON

ON是∠LOR的角平分线——∠LOH=∠VOH

求证:

∠θ和∠α之间的关系

分析:

用c代替入射角,即∠LON=∠RON=∠c

∠LOH=∠c-θ

∠VOH=∠VON+θ

把∠VON=∠c-α带入上式

∠LOH=∠c-θ

∠VOH=∠c-α+θ

∵∠LOH=∠VOH

∴∠c-θ=∠c-α+θ

∴α=2θ

结果分析:

数学计算得到结果:α=2θ

正是因为成正比关系,所以blinn-phong用θ代替α

并不是拍脑子的结果,而是非常合适的!

备注:

这个2倍关系,比较容易推导,

但是,这2个角度的2倍关系,我并没有看到有文章来说。

所以自己写这篇文章

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 前端的页面代码
  • 代码随想录算法训练营:26/60
  • 通义千问Qwen-VL-Chat大模型本地训练(二)
  • Spring Boot 实现统一异常处理:构建健壮的应用
  • 恢复出厂设置手机变成砖
  • 网关、DHCP协议、ip地址、子网掩码简单介绍
  • 【AutoencoderKL】基于stable-diffusion-v1.4的vae对图像重构
  • 无障碍快捷方式图标
  • centos7安装jenkins
  • Databricks 收购 Tabular 的意义:数据开放框架的胜利
  • 安全防御---防火墙实验1
  • 医疗器械FDA |FDA网络安全测试具体内容
  • 初识Laravel(Laravel的项目搭建)
  • 基于随机森林与XGBoost模型的机器故障关键因素分析
  • linux系统php开机自启动 phpfpm
  • Babel配置的不完全指南
  • const let
  • ES6系列(二)变量的解构赋值
  • Hibernate【inverse和cascade属性】知识要点
  • HTML5新特性总结
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 多线程编程之:notify 和 wait 用法
  • Logstash 参考指南(目录)
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • SwizzleMethod 黑魔法
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 后端_ThinkPHP5
  • 用mpvue开发微信小程序
  • Android开发者必备:推荐一款助力开发的开源APP
  • Semaphore
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # 透过事物看本质的能力怎么培养?
  • #pragma data_seg 共享数据区(转)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (libusb) usb口自动刷新
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (七)glDrawArry绘制
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)我也是一只IT小小鸟
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .NET6实现破解Modbus poll点表配置文件
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET简谈设计模式之(单件模式)
  • .NET下ASPX编程的几个小问题