• dx9实现Geometry Instancing


    为解决引擎批次比较高的问题,通常一个有效的方法是将相同性质的物体顶点组织到一个批次中,一次性渲染;这个方法被称作Geometry Instancing(几何实例化)。 在非固定管线支持2.0以上的显卡上,dx可以硬件支持该技术,具体的实现流程如下:

    1. 为物体实例定义属性结构InstanceAttribute(大概包括:位置、法线、颜色等),假设一个批次绘制N个物体实例,则需要申请N*sizeof(InstanceAttribute)个byte的顶点缓冲。

    2. 为单个物体实例分配顶点缓冲,这个跟普通的绘制没有区别,即根据顶点格式定义,申请相应大小的顶点缓冲就行了。

    3. 在每帧渲染的时候,需要向显卡送入两个顶点流,API调用顺序如下:

    SetStreamSourceFreq(0, …, INDEXEDATA|InstNum) 
    SetStreamSourceFreq(1, …, INSTANCEDATA|1
    SetStreamSource(0, …..)
    SetIndices(…)
    SetStreamSource(
    1, ….)

    pEffect
    ->SetTechnique(…)
    pEffect
    ->SetMatrix(…) …
    pEffect
    ->Begin()
    pEffect
    ->BeginPass()
    pEffect
    ->DrawPrimitive(…)
    pEffect
    ->EndPass()
    pEffect
    ->End()

    在实际应用中,对于场景中大面积的静态物体(比如:灌木、草体)等,如果将分散的很开的物体实例加入到一个批次中,则在裁剪的时候会出现一大块草皮突然出现,又突然消失的问题;解决这个问题的方法可以将大块的草皮根据物理分布分割成多个小块,并根据小块中的每个实例计算出小块的质心。

  • 相关阅读:
    常见时间复杂度及对应关系
    【转载】Locust实现集合点
    curl 查看接口的网络分段响应时间
    python-字符串操作分类小结
    Jquery--1--选择器分类
    【转】linux shell编程实例总结
    随笔分类整理
    linux备忘录-日志档案
    linux备忘录-系统服务daemon
    linux备忘录-程序管理与SELinux
  • 原文地址:https://www.cnblogs.com/konlil/p/1956649.html
Copyright © 2020-2023  润新知