AI创作与游戏开发(四)类似炉石传说资料片的静态图动效制作

书接上回,在游戏开发中,资料片动画是非常重要的,因为它们可以增加游戏的吸引力和品牌价值。类比炉石传说的资料片,我们可以看到以下几个方面的重要性:


  1. 增加可玩性

资料片动画可以向游戏中添加新的角色、场景和故事情节,这些元素可以增加游戏的可玩性。例如,在《炉石传说》的资料片中,新的卡牌和英雄角色背景内容,使得玩家可以体验到更多的游戏乐趣。

  1. 增加品牌价值

资料片动画可以增加游戏品牌的价值和认可度。这些动画可以成为游戏品牌的标志性元素,例如《炉石传说》的资料片动画已经成为该游戏品牌的重要组成部分之一。这些动画可以向玩家和非玩家展示游戏品牌的风格、主题和价值观,从而增加品牌的认知度和忠诚度。

总之,资料片动画在游戏开发中非常重要,它们可以增加游戏的可玩性、吸引力和品牌价值。所以,我们使用AI创作开发游戏,也可以尝试制作静态图动效的资料片.

216ddfa2241d49a8b02f4d508d82ec7c.gif

AI切深度图

在游戏开发中,制作上述动画效果的主要方法有三种:播放视频动画、播放gif动态图片以及使用shader动态渲染静态图片。在移动平台或Web平台游戏中,资源大小和包体大小是非常重要的因素。因此,使用第三种方式可以大大减小资源大小,提高游戏的加载速度,并减少玩家等待时间。

使用shader动态渲染静态图片是一种常用的方法,它可以通过改变纹理坐标、颜色、透明度等属性来实现动画效果。这种方法可以在运行时动态生成动画效果,而不需要使用额外的视频或图像资源。这样可以减少游戏的资源占用量,降低包体大小,提高游戏的性能和加载速度。

如果要使用shader动态渲染一张静态图片,首先需要有一张图片的深度图。在本期的主题中,涉及到AI创作与游戏开发,可以采用一些AI工具来进行图像切割,以获取深度图。其中,可以使用leiapix来获取深度图,并对其进行微调,以获得更细致的分层动画效果。

相比传统的人工抠图方式,使用AI工具可以更快速、准确地获取深度图,同时也可以减轻人工操作的工作量。这样可以大大提高生产效率,同时也可以使得游戏开发者专注于游戏的核心设计和开发工作。

在游戏开发中,使用shader动态渲染静态图片可以实现各种动画效果,例如旋转、平移、缩放、淡入淡出等。通过使用深度图,可以将图片分成多层,然后使用shader来对每一层进行动态渲染,从而实现更加逼真和生动的动画效果。

下面的深度图就是通过工具获取到的.


image.png

shader效果实现

用于根据一张原图和一张黑白深度图创建分层动画的镜头特效。这个着色器程序包括一个顶点着色器和一个片段着色器。顶点着色器将顶点从2D空间转换为3D空间,并将它们传递给片段着色器。片段着色器从原图和深度图中获取像素的颜色和深度值,并使用它们来计算每个像素的深度和偏移因子。然后,它使用深度值和偏移因子来控制像素的偏移程度,并混合原始颜色和偏移颜色。最后,我们在每帧更新动画,并更新焦点距离、焦距变化范围和深度图像素。

顶点着色器

attribute vec4 a_Position;
attribute vec2 a_Texcoord;

varying vec2 v_Texcoord;
varying vec4 v_Position;

uniform mat4 u_MvpMatrix;
uniform mat4 u_WorldMat;

void main() {
    gl_Position = u_MvpMatrix * a_Position;
    v_Texcoord = a_Texcoord;
    v_Position = u_WorldMat * a_Position;
}

片段着色器

precision highp float;

varying vec2 vTextureCoord;
varying vec4 vColor;
uniform sampler2D displacementMap;
uniform sampler2D uSampler;
uniform vec4 dimensions;
uniform vec2 mapDimensions;
uniform float scale;
uniform vec3 offset;
uniform float focus;
uniform float enlarge;

float aspect = dimensions.x / dimensions.y;

// mono version of perspective shader
vec3 perspective(vec2 uv,
float horizontal_parallax, // 0 - no parallax
float vertical_parallax,   // same
float perspective_factor,  // 0 - no perspective
float h_convergence,       // 0.0 - near, 0.5 - center, 1.0 - far
float v_convergence        // same
) {
    const float sensitivity = 15.0; // aligns animation with the previous version where it was multiplied by 15
    horizontal_parallax *= sensitivity;
    vertical_parallax *= sensitivity;

    vec3 ray_origin = vec3(uv.x - 0.5, uv.y - 0.5, +1.0);
    vec3 ray_direction = vec3(uv.x - 0.5, uv.y - 0.5, -1.0);

    ray_direction.xy *= perspective_factor;
    ray_origin.xy /= 1.0 + perspective_factor;
    ray_direction.x += horizontal_parallax;
    ray_direction.y += vertical_parallax;

    ray_origin.x -= h_convergence * horizontal_parallax;
    ray_origin.y -= v_convergence * vertical_parallax;

    const int step_count = 45; // affects quality and processing time
    const float hit_threshold = 0.01;
    ray_direction /= float(step_count);

    for (int i = 0; i < step_count; i++) {
        ray_origin += ray_direction;
        vec2 vFlipUV = (ray_origin.xy + 0.5) * vec2(1, -1) + vec2(0, (dimensions.y - 1.0) / dimensions.y);
        float scene_z = texture2D(displacementMap, vFlipUV).x;
        if (ray_origin.z < scene_z) {
            if (scene_z - ray_origin.z < hit_threshold) return texture2D(uSampler, ray_origin.xy + 0.5).rgb;
            ray_origin -= ray_direction; // step back
            ray_direction /= 2.0; // decrease ray step to approach surface with greater precision
        }
    }

    return texture2D(uSampler, ray_origin.xy + 0.5).rgb;
}

void main(void) {
    vec2 uv = (vTextureCoord - vec2(0.5)) / vec2(enlarge) + vec2(0.5);
    float gain = scale * 0.075;
    float persp_factor = scale * 3.0 * offset.z;
    gl_FragColor = vec4(perspective(uv, -gain * offset.x, gain * offset.y * aspect, persp_factor, 1.0 - focus, 1.0 - focus), 1.0) * vColor;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345