胡说八道

学而不思则罔,思而不学则殆

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  132 随笔 :: 0 文章 :: 58 评论 :: 1 Trackbacks

2005年1月5日 #

连接:ftp://download.nvidia.com/developer/presentations/2006/gdc

posted @ 2006-04-03 02:19 胡说八道 阅读(288) | 评论 (0)编辑

连接:http://www.ati.com/developer/techpapers.html#gdc06

posted @ 2006-04-02 14:30 胡说八道 阅读(219) | 评论 (1)编辑

DirectX Presentations

连接:http://msdn.microsoft.com/directx/presentations/

posted @ 2006-03-25 22:06 胡说八道 阅读(244) | 评论 (0)编辑

天空的颜色采用"A Practical Analytic Model for Daylight"建造的模型计算。
地形颜色的大气散射采用"Rendering Outdoor Lght Scattering in real Time"介绍的方法计算。

A Practical Analytic Model for Daylight中的模型通过太阳的方位,Zenith的颜色(Yxy空间)来计算天空中
没个方向的颜色。由于Shader的限制,在我的实现里,只是简单的在RGB空间里面做了scale。

1 吸收和Out-Scattering

2 太阳的In-Scattering

3 综合

posted @ 2005-12-16 15:08 胡说八道 阅读(752) | 评论 (4)编辑

几何采用GeoMipMap样式的LOD
渲染采用
1 Absorb Map(Alpha for AO)
2 1-4 layers Detail Map
3 Diffuse Cube Map
4 Shadow Map
5 Atmospheric Scattering  
posted @ 2005-08-20 14:36 胡说八道 阅读(950) | 评论 (1)编辑

人物渲染使用PRT,每个顶点保存16个系数
with Diffuse

without Diffuse


posted @ 2005-08-08 20:44 胡说八道 阅读(627) | 评论 (0)编辑


上面图中右上角为Shadow Map.

使用TSM做Self-Shadow时需要注意ShadowMap保存和第二步用于比较的Depth不要转换到trapezoidal space中,只转换x和y就行了.

计算trapezoidal和LPPS->trapezoidal space的代码修正后为:
 HRESULT CTrapezoidalShadowMap::ComputeTrapezoidalMatrix(D3DXMATRIX& matrix,D3DXVECTOR3& topl,D3DXVECTOR3& topr,D3DXVECTOR3& bottoml,D3DXVECTOR3& bottomr,D3DXVECTOR3& intersection)
{
 // 平移梯形使得两侧边交点到LightProjectSpace的中点
 D3DXMatrixTranslation(&matrix,-intersection.x,-intersection.y,0);
 
 // 旋转梯形使得TopLine和LightProjectSpace的x轴重合
 D3DXVECTOR3 t_topline=(topl-topr);
 D3DXVec3Normalize(&t_topline,&t_topline);

 float t_angle=D3DXVec3Dot(&t_topline,&D3DXVECTOR3(1,0,0));
 
 D3DXMATRIX t_matrix;
 
 if (t_topline.y>0)
  D3DXMatrixRotationZ(&t_matrix,-acosf(t_angle));
 else
  D3DXMatrixRotationZ(&t_matrix,+acosf(t_angle));

 matrix*=t_matrix;

 // 变换使得成为等边梯形
 D3DXVECTOR3 t_point1,t_point2;
 D3DXVec3TransformCoord(&t_point1,&topl,&matrix);
 D3DXVec3TransformCoord(&t_point2,&topr,&matrix);

 t_point1+=t_point2;

 D3DXMatrixIdentity(&t_matrix);
 t_matrix._21=-t_point1.x/t_point1.y;

 matrix*=t_matrix;

 // 变换使得两侧边成90度,TopLine的两点在[-1,1]和[1,1]上
 D3DXVec3TransformCoord(&t_point1,&topr,&matrix);

 D3DXMatrixScaling(&t_matrix,1.0f/t_point1.x,1.0f/t_point1.y,1.0f);

 matrix*=t_matrix;

 // 变换使得梯形变成矩形
 t_matrix._11=t_matrix._22=t_matrix._33=1.0f;
 t_matrix._12=t_matrix._13=t_matrix._14=t_matrix._21=t_matrix._23=0.0f;
 t_matrix._31=t_matrix._32=t_matrix._34=t_matrix._41=t_matrix._43=t_matrix._44=0.0f;

 t_matrix._42=1.0f;
 t_matrix._24=1.0f;

 matrix*=t_matrix;

 // 平移使得矩形的中心到LightProjectSpace的中点
 D3DXVec3TransformCoord(&t_point1,&topl,&matrix);
 D3DXVec3TransformCoord(&t_point2,&bottomr,&matrix);

 D3DXMatrixTranslation(&t_matrix,0,-(t_point1.y+t_point2.y)/2.0f,0);

 matrix*=t_matrix;

 // 拉伸矩形的Y方向,使得充满整个LightProjectSpace
 D3DXVECTOR4 t_point3;
 D3DXVec3Transform(&t_point3,&topl,&matrix);

 D3DXMatrixIdentity(&t_matrix);

 t_matrix._22=-t_point3.w/t_point3.y;

 matrix*=t_matrix;

 //
 return S_OK;
};

