記事一覧

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

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

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

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

4コア8スレッドか6コア12スレッドか

そろそろPCのCPU周りを買い換えたい。
メモリやMBはもちろん、おそらく電源も変えないといけないらしい。
ケースとかも新しいのにしてやろうか。

Blinn Specular

ファイル 193-1.jpg

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

UnrealEngine4

4月あたりにUnrealEngine4の詳細が発表されるとかされないとか。
今まではレンズフレアからポストプロセス等色んな用途に使うシェーダをPixel Shaderでプログラマブルに作れてきたけど、4からはDx11で話題になっていたCompute Shaderが積極的に盛り込まれるんじゃないかと予想してる。
例えば製作段階でCPUが事前処理していたLightmassのGI処理がプログラマブルなGPGPU処理で完全リアルタイムとか、反射や透過がプリレンダと同質のレイトレーシングとか。CPUだけがやっていた演算処理をGPGPUで行えるんじゃないかと。

UnrealEngine4のリリース自体は2014年らしい。


新しいWL-ShaderでMP5もリフレッシュ
ファイル 192-1.jpg

以前のWL-Shaderはこう
ファイル 192-2.jpg

作成中の海面シェーダです。テッセレーションの最大分割数(6だったかな?)が決まっているので広大な海面にする場合はある程度ポリゴンを分割しておく必要があります。。
ファイル 191-1.jpg

ファイル 191-2.jpg

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に拘る必要も無いと思うのです。

CustomLighting

UDKのマテリアルエディタは、ライティングからのごく基本なハイライト等も根本から自作することができる。
http://udn.epicgames.com/Three/CustomLightingJP.html
この仕組みを利用すれば、Half Lambert Shaderもわりと簡単に可能じゃないのか?

明るい部分と暗い部分を二極化するようにして、それぞれの領域に異なるトーンテクスチャを合成してマンガっぽくするとか。可能性が広がる。

先週末に、クロマブラーをもっと自然な描写になるように改良していた。これは画面の端に行くほどRGBの各チャンネルをずらす処理で、DOFとの相性が良い。
画像の下側はWL-Shader(開発中バージョン)に含まれる全てのポストプロセスを使った結果。
ファイル 189-1.jpg

ところで、ポストプロセスに使うバッファを必要な時だけダウンサンプリングさせて処理すればもっとパフォーマンス稼げると思うんだけど、そんな機能のノード無いよね。HLSLでカスタムノードしか無いのかなー

Anamorphic Lensflare

ファイル 188-1.jpg

ファイル 188-2.jpg

ファイル 188-3.jpg

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

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

3Dゲームファンのためのグラフィックス講座

【GAME Watch バックナンバー】
3Dゲームファンのためのグラフィックス講座
http://game.watch.impress.co.jp/docs/series/3dcg/

難しすぎでもなく、なかなか勉強になる講座です。
結構昔からやっている講座なので、古いのから見ると進歩の過程もよく分かります。


ついでにこちらも
3Dグラフィックス・マニアックス
http://news.mynavi.jp/column/graphics/001/index.html

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の方は縦に積雪と全体的に氷の粒を追加するなど、複数の雪エフェクトを追加してましたね。

Lightmassのコツ

全ての静的メッシュにGI(グローバルイルミネーション)のライトマップを作成するLightmass。
メッシュの位置やライトを動かすとライトマップが無効になるので定期的にビルド処理して確認しなければいけないのが面倒。
しかもライトマップを想定したStatiMeshは、マテリアルのマッピングに使うUVとは異なるライトマップ専用のUVが必要。UDKでも自動で生成してくれる機能はあるが、正直頼りないので個人的にはモデリングソフトの段階で専用のUVを作っておいたほうがいいと思う。
それぞれのStaticMeshはエディタからデフォルトのライトマップ解像度(Light Map Resolution)を指定するが、マップに設置したStaticMeshのプロパティから個別に変更することもできる。
このライトマップの解像度は高いことに越したことはないが、サイズやStaticMeshの設置数に比例してLightmassのビルド時間は確実に延びていく。それを解決するためにSwarm Agentという機能があり、ネットワーク内の複数のPCにビルド処理を分散させることができるらしい。
ただし、自分のように趣味で使ってる人にそんな環境は無いので、ライトマップは極力小さな解像度に設定している。具体的な影は動的シャドウとSSAO処理に任せて、ライトマップは大雑把なGIの傾向が再現できていれば良いレベルだと思ってる。

ファイル 183-1.jpg
このくらいの窓だと解像度は16か32。もはやドットレベル。離れたポリゴンのUV同士もそれなりに間隔を空けないといけない。


Lightmassのビルド設定にPreview~Productまで4段階の設定があり、かかる時間と結果に結構差がある。

---Preview 34秒---
ファイル 183-2.jpg
DetailLighting表示。
StaticMeshの接合部にライトマップのつなぎ目が目立つ。

ファイル 183-3.jpg
Lit表示。

---Product 3分28秒---
ファイル 183-4.jpg
Previwのときにあった不自然なつなぎ目は分からない。

ファイル 183-5.jpg


でもそれなりの解像度のライトマップでやりたいので、GPU処理とかも取り入れて高速化してほしいです。

Nukei shader @ UDK

ファイル 182-1.jpg

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

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

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

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

ファイル 181-1.jpg

Epic Games Releases December 2011 Unreal Development Kit Beta

注目したのはこれです Texture Paint tool

以前は頂点カラーをペイントできましたが、今回の新機能はテクスチャをペイントして作成することができます。
http://www.udk.com/news-beta-dec2011.html

制御用テクスチャの作成に良さそうです。

World of Level Design. Game Level Design and Game Environments.

エディタが提供されているゲームや無料SDKを使ったゲームのレベルデザインのノウハウ情報を教えてくれるサイト。
右のUlitimateLevelDesigonにサインアップすると、FPSのステージ製作に欠かせない要素などを解説するPDFファイルがもらえます。
FPSゲーム製作の方に是非。
http://www.worldofleveldesign.com/

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

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