2016年4月3日日曜日

Back in 1995で使用しているUnityを使ったPS1風描画について

ジーパラドットコムさんでシシララ安藤さんとの対談記事シリーズ

『Back in 1995』一條貴彰”90年代のゲーム文化を楽しむムーブメントを日本からおこしたい”シシララ安藤武博のインディーズを見ずに死ねるか!

が完結しました。全4回です。

『Back in 1995』にかける思い、日本国内のクリエイターさんに対して思うこと、PSMについて、シンラについてなど、過去についても積極的に触れていくスタイルでぶっちゃけています。
ぜひご笑読ください。

安藤さんと対談して、「新しいフィールドに自らつっこんで切り開いていくスタイル」は自分とかなり共通しているなと思いました。そして彼はプロデューサー視点から、私は開発者視点から、ゲーム産業どげんかせんといかんと考えているようで、そこらへんうまくシメジーおいしいーとかにならないかなと画策しています。
 
また、私個人にとって安藤さんは「鈴木爆発」の人、というイメージがありまして、その思いも込めて例のゲームの序盤に登場する「みかん爆弾」をつかった"技術デモ"を持って行ったんですね。
二次創作行為をして当時のPに見せに行ったわけで、今考えるとバカ行為だった気もします。

さて、その技術デモが以下で、Back in 1995で無駄に培った初代PlayStation風描画の仕組みを端的に表現しているものです。
UnityのWebGLであっさりビルドできてしまったので、こちらからその実際のデモを試せます。マウスでつかんでぐりぐり動かせるのよ。


この「PS1風描画」ですが、やっていることは以下の3点です。

・ 頂点座標変換の精度を下げる
・ テクスチャのパースペクティブコレクションをオフにする
・ 内部的に低解像度描画を行う

初代PlayStationの座標変換は、固定小数点演算で行われています。(後づけ知識)
だから独特で味のある「ポリゴンのズレ」が出るんですね。

また、テクスチャのパースペクティブコレクションを切ることによって、ポリゴンがカメラに近づくと独特の「歪み」が出るようになります。
美しい。

実は「Back in 1995」を発表した当時、座標変換の精度を下げるところは完成しておらず、トレイラームービーでは「ポリゴンデータ側を壊してそれっぽく見せる」という荒行で対応しておりました。
非常に見栄えが悪くできたので、製品版にも採用しています。

そして忘れもしない1年前のUnite 2015 Tokyo。
本業をほっぽって「Unity相談コーナー」に出向き、高橋啓治郎さんに「Unityで描画精度を固定小数点演算にすることはできませんか?」というトンチキ質問をしたわけです。
「お前は何を言っているんだ」という顔で見られたのも良い思い出です。

冷ややかな目で見られながらも、技術的な助言はばっちりいただき、
まんまと精度をそれっぽく下げるシェーダーが完成しました。ありがとうございました。
高橋さんはその後、自らパッケージにまとめてGithubに成果をあげています。

Retro3D




3点目の「低解像度描画」ですが、これは猛烈に単純で、一回通常のカメラで描画した結果を低解像度なRenderTextureに書き込んでカメラの前に置いているだけです。
参考にTsubakiさんの記事を参考にしています。みんな大好きテラシュールブログ。

単にUnityの設定で低解像度にしたり、あるいは描画パイプライン上で直接何かする方式を取っていないのは、「さまざまなプラットフォームでの対応」 を想定しているからなんですね。
描画システム側に深いことをやるとマルチプラットフォームの時に固有の問題が起きそうだと思ったので、すごく単純な方法で実装しようという方針です。

さいわい描画負荷がかなり軽いゲームなので、こういう力技を使っても全く問題ありません。
(ふつうはRenderTextureは重い処理なので、、、)
 おかげで開発初期で利用していたPlayStation Mobile、すなわちPS Vitaでもしっかり動いていました。
覚えていろ地べたを這いどろ水をすすってでもPlayStation platformに戻って来てやる


あとブラウン管シェーダーというものも入れて、モニターの雰囲気を出しています。
[Unity3D]ブラウン管風シェーダーを作った  


そういうわけで、技術的にPS1風描画は割とすぐ試せるので、開発中のゲームでちょっとやってみたいなと思った人はぜひチャレンジしてみてください。


初代PS風の格ゲーやRPGを開発する同士よ、ぜひ!(アドベンチャーゲームは作らないでお願いTT)