返回首页  设为首页  加入收藏  今天是:
网站首页电脑主板电脑cpu电脑内存电脑硬盘电脑显卡电脑电源显示器电脑配件电脑维修
相关文章
 天堑变通途—3D to H5工作流…
 GPU集大成者!GeForce GTX48…
 未来人类AMD-3070-600S4游戏…
 22年5月更新最新CPU天梯图显…
 苹果突然发布两颗芯片:M2 P…
 2019电脑cpu处理器最新排名
 cpu天梯图2018最新版 2018电…
 热门B760主板不知道怎么选?…
 华硕 PCIe 50 12-pin 供电接…
 发挥稳定这块板子妖味十足华…
 2023游戏佳作频出 华硕吹雪主…
 科个普:主板供电 最麻烦的事…
 40系列显卡比30系列强多少 4…
 4080显卡出了吗 支持PCI50吗…
 ARC迎战未来!GUNNIR A770 P…
 微星RTX 3060 Ti 魔龙显卡测…
 掠夺者Bifrost英特尔锐炫A77…
 如何计算电源功率
 跟着TDP配电源怎么就蓝屏了?…
 锂离子动力电池功率的测试以…
 RTX 4050显卡功耗多少 显卡用…
 四天省一度电:入门级80Plus…
 怎么看自己的电脑里面有没有…
 主板怎么查看固态硬盘信息技…
 怎么查看自己电脑硬盘的缓存…
 如何查看电脑硬盘
 小编教你如何查看硬盘是gpt还…
 京东开通个人快递业务:当日…
 上门服务被京东抛弃O2O真的要…
 无惧电脑卡死 京东推7×24小…
 套路太深!空调维修内幕曝光:…
 京东服务+推手机2小时上门维…
 CES 2023 首日发布会新品盘点…
 备齐数码年货为笔记本、雷电…
 笔记本配件评测
 ThinkBook双屏笔记本发布 首…
 联想新款 ThinkBook 16p 支持…
 手机上的内存融合技术是什么…
 Windows 7系统最低需1GB内存…
 锐龙R7 5800X3D支持多大的内…
 电脑内存介绍及安装指南
 电脑内存条的作用是什么 电脑…
 年货节必看!这几款华硕无畏…
 独创双屏幕+升降式散热!华…
 年货节选本看这 华硕无双轻薄…
 京东方独供华硕ROG系列高阶电…
 年货节高性能轻薄本换新 华硕…
 笔记本电脑重装系统后CPU风扇…
 电脑cpu风扇声音大有哪些解决…
 怎么解决笔记本风扇声音大的…
