wangtong 发表于 2012-8-8 17:53

【原创】简述利用3ds max制作太阳系模型的过程。

本帖最后由 wangtong 于 2013-5-31 23:15 编辑

此动机完全是受2005年的《天文爱好者》杂志上的连载文章《制作数字太阳系》的启发,完全是为了娱乐,而非科研。
一、建模
包括太阳、八大行星、月球、六个具有典型轨道的彗星、分别是著名的短周期彗星----恩克彗星,还有哈雷彗星,另外还有格里格彗星、博雷林彗星、诺伊明Ⅰ彗星和塔特尔彗星,一号和二号小行星,还有全天所有的肉眼可见的6.6等以上的恒星,赤道和黄道等。
1、太阳、八大行星、月球的建模
均运用3ds max提供的几何体中的球体创建,太阳、水星、金星、地球、月球、火星,还有两颗小行星,都是正球体,木星、土星、天王星和海王星都是扁球体,按照真实比例压缩即可。土星和天王星具有光环,利用管状体来表示光环,土星的光环比较明显,可以当作一个整体,天王星的光环比较稀疏,我用了六个管状体来解决。然后再到专门的网站上下载贴图文件,对几何体进行贴图。太阳是可以发光的,要把太阳的材质设计成100%自发光体。下图为太阳和行星的模型。左为太阳,右上从左到右分别为水、金、地、火,右下从左到右分别为木、土、天、海。

2、彗星的建模
对于彗星的建模,我不得不说老实话,我有一些主观随意性,因为彗星的大小我的确不知,彗发、彗尾的长度和大小没有一点概念,只知道彗尾可以有数百万甚至上亿公里。再有就是彗星的外形不好确定,它没有一个清晰的轮廓,也只能是大概齐,我运用的是球体与圆台进行布尔并集运算的方法创建彗星。由于彗发和彗尾是发光的和半透明的,把彗星的材质设计成可以一定百分比的自发光体和透光体。下图为恩克彗星的模型。

3、恒星的建模
恒星运用图形中的星形来创建,由于恒星有亮有暗,还有各种颜色,为了力求真实,从天文网站上下载恒星数据,然后进行亮度筛选(亮于6.5等),根据光谱型确定颜色,根据星等确定亮度,6.5至5.5等的视为6等星,5.5至4.5等的视为5等星,以下类推,星等数一样的星,星形大小一样,这样明亮的程度就一样了,但由于颜色不同,所以还得保证不同的颜色的灰度是一样的,为此专门设计软件计算灰度,恒星是自发光的,所有的恒星的材质都是100%的自发光体。
下左图为恒星的颜色模型,从左到右分别为O型:蓝色;B型:淡蓝色;A型:淡蓝白色;F型:黄白色;G型:黄色;K型:橙黄色;M型:橙红色;C型:红色。

下右图为恒星亮度模型,上排从左到右分别为六等星到一等星,下排左为零等星,右为负一等星。未完,明天接着发帖。


wangtong 发表于 2012-8-8 17:53

本帖最后由 wangtong 于 2012-8-11 17:25 编辑

二、距离和大小的确定
1、太阳系内天体
所有的数据都采自于《天文爱好者手册》。
由于真实的太阳系中行星的大小和行星到太阳的距离是相差非常悬殊的,如果按照真实的比例建模,将无法观看。为了保证模型的可观赏性,不得不做一些调整,将行星到太阳的距离相对于行星的直径缩小到原来的百分之一。以地球为例,真实的日地距离是地球直径的一万多倍,现在变成了一百多倍。这样一来,又带来了一个新问题,水星将会跑到太阳的肚子里,所以只好再将太阳缩小原来的五分之一,这样既解决了问题,又能够保证太阳依然是最大的天体。同样月亮也会跑到地球的肚子里,所以地月距离并没有缩小一百倍,而是大约十二倍,做这样的调整实属无奈,虽然有些失真,但基本上没有大的失真。
真实的天体大小和模型中的大小如下表。

