LowPloy风格的模型导入

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

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

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

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

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

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

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

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校正:

最终效果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一个爱吃西瓜的程序员

第一轮面试需要掌握怎样的基础技术栈?(以Python为例)

想要进入大型互联网公司,首先我们面对的就是面试这一道坎。一般而言,需要3~5面才能最终拿到offer。一面是考查基础知识,二三面是考查专业技能、项目经验等,四五...

38950
来自专栏IT派

要想学机器学习,先科学把妹!

导语:小编今天就让大家放松一下,明天再推技术文章,昨天七夕看到了一篇“好”文章,其实我只是单纯地觉得这些名字太高大上了,爱因斯坦把妹法- -。另外,小编Tom邀...

44690
来自专栏大数据文摘

12月的音乐可视化笔记:我从TOP2000歌曲中,分析了这几年流行音乐的变化趋势

21020
来自专栏DT数据侠

DT君的星巴克门店分布玫瑰图,被数据侠“破解”了!

DT君的数据可视化向来都是业界清流,经常有人来问制作方法,奈何设计师小哥哥无法一一指点。 这下好了,有位数据侠终于按捺不住亲自上手啦!

10800
来自专栏腾讯社交用户体验设计

空间小窝:萌是一种怎样的体验 - 腾讯ISUX

13720
来自专栏架构师之路

从0开始做垂直O2O个性化推荐-以58到家美甲为例

从0开始做垂直O2O个性化推荐 上次以58转转为例,介绍了如何从0开始如何做互联网推荐产品,58转转的宝贝为闲置物品,品类多种多样,要做统一的宝贝画像比较难,而...

87290
来自专栏ATYUN订阅号

赫尔辛基大学AI基础教程:使用AI解决问题(2.2节)

人工智能可以说和计算机科学一样古老。早在我们拥有电脑之前,人们就会想到自动推理和智能的可能性。而思考这个问题的伟大思想家之一就是艾伦·图灵。除了图灵测试之外,他...

11850
来自专栏FreeBuf

像折纸一样操作多屏手机

韩国电子巨头三星公司还没推出曲面显示屏智能手机Galaxy Round和LG推出G Flex很久之前,加拿大皇后大学人类媒体实验室的团队就研发出Paperpho...

22570
来自专栏量子位

Adobe秀出十大PS新神技,个个惊艳炸裂!

剪辑师经常遇到一个问题:把视频剪成不同的长宽比,比如把横向的视频剪成纵向,通常很灾难。

27620
来自专栏计算机视觉与深度学习基础

2014ACM-ICPC牡丹江赛区参赛总结

         回来之后就被没写的作业和入党的事情搞得一团糟(出门在外还是带两本书比较好),但还是抽空在下个赛区开赛之前把这篇参赛总结赶出来了。 据一开始的分...

20390

扫码关注云+社区

领取腾讯云代金券