HRESULT CTrapezoidalShadowMap::ComplteLightPostPerspectiveTrapezoidal(SFrustum& frustum,D3DXMATRIX& lightviewproj,D3DXVECTOR3& topl,D3DXVECTOR3& topr,D3DXVECTOR3& bottoml,D3DXVECTOR3& bottomr,D3DXVECTOR3& intersection)
{
 D3DXVECTOR3 t_frustumvertex[9];
 
 D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), frustum.m_Vertexs, sizeof(D3DXVECTOR3), &lightviewproj, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );

 for (int i=0;i<9;++i)
 {
  t_frustumvertex[i].z=0.0f;
 }

 D3DXVECTOR3 t_topcenter  =0.25*(t_frustumvertex[0]+t_frustumvertex[1]+t_frustumvertex[2]+t_frustumvertex[3]);
 D3DXVECTOR3 t_bottomcenter =0.25*(t_frustumvertex[4]+t_frustumvertex[5]+t_frustumvertex[6]+t_frustumvertex[7]);

 D3DXVECTOR3 t_centerline = t_topcenter - t_bottomcenter;
 D3DXVec3Normalize(&t_centerline,&t_centerline);

 D3DXMATRIX t_trans;
 D3DXMatrixTranslation(&t_trans,-0.5f*(t_topcenter.x+t_bottomcenter.x),-0.5f*(t_topcenter.y+t_bottomcenter.y),0);

 D3DXMATRIX t_rotation;
 float t_angle=acosf(D3DXVec3Dot(&t_centerline,&D3DXVECTOR3(0,1,0)));

 if (t_centerline.x>0)
  D3DXMatrixRotationZ(&t_rotation,+t_angle);
 else
  D3DXMatrixRotationZ(&t_rotation,-t_angle);

 t_trans*=t_rotation;

 D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), t_frustumvertex, sizeof(D3DXVECTOR3), &t_trans, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );

 BoundingBox frustumAABB2D( t_frustumvertex, (sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3)-1) );

 D3DXVECTOR3 t_topl,t_topr,t_bottoml,t_bottomr;

 D3DXVECTOR3 t_side[4];
 float t_value[4];

 for (int i=0;i<4;++i)
 {
  t_side[i]=t_frustumvertex[i]-t_frustumvertex[i+4];
  D3DXVec3Normalize(&t_side[i],&t_side[i]);
  t_value[i]=D3DXVec3Dot(&t_side[i],&D3DXVECTOR3(0,1,0));
 }

 float t_min=1.0f;
 int t_no;
 for (int i=0;i<4;++i)
 {
  if (t_side[i].x>0)
   continue;

  if (t_value[i]<t_min)
  {
   t_min=t_value[i];
   t_no=i;
  }
 }

 t_topr.y=frustumAABB2D.maxPt.y;
 t_topr.x=(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));
 t_topr.z=0.0f;
 t_bottomr.y=frustumAABB2D.minPt.y;
 t_bottomr.x=(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));
 t_bottomr.z=0.0f;

 t_min=1.0f;
 for (int i=0;i<4;++i)
 {
  if (t_side[i].x<0)
   continue;

  if (t_value[i]<t_min)
  {
   t_min=t_value[i];
   t_no=i;
  }
 }

 t_topl.y=frustumAABB2D.maxPt.y;
 t_topl.x=-(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));
 t_topl.z=0.0f;
 t_bottoml.y=frustumAABB2D.minPt.y;
 t_bottoml.x=-(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));
 t_bottoml.z=0.0f;

 D3DXMATRIX t_invtrans;
 D3DXMatrixInverse(&t_invtrans,NULL,&t_trans);

 D3DXVec3TransformCoord(&topl,&t_topl,&t_invtrans);
 D3DXVec3TransformCoord(&topr,&t_topr,&t_invtrans);
 D3DXVec3TransformCoord(&bottoml,&t_bottoml,&t_invtrans);
 D3DXVec3TransformCoord(&bottomr,&t_bottomr,&t_invtrans);
 D3DXVec3TransformCoord(&intersection,&t_frustumvertex[8],&t_invtrans);
 
 //
 return S_OK;
};