由此表可以规定日地平均距离(1个天文单位)为14.96,是地球直径的一百多倍,单位不存在。这样太阳系内的天体之间的距离大概就确定一来了,具体的数值通过后面的操作确定。
2、天球半径的确定
满天的大大小小的恒星距离我们非常遥远,太阳系内的天体之间的距离与之相比,基本为零,所以一定要把天球半径尽可能的定得非常大,3ds max可以接受的最大数值是一亿,没法再大了,所以我就把天球半径设为一亿,这大概是海王星轨道直径的十一万倍。一个天文单位为14.96,天球半径大概就是105光年,我想基本可以认为是无穷远了。然后所有的恒星都放在天球半径这么远的位置上。
3、恒星位置的确定
在3ds max的三维直角坐标系中,太阳位于坐标的原点上,X轴的正向指向春分点(黄经0度),Y轴的正向指向夏至点(黄经90度),Z轴正向指向黄北极,XY平面就是黄道面。基于这样一个定位,需要把恒星的赤道坐标转化为黄道坐标,然后再转化为直角坐标。赤道坐标转化为黄道坐标天文书上一般都有公式,黄道坐标转化为空间直角坐标也很简单,公式如下:
            X = Radius * cosβ * cosλ;
            Y = Radius * cosβ * sinλ;
            Z = Radius * sinβ;
式中λ和β分别为黄经和黄纬,Radius为天球半径。这样就把所有的恒星都镶嵌在了天球上,实际在建模中并没有天球。
全天所有的6.6等以上的恒星共约一万颗,先从天文网站上下载数据,然后筛选(亮于6.6等)出约一万颗,再通过编程,计算坐标,通过光谱型赋予材质,根据星等确定大小,最后书写成mxascript语言,通过执行maxscript脚本语言,来创建恒星。

这是假想站在太阳上看太阳系内的天体的渲染效果图(2560*1920像素,请点击看大图),所有太阳系内天体沿春分点方向一字排开。可以打一个比方,假设太阳是一个直径大约28公分的球体,那么在距离它约58公分的地方有一个直径约5毫米的小球,那是水星;在距离它约1.08米的地方有一个直径约12毫米的小球,那是金星;在距离它约1.5米的地方有一个直径约13毫米的小球,那是地球;在距离它约2.2米的地方有一个直径约7毫米的小球,那是火星;在距离它约7.8米的地方有一个直径约14公分的球,那是木星;在距离它约14米远的地方有一个直径约12公分的球,那是土星;在距离它约29米远的地方有一个直径约5公分的小球,那是天王星;在距离它约45米远的地方有一个直径约5公分的小球,那是海王星。而满天的星斗则远在一万公里之外。

这是天球的透视图,实际在建模时并没有创建天球这个球体。

未完,继续发贴。

wangtong 发表于 2012-8-8 17:53

三、设置动画----太阳系内天体的运动
所有的真实数据均来自《天文爱好者手册》。
1、设定天体的公转周期
这里有一个问题,真实的天体公转周期之比都是无理数,但运动都是连贯的,而动画的长度不可能是无穷大,一幅动画在播放完最后一帧后,自动从第0帧开始重新播放,为了保证动画的连贯性,最后一帧与第0帧必须完全相同,这就要求天体的公转周期之比不能是无理数,必须找一个与之相近的有理数,而动画的总帧数必须能够被任何一个天体的运动周期整除。查看行星的公转周期,基本有如下比例:
水星:地球=6:25
金星:地球=8:13
地球:火星=8:15
木星:土星=2:5
天王星是地球的84倍
海王星是地球的165倍
根据以上的近似比例,经过反复推敲,最终确定如下公转周期

需要说明的是水星的公转周期为124.8帧,不是整数,这可以理解为水星走到第124帧时还没有回到起点位置,而到125帧时又稍稍过了一点,水星需要公转5圈,走到第624帧时才能回到第0帧的位置。
表中误差率是以地球为标准推算出来的,也就是规定地球的公转周期为520帧是精确的,负的表示偏少,正的表示偏多,从表中可以看出土星误差率有点大了,超过了0.5%,这也的确没有办法,即便是这样,动画的总帧数都已经达到了4804800帧,以每秒播放30帧算,播放完整个动画需要44.5个小时。
两颗小行星的公转周期书中没有,但是有它们的轨道半长径,二者均为2.77天文单位,可以通过开普勒的行星运动规律计算出它们的公转周期为4.6102年,也就是2397.3帧,取2400帧。
恩克彗星的公转周期为3.3年,也就是1716帧;哈雷彗星的周期一般认为是76年,我上网查为75年到79年之间变化,所以为了凑整除,我取了77年,也就是40040帧;斯-格彗星的周期为9.23年,也就是4799.6帧,我取了4800帧。
2、确定天体的运动轨道
轨道数据如下表

