threejs-卡通轮廓效果(threejs模型轮廓发光)

在我的 3D 游戏和设计中,我经常选择可爱的低多边形卡通风格。我一直想给我的模型一个真正的卡通轮廓,所以这就是我们今天要做的工作。在以后的文章中,我们将着眼于为三角形着色以使其看起来也很卡通。

本文是「我正在进行的中等难度 ThreeJS 教程系列」的一部分。我一直想要在介绍“如何绘制立方体”和“让我们用疯狂的着色器填充屏幕”关卡之间找到一些东西。所以就在这里。

如果你在网上搜索“OpenGL 轮廓效果”,你会遇到很多相互矛盾的信息。经过大量研究,我确定有两种常用方法可以使用现代 3D 图形 API 创建轮廓。

  1. 绘制一个对象两次;一次是轮廓颜色,一次是正常。
  2. 通过在像素级别检测边缘的后处理效果运行整个场景。

第二种选择是当今 Unity 等现代游戏引擎中最常用的。但是我不想使用它,因为它涉及多个后处理步骤,这在移动 GPU 上可能很慢并且消耗更多内存。此外,后处理和 WebVR 目前还没有很好地融合,所以我暂时避免使用它。(当我介绍发光效果时,我们会重新讨论这个)。让我们关注第一种方法,两次绘制同一个对象。

两次渲染一个对象可能看起来很浪费,但请记住,大多数 GPU 都是带宽有限的。一旦你把几何图形传到 GPU 上,它就可以一遍又一遍地渲染同样的东西,几乎没有成本。在大多数情况下,我想概述的东西是静态几何。

让我们从两次渲染圆环结开始,一次是黑色,一次是黄色。完成这项工作的这个技巧是缩放轮廓,使其比主要对象略大。

//create a cubeobj = new THREE.Group()const c1 = new THREE.Mesh( new THREE.TorusKnotBufferGeometry(0.6,0.1), new THREE.MeshLambertMaterial({ color:’black’, }))const s = 1.03c1.scale.set(s,s,s)obj.add(c1)obj.add(new THREE.Mesh( new THREE.TorusKnotBufferGeometry(0.6,0.1), new THREE.MeshPhongMaterial({ color:’yellow’, })))

运行它,看看会发生什么。唔。根据您使用的几何形状,您将看到全黑或双色调、部分黑色和部分黄色的东西。还注意到一些从黄色中突出的黑色三角形吗?这就是所谓的z战斗。那么问题是什么。

threejs-卡通轮廓效果(threejs模型轮廓发光)

实际上,这有点道理。黑结略微扩大,因此在看不到黄色的地方,黑夜就在它的前面。那么我们该如何解决呢?

15 秒内解释剔除

我们将利用一个小技巧。

当 GPU 渲染三角形时,它通常只渲染正面的三角形。这些是面向相机的三角形。根据定义,任何背对相机的三角形都是不可见的,因此无需费心绘制它们。如果我们有一个球体,那么实际上只会绘制前半球。GPU 已「剔除」构成背面半球的三角形。

对于轮廓效果,我们希望仅使用正面几何图形绘制常规对象。这已经在发生。但是,对于轮廓,我们只希望绘制背面的三角形。然后它们将位于规则形状的后面,仅在边缘可见。

碰巧的是,ThreeJS 已经知道如何绘制正面和背面。我们只需要告诉它我们想要什么。下面的代码和上面一样,只是side正确设置了两种材质的属性。

obj = new THREE.Group()const c1 = new THREE.Mesh( new THREE.TorusKnotBufferGeometry(0.6,0.1), new THREE.MeshLambertMaterial({ color:’black’, side: THREE.BackSide }))const s = 1.03c1.scale.set(s,s,s)obj.add(c1)obj.add(new THREE.Mesh( new THREE.TorusKnotBufferGeometry(0.6,0.1), new THREE.MeshPhongMaterial({ color:’yellow’, side: THREE.FrontSide })))

现在看起来像这样:

threejs-卡通轮廓效果(threejs模型轮廓发光)

image.png

完美的!

修复法线

实际上不,它不是很完美。如果你仔细观察,你会发现物体背面的轮廓比正面的轮廓要细。那是因为我们只是在放大整个对象。这种幼稚的方法只适用于像球体这样的完美凸面物体。对于结或任何真实模型,我们需要正确地加厚几何图形。