posted @ 2005-08-04 21:02 胡说八道 阅读(1409) | 评论 (4)编辑


中间的红色框包起来的是在light's post−perspective space中的视锥,红色框是构造出的trapezoidal,外围的是在trapezoidal space中的视锥.其中蓝色的表示视锥的Near Plane,绿色的表示Far Plane和边.

通过视锥计算梯形的代码:
HRESULT CTrapezoidalShadowMap::ComplteLightPostPerspectiveTrapezoidal(SFrustum& frustum,D3DXMATRIX& lightviewproj,D3DXVECTOR3& topl,D3DXVECTOR3& topr,D3DXVECTOR3& bottoml,D3DXVECTOR3& bottomr,D3DXVECTOR3& intersection)
{
 D3DXVECTOR3 t_frustumvertex[9];
 
 // 转换到Light's Post-Perspective Space
 D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), frustum.m_Vertexs, sizeof(D3DXVECTOR3), &lightviewproj, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );

 for (int i=0;i<9;++i)
 {
  t_frustumvertex[i].z=0.0f;
 }

 // 求出中轴线
 D3DXVECTOR3 t_topcenter  =0.25*(t_frustumvertex[0]+t_frustumvertex[1]+t_frustumvertex[2]+t_frustumvertex[3]);
 D3DXVECTOR3 t_bottomcenter =0.25*(t_frustumvertex[4]+t_frustumvertex[5]+t_frustumvertex[6]+t_frustumvertex[7]);

 D3DXVECTOR3 t_centerline = t_topcenter - t_bottomcenter;
 D3DXVec3Normalize(&t_centerline,&t_centerline);

 // 平移和旋转使得中轴线的中点在Light's Post-Perspective Space中点,方向指向Light's Post-Perspective Space的Y轴
 D3DXMATRIX t_trans;
 D3DXMatrixTranslation(&t_trans,-0.5f*(t_topcenter.x+t_bottomcenter.x),-0.5f*(t_topcenter.y+t_bottomcenter.y),0);

 D3DXMATRIX t_rotation;
 float t_angle=acosf(D3DXVec3Dot(&t_centerline,&D3DXVECTOR3(0,1,0)));

 if (t_centerline.x>0)
  D3DXMatrixRotationZ(&t_rotation,-t_angle);
 else
  D3DXMatrixRotationZ(&t_rotation,t_angle);

 t_trans*=t_rotation;

 D3DXVec3TransformCoordArray( t_frustumvertex, sizeof(D3DXVECTOR3), t_frustumvertex, sizeof(D3DXVECTOR3), &t_trans, sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3) );

 // 求出2D AABB
 BoundingBox frustumAABB2D( t_frustumvertex, (sizeof(t_frustumvertex)/sizeof(D3DXVECTOR3)-1) );

 // 计算梯形的四个顶点
 D3DXVECTOR3 t_topl,t_topr,t_bottoml,t_bottomr;

 D3DXVECTOR3 t_side[4];
 float t_value[4];

 for (int i=0;i<4;++i)
 {
  t_side[i]=t_frustumvertex[i]-t_frustumvertex[i+4];
  D3DXVec3Normalize(&t_side[i],&t_side[i]);
  t_value[i]=D3DXVec3Dot(&t_side[i],&D3DXVECTOR3(0,1,0));
 }

 float t_min=1.0f;
 int t_no;
 for (int i=0;i<4;++i)
 {
  if (t_side[i].x>0)
   continue;

  if (t_value[i]<t_min)
  {
   t_min=t_value[i];
   t_no=i;
  }
 }

 t_topl.y=frustumAABB2D.maxPt.y;
 t_topl.x=-(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));
 t_bottoml.y=frustumAABB2D.minPt.y;
 t_bottoml.x=-(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));

 t_min=1.0f;
 for (int i=0;i<4;++i)
 {
  if (t_side[i].x<0)
   continue;

  if (t_value[i]<t_min)
  {
   t_min=t_value[i];
   t_no=i;
  }
 }

 t_topr.y=frustumAABB2D.maxPt.y;
 t_topr.x=(t_frustumvertex[8].y-frustumAABB2D.maxPt.y)*tanf(acosf(t_value[t_no]));
 t_bottomr.y=frustumAABB2D.minPt.y;
 t_bottomr.x=(t_frustumvertex[8].y-frustumAABB2D.minPt.y)*tanf(acosf(t_value[t_no]));

 // 将梯形四个顶点和两边的交点变换回Light's Post-Perspective Space
 D3DXMATRIX t_invtrans;
 D3DXMatrixInverse(&t_invtrans,NULL,&t_trans);

 D3DXVec3TransformCoord(&topl,&t_topl,&t_trans);
 D3DXVec3TransformCoord(&topr,&t_topr,&t_trans);
 D3DXVec3TransformCoord(&bottoml,&t_bottoml,&t_trans);
 D3DXVec3TransformCoord(&bottomr,&t_bottomr,&t_trans);
 D3DXVec3TransformCoord(&intersection,&t_frustumvertex[8],&t_trans);
 
 //
 return S_OK;
};

