Vis Comput (2017) 33:883–890 DOI 10.1007/s00371-017-1369-6
ORIGINAL ARTICLE
Incremental collision-free feathering for animated surfaces Le Liu1,2
· Xuehui Liu1,2 · Bin Sheng3 · Yanyun Chen1,2 · Enhua Wu1,2,4
Published online: 4 May 2017 © Springer-Verlag Berlin Heidelberg 2017
Abstract We present a system for efficiently dressing animated 3D models with feathers. While there have been several works on generating static feathers, few methods can incrementally adjust the feathers when the model is animated. Our system makes several important improvements to achieve the goal. We first propose a simple yet effective algorithm to sample the roots based on the orientation field, as the distribution of feather roots has a great impact on the final look. To enable reordering the roots during animation, we analyze and improve the definition of the growth priority. Finally, we propose a method to incrementally adjust minimal feathers to collision-free for each frame of animation. Our system is easy to implement, and the results show that it is efficient and robust. Keywords Feathering · Feather coat · Collision detection · Collision resolution · Animation
1 Introduction Placing feathers on 3D models, i.e., feathering, involves many processes and remains challenging. Feather modeling,
B
Le Liu
[email protected] Enhua Wu
[email protected]
1
State Key Lab of Computer Science, Institute of Software, Chinese Academy of Sciences, Beijing, China
2
University of Chinese Academy of Sciences, Beijing, China
3
Shanghai Jiao Tong University, Shanghai, China
4
University of Macau & UM Zhuhai Research Institute, Zhuhai, China
root distribution and collision resolution all together play important roles on the final look. Researchers have developed several feathering systems [2,4,8,10,16] to generate static collision-free feathers. These systems can be divided into two categories: with or without ordering. The system presented by Weber and Gornowicz [16] constructs an implicit constraint surface for each feather and requires no ordering, but suffers from high computational cost. When it comes to animation, it needs to regenerate all the feathers for each frame. Similarly, Bangay [2] presented a technique to conform the feathers to field lines, which were borrowed from hair modeling [6] and have the property of nonintersection. But feathers generated in this way tend to be parallel, instead of resting on each other. Furthermore, intersection could still happen (e.g., for thicker or wider feathers) and there is no way to detect and prevent such collisions. Other systems [4,10] prefer the traditional orderly fashion. They determined an ordering in which the feathers are adjusted. Adjusting the feathers sequentially has the advantages of simplicity and efficiency and makes incremental adjustments possible for animation. Although Liu et al. [10] provided instructions on how to apply the adjustments for animation, there are still some unsolved problems. For example, they did not provide a method to partially reorder the roots for each frame. Since the growth priority is defined upon the surface geometry, it is very likely to change during animation. Introducing reordering is necessary and would greatly improve the stability of adjustments. In this paper, we develop an efficient scheme to reorder and adjust minimal feathers for animation at low computation cost. We have also revised the definition of growth priority [10] to make it suitable for reordering. In nature, real feathers are usually regularly aligned to their orientations. Fish scales are similar to feathers and can also be modeled by the feathering systems [2,10]. The distri-
123
884
L. Liu et al.
bution of scales presents even stronger regularity. To simulate these patterns, we propose a simple but effective algorithm to generate samples that align to the orientation field of feathers. It is also flexible that allows us easily change the patterns and randomness. In summary, our contribution includes a sampling algorithm that generates staggered samples based on a given vector field and an efficient scheme to incrementally reorder and adjust the feathers. Both of them are simple and can be easily integrated to existing orderly fashion feathering systems. The rest of the paper is organized as follows: Sect. 2 covers necessary background material; Sect. 3 discusses the details of our efforts for animated feathering; finally, we demonstrate results of our work in Sect. 4 and conclude our paper in Sect. 5.
2 Background For static feathering, we adopt the height field based approach by [10], which adjusts the feathers sequentially. In this section, we will briefly explain how this feathering system works and clarify the notations that will be used throughout the remainder of this paper. Given a reference surface S embedded in R 3 , the roots of feathers are randomly scattered over S with desired density. Root i, located on ri , has its feather orientation oi , the surface normal ni and the binormal bi = (ni ×oi )/|ni ×oi |. The projection of oi to ri ’s tangent plane is denoted as o˜ i = bi × ni . Initially, the shape (including the width, length, thickness, etc.) and orientation of each feather can be obtained by interpolating the key feathers [10]. Individual feathers can be modeled parametrically by [4, 5,14]. For simplicity but without loss of generality, we represent the feather as a simple triangular surface in this paper. 2.1 Priority definition Feathers are adjusted one by one in a specific order, so that each feather lies upon the surface and previously placed feathers. To compute the ordering, the growth priority between feather roots has to be defined first. Comparing the priority between two distant feathers that cannot directly affect each other is meaningless, therefore the comparison is limited to the nearest k (e.g., 10) roots Ni for root i. The priority difference between root A and B, proposed by [10], is defined as: P AB = PAB − PB A ,
(1)
where PAB = o A · (r B − r A ) + γ (n A · (r A − r B )), subject to 0 ≤ γ < 1, A ∈ N B , B ∈ N A .
123
(2)
If P AB > 0, we say root B is prior to root A, or root A depends on root B, denoted as B ∈ N∗A . 2.2 Ordering With the definition of priority difference, for every root A on S we compute P AB for B ∈ N A . Furthermore, we can construct a directed graph G by creating a directed edge A → B for B ∈ N∗A . If we break all the cycles in G, we can extract a linear ordering (not necessarily unique) from the resulted direct acyclic graph (DAG) by topological sort. Liu et al. [10] proposed a greedy strategy to resolve the cycles and minimize the impact of disrespecting the computed priority differences. 2.3 Feather adjustment With the linear ordering, we are able resolve the collisions between nearby feathers serially using an efficient height field based method. The adjustment process consists of three steps. The first step applies the pitch operation to the feather orientation, in order to make the feather roughly lie upon neighboring adjusted feathers. This is necessary preparation for the second step, which applies the roll operation to balance the volumes under the two vanes of the feather. The last step applies a finer pitch operation to ensure the orientation is conformed to a user-specified degree of collision or fluffiness.
3 Animated feathering The feathering system by [10] works fine for generating static feathers. When S is animated, they also introduced briefly how to incrementally adjust the feathers. However, they failed to reorder the roots. As the growth priority is defined upon the surface geometry, the ordering is bound to change when the surface deforms. Without reordering, the incremental adjustments would fail when the surface geometry is significantly different from the origin static pose. For some other feathering systems, e.g., [16], regenerating all the feathers is necessary and may even be the only choice. Similarly, we may also reconstruct the whole ordering for every frame of animation, with the price of unnecessary computation. But this is undesirable and we can do better than that. 3.1 Root distribution The distribution of roots has a great impact on how well the feathers can be arranged, especially for animation. In [10], the roots are generated randomly by importance sampling according to feather density (see Fig. 1a). The author men-
Incremental collision-free feathering for animated surfaces
885
Algorithm 1 Orientation Field-Guided Sampling
Fig. 1 Fish scales sampled by different methods. a Random [10]. b Our method (θ = π4 )
Fig. 2 Illustration for the sampling algorithm. pi is where we start and pk is picked after one iteration
tioned that better feathering result can be obtained by using more advanced sampling strategies [13,18]. However, these methods are overkill with regard to our problem. Apart from meeting the density field, the only property we desire is the alignment to the orientation field, similar to the stripe patterns [9]. This property is especially useful for generating the roots of scales on a fish model, since the scales are always regularly distributed (see Fig. 1b). Given an arbitrary point pi on S, we compute its orientation oi and the feather density around it [10]. The density, which is inversely related to the width of feather i, can be represented as the radius di of Poisson disk: for any nearby points pi and p j , G(pi , p j ) > max(di , d j ) should be satisfied, where G(pi , p j ) is the geodesic distance between pi and p j . With these notations, our orientation field guided sampling is explained in Algorithm 3.1 and Fig. 2. In the algorithm, Rotate(o˜ i , θ ) rotates o˜ i counterclockwise on pi ’s tangent plane by an angle θ and returns the new
Generate a large sample pool P containing uniform random samples on the surface. i ← Random(1, |P|) loop Ni ← {p j | G(pi , p j ) ≤ di , p j ∈ P} for p j ∈ Ni do Remove p j from P end for Ci ← {p j | di < G(pi , p j ) ≤ 2di , p j ∈ P} for p j ∈ Ci do if G(pi , p j ) ≤ d j then Remove p j from Ci Remove p j from P end if end for if P = ∅ then break end if if Ci = ∅ then i ← Random(1, |P|) continue end if o˜ i ← Rotate(o˜ i , θ) pi ← W alk(pi , o˜ i , di ) k←1 for j ← 2 to |Ci | do if G(pi , p j ) < G(pi , pk ) then k← j end if end for i ←k end loop
vector. W alk(pi , o˜ i , di ) moves from pi along the direction of o˜ i by distance di and returns the new point, which should be still on the surface. This operation can be achieved by continually projecting o˜ i onto the incident face when crossing an edge of the mesh, until the distance di is used up. When obtaining Ni and Ci , geodesic distance is involved, which is nontrivial to compute [15,17]. However, the distances in the algorithm are only between nearby samples, and in fact, we do not need exact geodesic distances. Therefore, a fast approximation like [3] would suffice. The algorithm is simple and easy to implement and effective in practice. It generates tightly packed samples and has the advantage of flexibility. By assigning θ with different values, we can obtain different distribution patterns, as shown in Fig. 3. We can even change the randomness of root distribution by manipulating θ . For example, let the randomness be u 0 ∈ [0, 1]. Before evaluating Rotate(o˜ i , θ ), we can generate a random number u ∈ [0, 1]. Only if u > u 0 do we use the preset θ ; otherwise, we would use a random angle for it. In nature, feathers and scales are usually staggered (Fig. 4b), instead of aligned to specific curves or lines. Therefore, in the context of feathering, we would like to use θ = π/4, so that adjacent layers of feathers are most stag-
123
886
L. Liu et al.
Fig. 4 Sampling results of different alignments, controlled by θ. Staggered distribution is more suitable for feathers (b), while feathers aligning completely to the orientation field could induce unpleasant artifacts (a). a θ = 0. b θ = π4
Fig. 3 The influence of θ in sampling. The feathers in c and d were grown from the roots in a, b, respectively. The green lines show the orientation field. a, c θ = 0. b, d θ = π4
gered. Using θ = 0, on the other hand, is likely to cause unpleasant artifacts, e.g., uncovered gaps (Fig. 4a). 3.2 Improved priority definition Looking into the formula of priority difference (Eq. 2), we find a critical flaw that prevents us to use it for animation: it directly uses the root’s orientation, which will cause the priorities to change after adjustments. In other words, before adjustments, a linear ordering is obtained using Eq. (2). After adjustments, the ordering may change because the orientations have been adjusted. In such cases, we would need to adjust all the feathers again in order to respect the ordering and then repeat this process until the ordering converges. To avoid this situation, let us first consider why the orientation appears in Eq. (2): the orientation is used to measure how much a feather is in front of another feather. Understanding this, we can tell it is not necessary to use the orientation itself. Recall that the orientation adjustments contain only pitch and roll, which means o A is always kept in the o A n A -plane, no matter how many adjustments are made. As explained in [10], this is to ensure the smoothness of the orientation field. Therefore, o˜ A is unchanged after adjustments and should replace the o A in Eq. (2). Another improvement we can make is to add one more factor, −λ|b A · (r A − r B )|, 0 ≤ λ < 1, into Eq. (2). It measures how much root B is aligned with the orientation of root A. This makes sense because when another root is farther away from the rachis of the feather, the feather on that root is less likely to have influence on this feather. But compared to other two factors, this factor is less significant and should have a much smaller weight λ.
123
Fig. 5 a The green feather is prior to (partially covered by) the red one. b After slight deformation of the surface, the red one becomes prior instead
As a result, we define the final priority difference as: P AB = PAB − PB A , where PAB = o˜ A · d AB − γ (n A · d AB ) − λ|b A · d AB |, b A = (n A × o A )/|n A × o A |, o˜ A = b A × n A , and d AB = r B − r A , subject to 0 ≤ λ < γ < 1, A ∈ N B , B ∈ N A .
(3)
In our experiments, we used γ = 0.6 and λ = 0.3 and gained satisfactory results. 3.3 Incremental adjustment Equipped with the revised priority definition, the ordering is now consistent before and after adjustments. However, the ordering also depends on the surface geometry (the relative positions and surface normals of the roots), which could change during the animation (see Fig. 5). If we ignore this fact and make no change to the ordering, feather i will be pushed up to avoid collision with feather j. And when such effect keeps accumulating, more and more feathers will be fluffed up, making it impossible to adjust them properly (Fig. 6a, c). Therefore, reordering is necessary to increase the stability of incremental adjustments. Since the priority change is caused by the local surface deformation, we only need to examine the roots whose positions are deformed differently from the neighboring ones.
Incremental collision-free feathering for animated surfaces
Fig. 6 a, c Incremental adjustments for animation made by [10]. b, d Our results
Let us denote the affine transformation matrix for root i, from frame k − 1 to frame k, as Aik . The priority of root i needs to be recomputed only if there exists an root j ∈ Ni∗ that Akj = Aik . The set of such roots is called Rk . For root i ∈ Rk , we recompute the priority differences between root i and root j ∈ Ni . If Pi j < 0 but j ∈ Ni∗ , we need to reorder this root pair such that root i comes prior to j in the ordering. However, we cannot accomplish this by simply removing B from N∗A and inserting A to N∗B . Every root is related to other neighboring roots; thus, any ordering change should consider the effect on the related roots. Recall that the ordering is computed from a DAG (Sect. 2.2), where each directed edge represents a priority difference. A sign change of the priority difference means the corresponding directed edge needs to be reversed. The reverse operation of edge A → B can be divided into two operations: delete the edge A → B and then insert a new edge B → A. Edge deletion is trivial and will cause no change to the ordering, but inserting an edge to the DAG may require reordering. The problem of updating the topological order of a DAG after edge insertion is called the dynamic topological order (DTO) problem [12]. There have been several typical works on the problem, e.g., AHRSZ [1], MNR [11] and PK [12]. Of these, we find Algorithm PK [12] very suitable for our problem and has the advantages of simplicity and efficiency. It can also detect if any cycle is introduced when inserting an edge. If the edge insertion gives rise to a cycle, we need to find out which edge in the cycle has the smallest priority difference. If that edge is the one we are inserting, the insertion should abort and the previously deleted edge will be restored. Otherwise we delete that edge (no change in ordering is required) to break the cycle and finish the insertion.
887
Denote the set of roots that requires readjustment for frame k as R∗k . For every root i ∈ Rk , insert i into R∗k . If edge A → B is reversed by reordering, root A, which becomes prior to root B, should also be inserted into R∗k . In [10], the author hinted that the computation could be saved by applying only pitch adjustment, i.e., skipping the first and second steps of the adjustment (Sect. 2.3). The justification for this is that without reordering, the feather arrangements could be assumed steady; thus, rolling is not necessary. After enabling reordering, however, the rolling operation (i.e., the second step) must be employed. Consequently, the first step should be applied too, which acts as a preparation step for the second step. To sum up, for every root in R∗k , we perform the whole steps of height field based adjustments in the updated order. To ensure all dependent feathers are updated, if the adjustment to root i ∈ R∗k ends with nonzero (or within a certain threshold θs ) pitch or roll angles, we also need to insert the roots j ∈ Nk \N∗k into R∗k .
4 Results The implementation of our system is based upon the feathering system of Liu et al. [10] and benefits from libigl [7]. The experiments were performed on a machine with a 3.4-GHz Intel Core i7 processor using a single thread. GPU was not utilized in our implementation. Theoretically, sampling only needs to be performed once for each model; therefore, we are not very concerned about its efficiency. In fact, we are willing to spend more time and computation in order to get better root distribution, because the distribution plays such an important role in the final look of feathers. In practice, due to the randomness of the sample pool, we would even run several times of the sampling algorithm for each model and pick the best outcome, which takes only several seconds. For another, the performance of our sampling algorithm obviously depends on the size of the initial sample pool. By using a larger sample pool, the computation increases but, at the same time, the resulting samples will be more tightly packed. Figure 3 shows the influence of θ on the sampling results. As explained in Sect. 3.1, θ = π/4 is very suitable for generating the roots of feathers or scales. The incremental adjustment for animation consists of two parts: reordering and readjustment. The reordering part hardly affects the performance, because the cycles that arise between frames tend to be local, which means they are easy to detect, of short lengths and trivial to break. Furthermore, according to our experiments, the number of roots that require reordering is relatively small. In most cases, less than 2% of affected roots would report priority changes (see the sixth column of Table 1).
123
888 Table 1 Average per-frame timings for incremental adjustments, comparing the previous system [10]
L. Liu et al.
Model
Eagle Flamingo Armadillo
#Adjusted feathers
#Collision detections per feather
Previous
Ours
Previous
Ours
924.8
1015.9
11.3
22.4
854.0
976.8
16.8
25.3
661.9
738.9
16.0
25.2
2300.8
2782.2
17.7
1298.1
1744.0
1331.7
1764.2
#Priority changes
Frame cost Previous (s)
Ours (s)
4.8 (0.47%)
0.13
0.22
0.4 (0.04%)
0.14
0.20
11.7 (1.6%)
0.12
0.17
26.7
16.7 (0.6%)
0.47
0.70
17.5
24.8
36.6 (2.1%)
0.18
0.32
17.1
24.4
32.5 (1.8%)
0.18
0.31
Each row was obtained by applying the same transformation sequence to the model using the two methods. The cost of reordering was trivial (about 1 ms per frame) and thus not listed. The angle threshold θs was set to 0.05 (about 3◦ ) in the tests. Our method costs about 55% more time due to introducing reordering and the roll adjustment
55% (Table 1). However, our method avoids the coherence problems and significantly improves the stability of incremental adjustments, in that it is capable of maintaining the compactness and consistency of feathers during large deformation of the surface, as shown in Fig. 6. We use fine dimensions of height fields in our experiments to obtain better precision for collisions. In practice, if higher performance is preferred, we may use rougher height fields, as discussed in Liu et al. [10]. Figure 7 shows more animated feathering results using our system and demonstrates its effectiveness and robustness.
5 Conclusion
Fig. 7 Left feathers generated from a static pose. Right incrementally adjusted feathers after character animation
Fig. 8 Originally irrelevant feathers could come close to each other after animation but fail to affect each other
As for readjustment, as Liu et al. [10] skipped the first two steps of adjustment and we do not, our method caused more feathers to be adjusted and increased the time cost by about
123
We present a feathering system to incrementally adjust the feathers during surface deformation, so that they stay collision-free and consistent with previous poses. We propose a simple sampling algorithm to generate staggered root positions based on the orientation field, which helps us obtain much better appearance of feathers. We also improve the formulation of growth priority and provide details on how to dynamically reorder necessary roots and perform readjustments, which significantly improves the stability. There still exist some limitations, though. For example, during animation, two feathers that are originally ‘far away’ and irrelevant may get close to each other during animation (see Fig. 8). In our current framework, the neighborhood is determined before animation and stays unchanged. Therefore, such pair of feathers cannot affect each other while they should. Finding a way to dynamically sort out the influencing areas (N∗ ) of each feather would further improve the robustness. Acknowledgements We would like to thank the anonymous reviewers for their insightful comments and suggestions to improve the quality of the paper. This research is supported by NSFC (61632003, 61672502,
Incremental collision-free feathering for animated surfaces 61572316), Macao FDCT Grants (068/2015/A2, 136/2014/A3) and Univ. of Macau Grant (MYRG2014-00139-FST).
References 1. Alpern, B., Hoover, R., Rosen, B.K., Sweeney, P.F., Zadeck, F.K.: Incremental evaluation of computational circuits. In: Proceedings of the First Annual ACM-SIAM Symposium on Discrete Algorithms, SODA ’90, pp. 32–42 (1990) 2. Bangay, S.: Animated feather coats using field lines. In: Proceedings of the 5th International Conference on Computer Graphics, Virtual Reality, Visualisation and Interaction in Africa, AFRIGRAPH ’07, pp. 169–176 (2007) 3. Bowers, J., Wang, R., Wei, L.Y., Maletz, D.: Parallel Poisson disk sampling with spectrum analysis on surfaces. ACM Trans. Graph. 29(6), 166:1–166:10 (2010) 4. Chen, Y., Xu, Y., Guo, B., Shum, H.Y.: Modeling and rendering of realistic feathers. ACM Trans. Graph. 21(3), 630–636 (2002) 5. Franco, C.G., Walter, M.: Modeling the structure of feathers. In: SIBGRAPI, p. 381 (2001) 6. Hadap, S., Magnenat-Thalmann, N.: Modeling dynamic hair as a continuum. Comput. Graph. Forum 20(3), 329–338 (2001) 7. Jacobson, A., Panozzo, D., et al.: libigl: a simple C++ geometry processing library. http://libigl.github.io/libigl/ (2014) 8. Kaufman, D., Chan, J.: Stuart little 2: let the feathers fly. In: ACM SIGGRAPH 2002 Course Notes (2002) 9. Knöppel, F., Crane, K., Pinkall, U., Schröder, P.: Stripe patterns on surfaces. ACM Trans. Graph. 34, 39:1–39:11 (2015) 10. Liu, L., Li, X., Chen, Y., Liu, X., Zhang, J.J., Wu, E.: An efficient feathering system with collision control. Comput. Graph. Forum 34(7), 279–288 (2015) 11. Marchetti-Spaccamela, A., Nanni, U., Rohnert, H.: Maintaining a topological order under edge insertions. Inf. Process. Lett. 59(1), 53–58 (1996) 12. Pearce, D.J., Kelly, P.H.J.: A dynamic topological sort algorithm for directed acyclic graphs. J. Exp. Algorithmics 11(1.7), 1–24 (2007) 13. Peyrot, J.L., Payan, F., Antonini, M.: Feature-preserving direct blue noise sampling for surface meshes. Eurographics (Short Paper Session), Girona, Spain, pp 9–12 (2013) 14. Streit, L., Heidrich, W.: A biologically-parameterized feather model. Comput. Graph. Forum 21(3), 565–573 (2002) 15. Surazhsky, V., Surazhsky, T., Kirsanov, D., Gortler, S.J., Hoppe, H.: Fast exact and approximate geodesics on meshes. ACM Trans. Graph. 24(3), 553–560 (2005) 16. Weber, A.J., Gornowicz, G.: Collision-free construction of animated feathers using implicit constraint surfaces. ACM Trans. Graph. 28(2), 12:1–12:8 (2009) 17. Xin, S.Q., Wang, G.J.: Improving Chen and Han’s algorithm on the discrete geodesic problem. ACM Trans. Graph. 28(4), 104:1–104:8 (2009) 18. Xu, Y., Hu, R., Gotsman, C., Liu, L.: Blue noise sampling of surfaces. Comput. Graph. 36(4), 232–240 (2012)
889 Le Liu received his B.Sc. degree from Sun Yat-Sen University, Guangzhou, China, in 2011. He is currently a Ph.D. candidate at the State Laboratory of Computer Science, Institute of Software, Chinese Academy of Sciences. His research interests include computer graphics and geometry processing.
Xuehui Liu received the Ph.D. degree in 1998 from the Institute of Software, Chinese Academy of Sciences. Since then she has been working at the Institute of Software, Chinese Academy of Sciences, and is now an associate professor. Her research interests include computer graphics and physically based modeling/simulation.
Bin Sheng received his B.A. degree in English and B.E. degree in computer science from Huazhong University of Science and Technology in 2004 and M.S. degree in software engineering from University of Macau in 2007 and Ph.D. degree in computer science from the Chinese University of Hong Kong in 2011. He is currently an associate professor in Department of Computer Science and Engineering at Shanghai Jiao Tong University. His research interests include virtual reality, computer graphics and image-based techniques.
123
890
Yanyun Chen received his B.Sc. and M.Sc. degrees from China University of Mining and Technology in 1993 and 1996. He worked for Microsoft Research Asia and Autodesk China R&D Center after receiving his Ph.D. degree in computer science from the Institute of Software, Chinese Academy of Sciences, in 2000. He became a research professor at the State Key Laboratory of Computer Science, Institute of Software, Chinese Academy of Sciences, since 2010. His research interests include realistic image synthesis, modeling and rendering of complex surface appearance, and virtual reality.
123
L. Liu et al.
Enhua Wu completed his B.Sc. study from Tsinghua University and received his Ph.D. degree from University of Manchester, UK, in 1984. He has been working at the State Key Lab. of Computer Science, Institute of Software, Chinese Academy of Sciences, since 1985 and at the same time invited as a full professor of University of Macau since 1997. Dr. Wu has been invited to chair or co-chair various conferences or program committees including SIGGRAPH Asia 2016, ACM VRST2015/2013/2010, WSCG2012. He is an Associate Editor-in-Chief of the Journal of Computer Science and Technology since 1995 and the editorial board member of TVC, CAVW, Visual Informatics, IJIG, IJSI. He is a member of IEEE & ACM and Fellow China Computer Federation (CCF). His research interests include realistic image synthesis, physically based simulation and virtual reality.