入门图形学:平直着色和平滑着色

       真是在老家关得有点郁闷了,不晓得这疫情什么时候结束。虽然我个人非常喜欢放假,因为有更多时间学习、玩游戏和搞自己的事情。不过这次疫情时间掐得太准了,刚好是放年假回老家拜年的时间,直接把我关在老家四十天,手上除了一台低配笔记本外什么都没有,每天最多的事情就是看下pdf和电影(笔记本屏幕又小、独显也没有、cpu也不行、项目也跑不动、游戏也不能玩)。

       不过最近发现一个好玩的建模利器blender,支持桌面全平台,运行配置要求也低(当然不包括使用cycles渲染器),同时安装包体积小(只有不到100mb),功能强大,开源且免费,我学了一周,感觉这个软件很完美,很多指标比3dmax/maya更好一些(特别是在商业权益方面),我是马上就喜欢上了blender,顺便想安利一下。

       在blender和unity协作之间,涉及了fbx导出导入的问题(当然所有建模软件都要经历这个问题)。

       在blender中渲染有两个关键参数:平直着色光滑着色

       先看看wiki上的解释:着色方式

       平直着色核心:假设组成网格的三角面都是平面,且同一个三角面上任意一个法向量都相同。先在每个三角面上挑选一个点计算颜色(通常是三角面拓扑关系的第一个顶点,也可以选择几何中心),则三角面上其余顶点直接赋予该顶点颜色。所以,使用平直着色法的每个三角面都是统一的颜色,和最近邻差值效果类似。

       这也好理解,网格是由顶点和面构成的,而光照计算很重要的参数就是顶点法向量和顶点朝光源向量。所以平直着色造成光照渲染效果如下:

      

       一种low polygen的风格,这里抬杠一下:我直接曲面细分无数次再球形化,达到纯球效果,我pc四路rtx2080ti。

      

       反正我的笔记本是卡爆了,而且这种细分做法,已经在gpu动态曲面细分中实现了,没必再经过cpu内存中提交到gpu。

       光滑着色核心:得到网格三角面的每个顶点法向量,用光照模型计算每个顶点的光照颜色,然后使用线性插值处理得到三角面上每个像素的颜色,所以得到平滑渐变效果。

       blender的光滑着色效果。

      

       右边看得出来顶点数量没有增加。

       同时unity中默认着色也是平滑着色。

      

       这里做个测试,blender分别用光滑着色和平直着色导出两个sphere到unity使用默认渲染:

      

       看得出来blender中设置平直和光滑着色直接影响到unity中渲染效果,哪怕使用的同样的shader。

       当然我们之前写了很多次shader渲染效果,知道unity渲染管线的默认着色方式是平滑着色,所以一个三角面的包含的片段颜色,是由顶点颜色线性插值出来的。

       而平直着色,我目前使用两种方式达到效果:

       1.通过geometry shader,将每个三角面单独提取出来进行单顶点光照取色,将三角面渲染成单一颜色,这种增加了geometry函数计算,当然渲染效率会降低。

       2.在cpu几何阶段将网格三角面“断裂分离”,我们知道光滑着色就是顶点之间光照颜色插值,那么我们“断裂”三角面之间的顶点,则“阻断”了这种插值处理过程,“模拟”出平直着色效果。不过这种运行效率更低,因为几何数据增加了,例如blender导出的sphere,平直着色的几何数据明显增加很多。

      

       最后如果我们继续深入学习图形学,直到能写自己的渲染管线,那么我们可以定制渲染管线,直接从最底层入手,写一套“新”的渲染管线,直接剔除光照颜色插值过程,修改逐顶点计算成只计算三角面第一个顶点光照等等,这样的话我们不仅达到了平直着色的效果,而且优化了gpu运行效率。

        btw,如果你玩一些很老的游戏,会发现“古老”的渲染管线是没有光滑着色,都是平直着色,因为历史硬件环境原因,所以说平直着色渲染管线相反还是“老前辈”,我们使用平直效果算是“真复古”了。

      

 

      

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第六版)》是一本经典的计算机图形学教材,被广泛应用于计算机科学、计算机工程、游戏开发等领域。这本教材以OpenGL为基础,系统地阐述了计算机图形学的基础知识和核心技术,包括坐标变换、颜色模型、光照模型、纹理映射、3D物体建模和动画等方面。 作为一本自顶向下的教材,这本书的特点是注重从高层次抽象的角度阐述图形学的基本概念和原理,同时也涵盖了OpenGL的具体实现细节和API接口,为读者提供了全面深入的学习体验。该书的难度适中,适合初学者和有一定计算机图形学基础的读者使用。 该书的最新版已经更新到第六版,更新了很多最新的技术和应用案例,并且增加了大量的练习题和实践项目,帮助读者更好地理解和掌握图形学的知识和技术。该书还提供了一个完整的OpenGL代码库和工具集,方便读者学习和实践。 总的来说,《交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第六版)》是一本权威、全面、易懂的计算机图形学教材,值得各个计算机领域的学习者和爱好者使用。 ### 回答2: 《交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第六版) pdf版本》是一本介绍OpenGL图形编程的经典教材,其自顶向下的编程方法非常适合初学者学习。本书由Edward Angel和Dave Shreiner合著,多年来一直被广泛使用。对于图形学爱好者、OpenGL初学者或者计算机图形学的研究者来说,该书都是一本非常好的参考资料。 本书主要介绍了OpenGL的基础知识和图形渲染的过程,同时还介绍了几个实战项目以及在这些项目中使用的OpenGL技术。其中,作者详细介绍了OpenGL的着色器编程、光照、纹理映射以及立体图形渲染等内容,让初学者了解这些重要的概念和技术的基本原理和使用方法。 本书中的每个章节都包含了丰富的范例和代码,可以帮助读者更加理解OpenGL的应用场景和特性。同时,书中介绍了许多OpenGL扩展库和第三方工具,读者也可以从中了解到如何提高自己的OpenGL编程技能和效率。 总之,这本教材对于学习OpenGL的初学者来说是一本非常好的书,通过学习本书,读者可以深入了解计算机图形学的基本原理和OpenGL的使用方法,从而为进一步深入学习图形学奠定了坚实的基础。 ### 回答3: 《交互式计算机图形学:基于OpenGL着色器的自顶向下方法(第六版)》是计算机图形学领域中的经典教材之一。本书作者Edward Angel针对当前计算机图形学技术的最新发展,对前五版的内容进行了全面的修订与更新。本书涵盖了图形学的各个重要方面,包括基本图形学概述、OpenGL基础知识、几何变换、着色器编程、光照与材质、纹理映射、三维模型的构建、建模及渲染等。 本书采用自顶向下的教学方法,使读者可以逐层深入地了解计算机图形学的核心知识和技术。书中配有大量的代码示例和实验指导,有助于读者熟练掌握OpenGL编程技术。此外,本书还介绍了一些新兴的图形学技术,如GPU编程、着色器语言GLSL等,对这些新技术进行了详细的解释和演示。 本书不仅适合计算机图形学专业的学生,也适合从事计算机图形学相关工作的专业人士、教育者及爱好者使用。它是学习计算机图形学必备的参考资料之一,也是开发计算机图形学应用程序的重要工具书。读者可通过PDF版本来获取本书的电子版本,方便随时阅读和学习。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值