(1)首先根据轨道偏心率确定轨道形状
已知条件是公转周期T,轨道的偏心率e,再有一个天文单位的长度(14.96),一年的长度(520帧)。
先计算出轨道的半长径a,a=14.96*(T/520)(2/3)
再利用逐次迭代方法计算天体在第t帧时的XY坐标,具体算法如下:
设n=2*π/T;(π为圆周率)
设M=n*t;
设E(0)=M;
然后进行递归迭代运算
E(1)=M+e*sinE(0);
E(2)=M+e*sinE(1);
E(3)=M+e*sinE(2);
……
E(N)=M+e*sinE(N-1);
N越大,表明迭代的次数越多,精度越高,越接近理论真实值,但永远也达不到理论真实值,取适当的次数即可,然后计算x,y的值。一般来说,行星的轨道偏心率都比较小,迭代50次精度足够了,哈雷彗星的轨道偏心率最大,迭代500次差不多了。
计算XY坐标值的公式如下,天体从近日点A点处出发,沿箭头方向运动,C点为焦点。


以上这些需要通过编写maxscript脚本语言,利用循环来实现,再执行脚本语言前,需要先创建两个辅助对象,一个是行星的轨道中心(后面要用到),一个是虚拟行星,然后执行脚本语言把每一帧的位置赋予虚拟行星。

wangtong 发表于 2012-8-8 17:53

本帖最后由 wangtong 于 2012-8-8 20:42 编辑

(2)调整轨道的空间位置(以水星为例讲解)
第一、调整轨道倾角
先将水星链接在虚拟水星上,使虚拟水星成为水星的父对象,这样水星就跟着虚拟水星一块儿运动了,并且把水星放在与虚拟水星相同的位置上,再把虚拟水星链接在水星轨道中心上。然后把参考坐标系调整为视图,让水星轨道中心沿视图的X轴旋转7度角,这样虚拟水星也就跟着旋转了,如果这时播放动画,就会发现水星的运动轨迹平面与XY平面成7度角了。
第二、调整升交点位置
上一步做完后,水星的升交点就在图中A点处。然后仍然把参考坐标系调整为视图,让水星轨道中心再沿视图的Z轴旋转47.9度,这样虚拟水星与水星也就以原点为中心转了47.9度。然后你可以验证一下,右击工具栏的选择并移动按钮,弹出移动变换输入窗口,读取绝对世界里的坐标值,计算一下arctgY/X的值,应该为47.9度。如果这时你播放动画,就会发现水星在经过这一帧时,坐标的Z值由负数变为正数了,说明它已经升到了黄道面以上。
第三、调整近日点的位置
通过上一步,水星的轨道平面在空间的走向就已经确定下来了,但是近日点的位置还在升交点的位置上,需要调整近日点。由于轨道平面的空间走向已经定好,所以下一步的变动只能在这个平面内进行。把参考坐标系调整为局部,然后让水星轨道中心沿自身的Z轴旋转(而非视图的Z轴),旋转的角度通过下式计算:
tg(旋转的角度)=tg(近日点黄经-升交点黄经)/cos(轨道倾角)
把水星的数据代入,求得旋转的角度为29.0817度,也就是说要让水星轨道中心沿自身的Z轴旋转29.0817度。你也可以象上一步那样验证一下,注意验证时参考坐标系应为视图。如果这时你创建一个摄像机,放在原点处,目标点放在水星上,并链接在水星上,然后播放动画,观看摄像机视图,你就会发现,当水星运行到你确定下来的近日点这一帧时,变得最大。
3、设定天体的自转周期
对于水星和金星好办,自转周期都比较长,可以按比例设定自转周期,其它行星自转周期都很短,无法按真实比例设定,只能按每帧为一小时的比例设定,地球、火星自转周期为24帧,木星为10帧,土星为12帧,天王星、海王星为16帧。在设置自转时,参考坐标系应为局部,再有右侧的运动->参数->指定控制器里,

