<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Die feuchter Einsamkeit</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/24827/rss</id><updated>2012-05-27T12:08:07Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/24827/rss"/><entry><id>http://www.cnblogs.com/Jedimaster/archive/2012/04/23/2467020.html</id><title type="text">Loser&amp;rsquo;s &amp;ldquo;Brute-forced Cholesky Factorization for Sparse Matrix on CUDA&amp;rdquo;</title><summary type="text">Loser’s “Brute-forced Cholesky Factorization for Sparse Matrix on CUDA”//失败者的暴力CUDA Cholesky分解</summary><published>2012-04-23T12:19:00Z</published><updated>2012-04-23T12:19:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2012/04/23/2467020.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2012/04/23/2467020.html"/><content type="html">&lt;p&gt;Cholesky Factorization (CF) needs to access matrix elements along both column and row, so that to the sparse matrix, addressing would always be the greatest problem, this utility for dense matrix is quite easy. My brute-forced implementation is much slower than MKL's &lt;strong&gt;dcsrilu0&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;CF method is a highly serialized algorithm, it processes the whole matrix row by row, and to the 1st row, its complexity is log(n*n/2), and then it would be faster and faster.&lt;/p&gt;  &lt;p&gt;In fact I thought several methods as following,&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Gathering and Scattering. As the bottleneck is the loop in Phase2, it need to access column and row, we may use gathering and scattering to simplify memeory access, but that’s as the same as CPU’s. &lt;/li&gt;    &lt;li&gt;Transpose the matrix as a backup, so that access column will countious, but need to sync both matrix at the end of each step, still a overhead. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here is the code, workable, slow, you may improve it by yourself, I switched to CPU, no sh*t &amp;amp; fu*k GPU.&lt;/p&gt;  &lt;div class="codearea linewrap"&gt;   &lt;span class="lnum"&gt;  1:  &lt;/span&gt;#include &amp;lt;iostream&amp;gt;  &lt;span class="lnum"&gt;  2:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  3:  &lt;/span&gt;__device__ bool ReadCSR(const double *vals, const int *rows, const int *cols, const int r, const int c, double * v)  &lt;span class="lnum"&gt;  4:  &lt;/span&gt;{  &lt;span class="lnum"&gt;  5:  &lt;/span&gt;    int i, j;  &lt;span class="lnum"&gt;  6:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;  7:  &lt;/span&gt;    i = rows[r];  &lt;span class="lnum"&gt;  8:  &lt;/span&gt;    j = rows[r + 1];  &lt;span class="lnum"&gt;  9:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 10:  &lt;/span&gt;    i = cols[i];  &lt;span class="lnum"&gt; 11:  &lt;/span&gt;    j = cols[j - 1];  &lt;span class="lnum"&gt; 12:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 13:  &lt;/span&gt;    if (c &amp;lt; i)  &lt;span class="lnum"&gt; 14:  &lt;/span&gt;    {  &lt;span class="lnum"&gt; 15:  &lt;/span&gt;        return -1;  &lt;span class="lnum"&gt; 16:  &lt;/span&gt;    }  &lt;span class="lnum"&gt; 17:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 18:  &lt;/span&gt;    if (c &amp;gt; j)  &lt;span class="lnum"&gt; 19:  &lt;/span&gt;    {  &lt;span class="lnum"&gt; 20:  &lt;/span&gt;        return 1;  &lt;span class="lnum"&gt; 21:  &lt;/span&gt;    }  &lt;span class="lnum"&gt; 22:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 23:  &lt;/span&gt;    for (i = rows[r]; i &amp;lt; rows[r + 1]; ++ i)  &lt;span class="lnum"&gt; 24:  &lt;/span&gt;    {  &lt;span class="lnum"&gt; 25:  &lt;/span&gt;        j = cols[i];  &lt;span class="lnum"&gt; 26:  &lt;/span&gt;        if (j == c)  &lt;span class="lnum"&gt; 27:  &lt;/span&gt;        {  &lt;span class="lnum"&gt; 28:  &lt;/span&gt;            *v = vals[i];  &lt;span class="lnum"&gt; 29:  &lt;/span&gt;            return 0;  &lt;span class="lnum"&gt; 30:  &lt;/span&gt;        }  &lt;span class="lnum"&gt; 31:  &lt;/span&gt;    }  &lt;span class="lnum"&gt; 32:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 33:  &lt;/span&gt;    return -1;  &lt;span class="lnum"&gt; 34:  &lt;/span&gt;}  &lt;span class="lnum"&gt; 35:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 36:  &lt;/span&gt;__device__ void WriteCSR(double * vals, const int * rows, const int * cols, const int r, const int c, const double v)  &lt;span class="lnum"&gt; 37:  &lt;/span&gt;{  &lt;span class="lnum"&gt; 38:  &lt;/span&gt;    int i, j;  &lt;span class="lnum"&gt; 39:  &lt;/span&gt;    for (i = rows[r]; i &amp;lt; rows[r + 1]; ++ i)  &lt;span class="lnum"&gt; 40:  &lt;/span&gt;    {  &lt;span class="lnum"&gt; 41:  &lt;/span&gt;        j = cols[i];  &lt;span class="lnum"&gt; 42:  &lt;/span&gt;        if (j == c)  &lt;span class="lnum"&gt; 43:  &lt;/span&gt;        {  &lt;span class="lnum"&gt; 44:  &lt;/span&gt;            vals[i] = v;  &lt;span class="lnum"&gt; 45:  &lt;/span&gt;        }  &lt;span class="lnum"&gt; 46:  &lt;/span&gt;    }  &lt;span class="lnum"&gt; 47:  &lt;/span&gt;}  &lt;span class="lnum"&gt; 48:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 49:  &lt;/span&gt;__global__ void Phase1(const int k, double *vals, const int *rows, const int *cols)  &lt;span class="lnum"&gt; 50:  &lt;/span&gt;{  &lt;span class="lnum"&gt; 51:  &lt;/span&gt;    int i = blockIdx.x;  &lt;span class="lnum"&gt; 52:  &lt;/span&gt;    if (i &amp;gt; k)  &lt;span class="lnum"&gt; 53:  &lt;/span&gt;    {  &lt;span class="lnum"&gt; 54:  &lt;/span&gt;        double Akk = 0.0;  &lt;span class="lnum"&gt; 55:  &lt;/span&gt;        ReadCSR(vals, rows, cols, k, k, &amp;amp;Akk);  &lt;span class="lnum"&gt; 56:  &lt;/span&gt;        Akk = sqrt(Akk);  &lt;span class="lnum"&gt; 57:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 58:  &lt;/span&gt;        double Aik = 0.0f;  &lt;span class="lnum"&gt; 59:  &lt;/span&gt;        if (ReadCSR(vals, rows, cols, i, k, &amp;amp;Aik) == 0)  &lt;span class="lnum"&gt; 60:  &lt;/span&gt;        {  &lt;span class="lnum"&gt; 61:  &lt;/span&gt;            WriteCSR(vals, rows, cols, i, k, Aik / Akk);  &lt;span class="lnum"&gt; 62:  &lt;/span&gt;        }  &lt;span class="lnum"&gt; 63:  &lt;/span&gt;    }  &lt;span class="lnum"&gt; 64:  &lt;/span&gt;}  &lt;span class="lnum"&gt; 65:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 66:  &lt;/span&gt;__global__ void Phase2(const int k, double *vals, const int *rows, const int *cols)  &lt;span class="lnum"&gt; 67:  &lt;/span&gt;{  &lt;span class="lnum"&gt; 68:  &lt;/span&gt;    int j = blockIdx.x;  &lt;span class="lnum"&gt; 69:  &lt;/span&gt;    int r = gridDim.x;  &lt;span class="lnum"&gt; 70:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 71:  &lt;/span&gt;    if (j &amp;gt; k)  &lt;span class="lnum"&gt; 72:  &lt;/span&gt;    {  &lt;span class="lnum"&gt; 73:  &lt;/span&gt;        for (int i = j; i &amp;lt; r; ++ i)  &lt;span class="lnum"&gt; 74:  &lt;/span&gt;        {  &lt;span class="lnum"&gt; 75:  &lt;/span&gt;            double Aij = 0.0;  &lt;span class="lnum"&gt; 76:  &lt;/span&gt;            int a = ReadCSR(vals, rows, cols, i, j, &amp;amp;Aij);  &lt;span class="lnum"&gt; 77:  &lt;/span&gt;            if (a == 0)  &lt;span class="lnum"&gt; 78:  &lt;/span&gt;            {  &lt;span class="lnum"&gt; 79:  &lt;/span&gt;                double Aik = 0.0, Ajk = 0.0;  &lt;span class="lnum"&gt; 80:  &lt;/span&gt;                ReadCSR(vals, rows, cols, i, k, &amp;amp;Aik);  &lt;span class="lnum"&gt; 81:  &lt;/span&gt;                ReadCSR(vals, rows, cols, j, k, &amp;amp;Ajk);  &lt;span class="lnum"&gt; 82:  &lt;/span&gt;                WriteCSR(vals, rows, cols, i, j, Aij - Aik * Ajk);  &lt;span class="lnum"&gt; 83:  &lt;/span&gt;            }  &lt;span class="lnum"&gt; 84:  &lt;/span&gt;            else if (a &amp;gt; 0)  &lt;span class="lnum"&gt; 85:  &lt;/span&gt;            {  &lt;span class="lnum"&gt; 86:  &lt;/span&gt;                break;  &lt;span class="lnum"&gt; 87:  &lt;/span&gt;            }  &lt;span class="lnum"&gt; 88:  &lt;/span&gt;        }  &lt;span class="lnum"&gt; 89:  &lt;/span&gt;    }  &lt;span class="lnum"&gt; 90:  &lt;/span&gt;}  &lt;span class="lnum"&gt; 91:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt; 92:  &lt;/span&gt;__global__ void Phase3(const int k, double *vals, const int *rows, const int *cols)  &lt;span class="lnum"&gt; 93:  &lt;/span&gt;{  &lt;span class="lnum"&gt; 94:  &lt;/span&gt;    double Akk = 0.0;  &lt;span class="lnum"&gt; 95:  &lt;/span&gt;    ReadCSR(vals, rows, cols, k, k, &amp;amp;Akk);  &lt;span class="lnum"&gt; 96:  &lt;/span&gt;    Akk = sqrt(Akk);  &lt;span class="lnum"&gt; 97:  &lt;/span&gt;    WriteCSR(vals, rows, cols, k, k, Akk);  &lt;span class="lnum"&gt; 98:  &lt;/span&gt;}  &lt;span class="lnum"&gt; 99:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;100:  &lt;/span&gt;void test(const int numRow, double *vals, const int *rows, const int *cols)  &lt;span class="lnum"&gt;101:  &lt;/span&gt;{  &lt;span class="lnum"&gt;102:  &lt;/span&gt;    for (int k = 0; k &amp;lt; numRow; ++ k)  &lt;span class="lnum"&gt;103:  &lt;/span&gt;    {  &lt;span class="lnum"&gt;104:  &lt;/span&gt;        std::cout &amp;lt;&amp;lt; k &amp;lt;&amp;lt; std::endl;  &lt;span class="lnum"&gt;105:  &lt;/span&gt;        Phase1&amp;lt;&amp;lt;&amp;lt;numRow, 1&amp;gt;&amp;gt;&amp;gt;(k, vals, rows, cols);  &lt;span class="lnum"&gt;106:  &lt;/span&gt;        Phase2&amp;lt;&amp;lt;&amp;lt;numRow, 1&amp;gt;&amp;gt;&amp;gt;(k, vals, rows, cols);  &lt;span class="lnum"&gt;107:  &lt;/span&gt;        Phase3&amp;lt;&amp;lt;&amp;lt;1,      1&amp;gt;&amp;gt;&amp;gt;(k, vals, rows, cols);  &lt;span class="lnum"&gt;108:  &lt;/span&gt;    }  &lt;span class="lnum"&gt;109:  &lt;/span&gt;}  &lt;span class="lnum"&gt;110:  &lt;/span&gt;&amp;#160;  &lt;span class="lnum"&gt;111:  &lt;/span&gt;&amp;#160;&lt;/div&gt;&lt;style&gt;&lt;!--.codearea{ color:black;  background-color:white;  line-height:18px;  border:1px solid #4f81bd;  margin:0;  width:auto !important;  width:100%;  overflow:auto;  text-align:left;  font-size:12px;  font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif}.codearea pre{ color:black; line-height:18px;  padding:0 0 0 12px !important; margin:0em;  background-color:#fff !important}.linewrap pre{white-space:pre-wrap;  white-space:-moz-pre-wrap;  white-space:-pre-wrap;  white-space:-o-pre-wrap;  word-wrap:break-word;  word-break:normal}.codearea pre.alt{ background-color:#f7f7ff !important}.codearea .lnum{color:#4f81bd;line-height:18px}--&gt;&lt;/style&gt;&lt;p&gt;&lt;strong&gt;Apl. 24&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Found a paper used ELLPACK-R instead of CSR. I will take a try.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2467020.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2012/04/23/2467020.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2012/03/31/2427031.html</id><title type="text">I Like Red Hair, Definitely.</title><summary type="text">Refactored my implementation for Artistic Friendly Marschner to RSL 2.0 format. Still have no free time to accomplish my multiple scattering stuff for hair. Just rendered two samples according the real photo, sorry for my poor artistic creativity. Code is herehttp://ortholab.codeplex.com/SourceContr</summary><published>2012-03-31T06:56:00Z</published><updated>2012-03-31T06:56:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2012/03/31/2427031.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2012/03/31/2427031.html"/><content type="html">&lt;p&gt;Refactored my implementation for Artistic Friendly Marschner to RSL 2.0 format. Still have no free time to accomplish my multiple scattering stuff for hair. Just rendered two samples according the real photo, sorry for my poor artistic creativity. Code is here&amp;nbsp;&lt;a href="http://ortholab.codeplex.com/SourceControl/list/changesets"&gt;http://ortholab.codeplex.com/SourceControl/list/changesets&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201203/201203311455499649.jpg"&gt;&lt;img style="display: inline; border-width: 0px;" title="shimmer6" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201203/201203311455539776.jpg" alt="shimmer6" width="181" height="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201203/20120331145559752.jpg" target="_blank"&gt;&lt;img style="display: inline; border-width: 0px;" title="Straight" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201203/201203311456032308.jpg" alt="Straight" width="244" height="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201203/201203311456105975.jpg" target="_blank"&gt;&lt;img style="display: inline; border-width: 0px;" title="Wavy" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201203/201203311456136169.jpg" alt="Wavy" width="244" height="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2427031.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2012/03/31/2427031.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2012/03/16/2399836.html</id><title type="text">An Simple Method for Sparse Matrix Optimization by GPU</title><summary type="text">这是一个相当simple &amp; naive的方法，几行代码完成的CSR稀疏矩阵格式的优化，剔除0元素。由于目前AMD的OpenCL SDK依旧没有赶上NVIDIA CUDA SDK的进度——新的CUDA 4我认为在库的丰富程度上以及易用上已经远远的超过了AMD的实现。虽然如此，今后还是得希望开源社区能够贡献基于OpenCL的数学库，或者我自己搞一个？This is a rare simple &amp; naive method which is used to optimize sparse matrix, cull the all zero elements. I think the</summary><published>2012-03-16T02:36:00Z</published><updated>2012-03-16T02:36:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2012/03/16/2399836.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2012/03/16/2399836.html"/><content type="html">&lt;p&gt;这是一个相当simple &amp;amp; naive的方法，几行代码完成的CSR稀疏矩阵格式的优化，剔除0元素。由于目前AMD的OpenCL SDK依旧没有赶上NVIDIA CUDA SDK的进度&amp;mdash;&amp;mdash;新的CUDA 4我认为在库的丰富程度上以及易用上已经远远的超过了AMD的实现。虽然如此，今后还是得希望开源社区能够贡献基于OpenCL的数学库，或者我自己搞一个？&lt;/p&gt;&lt;p&gt;This is a rare simple &amp;amp; naive method which is used to optimize sparse matrix, cull the all zero elements. I think the AMD&amp;rsquo;s OpenCL libraries is stil not as good as NVIDIA CUDA&amp;rsquo;s. Whatever, I wish there would be some mathmatics libraries from open source society, or I make one in person ?&lt;/p&gt;&lt;p&gt;&lt;object width="650" height="490" data="http://www.docin.com/DocinViewer-362710630-144.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://www.docin.com/DocinViewer-362710630-144.swf" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2399836.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2012/03/16/2399836.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2012/03/01/2375430.html</id><title type="text">Alembic for Mudbox</title><summary type="text">After spent some time on Alembic, a Mudbox plugin was finished.The code is at my Ortholab, youi should compile this plugin by your self. Current Alembic has not supplied a pre-built Windows binary so that it will be more comfortable on Linux platform, at the same time, as we know, the most studios a</summary><published>2012-03-01T05:41:00Z</published><updated>2012-03-01T05:41:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2012/03/01/2375430.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2012/03/01/2375430.html"/><content type="html">&lt;p&gt;After spent some time on Alembic, a Mudbox plugin was finished.&lt;/p&gt;&lt;p&gt;The code is at my Ortholab, youi should compile this plugin by your self. Current Alembic has not supplied a pre-built Windows binary so that it will be more comfortable on Linux platform, at the same time, as we know, the most studios are working on Linux platform too.&lt;/p&gt;&lt;p&gt;&lt;a href="http://ortholab.codeplex.com/SourceControl/list/changesets"&gt;http://ortholab.codeplex.com/SourceControl/list/changesets&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;More compiling details here,&lt;/p&gt;&lt;p&gt;&lt;a href="http://ortholab.codeplex.com/wikipage?title=AbcTranslator&amp;amp;referringTitle=Home"&gt;http://ortholab.codeplex.com/wikipage?title=AbcTranslator&lt;/a&gt;&lt;/p&gt;&lt;p&gt;At the default compression level, the .abc size will be larger than .fbx about 40% but the both exporting/importing progresses will be much faster than the FBX format.&lt;/p&gt;&lt;p&gt;Here are some basic models from Mudbox, you may load it by my Mudbox plugin or put them into Maya and take a look.&lt;/p&gt;&lt;p&gt;&lt;a title="https://skydrive.live.com/redir.aspx?cid=56c534bd39878bbb&amp;amp;resid=56C534BD39878BBB!229&amp;amp;parid=56C534BD39878BBB!228&amp;amp;authkey=!APHvAb-aYwuraSk" href="https://skydrive.live.com/redir.aspx?cid=56c534bd39878bbb&amp;amp;resid=56C534BD39878BBB!229&amp;amp;parid=56C534BD39878BBB!228&amp;amp;authkey=!APHvAb-aYwuraSk"&gt;https://skydrive.live.com/redir.aspx?cid=56c534bd39878bbb&amp;amp;resid=56C534BD39878BBB!229&amp;amp;parid=56C534BD39878BBB!228&amp;amp;authkey=!APHvAb-aYwuraSk&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Mar. 2&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Compiled AbcTranslator by MSVC10 with Alembic 1.0.5 and boost 1.42 for &lt;strong&gt;Mudbox 2012 x64&lt;/strong&gt;, you may&amp;nbsp;&lt;strong&gt;&lt;a href="http://ortholab.codeplex.com/releases/view/83369" target="_blank"&gt;DOWNLOAD&lt;/a&gt;&lt;/strong&gt;&amp;nbsp;from Ortholab.&lt;/p&gt;&lt;p&gt;BTW, Mudbox 2013 has been GOLD, the final version will be shipped soon, and I will supply built binary plug-in for it in future.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Apl. 8&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Our Creative Suite 2013 has been released, you may download the binary plug-in for &lt;strong&gt;Mudbox 2013 x64 Windows&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2375430.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2012/03/01/2375430.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2012/02/22/2363382.html</id><title type="text">How to Disable Nouveau Driver on CentOS6/RHEL6 before install NVIDIA Driver</title><summary type="text">最近开始在CentOS 6下修Mudbox的BUG，编译完毕了之后发现启动不了，猛然想起新系统没装NVIDIA的驱动，直接进入init 3后跑下载下来的驱动发现提示启用了Nouveau Driver，得先禁用之，下面的命令说明了如何禁用这个内置驱动的方法。yum installgcckernel-develreboot重启了之后将Nouveau加入到黑名单，不加载之sed-i'/root=/s|$| rdblacklist=nouveau vga=791|'/boot/grub/grub.confecho"blacklist nouveau"&gt;&gt;</summary><published>2012-02-22T08:37:00Z</published><updated>2012-02-22T08:37:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2012/02/22/2363382.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2012/02/22/2363382.html"/><content type="html">&lt;p&gt;最近开始在CentOS 6下修Mudbox的BUG，编译完毕了之后发现启动不了，猛然想起新系统没装NVIDIA的驱动，直接进入init 3后跑下载下来的驱动发现提示启用了Nouveau Driver，得先禁用之，下面的命令说明了如何禁用这个内置驱动的方法。&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span class="kw2"&gt;yum install&lt;/span&gt;&amp;nbsp;&lt;span class="kw2"&gt;gcc&lt;/span&gt;&amp;nbsp;kernel-devel&lt;br /&gt;reboot&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;重启了之后将Nouveau加入到黑名单，不加载之&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span class="kw2"&gt;sed&lt;/span&gt;&amp;nbsp;&lt;span class="re5"&gt;-i&lt;/span&gt;&amp;nbsp;&lt;span class="st_h"&gt;'/root=/s|$| rdblacklist=nouveau vga=791|'&lt;/span&gt;&amp;nbsp;&lt;span class="sy0"&gt;/&lt;/span&gt;boot&lt;span class="sy0"&gt;/&lt;/span&gt;grub&lt;span class="sy0"&gt;/&lt;/span&gt;grub.conf&lt;br /&gt;&lt;span class="kw3"&gt;echo&lt;/span&gt;&amp;nbsp;&lt;span class="st0"&gt;"blacklist nouveau"&lt;/span&gt;&amp;nbsp;&lt;span class="sy0"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span class="sy0"&gt;/&lt;/span&gt;etc&lt;span class="sy0"&gt;/&lt;/span&gt;modprobe.d&lt;span class="sy0"&gt;/&lt;/span&gt;blacklist.conf&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;修改initd&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span class="kw2"&gt;mv&lt;/span&gt;&amp;nbsp;&lt;span class="sy0"&gt;/&lt;/span&gt;boot&lt;span class="sy0"&gt;/&lt;/span&gt;initramfs-$&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="kw2"&gt;uname&lt;/span&gt;&amp;nbsp;-r&lt;span class="br0"&gt;)&lt;/span&gt;.img&amp;nbsp;&lt;span class="sy0"&gt;/&lt;/span&gt;boot&lt;span class="sy0"&gt;/&lt;/span&gt;initramfs-$&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="kw2"&gt;uname&lt;/span&gt;&amp;nbsp;&amp;nbsp;-r&lt;span class="br0"&gt;)&lt;/span&gt;-nouveau.img&lt;br /&gt;dracut&amp;nbsp;&lt;span class="sy0"&gt;/&lt;/span&gt;boot&lt;span class="sy0"&gt;/&lt;/span&gt;initramfs-$&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="kw2"&gt;uname&lt;/span&gt;&amp;nbsp;-r&lt;span class="br0"&gt;)&lt;/span&gt;.img $&lt;span class="br0"&gt;(&lt;/span&gt;&lt;span class="kw2"&gt;uname&lt;/span&gt;&amp;nbsp;-r&lt;span class="br0"&gt;)&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;移除Nouveau Driver&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span class="kw2"&gt;yum remove&lt;/span&gt;&amp;nbsp;xorg-x11-drv-nouveau&lt;br /&gt;reboot&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;重启后安装NVIDIA的官方驱动&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;init&amp;nbsp;&lt;span class="nu0"&gt;3&lt;/span&gt;&lt;br /&gt;sh ./NVIDIA-Linux-x86-260.19.29.run&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;原文地址&lt;a href="http://linux.xvx.cz/2011/01/nvidia-proprietary-drivers-and-rhel6/"&gt;http://linux.xvx.cz/2011/01/nvidia-proprietary-drivers-and-rhel6/&lt;/a&gt;，感谢原作者。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2363382.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2012/02/22/2363382.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2011/12/15/2288811.html</id><title type="text">耳放一块</title><summary type="text">朋友帮做的一个耳放，第三代试验机，自制变压器，电容都是日本nichinon以及德国wima，推我的ER4S高频提升明显，层次比电脑直推强太多了。</summary><published>2011-12-15T06:01:00Z</published><updated>2011-12-15T06:01:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2011/12/15/2288811.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2011/12/15/2288811.html"/><content type="html">&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201112/201112151401202577.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DSC_0093_S" border="0" alt="DSC_0093_S" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201112/201112151401206231.jpg" width="244" height="165" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;朋友帮做的一个耳放，第三代试验机，自制变压器，电容都是日本nichinon以及德国wima，推我的ER4S高频提升明显，层次比电脑直推强太多了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2288811.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2011/12/15/2288811.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2011/12/09/2281643.html</id><title type="text">Note for the Implemention of Energy-Conserved Marschner Hair Reflectance Model</title><summary type="text">I do not know why load the precomputed textures into shader produces so bad effect, and precomputing really cost me to much time (one texture cost nearly 40 minutes on my dual core E5200), I really do not think the ECMarschner is a good common choice for production hair rendering. People may check m</summary><published>2011-12-09T02:33:00Z</published><updated>2011-12-09T02:33:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2011/12/09/2281643.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2011/12/09/2281643.html"/><content type="html">&lt;p&gt;I do not know why load the precomputed textures into shader produces so bad effect, and precomputing really cost me to much time (one texture cost nearly 40 minutes on my dual core E5200), I really do not think the ECMarschner is a good common choice for production hair rendering. People may check my code at &lt;a href="http://ortholab.codeplex.com/" target="_blank"&gt;Ortholab&lt;/a&gt;. I still prefer the BCSDF (far-field) or AFMarschner (Artist Friendly Marschner), fast, intuitive. If you want to implement it, you may considered my note here.&lt;/p&gt;&lt;p&gt;&lt;object width="650" height="490" data="http://www.docin.com/DocinViewer-300758814-144.swf" type="application/x-shockwave-flash"&gt;&lt;param name="src" value="http://www.docin.com/DocinViewer-300758814-144.swf" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;/object&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2281643.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2011/12/09/2281643.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2011/11/22/2259459.html</id><title type="text">Physical Sky in ARNOLD</title><summary type="text">Implemented CIE Standard Sky as an environment shader in ARNOLD, next step is Preetham Sky, this should be finished tomorrow. Implemented basic Preetham Sky, and later I will add more artistic para...</summary><published>2011-11-22T13:16:00Z</published><updated>2011-11-22T13:16:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2011/11/22/2259459.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2011/11/22/2259459.html"/><content type="html">&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/20111122211616269.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="CIE Sky" border="0" alt="CIE Sky" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111222116185055.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strike&gt;Implemented CIE Standard Sky as an environment shader in ARNOLD, next step is Preetham Sky, this should be finished tomorrow.&lt;/strike&gt;&lt;/p&gt;  &lt;p&gt;Implemented basic Preetham Sky, and later I will add more artistic parameters.    &lt;br /&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111242013145704.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Haze0" border="0" alt="Haze0" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111242013159716.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;theta = 0&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111242013231399.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Haze1" border="0" alt="Haze1" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/20111124201324678.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;theta = 0.5&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111242013339197.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Haze2" border="0" alt="Haze2" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111242013353982.png" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;theta = 1&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111242013422940.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Haze3" border="0" alt="Haze3" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111242013442218.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;theta = 1.5&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111251523204816.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Sunset" border="0" alt="Sunset" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111251523222666.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Added more parameters to control sizes of the sun disk and glow.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2259459.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2011/11/22/2259459.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2011/11/10/2244368.html</id><title type="text">Hair Rendering More and More</title><summary type="text">Added a new color component to control glint in my Artist Friendly Marschner shader for RenderMan. You may dowload the source code from Ortholab. I’m working on “An Energy-Conserving Hair Reﬂectan...</summary><published>2011-11-10T05:43:00Z</published><updated>2011-11-10T05:43:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2011/11/10/2244368.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2011/11/10/2244368.html"/><content type="html">&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/20111110134243577.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Image converted using ifftoany" border="0" alt="Image converted using ifftoany" src="http://images.cnblogs.com/cnblogs_com/Jedimaster/201111/201111101342449922.jpg" width="244" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Added a new color component to control glint in my Artist Friendly Marschner shader for RenderMan. You may dowload the source code from &lt;a href="http://ortholab.codeplex.com" target="_blank"&gt;Ortholab&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’m working on “An Energy-Conserving Hair Reﬂectance Model”&lt;/p&gt;  &lt;p&gt;&lt;img src="http://latex.codecogs.com/png.latex?\LARGE%20M_p(v,%20\theta_i,%20\theta_r)%20=%20\frac{\text{csch}(1/v))}{2v}e^{\frac{\text{sin}(-\theta_i)\text{sin}\theta_r}{v}}%20I_o%20[\frac{\text{cos}(-\theta_i)cos(\theta_r)}{v}%20]" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2244368.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2011/11/10/2244368.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Jedimaster/archive/2011/10/15/2213425.html</id><title type="text">这就是我的生活，你不曾明白。</title><summary type="text"/><published>2011-10-15T08:41:00Z</published><updated>2011-10-15T08:41:00Z</updated><author><name>Bo Schwarzstein</name><uri>http://www.cnblogs.com/Jedimaster/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jedimaster/archive/2011/10/15/2213425.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jedimaster/archive/2011/10/15/2213425.html"/><content type="html">&lt;p&gt;&lt;img src="http://ww2.sinaimg.cn/bmiddle/8bf7bf3egw1dm4udst6c3j.jpg" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jedimaster/aggbug/2213425.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jedimaster/archive/2011/10/15/2213425.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
