终于写出了一个能看的效果,来讲讲我是怎么做的

首先,参考了一下阴影绘制的过程,以灯光为参考中心,绘制出一个模型的z-buffer图,储存了到灯光最近的点的距离,并储存为一个贴图

然后,回到眼睛为参考中心,将模型上的每一点还原到之前那个以灯光为参考中心的坐标世界中,求出其坐标,将它的x, y坐标由 [-1, 1] 放缩为 [0, 1] ,因为在贴图中坐标范围是 [0, 1]。然后将两个z值相减,就能得到从灯光看过去,模型每个面片的“厚度”。

厚度的不同决定了光线在皮肤中的衰减程度。加上一张一维的深度颜色贴图,就能得到一个比较好的结果啦,可以从下图中看到,耳朵以及皮肤的边缘处都是红色的

然后将这个效果叠加到原来的贴图上

对比一下原图,看上去红润了许多

再换个角度看看-鼻子周围比较薄的皮肤出现了红红的效果

对比原图

前几天算是弄懂了TBN矩阵然后写了一个Normal Mapping、写一写自己的理解吧

因为Normal Mapping的图是每个点的法向量,是以每个点为原点的,而点光源的位置啥的是在世界坐标系/物体坐标系,不是在当前计算的这个点的坐标系,所以在计算时用到法向量贴图的数据的话,必须把其他的元素和这个点法向量转换到同一坐标系 

Σ( ° △ °|||)︴

然后比较简单的一种转换方式就是建立这样的坐标系:以这个点为原点,UV方向为两个轴,UV方向的叉乘方向为第三个轴,然后这个点的法向量不变,其他元素的位置(比如点光源的坐标)转换到这个坐标系,进行计算。这个坐标系定义的空间就叫做Tangent Space,切向空间。TBN矩阵就是在世界空间和切向空间直接坐标转换的一个矩阵。

