<script language=javascript src="/blog/myc.js"></script> <script language=javascript src="cmd_main.js"></script> <script src="/BlogerAd/blogad.js"></script>
2004-10-13
|
2004-10-4
Radial Blur
![](http://www.blogcn.com/User12/antsam/upload/200410420545817052.jpg) 这是上次Nvidiappt的一个关于radial blur的流程.
下面是我用土办法实现的,效果没有它的好:主要是blur的算法不好(或者说系数不好).
![](http://www.blogcn.com/User12/antsam/upload/200410420562970666.jpg)
改进办法有两点: 1,改进blur的算法 2,移植到GPU上.
在nehe上有一个例子(第36个)是radial blur的,其关键是不断的blend, 其实效果是近似了高斯blur的效果. nehe.gamedev.net
有什么关于blur的算法或链接可以留言或e-mail交流.
antsam 发表于 >2004-10-4 21:00:31 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=2&rs3=2004-10-4%2021:00:31&id=4102140&rs9=1&u=antsam&au="></script> |
|
2004-9-28
中秋快乐!!!
别忘了吃月饼,去年没吃搞得我很郁闷! 所以提前吃了很多^_^.
antsam 发表于 >2004-9-28 19:45:02 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=3&rs3=2004-9-28%2019:45:02&id=4012299&rs9=1&u=antsam&au="></script> |
|
2004-9-18
Material System 笔记
纹理,材质 texture、material、texture manager、material system 各自扮演的角色等等。
对于材质的定义我们引用half life 2中有趣的定义:
Materials System
- Instead of traditional textures, Source defines sets of materials that specify what the object is made from and the texture used for that object. A material specifies how an object will fracture when broken, what it will sound like when broken or dragged across another surface, and what that object mass and buoyancy are. This system is much more flexible than other texture only based systems.
- Materials can interact with objects or NPCs such as mud or ice for vehicles to slide/lose traction on.
纹理只是材质的一部分,现在基本上渲染的时候同时用到很多纹理,一般情况下用 Material来代表材质;用texture来代表一层纹理主要是filter的属性、mipmap、 混合方式等等;Material中不仅记录各层纹理的上述属性,还有一些diffuse等光照 属性,以及用到的vs 和ps shader的文件名等等。Texture manager和material system,则是用来控制这个场景中用到的Material,一般用脚本的形式进行保存。 还有就是DirectX和OpenGL中的纹理数据或接口还是通过Texture manager和Material system统一进行管理的。
渲染过程中以Material为单位设置纹理,纹理属性,shader和shader相关属性。
那么pass怎么初始化,怎么进行渲染等等还没有想好,希望又兴趣的朋友交流。 AntsamCGD@hotmail.com
antsam 发表于 >2004-9-18 23:43:06 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=4&rs3=2004-9-18%2023:43:06&id=3868559&rs9=1&u=antsam&au="></script> |
|
2004-9-15
Team 3D Game Engine Feature(TODO) List
这是目标,虽然只是目标,但总比没有目标的好,大而全和细而精本身就是 一个矛盾,忧郁还不如step by step.
Team 3D Game Engine Feature(TODO): Basic and Utility -- Math -- Debug -- Utility Function -- FPS
Scene Graph -- Resource Manager -- Scene Manager -- Collide detection(Third Party lib supported) -- BSP ... -- ...
Shader System(Render System) -- HLSL and shader 2.0 supported -- Shader Manager -- Transition Table -- Shaders -- NPR -- BumpMap -- Shadow -- Water -- ...
Material System
Animation System -- Key Frame animation -- Skeleton animation
Particles System -- Lightning -- Raining -- Snowing -- Cloud(fix me) -- Fur(fix me) -- (Third Party) -- ...
Script System -- JavaScript
GUI and Message System -- Button -- Window -- Check Box -- Text Box -- Label Box -- Scroll -- List Box -- Drop List -- ... -- Message Despatch
FileSystem -- Various Animation Model Supported -- Various Scene Model Supported -- Various Texture format file Supported(May be Third party) -- Stream data -- ...
Terrain -- Lod -- Detail texture -- Infinite Terrain -- ...
Special Effect -- ...
Tool
Audio System -- Wave(DirectSound) -- Mp3(DirectMusic) -- Video(AVI, Mpeg)(DirectShow) -- 3D sound -- ...
AI System (third party: DirectAI or Fear) Physic Lib (third party) -- Tokamak Game Physics Lib(Free) http://www.tokamakphysics.com/
antsam 发表于 >2004-9-15 12:52:37 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=5&rs3=2004-9-15%2012:52:37&id=3815570&rs9=1&u=antsam&au="></script> |
|
2004-9-12
HL2 engine feature list
http://bbs.chinagamedev.net/showthread.php?t=7691
比较感兴趣的部分(特别是Material System,比较有趣):
Renderer
- Version 2.0 (and below) shaders, bump mapping, LOD on models and world - Author shaders with HLSL - Cube and environment mapping - Dynamic lights, vertex lighting and light maps, many light types including flickering, pulsing etc. - High-Dynamic Range lighting - Water with refraction and fresnel effects - Advanced particle system that can emit sprites or models - Projected shadows allow for a large number of characters per scene - Occluder entities for visibility blocking - Indoor/Outdoor environments . Deformable terrain . 3D skyboxes extend the horizon and add parallax on distant objects . Dynamically rendered organics (grass, trees etc) - Subdivision surfaces, diffuse & specular bump maps - Real-time radiosity lighting - Effects include but are not limited to: particles, beams, volumetric smoke, sparks, blood, environmental effects like fog and rain - Scalability . Dx6-Dx9 hardware supported
Materials System
- Instead of traditional textures, Source defines sets of materials that specify what the object is made from and the texture used for that object. A material specifies how an object will fracture when broken, what it will sound like when broken or dragged across another surface, and what that object mass and buoyancy are. This system is much more flexible than other texture only based systems.
- Materials can interact with objects or NPCs such as mud or ice for vehicles to slide/lose traction on.
Advanced Characters
- Detailed and believable characters - Realistic eyes . Focus on player/object, not simply parallel views . Proper eye ulge? for realistic eye reflections - Simulated musculature provides outstanding emotions, speech and body language - Language independent speech, characters can naturally speak in many languages - Skeletal/bone system for animation - Layered animation system can synthesize complex animations out of several pieces
Physics
- More responsive world with realistic interactions - Sounds & graphics follow from physics - AI characters can interact with physically simulated objects - Ropes/cables, machines, constraint systems, ragdoll physics - Can be controlled by level design - Kinematic animated bone followers - Custom procedural physics controllers - Vehicles . Wheels slip and skid . Realistic suspensions with springs on each wheel . Realistic leaning during acceleration/deceleration and turning . Individually tunable parameters such as horsepower, gearing, max speed, shift speed, tire material, tire friction, spring tension/dampening etc. . Multiple players in a vehicle in multiplayer . Hovercraft support for cheaper simulation
antsam 发表于 >2004-9-12 20:20:35 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=6&rs3=2004-9-12%2020:20:35&id=3779055&rs9=1&u=antsam&au="></script> |
|
2004-9-12
2004年NVIDIA开发者十全十美厨艺大会
这次参加NVidia开发着大会,收获不少,有不少内容是GDC2004的,也有几个是新的:
Secrets of the Demo Team
主要是讲6800的两个demo:Nalu和Timbury
做了一些笔记,对于Nalu: 1、头发阴影
![](https://i-blog.csdnimg.cn/blog_migrate/b341f37438ed1848138d527f7fa03bfb.jpeg) 主要是用多层shadow map进行阴影测试。 【OSM】
2、Volume Light 用的是Radial Blur,虽然好像是体绘制,其实用的是图像处理的方法。
3、头发模型 用到了计算几何中用控制点来创建曲线的。控制点则用Particle System来实现。 ...
在Iron Developer 2004 Presentations中:
http://developer.nvidia.com/object/iron_dev_2004_presentations.html 可惜这个presentation是日文的。
Timbury则主要讲的是HDR的技术。
还有一篇非常好: GPU Performance Analysis & Tuning 主要用是讲bottleneck的分类,以及用nvidia的工具来分析bottleneck所在的方法。
还有一个demo影响非常深,讲的主要是: DX9 Instancing API
![](http://www.blogcn.com/User12/antsam/upload/200491220122846228.jpg) DX9SDK也有Instance的例子。
还有一些就是在GDC2004上的Presentation。
antsam 发表于 >2004-9-12 20:03:58 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=7&rs3=2004-9-12%2020:03:58&id=3778840&rs9=1&u=antsam&au="></script> |
|
2004-9-8
Edge detect
边界的种类可以分为三种:
(1) silhouettes(轮廓线) (2) crease edge (a) ridges(类似山脊) (b) valleys(类似山谷) (3) intersection
现在给出他们的定义: silhuettes是指front face同back face的交界线。 crease ridges是指两个front face面的夹角小于某个阀值的时候的交线 crease valleys是指两个front face面的夹角大于某个阀值的时候的交线 intersection则是两个front face的交线,但是必须是能反应模型信息的face。
勾边的方法: 1. M$的方法,用AlphaTest,V*N取边上的顶点,问题是要求模型顶点数量、曲面,效果不好(千里马肝)。 把v*n的值作为alpha值,然后用appha test,通过控制阀值来控制线的粗细.
2. 2pass,backface线框,设置线宽,问题是D3D不支持线宽,仅能在OpenGL上实现,效果好(千里马肝)。 -这个方法d3d确实不行,我用每条线一个quad的方法来,但是由于quad的朝向问题没用实现 (billboard),有些方向的效果不行。 不过可以在勾边时候选择cullmode为相反的 ,设置一个depth bias.绘制线框模式(sevecol) 进行改进.
3. 2pass,放大modleview,backface纯黑,三个轴缩放比不易控制,效果一般(千里马肝)。 -是直接放大position.w,当时随手试的;或者matrix放大。效果是3个轴上缩放不好控制 这个方法不是很好,很多边找不到(因为吧zbuffer给关掉的缘故) 4. nvidia的方法,用normal map(千里马肝) -其实就是ps的方法.
5. 预处理模型,计算边(千里马肝) -这个方法同第二个方法结合起来,试过一下,计算量挺大的,outline需要每帧都计算。
6. 2pass,沿法线放大(千里马肝) -是正确的放大方法,沿normal扩大back face,使用2pass 1pass画正面,阴影 2pass画背面,逐vertex += normal * 0.2,color只取diffuse = 0 这也是只用vs的最佳效果和方法,但是需要2pass,face上去了,不过也没办法,XIII也是这种方法 这个方法不是很好,很多边找不到(因为吧zbuffer给关掉的缘故)
7. PS -利用normal map和depth map分别找出边界,合并,效果比较好。当然可以只用 normal map 或 depth map,可能会少一些edge。
这里介绍一下ps的流程: 计算depth map和normal map(参考[3])
![](http://www.blogcn.com/User12/antsam/upload/20049720182543058.jpg) depth map normal map
对这两张图进行图像处理(参考[3][4]), vertex 和pixel实现方法参考[5]
![](http://www.blogcn.com/User12/antsam/upload/20049720184676781.jpg) depth map处理结果 normal map处理结果
最后叠加的结果(边如果有锯齿是图片缩小的结果,可以点击图片):
![](http://www.blogcn.com/User12/antsam/upload/20049720183378256.jpg)
下面是用per vertex 和quad处理的结果,可以对比一下.
![](http://www.blogcn.com/User12/antsam/upload/20049720191753770.jpg)
Thanks to : 千里马肝 sevecol
Reference: M$方法: [1] http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndir3d/html/dxvertex.asp
CGD关于NPR的讨论: [2] http://bbs.chinagamedev.net/showthread.php?t=6812&page=1&pp=15
放大模型的可以在nvidia网站上找到资料
ps的方法: [3]Cartoon-looking rendering of 3D- scenes.pdf [4]Comprehensible Rendering of 3-D Shapes.pdf
[5]Non-Photorealistic Rendering with Pixel and Vertex Shaders
http://www.ati.com/developer/shaderx/index.html
[6]Hardware Support for Non-photorealistic Rendering
[7]A Non-Photorealistic Lighting Model For Automatic Technical Illustration
antsam 发表于 >2004-9-8 13:47:27 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=8&rs3=2004-9-8%2013:47:27&id=3712231&rs9=1&u=antsam&au="></script> |
|
2004-9-4
lightning
闪电的模拟
参考资料: Visual Simulation of Lightning(到google上搜索一下)
这片文章的模拟不是基于物理原理的,而是通过随机函数来模拟的, 所以的效果不一定符合物理意义。
所以这个过程中随机函数的好坏直接影响模拟的效果。我们尽量控制 branch和main stroke的概率符合物理规律。
boost里面有一个random的专门的库(thx 千里马肝),不过我没有去用过。
下面是一些模拟的效果: (不是每一次模拟都符合物理意义的,我截了一些好的)
![](http://www.blogcn.com/User12/antsam/upload/20049423145951173.jpg)
![](http://www.blogcn.com/User12/antsam/upload/20049423143535416.jpg)
![](http://www.blogcn.com/User12/antsam/upload/2004942314514350.jpg)
![](http://www.blogcn.com/User12/antsam/upload/20049423132325688.jpg)
![](http://www.blogcn.com/User12/antsam/upload/20049423124335853.jpg)
antsam 发表于 >2004-9-4 23:23:57 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=9&rs3=2004-9-4%2023:23:57&id=3662374&rs9=1&u=antsam&au="></script> |
|
2004-8-28
JavaScript Embedding (2)
对于JavaScript Embedding 的理解还有偏差,希望大家交流。 因为关于JavaScript Embedding 的结构的文档不是很多,所以 这些理解不一定正确。
Application同Javascript的交互分为: 1、在Application中调用Javascript中定义的脚本函数 2、在Javascript中调用Application中定义的函数和全局变量。 3、在Application中运行脚本。
在上面所提到的各种交互中,实现场景的一级结构是比较简单的, 但是如果需要实现场景的树的结构就比较复杂了。
要建立一棵树型结构目前为止的一个解决方案是通过Jval作为两个一级 结构的桥梁,最终实现树型结构的目的。
区别: Var Object Element Property Data slot
Var Object的区别在于Prototype和instance的区别,Object是定义Class或struct, 而Var则是定义一个实例。
所以建立一棵Object Tree的问题就同C++中类似,先定义一些类和结构,然后把一些 类或结构作为其他类或结构的成员变量。这就是为什么前面所说的object好像只能是 一个二级结构而不能是树结构,有了成员变量以后就能达到树的结构了。
而Element、Property都是为了定义成员变量: JS_SetElement JS_SetProperty
JS_DefineElement JS_DefineProperty
注:如果想把某个object同c++中的变量连接起来用 JS_SetPrivate
最后一个Data slot的作用就是把Object Tree中的每个节点同Application中的文档 的树型就构挂钩起来,这样对Object Tree中的操作(函数调用、变量引用等等)就 映射到Application中文档就构相应节点的操作。
注意Define系列函数、Set系列函数和New系列函数的区别: JS_DefineElement JS_SetElement JS_DefineFunction JS_NewFunction JS_DefineObject JS_NewObject JS_DefineProperty JS_SetProperty
Define系列函数针对某一个具体的Object定义一些属性 New系列函数则是生成一个空的属性,不依附于其他Object,类似于c++中的New等 Set系列这是将空的属性挂到某一个Object上
//摘录,对SM的术语理解有一定的帮助 multiple levels of abstraction. jsvals represent JSObjects, which have private data that points to an interface to the object I am representing
实现树型就构有两种办法: 一是:在初始化的时候就建立全部的Object Tree
优点: 1、在以后的运行过程中不需要在建Object Tree,在运行速度上会有一些优势 缺点: 1、可能占用比较大的内存控件,所以一般只适合场景较小的情况 2、场景结构的变动对Object Tree的影响较大,所以一般只适用静态场景的情况
二是:进行动态的创建,只有到调用的时候才建立相应的场景树
有点: 1、使用较大的场景 2、使用动态场景 缺点: 1、在速度上会有一定的影响
对第一种方法举下面一个例子: JSObject* const sceneobj = JS_NewObject(ct, &generic_object_class, 0, 0); JS_SetPrivate(ct, sceneobj, &scene);
JSObject* nodeobjs = JS_NewArrayObject(ct, 2, NULL); JS_DefineProperty(ct, sceneobj, "nodes", OBJECT_TO_JSVAL(nodeobjs), NULL, NULL, JSPROP_ENUMERATE); JS_DefineFunction(ct, sceneobj,"print",&print, 0, 0);
JSObject* nodeAobj = JS_NewObject(ct,&generic_object_class,0,0); JS_SetPrivate(ct,nodeAobj, scene.m_nodes[0]); JS_DefineFunction(ct, nodeAobj,"print",&printinfoA, 0, 0);
JSObject* nodeBobj = JS_NewObject(ct,&generic_object_class,0,0); JS_SetPrivate(ct,nodeBobj, scene.m_nodes[1]); JS_DefineFunction(ct, nodeBobj,"print",&printinfoB, 0, 0);
JS_DefineElement(ct, nodeobjs, 0, OBJECT_TO_JSVAL(nodeAobj), NULL, NULL, 0); JS_DefineElement(ct, nodeobjs, 1, OBJECT_TO_JSVAL(nodeBobj), NULL, NULL, 0);
jsval scene_value = OBJECT_TO_JSVAL(sceneobj); JS_SetProperty(ct, globalObj, "scene", &scene_value);
这样就可以执行下面的脚本: scene.nodes[0].print(); scene.nodes[1].print(); scene.print();
antsam 发表于 >2004-8-28 11:36:26 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=10&rs3=2004-8-28%2011:36:26&id=3543783&rs9=1&u=antsam&au="></script> |
|
2004-8-27
【引用】我所理解的Monte Carlo Ray Tracing
一篇Monte Carlo Ray Tracing理解的文章
http://www.blogcn.com/user2/sevecol/index.html?id=3318146&run=.09D4C2F 我所理解的Monte Carlo Ray Tracing
--------------------------------------------------------------------------------
对于Monte Carlo Ray Tracing不是很了解,理解可能有些偏差和错误.
传统的光线跟踪算法不能计算diffuse->diffuse之间的光线传递,也就是没有diffuse-diffuse之间的color bleeding.另外一种全局光照技术辐射度可以完成diffuse之间的光能传递,但是没有办法实现镜面反射和折射.现在有两种技术能比较好的结合上面的那种方法的优点,那就是photon map和Monte Carlo Ray Tracing.
Monte Carlo Ray Tracing故名思意就是在光线碰到面时候反射的时候使用Monte Carlo积分的方法计算真实光照效果.这里有一个比较需要注意的地方就是采样的分布,我们知道我们不可能完全模拟,所以说符合分布的采样就能在较少的采样情况下表现出较好的图像质量.我们知道反射需要遵循BRDF,也就是说使用BRDF pdf是我们的采样的概率分布函数.我们通过一些技术能将按照[0,1]X[0,1]的均匀分布的采样,转换到半球上,符合BRDF pdf.
一般我们的处理过程是: 我们从eye射出一条光线,和场景作碰撞检测,如果有碰撞,如果是光源,返回,如果深度大于阀值,返回,否则根据碰撞面的BRDF pdf,我们产生采样点,根据Monte Carlo积分法求出光照信息(产生的光线递归)
对于最终的图像质量我们一般采用prefliter来改善,使用分层的非均匀采样,对于每个象素点,然后在结合.
欢迎大家拍砖
不知道有没有同样对这个技术感兴趣的朋友,大家可以交流交流 我的MSN:sevecol@sina.com
antsam 发表于 >2004-8-27 21:17:30 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=11&rs3=2004-8-27%2021:17:30&id=3535880&rs9=1&u=antsam&au="></script> |
|
2004-8-19
|
2004-8-13
|
2004-8-12
3D Engines Database
Welcome to DevMaster's Game and Graphics Engines Database, your source for 3D Engines. This database is committed to providing you with the most accurate and up-to-date information for current engines around the web. Each engine contains a brief description as well as a list of supported features and general info (platform, API, etc.). In addition, you will find reviews/ratings from DevMaster.net staff or community members to help you decide which engine is right for you. Find out what other useful tools we've included to make this resource a fun and interesting one, guaranteed to increase your knowledge and understanding. This is a great way to know how your engine compares with others or to learn how engines use state-of-the-art technology.
http://www.devmaster.net/
http://www.devmaster.net/ engines/ 网站上还有很多文章,不错的站点。
以前也有一个3D engine的list:
http://www.3dengines.net/
antsam 发表于 >2004-8-12 12:39:02 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=14&rs3=2004-8-12%2012:39:02&id=3291913&rs9=1&u=antsam&au="></script> |
|
2004-8-8
Half life 2 的ShaderSystem
Half life 2 中把shader system 分为shadow和shaderapi两部分,其实它把 传统的quake系列的shader脚本用shadow来代替了。shadow通过第一次渲 染记录mesh渲染所需要设置的状态,然后同场景中所有的其他物体渲染状态 之间建立一张transition table,以减小状态的切换,达到提高渲染速度的目的。
antsam 发表于 >2004-8-8 10:58:45 [全文] [评论] [引用] [推荐] [档案] <script language=javascript src="/inc/sub_st.asp?whois=antsam&n=15&rs3=2004-8-8%2010:58:45&id=3229781&rs9=1&u=antsam&au="></script> |
|
<script src="/BlogerAd/floatimg.js"></script>
<script language=javascript>document.title="厚积薄发"</script> |
|
About
Computer Graphics Game Programming 责任会使你觉得现在有事可做, 计划会然你发现以后还有很多事 情要做! |
Entries
<script language=javascript src="cmd_news.js"></script>
<script language=javascript src="/blog/count.asp?uid=antsam"></script> ![](http://www.blogcn.com/counts/2/0.gif) ![](http://www.blogcn.com/counts/2/1.gif) ![](http://www.blogcn.com/counts/2/3.gif) ![](http://www.blogcn.com/counts/2/2.gif)
MSN:AntsamCGD@hotmail.com
Comments
<script language=javascript src="/g_list.asp?n=10&date=yes&new=no&user=antsam&wcounts=20"></script> <script language=javascript src="cmd_comments.js"></script>
| Links: <script language=javascript src="cmd_txt.js"></script>
Books: <script language=javascript src="cmd_img.js"></script>
|
|
Categories
| | <script language=javascript src="/blog/cmd_quick.js"></script>
| | | |
|
|
Login
| <script language=JavaScript> function ck() { if (fm1.username.value=="") {alert("用户名不能为空!");fm1.username.focus();return false;} if (fm1.apsd.value=="") {alert("用户密码不能为空!");fm1.apsd.focus();return false;} } </script>
|