OpenGL 的固定管线和可编程管线的本质区别以及unity里的区别

本文探讨了OpenGL从固定管线到可编程管线的发展,解释了两者间的区别:固定管线封装了渲染流程,限制灵活性;可编程管线引入Shader,提升定制能力但要求更高技能。

opengl 或者早期的固定管线问题,以前一直没有很理解固定管线和可编程管线的区别。

现在看opengl1.1的很多代码,终于理解啥意思了。固定管线其实就是把渲染的过程,光照过程都封装到了opengl里边了,代码执行流程都写死了,比如光照 漫反射 环境光 高光计算都写死到了opengl里,你不能改变渲染流程,只能改变各种参数,标记。甚至雾效处理也内置好了,都是调用API调整参数来调整效果。

opengl1.5开始的可编程管线就是就是加入了shader脚本语言,很多流程不内置,包括光照处理都让你在外部自己写。我提供脚本编译框架在opengl底层,并且在特定流程里去调用你自己的光照脚本。这样你可以自己控制写什么样的光照模型,甚至更复杂的pbr物理渲染模型等。

其实对于渲染的实现难度是提高了,因为功能没有提供给你,要你自己写。但是带来的是灵活性的提高。从opengl的具体渲染功能角度来讲,功能是变弱了,但是从抽象的框架功能来讲,你可以自己定制,功能是变强了。

包括unity前期内置的builtin管线相当于引擎层面渲染的固定管线,后期的srp,urp架构,也是说是可编程管线,是引擎渲染流程可定制,通过继承接口类等改写渲染流程。刚开始说unity的可编程管线以为是在说底层的opengl和dx,就觉得本来不就是可编程的吗?现在想想他说的不是更底层的dx和opengl,他说的是属于引擎那一部分的固定和可以编程,但是这种说法的方式其实跟opengl的固定和可编程层面相近。因为从本质上不管是opengl还是引擎,对于渲染功能整体来讲,都只是一部分渲染功能。只是代码写在哪个层级,写在内部不能脚本化控制的都可以说是固定管线。能够类似脚本话控制的可以叫可编程。其实就是代码写在哪个层级。但是可编程管线从具体功能来讲因为没有提供要你自己写,所以是要求更高了,你必须具备自己开发原来属于引擎或者opengl之前内置的功能的能力,要你自己写在外部。从框架抽象功能来讲,可扩展功能是更强了。

所以,固定管线和可编程管线的本质区别,从整个渲染到应用的全体实现来讲,其实没有本质区别,因为流程都不能少,只是代码写在外部还是内部的问题。当然代码写到外部,框架的抽象功能变强了,但是具体功能变弱了,让你自己定制,其实具体功能的实现要求是变高了,不是变低了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值