旋转一项应为线性旋转。
4、调整彗星的尾部走向
彗星的尾巴始终是背对太阳的,在完成轨道形状的确定后,再根据每一帧的XY坐标值,确定每一帧相对于上一帧彗星的旋转角度,然后编写脚本语言来实现,如果站在太阳上观看每一颗彗星,你都只能看见它的头部,而永远也看不见长长的尾巴。
四、后期的调整与制作
1、将所有的太阳系内天体的第0帧的位置都调整到X轴的正向上,也就是把所有帧中Y坐标值最接近0的那一帧调整为第0帧,这一项可以通过菜单栏中的图表编辑器中的轨迹视图-曲线编辑器来完成,通过挪动关键点的位置的完成。而所有的天体都再次回到X轴的正向时,需要4804800帧。
2、由于八大行星和月球都是不发光体,所以需要在太阳的位置上创建一个光源,然后适当调整发光强度和衰减程度,尽量能够使行星的亮度比较接近真实,然而无论怎么调(包括改变金星的材质属性),都无法制作出金星超级明亮的效果,我感到很无奈。
3、创建多台摄像机,分别把摄像机和目标点放在不同天体上,并链接之,这样就可以随意观看站在某个天体上看另一个天体的运动,被观看的天体自然应该位于视场的中间。
4、把所有的恒星都重新命名一翻,有拜耳编号的用拜耳编号,没有的如果有佛氏编号,就有佛氏编号,都没有的用HIP编号,这是一个任务量很大的工作,我花了半个月,别的什么都不干才完成。(完成)

wangtong 发表于 2012-8-8 17:53

模型完全创建好了后,我用3ds max自带的渲染器渲染了一个动画,是站在地球上看木星的动画,一共7000帧,每秒播放30帧,片长为3分53秒。我渲染的视频每帧大小为1024*768个像素,可是我经过后期制作,加上片头和片尾,配上背景音乐后,图像质量明显下降了,制作软件最多只能制作出720*576个像素的视频,没有办法。7000帧,一年为520帧,大概相当于实际的13年半左右,把13年多的木星视运动浓缩到了3分多钟里。在看时最好能全屏观看,室内光线不要太亮,这样看得还能比较清楚些。
http://v.youku.com/v_show/id_XNDM2NTMwMjI0.html

李灼 发表于 2012-8-8 18:25

不错!音乐也很美,旋律是童安格的一首歌吧?

zdsmilan 发表于 2012-8-8 18:29

楼主真是人才!!!

果子熊 发表于 2012-8-8 18:54

李灼 发表于 2012-8-8 18:25 static/image/common/back.gif
不错!音乐也很美,旋律是童安格的一首歌吧?

在哪里能看到?我啥也看不到 啥也听不到啊。。。。

李灼 发表于 2012-8-8 18:58

果子熊 发表于 2012-8-8 18:54 static/image/common/back.gif
在哪里能看到?我啥也看不到 啥也听不到啊。。。。

地窖最下面就是视频呀

果子熊 发表于 2012-8-8 19:12

李灼 发表于 2012-8-8 18:58 static/image/common/back.gif
地窖最下面就是视频呀

晕 看到了 谢谢

索理客 发表于 2012-8-8 19:24

楼主可以做做系外行星的模型,可以做很多很多的

boneking 发表于 2012-8-8 20:00

支持!

adamdyj 发表于 2012-8-8 20:21

看起来不错,前几年我用max做过太阳系模型渲染了张效果图

hhbb 发表于 2012-8-8 20:30

不错,有意思!::070821_01.jpg::

milaoshu64 发表于 2012-8-8 23:09

牛!有这样的本事,再用好的软件,把银河和星座的主要恒星和星团,根据各种参数,把其变成立体直观的天球。学天文就不是难事了!高手!

WFT 发表于 2012-8-8 23:43

楼主精神可嘉,描述的也很好,不过视频的配乐,我听了后,有一钟很多年前坐在火车上,手里端着个随身dvd看的感觉 播放的音乐,怀旧感比较强,我听了几分钟下来,差点睡着(因为是半夜看的)
可以换个音乐,另外我们中国都用pal制,每秒钟25帧,29.7帧每秒钟的属于N制,渲染时间会多些,以后可以采用pal制作,支持楼主继续原创:lol

mingkoukou 发表于 2012-8-8 23:48

看好你!

少言少嗔 发表于 2012-8-9 00:03

这个厉害!不顶不行!加油!

wangtong 发表于 2012-8-9 08:51

本帖最后由 wangtong 于 2012-8-9 08:55 编辑

sonic5188 发表于 2012-8-8 19:24 http://www.astronomy.com.cn/bbs/static/image/common/back.gif
楼主可以做做系外行星的模型,可以做很多很多的

做没什么问题,其实很简单,只要创建一个球体,调整适当的半径,然后一帖图就可以了,关键得有用于帖图的图片文件。

星晨霞晚 发表于 2012-8-10 17:11

精彩:victory:
页: [1] 2
查看完整版本: 【原创】简述利用3ds max制作太阳系模型的过程。