記事一覧

Character12

ファイル 207-1.jpg

前作ったやつをベースに作業開始。

Parallax Occlusion Mapping@ UDK その2

ファイル 206-1.jpg
凹凸用のマップをノーマルマップのアルファチャンネルに入れようと思ったけど、BC5形式だとダメっぽいので専用のテクスチャのアルファチャンネルに入れて使っている。

ファイル 206-2.jpg ファイル 206-3.jpg
デカル機能を使うことにより、凹凸感のあるディテールも追加できる。
http://udn.epicgames.com/Three/DecalsHomeJP.html

距離によるテッセレーション減衰

UDKのテッセレーションは標準でもある程度分割の減衰を行うが、広大なメッシュに使用すると最低限の分割を行ってしまい、広い海面では重すぎて使えなかった。
そこで、カメラからの距離に応じてTessellationFactorsに小さな数字を入れる処理を追加し、凹凸マップと0.5の凹凸無しを掛け合わせるAlphaにも追加した。
遠距離の並みの波形はノーマルマップだけで十分。


ファイル 204-1.jpg
ファイル 204-2.jpg
ファイル 204-3.jpg
ただ多少問題があり、ソースモデルのエッジ部分と分割度合いの変化している部分が重なると生成されたポリゴンも分離してしまっている。
非透明にすると目立ちやすい。

VertexShader

葉と動きは頂点カラーを仕込んで、その色のRGB各チャンネルで異なる属性の動きを処理させます。

UDK Wind Vertex Shader
http://www.minifloppy.it/tutorials/7/udk-wind-vertex-shader
UDKサンプルマップのFoliageで使われている葉の動きをパフォーマンス面で改良(個人的に見つけたバグっぽいのも無くなってた)したものらしい。どちらも基本的な処理はCrysisと同じ。
風の設定はWindDirectionalSourceアクタで強度や方向などを統一して設定できるので楽だ。

Maxに限らずMayaでも複数の頂点カラーと加算ブレンドはできるけど、頂点カラーをサポートしていないDCCソフトは多いはず。その場合は専用のカラーテクスチャでも代用可能だと思う。

話は変わるけど、いつの間にかCollada形式のサポートは無くなったようだ。これからはFBX一筋か。

まだまだ海面シェーダ

今まではマテリアル上で深度の透明を再現していたけど、かなり深いところになると完全に透明じゃなくなるので、これではやはり無理がると思った。
そこで、Crysisの海のように水面下に限定したフォグを試してみるとかなり良い感じに。

ファイル 201-1.jpg

深度による透明(Opacity by Depthと命名)は、Switch機能で呼び出し可能にして、とりあえず無効化。
視点と面の角度によりわずかに透明度が変化する処理はあるものの、マテリアル自体の透明度がかなり高まった。水の色がフォグに依存するところが多くなったが、水の色というのは水の表面部分で決まるわけではなく水の中濁り具合で決まるので、フォグによる海水の色の再現はむしろ良くなったと思う。

ファイル 201-2.jpg
太陽光の透過もバッチリ


ファイル 201-3.jpg
髪のアルファ透過と背景のDoF処理の組み合わせが上手くいかない。
マスクでやらないとダメかな。

雲@UDK

UDKのテンプレートにある空用の球体メッシュには空と雲を再現したマテリアルがあり、今までそれを背景に使っていたけど、今回それを思い切って削除。
そして同じくテンプレートに入っていたExponetial Height Fogだけで空の色を作成し、雲はゆっくりとアニメーションするパーティクルで表現。

ファイル 200-1.jpg
ファイル 200-2.jpg
大きめに作ってそこそな遠距離に配置。太陽光に影響して影やライトシャフトも作るので良い感じです。パーティクルの設定とは別に、マテリアルはFoliageMapで使われているものに多少の手を加えて使用。そのマテリアルがまた良い仕事をしているんだな。

ファイル 200-3.jpg
DoFとTranslucientの2つが絡む処理が完璧じゃないけど、それほど困ることは無いだろう。マテリアルの設定次第で解決するかもしれない。

WL-Shader v1.1

v1.1をアップロードしました。
今後は草木の頂点を風で靡いて揺らす処理やLandscapeのマテリアルを勉強したいと思います。
Downloadsからどうぞ。

最新版WL-Shader 仮の紹介ページ

ファイル 195-1.jpgファイル 195-2.jpg

最新版WL-Shader
仮の紹介ページ
http://unreal.rgr.jp/Mydownloads/WL-Shader/beta.htm

現在DLできるのは3ヶ月前のバージョンです。

Blinn Specular

ファイル 193-1.jpg

WL-ShaderのPlasterとSeaWarerに追加した機能。
もちろん通常のスペキュラにもSwitchパラメータで切り替え可能です。

Half Lambert Shader失敗

Half Lambert Shaderの処理内容について

「ランバートの余弦則のコサインカーブが半分になるように"1/2"を掛けて"1/2"を足して、さらにこれを二乗して緩やかなカーブに変換して陰影処理を行う」
http://news.mynavi.jp/column/graphics/057/index.html
非常に分かりやすくシンプルな処理だったりします。

ファイル 190-1.jpg
これは簡単にできました。確かにハイライト部分と影が滑らかに処理されるようになりますね。
しかしこれは法線とライティングによって生成される陰影の変化を柔らかくする処理なので、法線情報に含まれるノーマルマップの凹凸からくる陰影も極端に低下する。これはどうしたものか・・・。

ファイル 190-2.jpg
ただ、UDKのライティングは事前処理による球面調和光源のGI機能があるので、Half Lambert Shaderに拘る必要も無いと思うのです。

Anamorphic Lensflare

ファイル 188-1.jpg

ファイル 188-2.jpg

