前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LowPloy风格的模型导入

LowPloy风格的模型导入

作者头像
逍遥剑客
发布2018-05-09 16:54:59
1.3K0
发布2018-05-09 16:54:59
举报
文章被收录于专栏:逍遥剑客的游戏开发

LowPloy风格是一种小清新风格, 在美术设计上很有独特性. 典型的游戏作品有《纪念碑谷》《劳拉Go》等

这里写图片描述
这里写图片描述

2016上半年我们也进行过尝试, 从程序的角度来说, 这种风格是一种利好, 因为可以大大减少资源量, 对于性能的压力就小得多了, 所以在移动平台上会有比较好的性能表现. 这种风格在实际制作过程中, 反而不如传统的风格简单. 首先需要好的概念设计, 但是对于原画来说, 一般不会关注到3D模型的制作, 就会出现画出的风格与实际3D模型做出来不一样, 因为LowPloy风格是极大地依赖几何体三角形的拓扑结构的. 其次对于3D美术来说, 虽然面少了, 但是细节也少了, 很多美术是倾向于”画”出细节而不是组合出细节, 如果完全不用贴图的话, 对于他们来说无疑是困绑住双手进行工作. 这一点在特效制作上也有体现, 很多特效美术也是习惯用贴图去画, 而不是用粒子去做运动模拟, 因为动力学和各种参数对他们来说不如直接画张图贴到Billboard上简单.

这里我不讨论美术制作的可行性, 只简单提一下技术. 最理想的情况下, LowPloy可以不用一张贴图, 全部使用顶点色进行制作, 比如下面这个场景, 就没用一张贴图:

这里写图片描述
这里写图片描述

但是直接导入引擎会发现, 表现跟在3dsmax里不一样:

这里写图片描述
这里写图片描述

仔细观察可以得出结论, 即相邻面的顶点被合并了. 那怎么避免呢? 方法就是把相邻的不同颜色的面, Detach成不同的Element:

这里写图片描述
这里写图片描述

再导入引擎就可以对比效果发现正确了:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

但是3D美术不干了, 这几千个面一个个Detach那不是累死? 而且美术做不到相同颜色的面拆到同一个Element里, 所以写了个max脚本自动拆面:

代码语言:javascript
复制
sel = selection as array

undo on
(

    fn ToByteColor c =
    (
        local result = color 0 0 0
        result.r = floor (c.x * 255 + 0.5)
        result.g = floor (c.y * 255 + 0.5)
        result.b = floor (c.z * 255 + 0.5)
        return result
    )

    if sel.count > 0 then
    (
        local polygon = sel[1]
        local numFaces = polyop.getNumMapFaces polygon 0
        local singleColorFaces = #()
        local singleColors = #()

        --search face colors
        local faceColors = #()
        for i = 1 to numFaces do
        (
            local isSingleColorFace = true
            local vertices = polyop.getMapFace polygon 0 i
            local faceColor = ToByteColor (polyop.getMapVert polygon 0 vertices[1])
            for j = 2 to vertices.count do
            (
                --exclude faces with multi colors
                local color = ToByteColor (polyop.getMapVert polygon 0 vertices[j])
                if (color != faceColor) then
                (
                    --format "%:%\n%:%\n\n" vertices[1] faceColor vertices[j] color
                    isSingleColorFace = false
                    exit
                )
                --format "%\n" color
            )
            if isSingleColorFace then
            (
                appendIfUnique faceColors faceColor
                append singleColorFaces i
                append singleColors faceColor
            )
        )

        --detach the same color faces to a element
        for c in faceColors do
        (
            format "%" c
            local sameColorFaces = #()
            for f = 1 to singleColorFaces.count do
            (
                if c == singleColors[f] then
                (
                    append sameColorFaces singleColorFaces[f]
                    format "% " singleColorFaces[f]
                )
            )
            polyop.detachFaces polygon sameColorFaces
            format "\n"
        )
    )
)

经过拆面后, 面数没变, 但是顶点数从8000+涨到了12000+, 导入引擎后有14000+. 嗯, 完全不用贴图的情况下, 只能靠增加面数来提升细节了.

下面是导入引擎的效果, 不过有点不对劲, 颜色的饱和度降了不少:

这里写图片描述
这里写图片描述

试试在材质里做个Gamma校正:

这里写图片描述
这里写图片描述

最终效果:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年01月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档