必考的就是渲染管线了
几何阶段
obj space->world space->eyespace->project to CVV to clip(frustum culling)->project to screen coordinate space
->primitive assmbly
光栅阶段
->rasterization->pixel operation(alpha test, stencil test, depth test, blending..)
还是用我自己的话总结一下吧 之前是几个变换用矩阵乘就可以
viewspace之后是cvv裁剪 再投到屏幕 到目前为止都是对顶点进行操作,顶点可以光栅化吗 明显不是。
光栅化是针对面的。也就是说中间需要图元组装这一步,就是把刚刚处理完的顶点在连成面(比如三角形),所以背部剔除之类的也是在这里进行
然后把面转成像素点,也就是光栅化,然后对这些像素进行各种处理吧纹理操作,各种混合
===========
stencil buffer for mark
framebuffer=colorbuffer+ z buffer(depth)
OpenGL---GLSL
Direct3D---HLSL
NVIDIA----Cg
----------------------------------------------------------------
Dx
Local Space->World Space->View Space->Backface Culling->Lighting->Clipping->Projection->
Viewport Space->Rasterization
这个渲染管线还是要重新把realtime rendering里面背一遍''''''照dx这么答 被挑毛病了'''merge那些
前面两个版本都不好讲得乱七八糟甚至矛盾realtime rendering上面这个为准吧
Application stage
Geometry stage
Model&View transform->Vertex shading->Projection->Clipping->Screen Mapping
CVV
Rasterizer stage
=========================================
第二题
skinned mesh
meshvex=weight1*bone1*vmesh+weight2*bone2*vmesh+......
http://blog.csdn.net/n5/article/details/3105872。
这个没问
-==============
第三题 光照模型
Lambert的漫反射模型
I=I+I=KI+KI(N dot L)
第一个I是各向等量的环境光产生的,第二个I是有方向光源产生的。 k为反射系数(0,1),I为光源光强随距离增加而衰减,N法线向量L顶点到光源单位向量
phong的镜面反射模型(高光)
I=KI(V dot R)n
n为高光指数,V顶点到视点单位向量,R反射光方向
既有漫反射又又镜面反射的 就是把前两个加起来
Blinn-phong
I=KI(N dot H)n
H=normlize(L+V) L=light to pos, V=pos to view
第四题 alpha混合
问这个肯定是在放水了
result = ALPHA * srcPixel + ( 1 - ALPHA ) * destPixel
可惜这次面试拒绝放水
水的波动效果的实现
最崩溃的是 deferred shading''''
基本上 所有面试官都会拿他们自己遇到的问题 作为开放式问题来提问
3d场景 2d人物
随机弹坑造成的mesh凹陷 这个有个小trick 关闭zbuffer
多动态光源的光照 就是deferred shading
---------
这就让我想起来另外两个觉得很有意思的trick
shadowmap selfshadow aliasing 这个渲染产生自阴影的mesh的时候 backculling那里 剔除front 渲染back
还有就是辐射度算法 从每一个patch看这个世界 看到对他影响的所有像素 还有5个相机合成半立方体
http://freespace.virgin.net/hugo.elias/radiosity/radiosity.htm
http://dev.gameres.com/Program/Visual/3D/Radiosity_Translation.htm
虽然很老 但是这个视野感觉特别 有创意
deffered shading都没这么让我感觉
不过辐射度效率特别低