专题栏目
网络
您现在的位置: 电脑评测网 >> 显示器 >> 正文
高级搜索
天堑变通途—3D to H5工作流应用手册 [理论篇]
作者:佚名 文章来源:本站原创 点击数: 更新时间:2023/1/21 5:42:18 | 【字体:

  绝色赌妃2设计师需求中3D视觉平移到互动H5中的项目越来越多,three.js和PBR工作流的结合却一直没有被系统化地整理。

  和各位前端神仙一起做项目,也一起磕磕碰碰出了爱与痛的领悟。小小总结,希望3D去往H5的道路天堑变通途。

  Part 1 理论篇:主要让设计师了解计算机到底是如何理解和实时渲染我们设计的3D项目,以及three.js材质和预期材质的对应关系。

  Part 2 实践篇:基于three.js的实现性,提供场景、材质贴图的制作思路、以及gltf工作流,并动态讨论项目常常遇到的还原问题。

  本文主要for刚接触3D图形学的设计师,仅截取了最常用的理论知识和大家一起学习;

  部分涉及技术美术或计算机图形学的描述可能不甚严谨,希望大家多多交流讨论哈。

  其实无论H5开发用到的是哪种webGL,设计相关的材质制作基本还是基于PBR思路进行的,所以这边建议各位亲可以先去阅读一下Substance官方宝册《The PBR Guide》。

  设计师在还原3D类型的互动H5项目的时候一定想过这个宇宙终极问题:为什么H5/Web实现的3D效果和C4D里渲染出来的差异那么大?

  其实这是我们对实时渲染引擎(UE、Unity、three.js等)和离线渲染工具(Redshift、Octane、Vray等)的差异存在误解:一是离线渲染工具是基于真实光照环境来计算每颗像素的着色,实时渲染如果要实现这种效果需要耗费更多硬件基础和算力去模拟光照(没个好显卡都开不动光追)。

  虽然UE5的实时渲染技术和硬件兼容性已经让大家大吃一惊,但在实际项目,尤其是需要兼容低端设备的H5来说,渲染能力还是相对有限的。二是对于游戏或H5互动网站实际应用来说,流畅的互动体验优先级往往高于画面精细度,所以牺牲视觉保性能也是常见情况。

  当实时渲染效果与设计预期差距过大时,设计师能多了解一些基础的计算机图形学,也许就能更好地和开发同学商讨性价比更高的视觉实现和资源优化方案(以及更多Battle的筹码)。

  首先我们要知道计算机之所以能在2D屏幕上画出3D的图像,是因为有着色器(Shader)在绘制,它将我们三维空间里的模型与光照信息进行转换,并光栅化为二维图像。在计算机图形学中,着色器是用于对图像的材质(光照、亮度、颜色)进行处理的程式。

  像素/片元着色器与顶点着色器(Vertex Shader)在webGL处理过程中都有使用,顶点着色器先将模型中每个顶点的位置、纹理坐标、颜色等信息进行转换装配,再由片元着色器对3D信息光栅化并转换成2D屏幕信息。(关于着色器差异,感兴趣的同学可以直接跳到附录查看。)

  着色器是怎么把顶点中所带有光照、纹理等信息转换并重建在二维图像的像素中呢?GPU中是透过不同的着色算法来实现的。

  一种是获取每个三角形的插值(Interpolate)来实现,这种方法称作Per Vertex Lighting,但是当三角型很大的时候,插值往往不够精准。此时还可以引用另一种方法Per Pixel Lighting,计算每个像素的光照信息,获得更好的渲染效果,但是往往也带来更大的计算量。

  一般常见计算机图形着色算法有三类:Flat Shading、Gouraud Shading、Phong Shading。这些算法虽然看起来和我们设计师没啥关系,但事实上在后面了解three.js材质时,就会发现他们在呈现时的差异。

  这种着色法认为模型中所有面都是平的,同一个多边形的上任意点的法线方向都相同。着色时,会优先选择多边形的第一个顶点或三角形的几何中心计算颜色。这种着色法实践上的效果很像低面模型,也比较适合使用在高速渲染的场景。值得注意的是,这种着色法难以做出平滑高光效果。

  这是一种平滑的着色方法,在着色时会先计算三角形每个顶点的光照特性,利用双线插值去补齐三角形区域内其他像素的颜色。这个着色法的比起平直着色法增加了插值的细节,而且也比Phong着色法渲染单个像素的光照特性的性能要高。

  但是在渲染高光时,可能会因为无法获取精确的光照值而出现一些不自然的过渡(或T型连接容易被错误绘制),此时可以考虑对模型进行细分或使用漫反射材质。

  与Gouraud Shading不同的是,它会对顶点的法线进行插值,并透过每个像素的法向量计算光照特性。这种做法能绘制出精致、精准的曲面,但是计算量较大。Blinn-Phong是Phong的进阶版,着色性能更好,且高光弥散更自然。

  简单了解计算机如何绘制3D图形后,再来看看它要如何具体理解我们所设计的3D场景。

  3D转换成2D,也就是3D栅格化的过程中,每一个像素的颜色是需要基于它所在的环境计算出来,而基于被渲染物体表面某个点的光强度计算模型就被称为光照明模型(Illumination Model)或光照模型(Light Model),透过计算光照模型所得到表面位置对应像素颜色的过程被称为表面绘制(Surface Render)。

  *请注意这里说的光照模型并不是指设计师理解的3D立体模型,而是指模型对象表面光照效果的数学计算模型。

  影响光照模型的因素有两大方面,一是本身给渲染物体材质设置的各种光学特性(颜色反射系数、表面纹理、透明度等),二是场景中光源光及环境光(场景中各个被照明对象的反射光)。

  传统光照模型都是对漫反射和镜面反射的理想化模拟,如果要还原基于真实物理世界的效果,光照模型需要遵循能量守恒定律:一个物体能反射的光必然少于它接受的光。在实践层面则表现为,一个漫反射更强且更粗糙的物体会反射更暗且范围更大的高光,反之亦反。

  考虑到真实感渲染对硬件的依赖,目前webGL中使用的一般以简单的局部光照模型为主(只计算光源对物体的光照效果,不计算物体间的相互影响,我们看到的“假反射”通常透过贴图来进行模拟),根据反射形态,经典的光照模型有下列几种:

  这种模型的粗糙表面(如塑料、石材等)会将反射光从各个方向反射出去,而这种光反射也称为漫反射。理想的漫反射体我们通常称作郎伯反射体(Lambertian Reflectors),也就是我们熟悉的橡胶材质。

  这是一种以实验及观察为合成基础的非物理模型。它的表面反射同时结合了粗糙表面漫反射和光滑表面镜面反射,但Phong模型在高光处的表现有过渡瑕疵。

  是在OpenGL和Direct3D里默认的着色模型,一种调优后的非物理的Phong模型,顶点间的像素插值使用Gouraud着色算法,比Phong着色算法性能更好,而且高光效果也更平滑。

  这是相对高级的光照模型,不同于Phong和Blinn-Phong模型仅仅对漫反射及镜面反射进行理想化模拟,这两个光照模型基于不同物理材质加入了微表面(Microfacet)的概念,并考虑到表面粗糙度对反射的影响,对镜面反射进行了调优,使得高光的长尾弥散更加自然,也是目前PBR渲染管线(Unity、UE)中较常用的光照模型。

  终于有一个设计师们常见的概念了。次表面散射是指光穿透不透明物体时(皮肤、液体、毛玻璃等)的散射现象。现实生活中,大部分物体都是半透明的,光会先穿透物体表面,继而在物体内被吸收、多次反射、然后在不同的点穿出物体。以皮肤为例,只有大概6%的反射是直接反射,而94%的反射都是次表面散射。

  BSSRDF(双向次表面反射分布函数)是用于描述入射光在介质内部的光照模型,目前也被应用在最新的虚拟角色皮肤实时渲染中;但由于SSS材质的计算需要依赖深度/厚度数据,所以webGL对这种高级光照效果的还原程度还是相对有限的。

  也就是我们常说的3渲2,非写实渲染风格也是从人们对3D场景套以2D绘画或自然媒体材质需求而演化过来的。因此非写实渲染技术实际上是不同光照模型+不同着色处理共同作用的风格化输出,目前也被大量应用在动画及游戏中,像《英雄联盟:双城之战》《蜘蛛侠:平行宇宙》都是顶级三渲二大作。

  卡通着色,一种最常见的以3D技术模拟扁平风格的着色形式,通常以极简的颜色、渐变及明确的外框线等漫画元素作为风格特征。

  日本创意编程师Misaki Nakano制作了一个非常有趣的Toon Shading H5互动页面,大家可以体验一下不同着色形态下非常模型的视觉表现。搜索体验:

  目前越来越多渲染器可支持设计师及工程师根据项目需求对着色进行定制化处理,以产出更具风格化和艺术化的着色效果。例如工业界插画常用的冷暖着色(Gooch Shading),以及更具绘画质感的素描着色(Hatching)及油画水墨画等自然媒体着色,都已经深入到了我们日常的创作之中。

  在Unity中,基于真实感渲染的贴图效果与NPR水墨风格化着色效果对比 [ F11, ©️邓佳迪]

  和许多渲染引擎一样,除了原生材质外,webGL的材质和着色都是可以根据需求进行定制的,但这往往会也带来较高的开发成本及兼容性风险。考虑到H5项目的实际应用场景,下表罗列了Three.js原生材质的对比,包含了材质特性优势、贴图差异及适用场景,大家可以基于项目需求快速选择并混合使用:

  虽然着色、光照模型以及材质渲染对3D表现有着最为直观的影响,但3D工作流仍有一个隐秘而关键的环节——色彩管理。

  真实世界中按照物理定律,如果光的强度增加一倍,那么亮度也会增加一倍,这是线性的关系。理想状态下,像素在显示屏上的亮度也应为线性关系,才能符合人眼对真实世界的观察效果(如图b:横坐标为像素的物理亮度,纵坐标为像素显示时的实际亮度)。

  但是显示器的成像由于电压的影响,导致输出亮度与电压的关系是一个亮度等于电压的1.7-2.3次幂的非线性关系,这就导致了当电压线性变化时,亮度的变化在暗处转换时变慢,如果显示器不经过矫正,暗部成色也会整体偏暗(如图c)。目前大多数显示器的Gamma值约为2.2,所以也可以理解Gamma2.2是所有显示器自带的一个遗传病。

  为了矫正显示器的非线性问题(从图c校正回图b),我们需要对它进行一个2.2次幂的逆运算(如图a),在数学上,这是一个约0.45的幂运算(Gamma0.45)。经过0.45幂运算,再由显示器经过2.2次幂输出,最后的颜色就和实际物理空间的一致了,这套校正的操作就是伽马校正(Gamma Correction)。

  而我们常见的sRGB就是Gamma0.45所在的色彩空间,是1996由微软与惠普共同开发的标准色彩空间。当照片素材一开始储存成sRGB空间,相当于自带一个Gamma0.45的遗传病抗体,当它被显示器显示时,就自动中和了显示器Gamma2.2的缺陷,从而显示出与物理世界相符的亮度。

  另一个校正原因是因为人眼在接受光线时的敏感度也不是线性的,人对于暗部的感知更敏感,对高亮区域感知较弱,而且人眼感知光强度与光的物理强度也刚好是对数关系。为了在暗部呈现更多人眼可感知的细节,Gamma0.45的色彩空间中(如图a),像素的实际亮度也会高于它的物理亮度。

  上面那一大段确实有点绕,但也就说回来为什么建议渲染时使用线性空间(Linear Space)了。因为在计算机图形中,着色器的运算基本上都是基于物理世界的光照模型来保证渲染真实性的,如果模型的纹理输入值是非线性的(sRGB),那么运算的前提就不统一,输出的结果自然就不那么真实了。

  而在大多数工作流及渲染软件中,大部分贴图资源都是默认输出sRGB的(设计师作图环境一般也在sRGB,所见即所得),而法线贴图、光线贴图等纹理(纯数值类纹理,只用于计算)又是Linear的,这个部分就需要我们根据渲染引擎本身的特性,来判断是否需要对不同的贴图进行不同的去Gamma化处理了(WebGL、Unity、Octane等)。

  将所有贴图进行去Gamma化,统一为Linear空间后,再在渲染输出时由引擎统一进行Gamma校正,这个时候在显示屏里显示的就是接近真实世界的效果了。

  更多色彩空间的实际效果比较,大家可以看下Unity的文档:《Linear/Gamma渲染比较》:

  回到H5所用的Three.js,它的着色器计算也是默认在Linear空间,如果最终渲染时不转化为sRGB,在设备显示时可能会造成色彩失真。在three.js中色彩管理的工作流会根据导入模型Asset的差异而有所不同,如果贴图与模型是分别导入场景,则建议可尝试以下流程:

  1、输入贴图数据 sRGB to Linear: 含色彩的贴图(基础材质、环境、发光)设编码为sRGB(texture.encoding = sRGBEncoding),或将渲染设置renderer.gammaInput设为True,可将原为sRGB的贴图转换为Linear,而原纯数值类贴图(法线、凹凸等)仍旧保持Linear;这一操作可保证贴图输入数据的正确性与统一性。

  2、刷新材质:当材质编码类型被修改后,需要设置Material.needsUpdate为True,以重新编译材质。

  《Part1-理论篇》就先告一段落啦,如果你偶发失眠,建议可以反复咀嚼延伸阅读的内容。

  《Part2-实践篇》会继续完善three.js场景、材质贴图的制作思路、以及gltf工作流,并动态讨论项目常常遇到的还原问题。

  也称为片元/片段着色器(Fragment Shader), 为二维着色器。它记录了每一个像素的颜色、深度、透明度信息。最简单的像素着色器可用于记录颜色,像素着色器通常使用相同的色阶来表示光照属性,以实现凹凸、阴影、高光、透明度等贴图。同时,他们也可以用来修改每个像素的深度(Z-buffering)。

  但是在3D图像中,像素着色器可能无法实现一些复杂的效果,因为它只能控制独立的像素而并不含有场景中模型的顶点信息。不过,像素着色器拥有屏幕的坐标信息,可以依据屏幕或邻近像素的的材质进行采样并增强,例如,Cel Shader的边缘强化或一些后期的模糊效果。

  是最常见的3D着色器,他记录了模型每个顶点的位置、纹理坐标、颜色等信息。它将每个顶点的3D位置信息转换成2D屏幕坐标。顶点着色器可以处理位置、颜色、纹理的坐标,但是无法增加新的顶点。

  是最近新兴的着色器,在Direct3D 10 和Open GL3.2中被引用。这种着色器可以在图元外生成新的顶点,从而转换成新的图元(例如点、线、三角等),而优势也是在于可以直接在着色中增加模型细节,减低CPU负担。集合着色器的常用场景包括点精灵(Point Sprite)生成(粒子动画),细分曲面,体积阴影等。

  在OpenGL4.0和 Direct3D 11中出现,它可以在图元内镶嵌更多三角体。为传统模型新增了两个着色步骤(一是细分控制着色,又称为Hull Shader,二是细分评估着色,又称为Domain Shader),两者结合可以让简单的模型快速获得细分曲面。(例如,含细分曲面效果的模型加上置换贴图就可以获得极其逼真细腻的模型)

  深度缓冲,3D图像在渲物体的时候,每一个生成的像素的深度会存储在缓冲区中。如果另一个物体也在同一个像素中产生渲染结果,那么GPU会比较两个物体的深度,优先渲染距离更近的物体,这个过程叫做Z-Culling。当两个物体靠很近的时候(16-bit),可能会出现Z-Fighting,也就是交叠闪烁的现象,使用24或32bit的Buffer可以有效缓解。

  渲染管线/渲染流水线/像素流水线,为GPU的处理工作流,是GPU负责给图形配上颜色的专门通道。管线越多,画面越流畅精美。

  [17] Klayge游戏引擎,关于D3D11你必须了解的几件事情(三)

  版权声明:“IXDC”所推送的文章,除非确实无法确认,我们都会注明作者和来源,本公众号对转载、分享的内容、陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完善性提供任何明或暗示的保证,仅供读者参考。部分文章推送时未能与原作者取得联系,若涉及内容或作品等版权问题,烦请原作者联系我们,给出内容所在的网址并提供相关证明资料,我们会核查后立即更正或者删除有关内容!本公众号不承担任何责任,并拥有对此声明的最终解释权。

  特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

  反对延迟退休到64岁,法国百万人大罢工!工作至少43年才能拿全额退休金,法国养老金缺口到底有多大?

  上海交大女生成链家“销冠”:沪上卖豪宅近两年才开单,总被客户劝转行,希望做高学历中介

  首次明确预计下次加息25基点,美联储理事支持继续紧缩,认为仍可能软着陆

  消息确定! 华为P60或和小米13 Ultra同台竞技, 徕卡大战XMAGE!

