HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
1214
ぴっぽHGIMG3って3Dの影の処理とかってできないんでしょうか。12未解決


ぴっぽ

リンク

2013/12/14(Sat) 16:24:47|NO.58732

もしくは可能なライブラリは存在しますか?

簡易的なものではなく、モデルの形状をした影を表現したいです。
無理でもなんとかうまいこと影みたいに表現できなでしょうか。



この記事に返信する


とおりすがり

リンク

2013/12/14(Sat) 23:24:24|NO.58738

モデルの形状をした影、というのは多分モデルが動けばそれに合わせて形の変わる影のことを言っているんでしょうかね?
リアルタイムシャドウという技術ですが、hgimg3では困難です。
Easy3Dでは出来たんですが、配布は終了してしまっていますね…
hgimg4の母体となっているgameplayにも今のところリアルタイムシャドウの機能はないようです。



a-okada

リンク

2013/12/15(Sun) 00:22:54|NO.58739

こう考えた方々がいらっしゃいます
http://wikiwiki.jp/orzlabo/?%BB%F1%CE%C1%B4%DB%2F%B1%C6%A4%CE%C9%BD%BC%A8
ご参考までに…(筆者でもないのに何を言うてるんだ)



ぴっぽ

リンク

2013/12/15(Sun) 09:25:18|NO.58742

とおりすがりさん
HGIMG4でも対応しないという事でしょうか。
残念です...

