simplenaive无节操光线跟踪
作者:小虎 | 来源:互联网 | 2023-10-14 19:02
div#container{width:600px;height:600px;background-color:#00
纯用GLSL fragment shader写,定点相机的导航是自己想的挫办法,用世界Y轴做pivot(就是这个造成了万向节问题...果然trackball算法不是这么容易想的..),以投影面对应的鼠标位移反求过原点的任意方向转轴,然后用
神矩阵乘以相机原始位置。光线跟踪就是每个fragment一根光线,大stride过去,小step回来,大hit小miss就停。mandelbulb落于r=1.2球,所以不交的必然miss,交的也要从球表面开始找。迭代公式次数不用高,太精细显卡算爆了也出不来,还特别noisy。为了算法向,一旦hit就再求交2次,结果构成切面算叉乘。Shading是(lambert+highlight)*depth。自家的QUADRO 3000M做到这个卡巴斯基的速度已经是极限了,目测只有chrome(或者还有firefox)能跑得起来。GLSL的if语句果然神器,能不能执行靠概率,光靠分析是看不出来是不是uniform flow的貌似...总之GLSL fragment shader program也不是那么的快(Win64貌似转成DX shader program了,linux没测,N卡是不是可以好好优化也没看,所以结论不绝对),也许应该考虑把CPU和vertex shader好好利用。。上传阉割说明:把window尺寸替换成了固定大小的div的offsetHeight。想要下到本地赏菊可以改回来挑战一下显卡君。
Demo by hellraider