Questions tagged «geometry-shader»

1
船体,域和几何着色器有什么用途?
我为自己的(前任)老板做了相当多的3D游戏编程工作,也为自己的独立游戏使用了自己的自定义引擎。 最初,我从Direct3D 9和D3DX9开始,它们几乎为我完成了所有工作,并且完全不需要我考虑着色器。 在那之后,我写了我的第一个Direct3D 9着色器,但是我所做的一切大多使用一个非常简单的着色器。 在我的游戏引擎的最新迭代中,我移至Direct3D 11,并由此创建了许多着色器。我在GPU中进行了GPU蒙皮,GPU计算的粒子,大量照明和后处理效果。真的很酷的东西。 到目前为止,我仅使用了顶点和像素/片段着色器。即使还有很多事情我还没做完,但我相信我对顶点和像素/片段着色器的功能以及如何将其全部融入整个3D管线具有扎实的知识。 随着最新的发展,我对新的着色器阶段非常感兴趣。也就是说,几何着色器,甚至是更新的Hull和Domain着色器。 我从未使用过这些阶段,但是据我所知,几何着色器(如果启用)在顶点着色器之后运行,对每个变换的顶点(或每个图元一次)运行一次,并允许您丢弃顶点(和图元?)。 ,然后创建新的(我想可以追溯到管道的开头吗?)。 我的猜测是,几何着色器的主要用途是在GPU中以编程方式生成几何。通常的用法是基于单个顶点创建广告牌四边形,但是除了生成分形和其他可以以编程方式100%生成的东西之外,我并没有真正看到许多其他常见场景。 至于Hull和Domain着色器,似乎它们与细分有关(要从粗糙表面创建更平滑的表面吗?),并且必须一起使用或根本不使用。术语“补丁”在这里似乎也很常见。 有人愿意在实践上向我解释这些新的着色器阶段是什么,它们如何适合3D管线,以及在哪种情况下应该考虑使用它们?

2
线宽可变的卡通/透明阴影?
我看到一些进行cel着色的广泛方法: 具有翻转法线的模型的复制和放大(对我而言不是一种选择) Sobel滤波器/片段着色器进行边缘检测的方法 模板缓冲区方法进行边缘检测 用于计算面法线和边缘法线的几何(或顶点)着色器方法 我是否假设以几何为中心的方法也可以最大程度地控制照明和线条粗细,这是正确的吗?对于可能会看到山的轮廓线逐渐合并成平原的地形? 如果我不需要地形表面的像素照明怎么办?(而且我可能不会,因为我计划使用基于单元的基于顶点或基于纹理贴图的照明/阴影。)那么我是否会更好地坚持使用几何类型方法,或者改为使用屏幕空间/片段方法?使事情更简单?如果是这样,我怎么会得到山上的“墨” 内网的剪影,而不是只有整个网格(的轮廓与轮廓内没有“墨水”的细节?(AKA 暗示的轮廓,折痕)。 最后,是否可以使用几何着色器廉价地模拟翻转法线方法?我对此的担心是,我当然可以复制每个单个顶点并相应地缩放它们,但是我将如何处理翻转法线和片段着色器中的不同着色? 我想要的-在轮廓内插入线来改变线的粗细... 我不要... 编辑:进一步的研究发现了以下... 由于我在地形上拥有大量顶点,因此即使考虑基于距离的LoD,由于所有对象的复制和缩放都涉及巨大的计算复杂性,因此无论是基于翻转法线还是基于几何着色器的方法(即使使用平截头体剔除)都不是明智的选择。上传的顶点。 考虑到我不需要在地形表面上以纯色阴影的形式进行逐像素照明,因此考虑基于面部法线的方法(否则需要正确的表面照明)也变得不太谨慎计算起来自然很昂贵。但是,他们确实提供了最好的控制权。例如,使用“艺术”笔触为边缘着色的能力:漂亮,但又不能在大规模复杂的游戏环境中真正实现。 我宁愿避免使用模板缓冲区,因为我希望在着色器中完成所有工作。(上面带有红色轮廓的示例是使用模板缓冲区-旧学校完成的。) 这样就留下了片段着色器的图像空间方法。计算复杂度降低为片段的数量,而不是顶点的数量(在我的情况下,这比几何着色器中的操作要少10-100倍)。为了生成一个g缓冲区(包括一个普通缓冲区和一个可选的深度缓冲区),需要多次渲染渲染,我们可以将不连续性滤镜(例如Sobel运算符)应用到该缓冲区。深度不连续性使轮廓和折痕产生暗示。我唯一的疑问是无法对墨迹边缘宽度进行更好的控制,尽管使用片段着色器中的正确算法,我相信这是可能的。 因此,现在的问题变得更加具体:我如何精确地在片段着色器中获得可变的边缘宽度,尤其是在外部轮廓上?

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.