周笔记(6/52) - DX11 - Geometry Shader/Compute Shader

本文介绍了DirectX11中的关键特性,包括Geometry Shader的原理与优化技巧,如制作billboard效果,以及如何使用SV_PrimitiveID和SV_VertexID。此外,详细讲解了Texture Array的创建与采样,以及Alpha-to-coverage的实现与优势。同时,深入探讨了Compute Shader的GPGPU概念,线程组和同步,并给出了在模糊处理中的应用实例。
摘要由CSDN通过智能技术生成

Geometry Shader

要点

  • 作用于每个片元(primitive)
    • each_outPrimitiveList = GeometryShader(each_primitive.vertexList)
    • 不论三角形带还是三角形列表,输入都是一个完整三角形顶点列表
  • 离开GS的顶点坐标必须是齐次裁剪空间
  • 输出必须预先定义最大顶点数N([maxvertexcount(N)]),且越小越好
  • 可以使用GS来制作billboard效果,可以节省四分之三的顶点吞吐
  • SV_PrimitiveID:面元索引。可以直接在PS里边加入该输入;如果有GS的话,一定要出现在GS的signature中才能使用它。
  • SV_VertexID:顶点索引。VS中即可使用。

用法

  • 输出流 SteamOutputObject
    • 类型:PointStream/LineStream/TriangleStream
    • 总是strip的形式
    • 可以选择不输出
    • 如果一个strip中的顶点数不能够成一个primitive,那么那个strip将被舍去
  • 函数
    • 追加顶点:void SteamOutputObject::Append(OutputVertexType v)
    • 开始新的三角形带:void SteamOutputObject::RestartStrip()
  • 其他同vs和ps

Texture Array

要点

  • 在PS中进行Sample的时候,对于Texture2D列表的索引必须是const,所以无法临时更改Sample对象
  • 但是使用TextureArray,就可以通过制定z值来索引到

用法

  1. 制作TextureArray的SRV
    • 创建每个Texture:
      • 填充 D3DX11_IMAGE_LOAD_INFO
      • 从File中读取ID3D11Resource:D3DX11CreateTextureFromFile
      • 获取 D3D11_TEXTURE2D_DESC
    • 创建TextureArray:
      • 根据texture的desc填充desc,ArraySize为所需个数
      • 创建ID3D11Texture2D:CreateTexture2D
    • 拷贝Texture进入TextureArray:
      • 遍历每个texture的每个mip level
      • 锁定:context->Map
      • 拷贝:context->UpdateSubresource
      • 解锁:context->Unmap
    • 创建TextureArrayView:
      • 填充 D3D11_SHADER_RESOURCE_VIEW_DESC
      • dev
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值