posted @ 2005-08-03 17:42 胡说八道 阅读(606) | 评论 (0)编辑

  在light’s post−perspective space中根据视锥构建的梯形,为了方便表示,贴了一张贴图表示.贴图中的Top表示靠近视锥前截面的梯形的上底,Bottom表示靠近视锥后截面的梯形的下底.

梯形转换到trapezoidal space后的显示情况

light’s post−perspective space->trapezoidal space的距阵计算:

HRESULT CTrapezoidalShadowMap::ComputeTrapezoidalMatrix(D3DXMATRIX& matrix,D3DXVECTOR3& topl,D3DXVECTOR3& topr,D3DXVECTOR3& bottoml,D3DXVECTOR3& bottomr,D3DXVECTOR3& intersection)
{
 // 平移TopLine的中点到Light's Post-Perspective Space的中点
 D3DXMatrixTranslation(&matrix,-(topl.x+topr.x)/2.0f,-(topl.y+topr.y)/2.0f,0);
 
 // 旋转梯形使得TopLine和Light's Post-Perspective Space的x轴重合
 D3DXVECTOR3 t_topline=(topl-topr);
 D3DXVec3Normalize(&t_topline,&t_topline);

 float t_angle=D3DXVec3Dot(&t_topline,&D3DXVECTOR3(1,0,0));
 
 D3DXMATRIX t_matrix;
 D3DXMatrixRotationZ(&t_matrix,-acosf(t_angle));

 matrix*=t_matrix;

 // 平移梯形使得两侧边交点到Light's Post-Perspective Space的中点
 D3DXVECTOR3 t_intersection;

 D3DXVec3TransformCoord(&t_intersection,&intersection,&matrix);

 D3DXMatrixTranslation(&t_matrix,-t_intersection.x,-t_intersection.y,0);

 matrix*=t_matrix;

 // 变换使得成为等边梯形
 D3DXVECTOR3 t_point1,t_point2;
 D3DXVec3TransformCoord(&t_point1,&topl,&matrix);
 D3DXVec3TransformCoord(&t_point2,&topr,&matrix);

 t_point1+=t_point2;

 D3DXMatrixIdentity(&t_matrix);
 t_matrix._21=-t_point1.x/t_point1.y;

 matrix*=t_matrix;

 // 变换使得两侧边成90度,TopLine的两点在[-1,1]和[1,1]上
 D3DXVec3TransformCoord(&t_point1,&topr,&matrix);

 D3DXMatrixScaling(&t_matrix,1.0f/t_point1.x,1.0f/t_point1.y,1.0f);

 matrix*=t_matrix;

 // 变换使得梯形变成矩形
 t_matrix._11=t_matrix._22=t_matrix._33=t_matrix._24=t_matrix._42=1.0f;
 t_matrix._12=t_matrix._13=t_matrix._14=t_matrix._21=t_matrix._23=0.0f;
 t_matrix._31=t_matrix._32=t_matrix._34=t_matrix._41=t_matrix._43=t_matrix._44=0.0f;

 matrix*=t_matrix;

 // 平移使得矩形的中心到Light's Post-Perspective Space的中点
 D3DXVec3TransformCoord(&t_point1,&topl,&matrix);
 D3DXVec3TransformCoord(&t_point2,&bottomr,&matrix);

 D3DXMatrixTranslation(&t_matrix,0,-(t_point1.y+t_point2.y)/2.0f,0);

 matrix*=t_matrix;

 // 拉伸矩形的Y方向,使得充满整个Light's Post-Perspective Space
 D3DXVECTOR4 t_point3;
 D3DXVec3Transform(&t_point3,&topl,&matrix);

 D3DXMatrixIdentity(&t_matrix);

 t_matrix._22=-t_point3.w/t_point3.y;

 matrix*=t_matrix;

 //
 return S_OK;
};

