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年11月30日
    13
  • 企业对低代码的定位

    企业对低代码的定位为开头字数在2000左右的中文文章 随着信息技术的不断发展,企业对于软件开发的需求也越来越多样化。其中低代码技术已经成为了一种重要的解决方案,它能够帮助企业快速、…

    联系我们 2024年12月3日
    1
  • “党建+”凝聚发展合力 电力保供动能强劲(凝心聚力保供电)

    11月25日,在位于西宁市湟源县巴燕乡福海四社的新一轮农网巩固提升工程施工现场,国网青海省电力公司湟源县供电公司“党建 安全生产”攻坚小组6名成员争分夺秒开展基础开挖及新立电杆工作…

    联系我们 2023年2月23日
    405
  • 科研项目管理方面的风险有哪些

    科研项目管理方面的风险有哪些 科研项目管理是一项至关重要的工作,它涉及到科研项目的进度、质量和成果。然而,科研项目管理方面也存在许多风险,这些风险可能会对科研项目的进展和成果产生不…

    联系我们 2024年12月8日
    2
  • 项目管理人员花名册

    项目管理人员花名册 作为一名项目管理人员,花名册是一个非常重要的工具,能够帮助我们更好地管理项目。在这篇文章中,我们将介绍一些常用的项目管理人员花名册工具,以及如何创建和使用它们。…

    联系我们 2024年9月18日
    22
  • 全国高校人均科研经费排名

    全国高校人均科研经费排名:中国高校科研实力可视化 近年来,随着国家对于高等教育的大力投入,我国的高校科研实力逐渐增强。然而,对于每个高校来说,其科研经费的使用情况进行着不同的管理和…

    联系我们 2024年12月2日
    0
  • 项目管理工具wiki

    项目管理工具wiki 项目管理工具wiki是一种用于管理和共享项目信息的在线工具。它通常由一个主页面和一个数据库组成,用于存储和管理项目的各种信息,如任务、活动、项目进度、成本、风…

    联系我们 2024年9月18日
    20
  • 项目管理软件有什么功能

    项目管理软件是一种用于跟踪和管理项目的工具,具有许多功能,可以帮助项目经理和团队成员更好地协作和推进项目。本文将介绍一些常见的项目管理软件的功能。 1. 任务管理:任务管理是项目管…

    联系我们 2024年9月20日
    39
  • 软件租赁收费的方案有哪些

    软件租赁是一种新型的软件销售模式,相比于传统的一次性购买,软件租赁可以让用户反复使用,降低一次性购买的成本,同时也能让用户享受到更多的优惠。在软件租赁行业中,有许多不同的收费方案,…

    联系我们 2024年12月10日
    1
  • 认真研究 特向贵单位申请

    尊敬的贵单位: 我谨代表本人,对贵单位一直以来的支持和帮助表示衷心的感谢。在此,我特别想向贵单位提出一项认真研究的申请。 近年来,随着社会的不断发展和进步,人们对于环境保护和可持续…

    联系我们 2024年12月9日
    1