ファイル 188-3.jpg

大雑把な説明だと、バッファのテクスチャのUVを横方向に小さくし中央から引き伸ばす。
それを左右にずらしたものを多数用意して横方向にブラーかけたようにしている。ただ、このUVの処理だと左右中央付近以外からレンズフレアが発生しにくい。

海面シェーダも色々改良してます。

Dx11海面シェーダ@UDK part2

ファイル 186-1.jpgファイル 186-2.jpg

新規に作り直し。
テッセレーションと波形の動き方を改良。ポリゴンの形状だけでは物足りないので2種類のノーマルマップから4種類の動きを作りブレンド。これらの動きのスピードと大きさのブレンド強度はそれぞれ簡単に変更可能。
ちょっとパラメータを変えるだけで全く違う波が作れたりします。
視点に対する水面角度と深度(視線方向で水面から次の物体までの距離)からなる2つの要素が透明度に影響。ただ、これを純粋なZ方向の深度だけに影響してもいいんじゃないかと悩んでいます。
泡を同じような深度検出で浅くなる部分に合成しているが、他のメッシュに交差する境界部分の処理でまだ未完成。

前回参考にしつつ作ったもの
http://unreal.rgr.jp/diary.cgi?no=171

Block Shader(ポストプロセス)

モザイクっぽい処理ができます。ScreenPosノードはScreen Alignをオンに。
ファイル 185-1.jpg
ファイル 185-4.jpg

Snow
方向していだけでなく全体に付加することも可能に。
ファイル 185-2.jpg


Crome
上から、デフォルト・Nukei・SpecularNoise
ファイル 185-3.jpg

凍結や雪の表現 Snow Shader

ファイル 184-1.jpg

WL-ShaderのPhong・Crome・Plaster・TransparentGlassに追加した機能です。
マテリアルインスタンスからSwitchのパラメータで処理の有無を切り替える方式で導入。
雪または氷のDiffuse/Specular/SpecularPower/Normalのパラメータ一式を処理の最終段階で追加する流れです。マッピングはUVだが、全ての面に影響するのではなく、特定の方向から吹き付けて影響する部分に効果が出るようにしており、マスク用のテクスチャで境界部分を馴染ませています。
デフォルトでは真上から真下の方向になっているので雪が積もった感じになると思う。もちろんマテリアルインスタンスから方向も調整できるし、ノーマルマップの細かい面の向きの変化にも対応している。
他にも多くのパラメータで細かくカスタマイズできるようにしてあるが、マテリアルエディタの中身は結構すごいことになってます。
薄くしたり各種テクスチャを変えたりできるので、雪じゃなく砂埃を被ったエフェクトへの応用もできる。
これは初代Crysisで使われていたシェーダと同じ方式だと思うんですが、Crysisの方は縦に積雪と全体的に氷の粒を追加するなど、複数の雪エフェクトを追加してましたね。

Nukei shader @ UDK

ファイル 182-1.jpg

公開しているWL-ShaderのCromeに追加予定の機能です。コーティングされているような塗装を再現可能に。
ノイズのハイライトを追加する機能も追加。

Parallax Occlusion Mapping(視差オクルージョンマッピング) @ UDK

ファイル 181-2.jpg
デプスパスは12。
個人的なこだわりとして、凹凸用のテクスチャはノーマルマップテクスチャのアルファチャンネルに格納して使うということ。理由は以下

・凹凸情報は0~255のシンプルなグレースケールの画像
・RGBのカラーチャンネルより使用メモリを少なくできる
・テクスチャに入れるアルファチャンネルはグレースケールだしDDS圧縮でも劣化がほぼ無い。

ファイル 181-1.jpg

WL-Shader修正

ブランク用のノーマルマップのテクスチャを修正。
TC_Normalmap設定(DXT1)でインポートしていたが、DXT1はそこそこ画質の劣化があるため、かなり正確さが求められるノーマルマップには不向き。

今回はブランク用のテクスチャを256x256から64x64に小さくリサイズしTC_NormalmapBC5設定でインポート。これはBC5で圧縮され、通常の青っぽい色が黄色になる。
BC5はDXT1よりもメモリは食うが画質の劣化も少なく、アルファチャンネルもサポートしている。ノーマルマップに入れるアルファチャンネルは、主にParallaxOccukusionMapやDisplacementMapなどの処理に使えるので、CryEngineなどもノーマルマップはBC5のDDSを使うように促している。

WL-Shader2

UDK用WL-Shaderをバージョンアップして公開します

詳細
http://unreal.rgr.jp/Mydownloads/WL-Shader/

ダウンロード
http://unreal.rgr.jp/Mydownloads/WL-Shader/WL-Shader.ZIP

SCAR @ UDK

ファイル 175-1.jpg

ノーマルマップを作り直し、やっと見せられる状態に。

街並み

UDKで結構前から作ってるマップ。
ファイル 172-1.jpg
ファイル 172-2.jpg

ブルームからレンズフレアを発生させるポストプロセスを作りたい。
実写だとこんな感じ。
http://www.claudiomiranda.com/lenstest/page2.html
Crysis2とかにも演出として使われている。
画面内で小さく最も高輝度な領域だけを抽出して、2~4つに分けてそれぞれUVで度合いを変えて横にぼかしながら伸ばして合成しているんだと思う。
実際海外のユーザで、ブルームからレンズフレアを自動的に生成するようなポストプロセスを作ってる人が何人かいるが、マテリアルエディタでは自前のHLSLを使ったノードを使ったりしている・・・のかな?
http://forums.epicgames.com/threads/782846-My-Anamorphic-Quest
素人には簡単な道のりではないようだ。

あと、明るい日中の描写のために変動的なトーンマップもポストプロセスで作れないかなあ。