必考的就是渲染管線了
幾何階段
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都沒這麼讓我感覺
不過輻射度效率特別低