找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 168|回复: 0

【水/记录】VXL光源问题

[复制链接]
发表于 2024-8-10 00:50:47 | 显示全部楼层 |阅读模式
其他参考:VPL曲线VPL计算

前面两文中,提到了一个固定的向量(0,0,1),一开始我不知其作用,将它当作Magic了。随后从它的计算过程中,发现这个(0,0,1)符合Blinn-Phong模型的观察者方向向量,遂把它暂定为View向量,可实际上我们知道YR中观察者方向显然不是(0,0,1)而应该是(1,1,sqrt2 / sqrt3)之类的,这个(0,0,1)便成了一个谜。
注意到原版中光照方向实际约为(0.20,-0.91,-0.36),Z是负值,也就是说光是从地底下射出来的,而呈现在我们眼前时,却又不像如此,便估计是这个古怪的View向量在作怪,此后便没有再管这个(0,0,1)的事。
这些天在dc上交流了一番相关问题,发现我自己忘记了游戏代码中并不是直接赋值(0,0,1),而是一个(0,0,1)向量先经过了一步变换再赋值给它,回头看这个变换,发现是传入的矩阵(实际为单位矩阵)先经过Transpose,再将此变换作用于(0,0,1),再赋值给这个View向量,由于矩阵都是单位矩阵,变换之后自然就还是原来一样了。
那么这一步搞半天却好像没什么作用的操作到底可能是什么呢?注意到(0,0,1)还有可能是YR中屏幕空间的View向量(投影后,YR里VXL的Z是朝屏幕外的),再假设要传进来的矩阵原本可能是“投影矩阵”,上面的操作似乎有的解释:传入投影矩阵后,先经过Transpose得到逆变换(YR的投影实际上只是旋转,因此可以直接这么做),再将屏幕空间的View向量(0,0,1)转换回模型空间中去(YR的VXL投影也并非经典的WVP,也不需要如此),再去计算光照;这样似乎就变得“合理”些。
随后我便尝试将传入的矩阵改为投影矩阵(如图),倒是发现光确实更像是从地底下照出来的,更符合光照方向的实际值了,但也不排除我自己产生些许错觉。

或许改变此矩阵后,其他参数会变得更好理解一些?

相关代码可见于753D00及其上游调用。
corrected_matrix.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY论坛

GMT+8, 2024-9-12 11:25 , Processed in 0.068641 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表