a-okadaさん
ありがとうございます(^^



暇人

リンク

2013/12/22(Sun) 22:25:01|NO.58843

かなり限定的な使い方なら出来ない事も無い
影を付けるオブジェクトを別処理して
http://ux.getuploader.com/himajin130414/download/2/hgimg3%E5%BD%B1%E3%83%86%E3%82%B9%E3%83%88.PNG
こんな感じにはできる
起伏のある地面にも対応できるかも知れない(面倒そうなのでまだ試してない)
オブジェクトに影を落とす事は出来ない(自分の影を自分に重なるとか)
影を板ポリゴンで表現してるので光源の向きを真下以外にするとポリゴン分割部分で歪む
広範囲に影を付けたい場合影の解像度が落ちる
hgimg3のライトは光源が無く角度で全体を照らしてるので光源からの位置で影の形が変るこの方法で辻褄を合わせるのは難しい


他の方法としてhgimg3に追加でD3DX81ab.dllを使ってシェーダープログラムして
シャドウマップを使うって手もあるけど
D3DX81abが配布自由なのか良く分からないのと
hgdrawが使えないからシャドウマップの描画はモデル読み込みから全て自前処理になる感じ



[PINE]Kirito

リンク

2013/12/22(Sun) 22:51:23|NO.58844

すげー
どういう原理でやってんだ!?



暇人

リンク

2013/12/23(Mon) 00:12:58|NO.58847

レンダリングに使えるテクスチャをα付きで作る(SYSREQ_PTRD3DDEVでCOMを使えるようにして直接DirectX8の命令を使う)
α付きテクスチャをレンダリング先にする
DirectX8側の命令でZ値α値を含めてレンダリング先を初期化
hgviewでテクスチャのサイズに合わせた設定にする
光源にしたい位置にカメラを移動して
真下方向をオブジェクトレンダリング(hgdraw 4+1)(この時オブジェクトを黒くしたいのでmodelshadeを使ってライト色で色を変えられるようにする)
光源から見える地上最大範囲を4頂点(Y座標は地面より少し浮かす地面のオブジェクトと重なるとまずいので)にしたポリゴンを作る(光源が固定なら最初に作る)

レンダリング先を元に戻す
modelshadeで変更したモデルを戻す
カメラを本来の位置に戻し普通にレンダリング(hgdraw)
DirectX8側のカメラの位置をhg側のカメラの位置方向と同じにする
最初に影をレンダリングしたテクスチャをポリゴンに貼り付けてDirectX8側の命令でレンダリング
この時に深度値比較を有効にする事で影のポリゴンを後から描画してもオブジェクトの上に描かれるのを防ぐ

通常モデル(addboxとか)とXモデルでレンダリングの動作が違うので
一緒に使う場合少し面倒・・・
hgdraw使用時にeventや自動移動の処理がされるからやっかい(せっかくhgview命令付けたんだからせめて全てのevent停止ぐらいあれば・・・)
後、アニメ付きxオブジェクトもhgdraw時にアニメーションするならやっかいだな・・・(まだ確かめていない)



saracena

リンク

2013/12/23(Mon) 07:20:36|NO.58849

hgprm 1,0
これで event 停止できませんか?



暇人

リンク

2013/12/23(Mon) 17:14:21|NO.58855

おぉ、こんな命令あったとは・・・
どの命令にも関連命令に指定されて無いし
命令の説明文にeventやhgdraw(この命令で時間が進んでるのに・・・)も書かれてないんじゃ
ヘルプに全然出ない訳だ・・・

これでミラー処理とか影処理での問題が一つ解決しました

ちょっとNO.58847の方法に変化があったので修正
>(この時オブジェクトを黒くしたいのでmodelshadeを使ってライト色で色を変えられるようにする)
α値のみのレンダリングを可能にする設定でhgdrawが有効なのでライト設定を変える必要が無くなった
半透明のオブジェクトは影が半透明になる副作用付き(影の色はテクスチャ初期化時の色に出来る)

>この時に深度値比較を有効にする事で影のポリゴンを後から描画してもオブジェクトの上に描かれるのを防ぐ
光源が地面から遠いと深度の精度が落ちるので陰が一部隠れる・・・
地上を深度無視の設定にするか、地上と影を付けるオブジェクトを別けて描画する必要がある



暇人

リンク

2013/12/24(Tue) 22:43:04|NO.58870

影を付けたいオブジェクト個別にレンダリング用テクスチャを用意する必要があるけど
meshmapの起伏に対応できて、光源はオブジェクトが入る範囲で良いので
NO.58843のより影解像度を一定にしかも高解像度にしやすい感じにのが出来た
http://ux.getuploader.com/himajin130414/download/3/hgimg3STANDshadow.PNG
問題はNO.58843のより面倒な事・・・
影を付けたいオブジェクト以外を非表示にして一つ一つ影をレンダリングする必要がある
実際に影を描画するのも一つ一つ処理
\sample\hgimg3meshmap4.hsp
を実行してみれば分かるけど影が起伏に一部隠れる事がある(板ポリを傾けてるだけだから仕方ないけど)
後、後から影を描画してる構造上半透明オブジェクトより後に影が描画されるため前後関係がおかしくなるか影が消える
これはNO.58843のも同じ



暇人

リンク

2013/12/24(Tue) 22:50:03|NO.58871

まぁ、影は水平の地面に落としたのをポリゴンで傾けてるだけなので
傾斜に落ちる本物の影とはだいぶ違うけど・・・



暇人

リンク

2014/1/22(Wed) 00:29:41|NO.59455

地面より高い所と壁に影を映してみた
http://ux.getuploader.com/himajin130414/download/4/hgimg3shadow.PNG
光源は固定(光源移動したら再度ポリゴンの座標UVの再設定すれば移動もできるが・・・)
壁用に一枚レンダリングできるテクスチャが必要
影を半透明に出来る


壁は別処理になるから
とりあえず平らな地面に影を落とすモジュールでも作ってみるか・・・



暇人

リンク

2014/2/5(Wed) 23:56:37|NO.59706

固定物限定のシャドウボウリュームとシャドウマップもどきを合わせてみた
http://ux.getuploader.com/himajin130414/download/6/ShadowVolume.PNG
固定のオブジェクト(光源固定で立方体程度の簡単な形状に対してだが)のシャドウボウリュームを作って
裏表で2回レンダリング(DX8には両面ステンシルが無いみたいなので)してステンシル値を書き換えて
ステンシルマスクを作って画面全体を半透明テクチャで描画
動くものはNO.58843の方法で影テクスチャにして
ステンシルテストでシャドウボウリュームの影の中は影テクスチャの描画を除外

シャドウボウリュームなので起伏のある地形やオブジェクトにたいして影を落とせる


モジュール化は面倒そう・・・
半透明オブジェクトの扱いがめんどい・・・



ONION software Copyright 1997-2023(c) All rights reserved.