このトピックでは、三国志をテーマにしたタワーディフェンスゲーム「Arrow Tower Defense」を例に、Hologres AI Function と SQL を使用して、生のゲームアセットからテーマ別キャラクター画像、ストーリーボード、10秒の広告動画を自動的に生成する方法について説明します。
背景情報
ゲーム業界において、広告クリエイティブの制作は、ユーザー獲得およびバージョンリリースキャンペーンの中核をなす部分です。特に運用型広告では、クリック率、コンバージョン率、ユーザーの好みをテストするために、さまざまなスタイル、テーマ、セールスポイントを持つ大量の動画および画像広告クリエイティブを短期間で生成する必要があることがよくあります。
従来の広告制作は、アセット収集、クリエイティブ企画、ポスターデザイン、ストーリーボード作成、動画編集といった手作業に依存しています。このアプローチには、いくつかの課題があります。
分散した生のゲームアセット: キャラクターアート、背景、アイテムアイコン、ゲーム説明、マーケティングコピーは、多くの場合、異なるシステムに保存されており、一元的に管理することが困難です。
クリエイティブ制作効率の低さ: 各広告には、テーマのブレインストーミング、アセットの選択、スクリプトの作成、ゼロからの動画制作が必要です。
多バージョンテストの高コスト: 運用型広告では大規模な A/B テストが必要ですが、手動の方法では頻繁な反復をサポートできません。
広告配信とクリエイティブの断絶: 広告クリエイティブ、スクリプトバージョン、パフォーマンスデータを追跡する統合システムがないことが多く、効果的な最適化ループを妨げています。
Hologres AI Function を使用すると、生のゲームアセット管理、クリエイティブ生成、マーケティングコンテンツ作成、広告パフォーマンス分析を接続し、広告動画制作のための完全なAIを活用したワークフローを形成できます。
メリット
このソリューションのコアバリューは、Hologres をマルチモデル機能を統合するAIアセット制作ハブとして使用し、インテリジェントな広告クリエイティブ生成を自動化することです。
オールSQLパイプライン: データエンジニアは、SQLのみを使用して、Hologres内でAIモデルを呼び出し、アセットを統合し、インテリジェントなマーケティングコンテンツを生成できます。これにより、技術的な参入障壁が大幅に下がります。
ゲームアセットの一元管理: Hologresテーブルを使用して、画像、動画、音声などのマルチモーダルデータを含むさまざまなゲームアセットを管理できます。このデータは、広告パフォーマンスデータと簡単に組み合わせ、分析できます。
エンドツーエンドの自動化: キャラクターバリエーションの生成からストーリーボード、最終動画の制作まで、全プロセスが自動化されています。これにより、数分でコンテンツを制作できます。
高いスケーラビリティ: このソリューションは、複数のシナリオに対応するマーケティングコンテンツのバッチ生成をサポートし、コンテンツ制作と配信効率を大幅に向上させます。
ワークフロー
AI Function を使用してゲーム広告動画を生成するためのエンドツーエンドのワークフローを次のステップで説明します。
生のゲーム情報とアセットを Hologres に保存します。
qwen-image モデルを使用して、生のアセットからテーマ別画像ライブラリを生成します。
プロンプトを使用してテーマ別画像を検索し、qwen-max 大規模モデルを使用してストーリーボードを生成します。
テーマ別画像、ストーリーボード、および wan モデルを使用してゲーム広告動画を生成します。
キャンペーンに最も適切な広告動画を選択します。
前提条件
Hologres インスタンス (V3.2以降) を作成済みであること。
必要なAIモデルを Hologres にデプロイ済みであること。これには、画像生成モデル (qwen-image シリーズなど)、テキスト生成モデル (qwen シリーズなど)、動画生成モデル (wan シリーズなど) が含まれます。デプロイメント手順については、「AIモデルとデプロイメント」をご参照ください。
生成された画像と動画を保存するための OSS バケットを準備し、必要な RAM ロールと権限を設定済みであること。
ステップ1: ゲームアセットテーブルの準備
Hologres にテーブルを作成し、基本的なゲーム情報と生のアセットへのパスを保存します。
-- ゲーム情報テーブルの作成
CREATE TABLE game_info(
name TEXT,
intro TEXT,
motivation TEXT,
art_style TEXT,
material_list TEXT[]
);
-- ゲーム情報の挿入
INSERT INTO game_info (name, intro, motivation, art_style, material_list)
VALUES (
'Arrow Tower Defense',
'Arrow Tower Defense は、気軽に楽しめるカジュアルな三国志タワーディフェンスゲームです。激動の三国志時代に、あなたは領土を守る指揮官となります!
ゲームプレイ:
1. さまざまな防衛タワーを事前設定されたパスにドラッグアンドドロップします。
2. クリックして既存のタワーをアップグレードし、パワーを増加させます。
3. 重要な瞬間に、クリックしてヒーロースキルを発動し、戦況を好転させます。',
'戦略タワーディフェンス',
'フラットで中国風のミニマリストなちびキャラ',
ARRAY[
'oss://<BucketName>/images/liubei.png',
'oss://<BucketName>/images/lvbu.png'
]
);material_list 列には、オリジナルキャラクター画像の OSS パスが保存されます。
アセットの例: キャラクターや背景などのゲーム内画像。
oss://ai-demo-dataset/images/liubei.png | oss://ai-demo-dataset/images/lvbu.png |
|
|
劉備 | 呂布 |
ステップ2: テーマ別プロンプトテーブルの作成
さまざまな広告クリエイティブを生成するために、オリジナルキャラクター画像から異なるテーマスタイルを派生させることができます。
-- テーマスタイルのプロンプト用テーブルを作成します
CREATE TABLE video_style(
name TEXT PRIMARY KEY,
prompt TEXT
);
-- 異なるテーマのプロンプトを挿入します
INSERT INTO video_style VALUES
('北の覇王', 'キャラクターのポートレートは変更しません。霜と戦闘の傷痕で覆われた、黒色で毛皮の襟付きの重厚な金属製アーマーを着用したチビキャラクターを生成します。壮大で映画的な雰囲気を演出するため、クールな青色のライティングを用いて、驚くほど精巧なディテールを実現します。'),
('雲海の剣聖', 'キャラクターのポートレートは変更しません。優雅な三国志の戦略家が道教の剣聖に変化したチビキャラクターを生成します。彼は、淡い水墨画風の風景模様が施された月白色の広袖ローブを着用しています。'),
('黄泉の夜歩き', 'キャラクターのポートレートは変更しません。神秘的な影の暗殺者としてのチビキャラクターを生成します。このキャラクターは、顔の半分を覆うマスクを装着した、マットブラックのフィット感のある夜行装備を着用しています。'),
('黄金のアーマー', 'キャラクターのポートレートは変更しません。龍の模様と宝石で装飾された極めて装飾的な金色のアーマーを着用し、緋色の絹のマントをまとったチビキャラクターを生成します。');ステップ3: テーマ別画像ライブラリの生成
各キャラクターとテーマの画像を生成します。この例では、qwen-image-2.0-pro モデルを呼び出すことで、2人のキャラクターそれぞれに4つのテーマ別画像を生成します。
-- 画像生成結果を保存するテーブルの作成
CREATE TABLE generated_images(
game_name TEXT,
style_name TEXT,
style_desc TEXT,
character1 TEXT,
character2 TEXT
);
-- テーマ別画像をバッチ生成し、結果を保存
WITH person_prompt AS (
SELECT game_info.name AS game_name,
video_style.name AS style_name,
material_list[1] AS character1,
material_list[2] AS character2,
prompt
FROM game_info, video_style
WHERE game_info.name = 'Arrow Tower Defense'
),
gen_image AS (
SELECT game_name, style_name, prompt AS style_desc,
ai_gen('qwen_image', json_build_object(
'prompt', prompt,
'reference_urls', array[character1],
'parameters', json_build_object(
'size', '1280*720',
'n', 1,
'watermark', false
),
'output_dir', 'oss://<BucketName>/images/'
)::text, to_file(character1, 'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>')) AS obj1,
ai_gen('qwen_image', json_build_object(
'prompt', prompt,
'reference_urls', array[character2],
'parameters', json_build_object(
'size', '1280*720',
'n', 1,
'watermark', false
),
'output_dir', 'oss://<BucketName>/images/'
)::text, to_file(character2, 'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>')) AS obj2
FROM person_prompt
),
image_urls AS (
SELECT game_name, style_name, style_desc,
obj1::json->'image_oss_paths' ->> 0 AS character1,
obj2::json->'image_oss_paths' ->> 0 AS character2
FROM gen_image
)
INSERT INTO generated_images SELECT * FROM image_urls;クエリが完了すると、generated_images テーブルには、各キャラクターとテーマについて生成された画像の OSS パスが含まれます。

