最近知识星球小伙伴分享了一些网易图形图像岗位的面试问题,我挑出来几个分享一下。

Vulkan 和 OpenGL 渲染管线的区别
一句话:OpenGL 是动态管线,Vulkan 是静态管线。
OpenGL 采用动态管线,管线状态(如着色器、纹理采样方式、深度测试、模版测试、帧缓冲区等)通过函数调用动态设置,运行时可随时修改。
例如,切换着色器只需调用 glUseProgram ,修改深度测试状态用 glDepthFunc 。
这种方式简单直观,但频繁的状态切换会增加 GPU 开销,且优化依赖驱动。
Vulkan 采用静态管线,要求开发者预先创建管线对象(VkPipeline),将所有管线状态(包括着色器阶段、固定功能配置等)封装成一个完整的“管线状态对象”。
要支持不同的管线状态就需要创建多个管线对象,然后录制渲染指令的时候 vkCmdBindPipeline 切换绑定不同的管线对象。
Vulkan 使用静态管线增加了代码编写的复杂度,比如需要管理多个管线对象和管线布局,但是避免了动态状态切换的开销。
高斯模糊性能优化的原理
高斯模糊的优化原理是利用高斯核是可分离特性,即一个 2D 高斯核可以表示为两个 1D 高斯核的乘积。
一个二维模糊可以通过先在 水平方向 模糊一次,再在 垂直方向 模糊一次,达到与一次 2D 高斯模糊相同的效果。
定量分析一下,假设使用一个大小为 n×n 的高斯核:
一次性二维模糊:每个像素要处理 n × n = n² 个采样。
分两次一维模糊:
- 第一次:水平方向 n 次采样。
- 第二次:垂直方向 n 次采样。
总共只需 2n 次采样。
总结下,双通道渲染(两次渲染)每个像素的采样数 2*n ,单通道渲染每个像素的采样数 n*n , 片段着色器中纹理的采样数大大降低。
进技术交流群,扫码添加我的微信:Byte-Flow

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/60132.html