青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

戰魂小筑

討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

昨天研究了下Node Based Material System, 虛幻3的材質系統是沒戲了,還沒用會呢. 不過Max的一個插件: ShaderFX倒是給我很大的啟發,這東西就是結點型材質系統, 而且能生成真正的FX. 不像虛幻3那么不厚道,只是局部顯示HLSL.

image

經過分析ShaderFX導出的Shader文件, 發現其標準材質系統使用的就是逐像素光照模型, 而不同的Materials對應的就是一種Shader處理管線, 分別可以處理各種光照,甚至達到Compositor的混合效果. 而Shader Code Generation這個環節,也遠沒有虛幻3那樣復雜(虛幻是神,咱們不評論神到底如何),只是將光照需要的各種分量,例如Emissive, Ambient, Diffuse, Specular等根據各分量提供的計算因子直接嵌入到Pixel Shader主函數體即可.

逐頂點光照在前面的文章已經有介紹,代碼相對簡單, 因此以后在材質系統中準備直接上逐像素光照. 因此,需要在我的模型插件中加入Tangent及Binormal支持.

這里是一篇很不錯的講解Tangent Space Vector的文章. 文中有貼過OGRE的Tangent計算代碼,不過查閱OGRE 1.65代碼后發現,OGRE現在根本就不用這個函數計算Tangent,而是更為復雜的一個類.

最終,我還是使用了大野豬的ev3d的max插件代碼, 如果需要的話,可以去他博客找svn下載

 

bool CMaxMesh::__cacl_tbn(sFace_t& face,bool isSkin)
{
    Point3  normal[3];
    Point3  Tangent; 
    Point3  p[3];
 
    assign(normal[0],m_MeshData.m_VertexData.m_Normals[face.vert[0]]);
    assign(normal[1],m_MeshData.m_VertexData.m_Normals[face.vert[1]]);
    assign(normal[2],m_MeshData.m_VertexData.m_Normals[face.vert[2]]);
 
    if(isSkin == false)
    {
        assign(p[0],m_MeshData.m_VertexData.m_Positons[face.vert[0]]);
        assign(p[1],m_MeshData.m_VertexData.m_Positons[face.vert[1]]);
        assign(p[2],m_MeshData.m_VertexData.m_Positons[face.vert[2]]);
    }
    else
    {
        assign(p[0],m_MeshData.m_VertexData.m_VertexWeights[face.vert[0]].m_InitPos);
        assign(p[1],m_MeshData.m_VertexData.m_VertexWeights[face.vert[1]].m_InitPos);
        assign(p[2],m_MeshData.m_VertexData.m_VertexWeights[face.vert[2]].m_InitPos);
    }
 
 
    sUVCoord_t uv[3];
    uv[0] = m_MeshData.m_VertexData.m_UVChannels[0][face.vert[0]];
    uv[1] = m_MeshData.m_VertexData.m_UVChannels[0][face.vert[1]];
    uv[2] = m_MeshData.m_VertexData.m_UVChannels[0][face.vert[2]];
 
    Point3  e1 = p[1] - p[0];
    Point3  e2 = p[2] - p[0];
    sUVCoord_t u1 = { uv[1].u - uv[0].u , uv[1].v - uv[0].v};
    sUVCoord_t u2 = { uv[2].u - uv[0].u , uv[2].v - uv[0].v};
 
    float det =  ( u1.u * u2.v - u2.u * u1.v);
    if(det == 0.0f)
    {
        Tangent = e1;
    }
    else
    {
        Tangent = u2.v * e1 - u1.v * e2;
    }
 
    //從Normal 和 Tangent里重新計算出Tangent,因為面的Tangent和頂點的Normal可能不垂直
    Point3 final_tangent;
    for(int i = 0 ;i < 3 ; ++i)
    {
        Point3 binormal  = CrossProd(normal[i],Tangent);
        final_tangent = CrossProd(binormal,normal[i]);
        final_tangent.Normalize();
        m_MeshData.m_VertexData.m_Tangents[face.vert[i]].x += final_tangent.x;
        m_MeshData.m_VertexData.m_Tangents[face.vert[i]].y += final_tangent.y;
        m_MeshData.m_VertexData.m_Tangents[face.vert[i]].z += final_tangent.z;
 
    }
    return true;
}

 

