LowPloy风格的模型导入

来源:互联网 发布:win7网络发现无法启用 编辑:程序博客网 时间:2024/06/06 01:46

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

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

但是直接导入引擎会发现, 表现跟在3dsmax里不一样:
这里写图片描述
仔细观察可以得出结论, 即相邻面的顶点被合并了. 那怎么避免呢? 方法就是把相邻的不同颜色的面, Detach成不同的Element:
这里写图片描述
再导入引擎就可以对比效果发现正确了:
这里写图片描述这里写图片描述
但是3D美术不干了, 这几千个面一个个Detach那不是累死? 而且美术做不到相同颜色的面拆到同一个Element里, 所以写了个max脚本自动拆面:

sel = selection as arrayundo 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校正:
这里写图片描述
最终效果:
这里写图片描述
这里写图片描述

0 0
原创粉丝点击