TBN矩阵中 ((据说是Tangent, Bitangent, Normal,一般只需要知道Tangent和Normal就可以了。在一些厉害的3D物体格式,比如fbx 3ds等,是可以在模型导出的时候通过建模软件直接导出Tangent和Normal的值的。然而,在obj格式的模型中,需要自己计算Tangent和Normal。

计算Normal的方法很简单,先求每个面的法向量,然后对于每个点,求跟它有关系的每个面的法向量的平均值,每个面的法向量只需要叉乘一下相邻两条边向量就好(不管是三角面片还是四元面片)。

计算Tangent的基本思想和Normal差不多,求每个面的Tangent,然后对于每个点求一个平均值。求每个面的Tangent就需要一些数学计算。原理就不说了,反正我大概意会了一下……这个教程讲的非常好http://www.terathon.com/code/tangent.html

贴个法相贴图的效果图

(o゚ω゚o) 

今天换了NVIDIA GeForce GTX750(

原来编译用的显卡是Intel HD Graphics 4600

)跑我的毕设程序,竟然Shader编译不过了。。。

一开始以为是显卡驱动的问题,重装驱动之后问题仍然存在、

后来发现是Shader文件的读入出错了

输出了一下报错信息: 

(0) : error C0000: syntax error, unexpected $end at token "<EOF>"

因为我在读入Shader文件的时候用的是fread()函数,读到最后一行的时候包括了换行符

后来用getline一行一行读并在适当的时候添加”n”,保证最后一行没有换行符,然后可以编译过了。。。


好坑啊QAQ

direct study weekly report(Jan25-Jan31)

Brief summary

  1. set up humanoid rig with standard animation pack
  2. set up humanoid rig with Andrew’s model
  3. use animation retargeting to create new animation sequence for Andrew’s model

Key activity

I use the skeleton in standard animation package. All the bones work fine with the humanoid rig(even the names are the same).

image

retargeting manager with skeleton1

Then I do the same thing with skeleton2. Most of the bones work good with the correct hierarchy while I miss some pieces of joint rotation as well as some advanced bones. I also get extra bones on the feet.

image

retargeting manager with skeleton2

After generating new animation sequence, I get a couple of new animation sequence, most of which are super wired… The fingers look like they are crushed by something, which might be caused by missing joint rotation. Also the feet look irregular bending which might be caused by extra bones.

image

crushed hands

image

bending feet

Anyway, we are not going to use these funny animation sequences.. Maybe I should go back do Daz 3D if I want to fix these skeletons.

Reference

To do

  • set up the character, blend animation sequence together
  • look through smart body

direct study weekly report(Jan18-Jan24)

Brief summary

  1. set up characters with standard animation pack
  2. handle user inputs and parse input to control the actual movement

Key activity

This week I manage to set up characters with standard animation pack which can handle keyboard events and parse it to control actual movement. First I create demo skeleton animation using unreal engine editor. As fig1, I can change speed and scale axis range. Then I link different animation sequence together by the defined transition rules.

image

edit skeleton animation

image

arrange animation sequence

image

add transition rules

Reference

To do

  • set up the character using Andrew’s assets

direct study weekly report (Jan11-Jan17)

Brief summary

  1. static mesh pipeline 
  2. getting started with Daz3d and Unreal Engine

Key activity

This week I am working on FBX animation pipeline with Unreal Engine4.6. There are three methods of import fbx files in UE, static mesh, skeletal mesh and animation options. The problem is all the textures should be a power of two. So I edited the textures in photoshop manually and reassigned them to the model. (I have no idea how to automatically change the textures.) Then it looks good in UE.

image

model in Maya

image

mesh in UE without textures

image

finally get textures on

I also try to import the skeleton and see if it can works on other models. But unfortunately the size of the model is not the same.

Issue

  • all the textures should be a power of two
  • can’t get skeleton work on other models

Reference

To do

  • modify textures in batch processing
  • animation pipeline

TA~DA~~  成品

IAT343上周的作业是制作一个5秒的3d小短片,因为这次的重点是动画,所以想做些有趣的,又不花时间建模的,又有情怀的。。于是试着给box做了个3d小短片。

上课提到1930年由沃特迪士尼工作室建立了12个动画基本原则,之前读过一篇讲UI动画的文章,里面也摘录了一些经典原则。。果然是应用广泛。。。

说说制作这个小视频的过程,U盘参照Kingston’s Data Traveler HyperX建的,参考了朋友的实物比例,贴图材质的时候只找到1TB的截图。。于是用ps抠下了U盘身上的那两个logo,放到金属贴图上、渲染用了mental ray,不知道为何maya2015的材质包里没有直接的Metal小球, 用mental ray调了好久的参数。。。((最后渲染效果还是不咋地。。。

好的要说动画了,做动画的时候没用骨骼动画,用了关键帧,因为部件的移动方式都是比较机械的,所以觉得没必要用骨骼。虽然最后做到box那个logo那边觉得可以加一些面部表情或者形态变化来丰富角色,但是最后由于某些原因没有完成(待会儿会提到)、

一开始觉得让一个polygon变形是比较容易的事情,但是关键帧只会记录polygon的放缩、物理位置的变化以及角度变化,如果在某一帧改变了polygon的具体形态,那么这个改变是全局的。咨询了TA,只得到了黑科技。。制作两个polygon在两帧之间快速切换,把原始polygon移动到很远很远或者放缩成很小很小。。这样导致的问题是polygon之间过渡非常生硬。。比如窝这边颜色以及画风的变化。。所以在变形的时候放弃了让polygon本身产生变形的想法,更多的采用放缩、角度变化。。

变形之后的那个画风看起来比较卡通,是用了cel shading,在render模式的面板里有tone选项,在这边可以像添加蒙板一样给3d物体添加一个纯色,或者添加一个线框。

debug的过程非常痛苦。。。为了防止渲染到一半电脑挂掉,我采用了逐帧渲染成png序列,然后导入ae编辑、经常出现黑科技里提到polygon在变换的时候出现模型交叉的情况,看起来非常蠢。。所以渲染到一半发现有某帧不对劲了,赶紧调整,继续渲染。。渲染一张图大概要10来秒,这是个100来帧的动画,所以渲染一遍大概需要花非常漫长的时间。。窝大概渲染了十几回。。才最终调整好模型。。。这也是之后没有时间折腾骨骼动画的原因。。。

不是很会用ae,看了个basic tutorial就上手,对其插入bgm却只能等到视频渲染完才能听到声音的feature非常不理解。。。于是渲染视频又不下5遍。。。

最后时间还是挺仓促的,变形的过程也并不是自己原来开的脑洞。。

今天评分结果出来了。。给分还是蛮不错的。。。

继续探索。。。

朋友用cinema4d建了audi-rsq的模型,准备导入unity

这是在c4d里渲染的样子

unity和maya都不支持c4d格式、咨询了一下TA,fbx格式更加适合在多平台编辑模型

用fbx格式导入unity发现两个问题

1、smooth参数和texture并没有被导出

2、模型看起来是破的。。。

第一个问题还好了。。把模型导入maya,重新平滑一遍,导入材质,解决、第二个问题比较麻烦,不知道原因。。

在maya里render了一遍,模型看起来是好的,至少是完整的,但是在预览视图里看的时候还是发现了有些面片的颜色比较深,有些面片的颜色比较浅

在unity里重新审视了一遍这辆小车,发现当视线进入小车的时候(也就是从小车内部看小车的时候),原本可以看到的面片不见了,看不到的面片出现了。。

于是就猜想。。unity里面片分正反?查了一下文档,果然如此。。。

但是unity里不能直接编辑面片,于是把模型导入maya,一块一块检查面片,花了半小时,终于把反过来的面片挑出来了,具体的操作在normals–>reverse

再导入unity,看起来一片大好了。。。

终于解决了。。

在Flat Design, Long Shadow之后,Low Poly算是最近平面设计中的一个新趋势。第一次接触Low Poly是在3dsMax里,当时为了模拟冰山的效果,通过增加点线面数,使多边形表面变得凹凸,Low Poly就是指用相对少的点线面来制作低精度模型。

贴一些别人的作品

制作Low Poly效果的思路很简单,以一张真实图片为底,按照轮廓,用三角形分割,越是颜色变化大的地方越细分,取每个区域内的某一颜色为整片区域染色。

这是一个用AI和PS纯手工制作Low Poly的教程

这是一个网页版Low Poly制作工具的github地址

于是,算是自黑吧。。用自己的照片做了个实验。。

高能预警。。。

总结了两点经验吧。。

  1. 照片的选取最好是侧脸,最好是脸部五官的轮廓、明暗都能看的很清楚的照片
  2. 外轮廓、颜色的交界处要增加锚点的数量,颜色变化相对平缓处可少添加一些锚点

就是这样的。。喵!