显示器录入:admin    责任编辑:admin 
  • 上一个显示器:

  • 下一个显示器: 没有了
  •  
     栏目文章
    普通显示器 天堑变通途—3D to H5工作流应用手册 [理论篇… (01-21)
    普通显示器 GPU集大成者!GeForce GTX480470全球同步解密 (01-21)
    普通显示器 年货节必看!这几款华硕无畏高性能轻薄本限时… (01-20)
    普通显示器 独创双屏幕+升降式散热!华硕灵耀X双屏笔记本… (01-20)
    普通显示器 年货节选本看这 华硕无双轻薄本好价来袭 (01-20)
    普通显示器 京东方独供华硕ROG系列高阶电竞MiniLED面板 (01-20)
    普通显示器 年货节高性能轻薄本换新 华硕无畏Pro15 2022让… (01-20)
    普通显示器 这些才是我用的最舒服的苹果产品! (01-20)
    普通显示器 90后清华博士的内蒙古印象:海阔凭鱼跃 天高任… (01-20)
    普通显示器 元故事│宝岛设计师圆梦“设计之都” (01-20)
    普通显示器 宝岛设计师圆梦“设计之都”:希望更多台湾年… (01-20)
    普通显示器 迷你电脑同价位小米远不是零刻的对手!零刻SE… (01-20)
    普通显示器 从CRT到LCD再到LED背光 超薄显示器知识普及 (01-19)
    普通显示器 微星发布156英寸便携式显示器PRO MP161:仅重… (01-19)
    普通显示器 可用于皮肤的有机发光二极管显示器 (01-19)
    普通显示器 超薄LED什么是超薄LED?的最新报道 (01-19)
    普通显示器 三星将推“世界最薄智能显示器” 白色机身超高… (01-19)
    普通显示器 宏碁推出Nitro XV5系列游戏显示器:可超频至2… (01-19)
    普通显示器 显示器行情_显示器_DIY硬件_太平洋电脑网DIY硬… (01-19)
    普通显示器 今日MicroLED协会预估178英寸AppleWatch的OLE… (01-19)