posted @ 2005-08-03 00:32 胡说八道 阅读(834) | 评论 (1)编辑

Meltdown 2005 Presentations

Get up to date with the latest presentations from Meltdown 2005. All presentations given at the Windows, Graphics,
 Visual Studio, and Business/Publisher tracks are available for immediate download. 

http://msdn.microsoft.com/directx/

posted @ 2005-07-29 00:46 胡说八道 阅读(466) | 评论 (0)编辑

:-)
 上面的offset计算错了,下面是修改后的:
posted @ 2005-07-27 17:52 胡说八道 阅读(600) | 评论 (0)编辑

房屋使用了PRT计算光照

posted @ 2005-07-26 20:42 胡说八道 阅读(535) | 评论 (0)编辑

想法是基于Parallax Mapping,首先计算在TextureSpace中的ViewDir,然后根据这个ViewDir和假设的多个TextureLayer的高度偏移计算出每个Texture的坐标偏移.
这样就能在一个平面上作出能根据视点的变化来模拟多个层次的草.





上面的三张图是使用了3层Texture的三个角度的截图,注意红色框内的草在不同的角度观察下的情况.

posted @ 2005-07-18 00:13 胡说八道 阅读(920) | 评论 (1)编辑



1 首先Render Shadow Map
2 采样Shadow Map渲染到Texture Space
3 Blur获得的Texture Space贴图
3 正常渲染人物
posted @ 2005-07-14 15:39 胡说八道 阅读(944) | 评论 (5)编辑

调整了一下算法,修改了水面的颜色,加了个临时的天空和水面加入了Choppy
新:


旧:


-海面分成多个Tile,每个Tile分成多级LOD,和GeoMipMap类似.
-每个Tile采用NormalMap来保持高的细节
-海面Tile高度采用FFT计算.(并不是每个Tile都计算,节省计算时间,可以在可接受桢率上支持非常大的海面)
posted @ 2005-07-09 21:56 胡说八道 阅读(724) | 评论 (1)编辑




地型采用了GeoMipMap,没个Tile是33x33顶点.VFC采用了"Efficient View Frustum Culling"
http://www.cg.tuwien.ac.at/studentwork/CESCG/CESCG-2002/DSykoraJJelinek/
介绍的VFC+n,p-vertex test+plane masking and coherency.


posted @ 2005-07-06 21:12 胡说八道 阅读(1249) | 评论 (2)编辑

1 直接光照

2 直接光照+间接光照

红色框内差别比较明显.
posted @ 2005-05-31 21:27 胡说八道 阅读(636) | 评论 (0)编辑

FFT 顶点+NormalMap


posted @ 2005-05-31 09:12 胡说八道 阅读(695) | 评论 (0)编辑

每个面有64X64的微面

 
posted @ 2005-05-26 16:44 胡说八道 阅读(1137) | 评论 (2)编辑