感謝大野豬友情出演,正片開始:)

image

posted on 2010-06-02 15:55 戰魂小筑 閱讀(2121) 評論(2)  編輯 收藏 引用 所屬分類: 渲染 Shader 引擎

評論

# re: 曬下材質系統進度: 導出Tangent Space Vector 2010-06-03 11:22 小熙
可以看看游戲編程精粹5上的Shader重組,另外,GPU Gems 1 書上33章上的材質樹,使用cg實現,材質類用到了Interface和函數重載  回復  更多評論
  

# re: 曬下材質系統進度: 導出Tangent Space Vector 2010-06-03 18:01 戰魂小筑
@小熙
呵呵,這2個都看了. Gem5那個太簡單, Cg暫時不考慮
ShaderFX的模型很好,再結合下虛幻的,那就齊了
  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲一区二区三区午夜| 美国十次成人| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产精品一区二区男女羞羞无遮挡| 蜜桃av综合| 国产视频欧美视频| 一本色道久久88综合日韩精品| 亚洲国产精品毛片| 欧美在线视频一区| 欧美伊人久久久久久久久影院| 欧美精品一区二区视频| 欧美99在线视频观看| 国内精品视频在线观看| 亚洲一区二区三区高清| 一本色道久久88综合亚洲精品ⅰ| 乱码第一页成人| 麻豆av福利av久久av| 国产欧美日韩精品一区| 亚洲一区亚洲| 亚洲欧美日韩国产中文| 亚洲精品视频一区二区三区| 欧美一区二区三区免费看| 欧美午夜精品久久久| 欧美影院午夜播放| 欧美连裤袜在线视频| 欧美国产日韩免费| 亚洲国产另类久久精品| 麻豆91精品| 欧美激情一区二区三级高清视频| 精品51国产黑色丝袜高跟鞋| 久久精品国产成人| 久热精品在线视频| 伊甸园精品99久久久久久| 久久精品视频在线观看| 女女同性精品视频| 亚洲成人在线| 欧美大胆人体视频| 亚洲三级观看| 亚洲素人在线| 国产九九精品| 久久九九免费视频| 欧美激情国产日韩精品一区18| 亚洲欧洲一区二区天堂久久| 欧美理论电影在线观看| 一本一本a久久| 欧美一区二区三区在线免费观看| 国产精品视频福利| 久久精品国产一区二区三区免费看| 免费成人av在线看| 日韩视频一区二区三区在线播放免费观看 | 激情久久五月天| 欧美高清不卡在线| 一区二区高清| 久久久亚洲一区| 亚洲精选在线| 国产精品三级久久久久久电影| 校园春色国产精品| 欧美激情国产高清| 亚洲天堂网站在线观看视频| 国产一区二区三区在线观看视频| 久久亚洲电影| 国产精品99久久久久久久久| 久久婷婷国产综合尤物精品 | 国产一区二区三区久久精品| 美女脱光内衣内裤视频久久影院 | 最新国产成人在线观看| 欧美性猛交xxxx乱大交蜜桃| 久久国产精彩视频| 日韩亚洲欧美在线观看| 久久精品国产亚洲高清剧情介绍| 亚洲第一中文字幕| 国产精品成人午夜| 久久影院午夜论| 亚洲视频久久| 亚洲电影免费观看高清完整版在线| 亚洲永久精品国产| 亚洲激情中文1区| 国产精品一区二区视频| 欧美精品在线极品| 久久精品国产99| 亚洲午夜激情免费视频| 欧美激情视频一区二区三区在线播放 | 最近中文字幕mv在线一区二区三区四区 | 性做久久久久久久久| 亚洲黄色免费网站| 国产手机视频精品| 欧美视频四区| 欧美v日韩v国产v| 欧美在线日韩精品| 亚洲一级网站| 亚洲精品自在在线观看| 欧美粗暴jizz性欧美20| 久久精品国产成人| 亚洲欧美一区在线| 亚洲视频第一页| 亚洲精品一区二区三区蜜桃久| 黄色日韩网站视频| 国产日韩欧美高清| 国产精品一区二区a| 欧美欧美天天天天操| 免费av成人在线| 久久久人成影片一区二区三区观看| 亚洲欧美国产va在线影院| 一区二区三区免费在线观看| 亚洲片区在线| 亚洲欧洲精品一区二区三区波多野1战4| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久精品2019中文字幕| 欧美在线视频二区| 欧美一区二区三区在线播放| 亚洲欧美激情诱惑| 午夜欧美电影在线观看| 午夜伦欧美伦电影理论片| 午夜欧美视频| 欧美中文字幕不卡| 久久免费少妇高潮久久精品99| 久久精品国产综合精品| 久久精品一级爱片| 久久夜色精品国产欧美乱极品| 久久精品国产77777蜜臀| 久久久久成人精品| 老司机精品视频一区二区三区| 免费成人高清在线视频| 亚洲福利视频二区| 亚洲啪啪91| 亚洲视频观看| 久久福利精品| 久久综合网hezyo| 欧美激情在线观看| 欧美午夜视频网站| 国产视频在线一区二区| 在线精品在线| 一区二区三区精品久久久| 亚洲综合社区| 久久久伊人欧美| 亚洲国产天堂久久国产91| 日韩五码在线| 午夜精品在线看| 美女脱光内衣内裤视频久久影院| 欧美插天视频在线播放| 国产精品久久久久婷婷| 国外视频精品毛片| 99精品视频免费观看| 欧美一区二视频| 欧美国产日本高清在线| 中国日韩欧美久久久久久久久| 欧美在线观看一区| 欧美片在线观看| 国模精品娜娜一二三区| 999亚洲国产精| 欧美在线免费看| 亚洲国产天堂久久综合| 亚洲一区二区精品在线| 免费成人高清| 国产欧美短视频| 日韩亚洲一区在线播放| 久久精品99国产精品酒店日本| 亚洲电影免费观看高清完整版在线| 国产精品99久久久久久有的能看| 久久久美女艺术照精彩视频福利播放 | 亚洲欧美日韩爽爽影院| 你懂的网址国产 欧美| 亚洲一区二区精品视频| 欧美成人免费播放| 国产亚洲一本大道中文在线| 亚洲毛片在线看| 久久这里只有精品视频首页| 一区二区三区四区精品| 欧美成人午夜激情视频| 国产最新精品精品你懂的| 亚洲视频精选在线| 亚洲高清视频的网址| 欧美影院在线播放| 国产精品久久久久久久久婷婷 | 久久精品免费观看| 国产精品美女久久久免费 | 在线综合亚洲| 亚洲福利av| 久久夜色精品国产欧美乱极品| 国产欧美日本一区视频| 亚洲一区激情| 亚洲精品国产日韩| 美女主播精品视频一二三四| 狠狠色丁香婷婷综合影院| 欧美在线观看www| 亚洲视频一区二区免费在线观看| 欧美激情综合在线| 亚洲精品国精品久久99热一| 欧美波霸影院| 狂野欧美一区| 亚洲国产精品成人精品| 毛片一区二区| 久久综合中文| 亚洲成在人线av| 蘑菇福利视频一区播放| 久久久爽爽爽美女图片| 1024成人网色www| 亚洲第一搞黄网站| 欧美激情一区二区三区在线| 一本到12不卡视频在线dvd|