真是在老家关得有点郁闷了,不晓得这疫情什么时候结束。虽然我个人非常喜欢放假,因为有更多时间学习、玩游戏和搞自己的事情。不过这次疫情时间掐得太准了,刚好是放年假回老家拜年的时间,直接把我关在老家四十天,手上除了一台低配笔记本外什么都没有,每天最多的事情就是看下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,如果你玩一些很老的游戏,会发现“古老”的渲染管线是没有光滑着色,都是平直着色,因为历史硬件环境原因,所以说平直着色渲染管线相反还是“老前辈”,我们使用平直效果算是“真复古”了。

入门图形学:平直着色和平滑着色相关推荐

  1. Q82:三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading]

    三角形网格[Triangle Mesh]图形的平滑着色[Smooth Shading],主要分三步: 1,计算单个三角形的法向量.根据三角形的三个顶点来求. 2,计算单个顶点处的法向量.根据共该顶点的 ...

  2. Games101--现代计算机图形学入门 作业3笔记(渲染管线、着色模型、双线性插值)

    一.渲染管线 一.作业要求 在这次编程任务中,我们会进一步模拟现代图形技术.我们在代码中添加了ObjectLoader(用于加载三维模型),VertexShader与FragmentShader,并且 ...

  3. 图形学笔记(八)着色2 —— 纹理映射、重心坐标、双线性插值、Mipmap、三线性插值、各向异性过滤、纹理的应用(环境贴图、法线贴图等)

    图形学笔记(七)着色 -- Blinn-Phone 反射模型.着色频率.渲染管线.GPU 图形学笔记(九)几何 --几何表示方法(CSG.距离函数.水平集 .点云.网格(obj格式)).贝塞尔曲线(面 ...

  4. Q80:平坦着色(Flat Shading)和平滑着色(Smooth Shading)——“Q79:怎么用三角形网格(Triangle Mesh)细分曲面”(补充)

    80.1 概述 前面用三角形网格细分球面时,对单个三角形的着色方式采样的是"Flat Shading".即: 通过三角形三顶点的坐标计算出整个三角形的法向量. 这样就导致相邻两个三 ...

  5. C4D模型工具—断开平滑着色(Phong)

    1:创建对象-球体: 2:将球体转为可编辑对象: 3:在线模式下,选中边: 4:右键属性-断开平滑着色(Phong): 5:效果:选中的边显示出硬边的效果: 6:此功能可用于建模时对模型硬边处理

  6. C4D模型工具—选择平滑着色(Phong)断开边

    < 选择平滑着色(Phong)断开边工具 >是选择工具的一种,会选择操作了< 断开平滑着色(Phong)>的边. 1:创建对象-球体: 2:将球体转为可编辑对象: 3:在线模式 ...

  7. 图形学基础 (五) 着色及着色频率

    文章目录 画家算法 ### Z-Buffer 深度缓存算法 着色(Shading) Blinn-Phong Reflectance Model 漫反射 Specular Term (镜面反射, 高光项 ...

  8. 计算机图形学(七)-深度缓存、着色shadding、着色模型、着色频率、渲染管线

    shadding-着色 1 深度缓存 1.1 从画家算法到深度缓存 1.2 深度缓存 1.2.1 深度缓存深度缓存的实现方法 1.2.2 深度缓存注意事项 2 着色shadding 2.1 着色模型 ...

  9. webgl 着色器_“着色器”是什么意思? 如何使用HTML5和WebGL创建它们

    webgl 着色器 本文是Microsoft的Web开发技术系列的一部分. 感谢您支持使SitePoint成为可能的合作伙伴. 您可能已经注意到,去年我们第一次谈论了babylon.js ,最近我们发 ...

最新文章

  1. I - Arbitrage POJ - 2240
  2. Maven类包冲突终极解决小技若干
  3. Alpha 冲刺11——总结
  4. PHP动态网页转换HTML的一个简单办法
  5. LeetCode 1394. 找出数组中的幸运数(map计数)
  6. android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...
  7. html 从左往右消失,从左到右语言写成从右到左html
  8. Git下使用Beyond Compare作为比较和合并工具
  9. Vcenter6.5 Administrator账户密码忘记或者过期无法登陆解决办法
  10. 如何使用组策略提升Windows系统性能
  11. 不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD...
  12. 树形表格插件 - vue-table-with-tree-grid
  13. pl2303hxa串口线驱动_pl2303hx驱动下载
  14. cpci检索太慢_了解CPCI检索,对自己的好处
  15. PDF文档如何添加图片签名
  16. k叉树的性质_相关树及性质
  17. 神州笔记本电脑开机出现CMOS message【已解决】
  18. GCD,快速GCD,扩展GCD
  19. 算法题:10级台阶,一次一步或两步,打印所有的走法
  20. 模板引擎Thymeleaf?来这一篇就够用了

热门文章

  1. C语言disp的头文件,TM1638.h 单片机C语言头文件
  2. FPGA控制ADS1256的ADC采集(三)
  3. hexo修改index.html,Hexo自定义页面做首页
  4. 技能兴鲁试题--可视化
  5. 基于JAVA高校学生综合素质测评系统计算机毕业设计源码+数据库+lw文档+系统+部署
  6. 06 - 微信公众号的菜单配置
  7. 无符号整型与有符号整型
  8. 计算机组成原理第二版第5章答案,计算机组成原理第5章习题参考答案.pdf
  9. MySQL批量导入Excel数据【超详细】
  10. sleep的睡眠机制