劉備 | 呂布 |
|
|
|
|
|
|
|
|
ステップ4: ストーリーボードの生成
テーマ別画像を動画アセットとして使用し、大規模言語モデルを呼び出して広告用のストーリーボードを生成します。
-- プロンプトテンプレートテーブルの作成
CREATE TABLE prompts (
id BIGINT,
prompt TEXT
);
-- ストーリーボード生成用のプロンプトテンプレートを挿入
INSERT INTO prompts VALUES (10,
'Your task is to generate a 10-second video script for a mobile game ad creative.
<GameName>{0}</GameName>
<GameIntro>{1}</GameIntro>
<PlayerMotivation>{2}</PlayerMotivation>
<ArtStyle>{3}</ArtStyle>
<ImageAssets>{4} {5}</ImageAssets>
Video Structure:
1. Opening (2 seconds): Select one image, display the game name, and show exaggerated special effects.
2. Middle (6 seconds): Showcase one core gameplay mechanic. Select two images and describe character actions and effects.
3. Ending (2 seconds): All characters appear on screen. Use a call to action.
Requirements: The script must focus on player motivation, be no longer than 10 seconds, and use the full image paths.');テンプレートを使用して、qwen3.5-plus モデルを呼び出してストーリーボードを生成します。
-- ストーリーボードの生成
WITH game_material AS (
SELECT * FROM game_info
LEFT JOIN generated_images ON name = game_name
WHERE game_name = 'Arrow Tower Defense' AND style_name = 'Sword Saint of the Cloud Sea'
),
tmp_prompt AS (
SELECT json_build_object(
'prompt', prompt,
'args', json_build_array(
name, intro, motivation, art_style,
to_file(character1, 'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>'),
to_file(character2, 'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>')
)
) AS prompt, character1, character2
FROM game_material, prompts WHERE id = 10
),
story_script AS (
SELECT ai_gen('qwen3_5_plus', prompt::text,
to_file('oss://<BucketName>/images/placeholder.png',
'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>')) AS script,
character1, character2
FROM tmp_prompt
)
SELECT script FROM story_script;生成されたストーリーボードの例:

ステップ5: 動画の生成
ストーリーボードの生成後、スクリプトとテーマ別画像を動画生成モデルとともに使用して広告動画を作成します。この例では、wan2.6-r2v-flash モデルを使用します。
-- 広告動画の生成 (スクリプトと動画生成を1ステップで結合)
WITH game_material AS (
SELECT * FROM game_info
LEFT JOIN generated_images ON name = game_name
WHERE game_name = 'Arrow Tower Defense' AND style_name = 'Sword Saint of the Cloud Sea'
),
tmp_prompt AS (
SELECT json_build_object(
'prompt', prompt,
'args', json_build_array(
name, intro, motivation, art_style,
to_file(character1, 'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>'),
to_file(character2, 'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>')
)
) AS prompt, character1, character2
FROM game_material, prompts WHERE id = 10
),
story_script AS (
SELECT ai_gen('qwen3_5_plus', prompt::text,
to_file('oss://<BucketName>/images/placeholder.png',
'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>')) AS script,
character1, character2
FROM tmp_prompt
)
SELECT character1, character2,
ai_gen('wan_26_r2v_flash', json_build_object(
'prompt', script,
'reference_urls', array[character1, character2],
'parameters', json_build_object(
'size', '1280*720',
'duration', 10,
'shot_type', 'multi',
'audio', true,
'watermark', true
),
'output_dir', 'oss://<BucketName>/videos/'
)::text,
to_file('oss://<BucketName>/images/placeholder.png',
'oss-cn-hangzhou-internal.aliyuncs.com',
'acs:ram::<AccountId>:role/<RoleName>')) AS video_result,
script
FROM story_script;クエリが完了すると、結果の video_url フィールドには、生成された広告動画の URL が含まれます。動画は指定された OSS ディレクトリにも保存されます。
ステップ6: 生成された動画のプレビュー
生成された動画:
北方の武将
雲海の剣聖









