opengl 保留上一帧_实现基于Opengl的渲染接口并完成一个渲染场景

本文介绍了自定义的OpenGL渲染接口设计,包括组件和实体管理,以及如何实现屏幕空间阴影收集、顺序无关透明渲染。通过示例展示了如何构建实时渲染系统,输出高质量的渲染结果。
摘要由CSDN通过智能技术生成

17cc44b5fbf0413caca29cfbe5faccc7.png
63444310215aaa30ea581df8cf005da8.png
https://www.zhihu.com/video/1079812699810140160

题释

本文包含两个部分,第一部分描述自写的基于OpenGL的渲染接口,包含该接口的结构和使用方法。该接口简单易用,用户只需要定义需要渲染的实体,发送给该接口即可。且该接口封装了OpenGL的一些简单功能,如生成RenderTexture,渲染到纹理,控制OpenGL命令等,借助这些功能可以构建出一套相对完整的实时渲染系统。

第二部分会介绍如何一步一步渲染出视频中的效果,其中使用了屏幕空间阴影收集,顺序无关透明渲染等技巧。

表达能力有限,第一部分难以表达渲染接口的所有细节,只能尽可能描述我的大致思路,希望有借鉴价值,若对这一部分兴趣不大,也可直接跳到第二部分,因为第二部分才是渲染的过程。

简介

因为我很多时候都需要模型的渲染结果,而先输出模型文件,再用第三方软件如meshlab、maya或者游戏引擎如unity等打开文件进行渲染的方法存在着低效率、无法定制等问题。

而每次重新配置OpenGL环境,定义发送数据等过程又过于繁琐,于是决定使用OpenGL制作一个便于使用的接口,可供以后使用。为了体现该接口的潜力,我另外构造了一套简易的渲染系统,完成的渲染结果即为题图。题图的渲染并没有实现光照模型,半透明物体更是通体相同的颜色(Figure 9),效果虽然粗糙,但体现了半透明物体及其阴影的合理渲染。例如中间的红色球体,它看起来像一个球而非一个相同颜色的圆形块的唯一原因是合理的透明阴影。

实现OpenGL接口的时候借鉴了ECS的思想,将数据和实体尽可能分离,解耦方便,可并行程度高,如果以后有拓展需要,也便于进行自定义。

渲染接口

最开始我的需求仅仅是输入模型和其对应纹理,程序输出一张渲染图片即可。但许多较为精美的渲染结果均需要预计算和后处理,如Gem3的高级皮肤渲染中,为了得到准确的高光反射模型,需要预计算一张Beckmann distribution texture用于存储微表面分布(microfacet distribution)。受此启发,我认为该系统应该支持渲染到纹理这样的基础操作,并让其便于用户使用。

重新构建的架构将数据和实体尽可能分离,分别用Component 和 Entity管理,架构大致如Figure 1。所有的数据均存放在Compon

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值