命令行:
DiffuseCubeMaper.exe dest.dds src.dds

程序读取src.dds计算出相应的DiffuseCubeMap保存在dest.dds
这个版本暂时只支持生成256x256大小的cube map
//命令行下执行后,会立刻返回,但是cubemap需要过一会儿产生

DiffuseCubeMap保存的是根据法线的(ρ/pi)*∫Li(ω1)*max(0,dot(dω1,N))*dω1,但是由于一般使用的
源CubeMap都不是真实亮度分布的,计算出来会偏暗,在这里我没有/pi.和ATI的RenderMonkey所带的
一些DiffuseCubeMap相比,本程序生成的偏亮,不知道ATI的这些图片是采用什么样的计算方法得到的.

地址 :undefined

不同分辨率的DiffuseCubeMap的效果差异:(使用RenderMonkey)

16x16


32x32


64x64


128x128


256x256

posted @ 2005-03-07 17:08 胡说八道 阅读(648) | 评论 (0)编辑

Ambient Occlusion Fields

Janne Kontkanen, Samuli Laine
to appear in ACM Siggraph 2005 Symposium on Interactive 3D Graphics and Games

Abstract

We present a novel real-time technique for computing inter-object ambient occlusion. For each occluding object, we precompute a field in the space surrounding the object that encodes an approximation of the occlusion caused by the object. This volumetric information is then used at run-time in a fragment program for quickly determining the shadow cast on the receiving objects. According to our results, both the computational and storage requirements are low enough for the technique to be directly applicable to computer games running on the current graphics hardware.

http://www.tml.hut.fi/~janne/aofields/




使用的方法是对于每个occluder采用2组cube map来保存每个方向的a,b,c(用来计算这个方向在距离r上的立体角)还有Co和平均方向r。这样计算的时候通过计算得到的立体角和平均方向和法线方向的点乘结果取得于计算好的一张2D Texture获得AO值。

posted @ 2005-02-19 22:33 胡说八道 阅读(916) | 评论 (0)编辑

        我们利用http://www.dedalo-3d.com/index.php?filename=SXCOL/experiments/ss_scattering_python.html介绍的方法通过PRT来模拟SSS效果。

        我们在文章中看到用来计算最终的颜色值的计算公式为:

        公式中的RGBpi和RGBscattered都是不考虑SSS情况下计算得到的颜色值。我们可以通过PRT来计算它们。我们假设物体所有的顶点相对于整个环境来都可以认为在同一个系。那么我们计算这些顶点时候的环境PRT系数Lji都是一致的,那么我们就可以在开始的时候把周围采样的顶点的PRT系数Tji通过计算加到顶点本身的Tji上,这样得到的顶点的PRT系数Tji我们最终和环境的PRT系数Lji计算就可以得到最后的SSS后的效果。和先前谈到的一样,我们计算顶点的PRT系数Tji时候需要把BRDF(这里通常是Diffuse)也考虑进去。

       由于预计算比较耗时,选了个顶点数很少的模型来演示,效果不是很好。



由于我的计算是基于顶点的,所以可以看出效果不是很好
首先,由于顶点分布的不均,造成有些地方过于亮
其次,模型的顶点数目较少,有些色斑

posted @ 2005-01-27 12:44 胡说八道 阅读(768) | 评论 (0)编辑

     摘要: "Of course this is a super simplified model of subsurface scattering. I repete it's artist oriented. So the main target is to have a flexible and quick tool to obtain a realistic effect......"   阅读全文
posted @ 2005-01-26 18:56 胡说八道 阅读(926) | 评论 (0)编辑

     摘要: GPU加速Diffuse Cube Map计算  阅读全文
posted @ 2005-01-12 00:13 胡说八道 阅读(685) | 评论 (0)编辑

     摘要: 我们在考虑Volume的In-Scattering的情况的时候,如果假设Volume的微粒是各项同性的话,那么我们的相位函数p(w1,w)=1/(4*PI)就可以使用一个常量来表示......  阅读全文
posted @ 2005-01-06 11:39 胡说八道 阅读(499) | 评论 (0)编辑

     摘要: gamedev开放了第三章节的下载  阅读全文
posted @ 2005-01-05 14:39 胡说八道 阅读(3075) | 评论 (8)编辑