随笔分类 - GPU and Graphics
摘要:
光照和一种艺术形式。对于角色建模,你需要艺术和解剖学等基础。同样对于光照来说,想要在Marmoset Toolbag中使用好光照,一些传统的光照技巧(特别是指摄影)是必需要学会的。幸运的是,光照是一个老生常谈的话题,我们甚至可以追溯到油画的时代。因此,网上现存着大量的教程,书籍和经验总结。
阅读全文

摘要:
本来是想写一些关于Stage3D、FlasCC以及基于Flash的3D页游引擎方面的文章。 也做了几天的准备工作,希望把这些事情能够给大家(主要是公司项目组内的成员)分享,并理清头绪。
阅读全文

摘要:最近公司游戏正在准备上线,所以FlasCC也就没有研究了,偶尔有闲功夫,也是玩玩3DMAX和UNITY3D。 感觉不会3DMAX,是一种局限。 回到主题,记录一下镜面反射矩阵的推导。 在用Irrlicht和RTT做镜面效果的时候,用到了反射矩阵。 就是需要把摄相机镜像,渲染一个RT,贴到镜面模型上。这个其实还纠结了许久,因为之前做水面渲染的时候,水面是平的,很好计算摄相机在水面以下的位置。 但...
阅读全文
摘要:Programming pipeline & shading language 大家好,今天想给大家介绍一下可编程渲染管线和着色器语言的相关基础知识,使想上手SHADER编程的童鞋们可以快速揭开SHADER语言的神秘面纱 由于时间有限,我决定只讲三个主要方面的内容,其过程中肯定会有不详细之处,还请见
阅读全文
摘要:今天做完了光照提交,被法线问题狠狠地纠结了两个小时。现在想来,自己真是很2. 材质系统雏形算是有了,支持FPP和SHADER、材质动画、XML加载。算下来,这系统也做得够久了,把所有时间算起来,估计也有6人*月的样子。反复修改好几次,这次算是在使用上有点长进。其间也收集了不少值得注意的问题。 这些问题在OGRE,Torque等源码里都有所注释,感觉开源代码最大的好处就是注释完整。比许多家酿的东西要好。(至少好认。。。)随笔记录的一些注意事项,贴在此处以备忘在D3D和SM1中.常量总是会被打包成4元素大小. 因此. 在SM1中.我们只能使用INT4或FLOAT4的设置方式.在HLSL中.如果使用
阅读全文
摘要:一直在关注这个东西,最近忙里偷闲,深入地了解了一下。 首先,我们说说延迟渲染的好处。毕竟一个东西的产生,是为了解决当前已有的东西不能解决的问题。 Deferred Shading Tutorial下载上面的文章很好地讨论了采用传统着色方案所需要面对的问题。主要是下面两种情况。 而对于延迟着色的第一个好处,就是可以将光照处理对物体渲染的开销由 M*N 变为 M+N (其中M为物体数目,N为光源数目) 延迟着色的一般框架图如下: 延迟着色的好处 而延迟着色面临的最大问题就是透明处理另外,延迟着色主要得益于MRT(Multi Render Target).因为,MRT的限制即是延迟着色本身的限制,D
阅读全文
摘要:From http://www.gamedev.net/topic/435995-would-it-be-faster-to-batch-setvertexpixelshaderconstant-calls/Copy the content here for fear that the link is invalide someday.------------------------------------------------------------Kimani:So I would imagine the API call I make most often is SetVertexSh
阅读全文
摘要:The behavior of shader constants has changed between Direct3D 8 and Direct3D 9.
For Direct3D 9, constants set with defx assign values to the shader constant space. The lifetime of a constant declared with defx is confined to the execution of that shader only. Conversely, constants set using the APIs SetXXXShaderConstantX initialize constants in global space. Constants in global space are not copied to local space (visible to the shader) until SetxxxShaderConstants is called.
For Direct3D 8,
阅读全文
摘要:为一个任意网格模型计算其切线空间的基本向量(即切线空间的T B N三个向量)
Modern bump mapping (also known as normal mapping) requires that tangent plane basis vectors be calculated for each vertex in a mesh. This article presents the theory behind the computation of per-vertex tangent spaces for an arbitrary triangle mesh and provides source code that implements the proper mathematics.
现在的bump mapping(或者normal mapping)需要每个顶点的切面的基本向量。这篇文章描述了逐顶点计算任意三角模型的切线空间原理,并且提供了实现这个数学理论的源代码。
阅读全文
摘要:一直没玩台服,国服也停留在72级。 成都的天气一天天严峻,更是不想动了,于是用NVPerfHUD挂了下WOW,看看它到底啥样。用NVPerfHUD挂程序需要被挂的程序自身支持,但是网上有一个老兄写的一个NVPerfHUD Any程序可以帮你完成这个功能。对大多数D9的都有效。除非本身做了破解。给大家这个链接,自己去解决个人问题。http://www.thecodeway.com/blog/?p=433完美时空的引擎很不错,依然坚挺地用着D8。其实挺想挂来看看的,可惜市面上主流的工具都不支持D8,只有D9以及以后的版本。WOW在CTM的版本中升级了它的渲染引擎,光从水面和火焰就看得出来。 但WO
阅读全文
摘要:我不是Shader帝,虽然知道Shader怎么写,但一直没仔细研究过。最近蛋疼至极,研究了下RenderMonkey,于是抽着几个看着比较有趣的效果做了一下。先前的模型贴花http://www.cppblog.com/Leaf/archive/2011/01/07/138093.html和CUBE MAP http://www.cppblog.com/Leaf/archive/2011/01/07/138106.html就是此次蛋疼期的产物之一。还是先围观,上图再说 本次要蛋疼的是折射和反射。反射和折射通常用于增加场景真实感。由于其代价昂贵(通常是要将场景多渲染两次为代价)。因此在实际的游戏
阅读全文
摘要:其基本原理很多例子上有讲到。下面给出一些比较合适的链接
http://developer.nvidia.com/object/cube_map_ogl_tutorial.html NVIDIA官网上的 Opengl Cube texture mapping
http://www.zwqxin.com/archives/shaderglsl/review-cube-mapping-shader.html 某位兄弟的个人BLOG。
以上两位都适合OPENGL控。
本文给出一个DX HLSL例子。并解释了反射方向计算的数学模型。希望能给大家一定的帮助。
CUBE映射主要分为两步:
一、在VS中根据法线和观察位置计算反射方向,并且得到观察空间中的反射方向。
反射方向有两种计算方法。
1、在世界坐标系空间中计算,然后再将计算到的反射方向转换到观察空间。 这要求我们转入观察位置。
2、在观察空间中进行计算,此时观察位置已经为0,0,0,于是不需要传入观察位置,并且得到的向量即为所求。本文的代码采用此种方式。
二、用这个反射方向在PS中对CUBE纹理进行采样。
阅读全文
摘要:一、投影纹理进行模型贴花时,主要是进行三角面剔除,使在渲染贴花时,提交最少的三角面。
二、在贴花PASS中,需要将全局混合开启,并设置相应的SRCBLEND(SRC_ALPHA)和DESTBLEND(DEST_ALPHA)值。括号内为我用的值。
当然,如果你不想让贴花与场景(模型)混合,则可以不开启。
三、请注意纹理的寻址方式以及纹理边缘的ALPHA情况。 若纹理边缘ALPHA不为0,则可以手工进行裁剪。
四、本文仅是采用了固定的投影方向和SHADER内部定义变量的方式来进行贴花渲染。 并且,并未进行模型三角面剔除。所以若要使用,则需要注意第一个问题。
五、本文灵感来源于此贴:http://forums.create.msdn.com/forums/p/34339/198791.aspx
六、支持邮件交流:BoYueGame#Gmail#com
阅读全文
摘要:本文主要内容有:
一、部分背景内容
二、HLSL中的row-major matrix picking and column-major matrix picking
三、MUL规则
四、观察矩阵的另类解释和TBN空间的类推
五、HLSL中矩阵的构造(为什么WorldToTargentSpaceMatrix要左乘LightDir)
阅读全文
摘要:http://tech.163.com/digi/10/0430/08/65GM21CJ001618J7.html
阅读全文
摘要:Depth-Buffer(深度缓存)有两种:Z-Buffer 和 W-Buffer,这里讨论这两种深度缓存的区别,以及如何在两者之间转换。 w 的含义 3D空间点的坐标是(x,y,z),为了使矩阵乘法具有平移变换的功效,我们用4D空间中的点(x,y,z,w)来表示3D空间中的点(x',y',z'),这两个不同空间点之间的关系是: x' = x / w y' = y / w z' = z / w 像这样用四维空间点表示三维空间点,或者说用 n + 1 维空间点表示 n 维空间点的方法叫做 “齐次坐标表示法”。 实际使用中,在模型-世界转换、世界-视图转换过程中,w
阅读全文
摘要:译注:对于一个想学好着色器语言(不管是ASM还是HLSL、GLSL)的人来说,了解显卡中相应寄存器的功能和局限是必不可少的。 下面给出了PS 1.X中可用的寄存器的相关信息,希望能给大家带来帮助!有些单词我实在不知道怎么翻译,只可意会!像素着色器需要依靠寄存器来取得顶点数据,输出像素数据,取得计算时的临时结果和关联纹理采样通道(stage)。有几种类型的寄存器,每一种都有特殊的功能和用途。像素着色器需要的用到的数据由寄存器保管,下面是寄器存的所有介绍寄存器类型:描述了四种可用的寄存器和他们各自的用途读取端口限制:单指针使用多个寄存器时的限制R/RW: 描述了哪些寄存器可以用来读,写或是读写。范
阅读全文
摘要:原文出处不详,我也是看到别人转的贴,觉得很有用! 若作者看到了,可以留言给我,我加上您的原文地址!先说个题外话, 本来我想解答一下最近Creators Club论坛上经常出现的一个问题, 意外的是在网上竟然找不到什么全面的答案..这是个有着复杂答案的简单问题:“为什么我的透明物体的绘制顺序不对, 或者有些不见了?”当绘制一个3D场景时, 对图形进行深度排序是非常重要的, 这样离镜头近才画在远处物体的前面. 我们不会希望看到远处的山把近在眼前的建筑给挡住了!如今有三种深度排序方法得到了广泛的应用:深度缓冲 (也叫做 z-buffering) 油画家算法 背面剔除 不幸的是, 每种都有其局限性.
阅读全文
摘要:游戏开发中,计算机图形学是必不可少的东西。许多人也是从接触图形开始而进入游戏行业的。3D管线导论这本书诠释了3D管线的细节。为大家解开了萦绕已久的迷团。很多次偶然地看到 《3D pipeline tutorial》(3D管线导论)这本书的推荐。 今天就狠下心来搜索了一下。 下载了一个电子版来瞧瞧。发现自己曾经百思不得其解的内容就全在里面。这本书介绍了我们的图形应用程序场景中一些常用的方法。如:对象遍历,对象移动,摄像机移动,可见对象查询,LOD等。而本书的重头戏则在于,他详细地讲述了一个三角形和其纹理等信息,从输入到输出到屏幕所经历的过程。先前我就一直在查找这方面的资料,要是自己当初就下了这本
阅读全文
摘要:纹理内容常常是存在sRGB格式中的。关于这个格式的细节是可以被找到的。通常,像素管线假定颜色是线性的以便融合(blending)操作可以在线性空间中进行。因为sRGB中的内容是Gamma较正,所以融合操作在线性空间中处理会导致错误的结果。显卡在读到有关sRGB内容的时候便会取消Gamma较正以避免错误的发生。然后当输出像素的时候再将像素信息写回sRGB格式中。在这种情况下,所有像素管线中的操作就可以都在心线性空间中进行。Gamma校正在D3D9中。 可以指明一张纹理是不是Gamma 2.2(sRGB) 较正.驱动程序将会在SetTexture的时候将其转换到线性的Gamma以进行融合操作。或者
阅读全文