nv's shader_model_3_unleased.pdf笔记
1,硬性指标的提升:
vertex shader:
constant register >=256,
temp reg: 32
instructions 65535
pixel shader:
constant reg: 224
temp reg 32
interpolated reg: 10
2,dynamic/static flow control
它们重要的应用是shader lod,近处或者吸引目光的地方使用复杂shader,否则就用简单的;
static flow control是指通过constant reg来控制branch;
dynamic flow control是指用函数里生成的数据来做flow branch;
在vertex shader里,branch flow control需要2个cycle,static会更少;
pixel shader里面branch更贵一些,dynamic比static贵,这个就比较和具体情况相关,需要profile来给与
参照,但是如果通过branch可以省掉大量计算,取消parallax mapping,阴影的sample,当然不需要过多考虑了;
3,vertex texture,instancing
vertex texture:这个是很牛x的特性,作为数据存储介质的texture可以加入到vertex shader之后,赋予了vertex变化的极大弹性,
在vertex shader中做的诸如animation,skin,particle可以变得更加复杂梦幻。
另外也可以提供如水体模拟这样的更胜pixel shader端的做法;
instancing:一个model可以通过多个stream非常便宜的变成多个,对于大量简单类似模型的渲染非常有帮助;
当然它会给pixelshader加负担,所以这种模型的渲染就不能太费pixel shaderl了;
4,shader pipeline
[vertex shader]: fp32 vector unit,fp32 scalar unit,vertex texture fetch, branch unit,primitive assembly,viewport processing;
[pixel shader]: fp texture processor,texture cache,fp32 shader unit1,fp32 shader unit2,branch processor,fog alu;
[fp32 shader unit1]: 4fp ops/pixel,dual/co-issue,texture addr calc,free fp 16 normalize+mini alu;
[fp32 shader unit2]: 4fp ops/pixel,dual/co-issue+mini alu;
[texture filter]:bi/tri/aniso filter;fp tex filter;
[co-issue]: 2 independent instruction work on the sample shader unit;
[dual-issue]: 2 independent instruction work on different shader units;
5,sm3 in shader map
[dynamic flow branch]:检测边缘,是的话就多sample一些,ps:但是只是边缘的话就做blur好了呀;
[float texture]fp32,fp16,更高的精度,更好的效果;
[texture filter option]bilinear,trilinear,aniso,可以帮助更好的sample shadow map
[fast z-only rendering] 两倍的速度构造z buffer,可以用来做shadow,也可以做z cull;
6,multiple render target:
可以输出到多个render target;
用来做deferred shading是很好的选择;
7,float texture filtering;
更高的精度,对hdr帮助极大;