2009年5月23日星期六

city engine lite最新进展

上一篇日志里提到了语法解释器已经完成,cga语句已经可以解释成cga命令。
现在主要的任务是将cga命令翻译成maya命令。
目前已经遇到的困难:
1、Comp命令如何实现?
在CGA中,shape是scope的一个属性,在maya里shape节点是Transform节点的子节点,很相似。不同的是,对scope执行Comp可以产生低维度的scope,低维度的shape也在这一过程中产生。maya的shape,这里说多边形物体,分解之后,产生单一的多边形面,也仍然是3D的。我在实现中使用的是旋转标准平面使之符合物体面的方法,这样只用物体坐标系的X和Y就可以表示2D面。另一种方法,不旋转面,在可以预见的后续操作中,会很麻烦,分割scope的时候就必须考虑法线、支点、基准边的问题。现在这些问题就要在Comp命令里考虑。

2、贴图坐标如何处理?
这也是个麻烦的东西,现在还没有什么头绪。应该是随scope大小和位置的变化的。

3、Roof,Occ,Snap
Roof要等Comp完成后才有点眉目。Occ和Snap现在也没有什么头绪,求交点和交线看来是少不了了。

看看目前的完成的部分:
这是3条CGA规则:

1:default~S(9,10,2) Subdiv(Y,4,4,2){wall|window|Subdiv(X,r(1),r(1),r(1)){tile|tile|tile}}:1
2:window~T(0,0,2) newwin
3:newwin~Subdiv(X,r(1),r(1)){lwin|rwin}


CGAgrammar解释后产生的图形,简单了点,下一次试试更复杂的规则:

2009年5月12日星期二

最新进展 09年5月12日凌晨

自从去年10月份写了2篇日志后,这个blog就暂时没有动静了。
这段时间里,完成了几样东西:
1、杂兵的rig基本完成,没有特别惊人的技术,只用了一般的ikfk。完成了一个ikfk转换的脚本,还有一个双向控制的脚本。
2、测试了一下city scape,很强大,但是no crk。另外,它的模型是模型库里的固定模型,不能随机化(也许是我不知道)。
3、测试了一下city engine,更强大,但是我的机子跑不动,单纯的创建几个模型还可以,一个城市的模型就彻底内存不够了,它和maya通过fbx交换数据,fbx本身也是个很慢很吃内存的冬冬。
4、从去年就在打算的city engine lite已经完成了最重要的部分,语法解释器。已开始用antlr,最后发现实在不好写语法规则。最后还是纯手写的语法解释器,里面的数学运算和逻辑运算都交给python。比如T(math.cos(height),1,2)。
如何和cityengine来比的话,这只是万里长征的第一步,cityengine可以创建创建城市街道的样式,我的cityenginelite目前还只是解释语法。
后续的工作好多~~