使用Blender渲染三维图形
如果你看过这篇文章:
那么你一定记得卡西尼曲线的形状。在Blender里,我们可以通过添加光源等方法,让卡西尼面看起来金光闪闪:
视频中的曲面,就是由Mathematica导出的stl文件编辑而成的。
用Mathematica创造一个曲面
曲面表达式
事实上,卡西尼曲面的表达式并不是可以不经思考就写出来的,但是使用WolframAlpha, 我们可以得到卡西尼曲面的文字表达式:
WolframAlpha["cassini surface", {{"EquationsPod:Surface", 1}, "Plaintext"}]
((x – a)^2 + y^2) ((a + x)^2 + y^2) = z^4
ContourPlot3D
使用ContourPlot3D函数: 生成关于 x、y 和 z 的函数 f 的三维等高图.
使用ContourPlot3D函数,我们能够绘制出该表达式的等高线图.
cp=ContourPlot3D[((x – 1)^2 + y^2)((1 + x)^2 + y^2)== z^4,{x, -2.3, 2.3},{y, -2, 2},{z, -2, 2},Mesh -> All, MaxRecursion -> 4, PlotPoints -> 40, Boxed -> False, Axes -> None]
值得注意的这里的一些选项,其中Mesh->All代表了绘制出所有的网格,而为了获得更高的模型精度,PlotPoints和MaxRecursion可以稍微大一些,Boxed和Axes选项在这里上去了边框和坐标轴。
得到的结果为:
可以看到,精度相对来说很高,这对之后的渲染效果有很大的影响。
导出STL文件
Blender可以支持多种3D文件类型,Mathematica也支持多种文件格式的输出,我在这里使用stl文件,obj和x3d文件也可以。
Export["CassiniSurface.stl", cp]
这样就导出了stl文件(使用SetDirectory[NotebookDirectory[]]将导出位置修改为notebook的位置)
Blender渲染
导入stl文件
我们这里使用另一个stl文件进行导入,方法为
一个海螺就会出现在原点处,选择左侧的移动按钮,将海螺沿z轴上移一些,再如下图,创建一个平面:
创建的平面会非常小,但通过修改右侧的缩放x,y选项,可以放大这个平面。
灯光,材质
在打开Blender时会自动生成一个灯光,所以可以直接在右侧调节该灯光的属性,例如颜色,亮度等,也可以选择左侧移动按钮来移动灯光的位置。
(注意,右侧有很多选项,可以一个个先浏览一遍)
我们也可以按照之前创建平面的方法创建灯光,但要注意新建的灯光只有10w,而默认的灯光是1000w的。
在这里,我创建了一个聚光灯。
如你所见,我们现在有一个海螺,一个平面,两个灯光和一个摄像机。
我们需要修改平面和海螺的材质才能让整个画面看起来比较真实。
海螺材质(光泽)
平面材质 (漫射)
调整相机,渲染!
按小键盘0或者3D界面右侧的摄像机按钮进入相机视角,在右上角选择Camera之后,在右下方属性里面调整相机xyz轴位置和角度,使其正对海螺。
左上角渲染-渲染图像,或者F12, 就能得到这样一张图片
动画
更新中…