碰巧大多数几何图形上已经有法线。这些法线垂直于几何体的表面。如果我们在法线方向上扩展点,那么一切都应该正常工作。我们可以通过稍微修改的顶点着色器来做到这一点。有关自定义顶点着色器的说明,请参阅其他文章。

//create a cubeconst mat = new THREE.MeshLambertMaterial({ color:’black’, side:THREE.BackSide })mat.onBeforeCompile = (shader) => { const token = ‘#include <begin_vertex>’ const customTransform = ` vec3 transformed = position objectNormal*0.02; ` shader.vertexShader = shader.vertexShader.replace(token,customTransform)}

上面的代码为轮廓对象创建了一个自定义材质。其余与之前相同。在着色器内部,它objectNormal向每个顶点的位置添加一小部分,将其向外扩展。将 更改0.02为更大的值以获得更粗的轮廓。

现在看起来像这样:

threejs-卡通轮廓效果(threejs模型轮廓发光)

image.png

壮丽的。您已经创建了一个类似于卡通的轮廓。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月14日 上午8:30
下一篇 2024年5月14日 上午8:42

相关推荐

  • 社工部忙不忙

    社工部忙不忙?这是一个很有趣的问题。实际上,社工部的工作一直都是很忙的。社工部负责帮助社区中的人物和机构,为他们提供支持和服务。他们的工作涉及到许多方面,包括社区服务,社会福利,心…

    联系我们 2024年12月6日
    0
  • 三新领域党员管理存在哪些问题及对策

    随着科技的不断发展,三新领域(三新领域指的是人工智能、区块链和数字货币)党员管理也面临着一些问题和挑战。本文将探讨三新领域党员管理存在的问题,并提出相应的对策。 一、党员管理存在的…

    联系我们 2024年11月30日
    101
  • 网格员考评办法不够了解整改措施

    网格员考评办法不够了解整改措施 网格员是社区管理中非常重要的一环,他们负责管理社区的设施,维护社区的安全,并为居民提供相关的服务。然而,由于网格员的考评办法不够了解整改措施,可能会…

    联系我们 2024年12月9日
    0
  • 教育科研方法(教育科研培训心得体会)

    一 、 新教师为什么要重视教育科研 新教师从大学毕业走上教育教学工作岗位之前,由一个学生身份转变成一名教师, 从一个受教育者转变为一名真正的教育者,将 独立面对新环境 、新人群, …

    联系我们 2022年5月6日
    326
  • 科研项目主持人工作

    科研项目主持人的工作 科研项目主持人是科研项目中最为重要的人物之一,他们负责整个项目的规划和实施,确保项目能够按时完成并达到预期的成果。以下是科研项目主持人工作的一些重要方面。 1…

    联系我们 2024年12月7日
    0
  • 低代码≠只能打造简单应用的玩具,但它会完全取代“纯代码”吗?

    代码一词是计算机领域诞生的,在普罗大众看来这是一个比较高大上的词汇,不过随着科技的不断进步,人们对于代码的认识也是越来越深,在市场上出现了“低代码”这个概念,并且这个概念在发达国家…

    联系我们 2024年5月14日
    63
  • 怎么看导师承担的项目

    导师承担的项目对于研究生来说非常重要,因为这是一个展示自己学术能力的机会。本文将介绍怎么看导师承担的项目,并提出一些建议,帮助研究生更好地了解和参与这个项目。 导师承担的项目通常是…

    联系我们 2024年12月4日
    0
  • 武汉理工大学化学学院院长

    武汉理工大学化学学院院长: 推动科技创新 提升学校实力 近年来,随着科技的不断发展,化学领域也面临着巨大的挑战和机遇。作为武汉理工大学化学学院的院长,我深感责任重大,使命艰巨。因此…

    联系我们 2024年12月5日
    1
  • 新员工试用期访谈原则是什么

    新员工试用期访谈原则是什么 在新员工试用期期间,雇主通常会进行一系列访谈以确保新员工能够适应工作环境并成功地融入团队。这些访谈需要遵循一些原则,以确保访谈的质量和有效性。本文将介绍…

    联系我们 2024年12月5日
    1
  • 明雀项目管理

    明雀项目管理: 让项目成功不再遥远 明雀项目管理是一家专业的项目管理公司,致力于为客户提供高品质的项目管理服务。该公司拥有一支经验丰富的团队,能够为客户提供全面、高效、可靠的项目管…

    联系我们 2024年12月7日
    0