- 1
- 0
- 约3.77千字
- 约 50页
- 2019-03-04 发布于湖北
- 举报
日式动画风格非真实感三维实时渲染算法的研究 乐大山 龙晓苑 汪国平 北京大学机器感知与智能教育部重点实验室北京大学多媒体与人机交互实验室 非真实感渲染 将三维图形渲染得 具有特定的图画风格 使画面更易于理解、表达更灵活 能在形式上指定一种可展现绘画作品的方式,并随之编写生成非真实感绘画作品的计算机程序。 ——Non-Photorealistic Computer Graphics, Thomas Strothotte 日式动画风格 动漫产业现状 动画风格的特征 算法实现 描边算法 明暗算法 阴影算法 算法实现 描边算法 明暗算法 阴影算法 描边算法 目标:找出轮廓、单色等宽 传统算法 背面线框算法 扩展模型算法 传统算法 缺点明显:除非模型面足够均匀且足够细分,否则描边粗细及连续性无法保证。 背面线框算法 算法: 算法一共两遍(2 passes),第一遍正常渲染,第二遍使用线框模式进行渲染,但在深度缓冲区中将其深度值加1。这种情况下,每条处于边界的线框将宽度的一半将被显示出来。 背面线框算法 扩展模型算法 算法: 此算法也是两遍,第一遍在渲染时先使用GPU的Vertex Shader将模型中的每一个顶点沿法向方向移动一定比例,使整个模型“加粗”,然后将剔除模式(cull mode)设置为正面剔除,即剔除面向摄像机的表面,仅保留背向摄像机的表面。最后用黑色渲染此模型。第二遍正常渲染。这样,第一遍渲染出来的黑色背面就被留在了模型的外面。 扩展模型算法 算法实现 描边算法 明暗算法 阴影算法 明暗算法 在局部光照模型中,物体表面反射光强度为: 明暗算法 将漫反射与镜面反射的估算式代入该式: 其中,L为光源向量,N为表面法向量,R为镜面反射方向,V为观察方向。 明暗算法 目标:产生明显分界的明暗色块 二值化技术:一维纹理映射 明暗算法 增加色彩 将上一步得到的离散化的明暗值与该图素本应有的色彩或纹理之间取平均(或进行一次线性插值),即可得到最终的图素色彩值。 算法实现 描边算法 明暗算法 阴影算法 阴影纹理算法 算法综合 性能与优化 性能 共有约56000个多边形,在启用阴影、4倍硬件反混淆、1024x768分辨率、色深32位的情况下进行测试。 优化:LOD 使用LOD技术,在模型距离较远时,缩减模型规模、关闭阴影或描边算法。经测试,采用上述LOD技术,当模型缩小至约1/4时: 在B计算机84 fps?220 fps; 在C计算机46 fps?122 fps。 优化:阴影 对各像素点求其在阴影深度图中的梯度,从而避免“波浪效果”; 生成深度阴影图时将画面“聚焦”于显示区域,并使用PCF过滤器,使阴影分辨率大大提高,从而减少“锯齿效果”。 总结 总结 有针对性地模拟了日本动画片的技法风格,产生艺术化的效果; 引入阴影技术并与现有的明暗渲染效果加以混合是本文的创新点; 较好地利用显卡GPU性能,将CPU时间节约出来留作他用; 本技术非常适合在游戏、展示软件等实时渲染应用程序中应用。 感谢各位的聆听,欢迎提问! DEMO演示 DEMO下载地址: /projects/celshading/ 更多幻灯片: 日本动漫产业规模 明暗与阴影 背面线框算法的问题 算法局限:模型规约 阴影算法的平滑处理 阴影算法代码段 LOD优化 创新点 传统算法效果 现有动画风格游戏 Idolmaster游戏 日本动漫产业规模 明暗与阴影 背面线框算法:问题 DirectX中线框粗细只能为固定1像素不能调整,进而被显示出来的线框的粗细仅为0.5像素,因此可能发生闪烁。 解决方案: 启用“硬件反混淆” 软件绘制宽度大于1像素的线框 模型距离很远时,会被所有边线遮挡 算法局限:模型规约 模型应该尽可能光滑 在希望边界/明暗分界线停留的位置制造硬边 可以考虑使用NURBS等曲面建模工具 人物面部应使用纹理来呈现 便于通过纹理动画表现面部表情 人物各部分纹理应只使用色块 避免使用纯黑色和纯白色 阴影算法的平滑处理 我们可以使用PCF(Percentage Closer Filtering)模板过滤器来减少阴影纹理中的“锯齿” 阴影算法的代码段 // 此代码片断位于像素着色器中 float4 depths = float4( tex2D(shadowMap, shadowUV.xy + float2(-pixeloffset, 0)).x, tex2D(shadowMap, shadowUV.xy + float2(+pixeloffset, 0)).x, tex2D(shadowMap, shadowUV.xy + float2(0, -pixeloffset)).x, tex2D(shadowMap, shadowUV.x
原创力文档

文档评论(0)