約 4,189,848 件
https://w.atwiki.jp/gamemusicbest100/pages/314.html
シェイド 日本で活動しているゲーム音楽作曲家であり、アリスソフトに所属していた。 氏の担当する作品は、プレイヤーが限定されがちなアダルトゲームの音楽でありながら、音楽そのものの人気は非常に高い。 「ゲームはしていない(できない)が曲は好き」というゲーム音楽愛好家も多い。 高校時代にバンド活動をしていたことがあり、その影響からか作曲する音楽は非常にスピーディで攻撃的なものが多い。 2011年頃からは年を重ねたこともあってか考え方が変わり、後ろで支える曲調を意識するようにしているとのこと(『ランス・クエスト』のライナーノーツより)。 作曲の特徴の一つとして「転調」が挙げられる。『ランス5D』の「Trns Beat?」などは分かりやすいShade節といえるだろう。 曲の後半やサビに入るとそれまでの曲調が一変し、それまでとは大きく異なる面を見せる為、強く印象に残りやすい。 …もっとも、ゲーム内だと転調に入る前に曲が終わることが多いため、じっくり聴かないと知らないままの場合も多い。 体調面の都合により、2012年2月20日付けでアリスソフトを退社。今後はフリーで活動するとのこと。 2013年2月発売の『パステルチャイム3』が退社後初の担当作品となる。 また1曲のみだが、2013年発売の『エスカ&ロジーのアトリエ』に一般ゲーム初の楽曲提供を行っている。 ネットゲームにおいても初の楽曲提供をしている。2014年にDMM.comの18禁ネトゲである『グランドクエスト』の楽曲担当となっている。 (その繋がりがあるのか、このネットゲームはアリスソフトとコラボをしたこともある) またニコニコ動画で『艦隊これくしょん』の夜戦BGMなどをアレンジし、同人CDとして販売していたりもする。 作曲作品の一例(大半がR18対象のゲームなので未成年の方は注意) Ranceシリーズ鬼畜王ランス ランス5D -ひとりぼっちの女の子- 戦国ランス 戦国ランス~三匹が斬ったり突いたり燃やしたり -slash! thrust! burn!- ランス・クエスト / マグナム 闘神都市シリーズ闘神都市II(Win版編曲) 闘神都市II そして、それから…(追加曲) 闘神都市III 大シリーズ(地域制圧SLG)大番長 -Big Bang Age- 大帝国 ぱすてるチャイムシリーズぱすてるチャイム -恋のスキルアップ- ぱすてるチャイムContinue パステルチャイム3 バインドシーカー 超昂閃忍ハルカ 低価格帯ゲーム妻しぼり 妻みぐい2 ばにしゅ! ~おっぱいの消えた王国~ 僕だけの保健室 ままにょにょ ももいろガーディアン Only You -世紀末のジュリエット達- / Only you -リ・クルス- 学園KING 夜が来る! -Square of the Moon- アトラク=ナクア ママトト-a record of war- アリスの館3 アリス2010 母娘乱館 エスカ&ロジーのアトリエ ~黄昏の空の錬金術士~ グランドクエスト 魔神少女 エピソード2 -願いへの代価- (ロイヤリティフリー素材) ブレイブダンジョン アズールレーン (追加曲) Lanota 東方幻想麻雀(NS) (編曲) ラクガキ キングダム (キャラクターソング) DemonsRoots 代表的な曲 Rough Edge (鬼畜王ランス) Ontology (鬼畜王ランス) Trns Beat? (ランス5D -ひとりぼっちの女の子-) All Your Power (ランス5D -ひとりぼっちの女の子-) Sengoku Rance (戦国ランス) Sengoku World(v2) (戦国ランス) Advance On(v2) (戦国ランス) Ontlogy (戦国ランス) Rebirth the edge (戦国ランス) 塔探索もっと登る (ランス・クエスト) 戦闘アム (ランス・クエスト マグナム) Atlach_nacha ~Going on~ (アトラク=ナクア) Running to the straight (ママトト-a record of war-) A night come s! (夜が来る! -Square of the Moon-) Fighting under the blue moon (夜が来る! -Square of the Moon-) Dash! To Battle ii (大番長 -Big Bang Age-) 一斉射撃-波 (大帝国) get the regret over (闘神都市III) Sky of Twilight (エスカ&ロジーのアトリエ ~黄昏の空の錬金術士~) 青き自由のために (アズールレーン) Ground Dasher (DemonsRoots) BLOSSOM (DemonsRoots) ENDRESS ENGRAVE (DemonsRoots) 関連項目 みんなで決めるアリスソフト音楽ベスト100 外部リンク @Shade0123
https://w.atwiki.jp/terragen/pages/113.html
Node Type Other Surface Shader ノード説明と目的 『Water Shader』は、波形のディスプレースメント、反射率、透明度を含め、Terragenのサーフェスにリアルな水面効果を与えるよう特別に設計されています。特定の水面の現象をリアルにシミュレートする専用的なコントロールが備わっています。例えば"wind patchiness(風が水面に当たる事で出来る斑)"等。 『Water shade』の"Input node"に任意のシェーダを関連付ける事で、下記設定に取り変わって『Power Fractal Shader』でディスプレースメントをコントロールしたり、『Heightfield Shader』や『Image Map Shader』ではより明確な水の形状をコントロールする事が出来る場合があります。また、重要な機能として『Default Shader』を使って水の色をコントロールする事も出来ます。 設定 Wavesタブ Rouhness 波の荒さ 水面の細かな波による粗さを設定します。数値が高い程水面は粗くなります。 Wave scale 波の最大高 波の大きさは、「Wave scale」と「Smallest scale」の平均で生み出されます。高低差のある波は、この数値の差を広げるほど大きくなります。逆に、差が0の時、水面は波立ちません。波の形状が単調であればこれらの数値を増やして下さい。ただしレンダリング時間を増やすため、シーンの遠くの眺めの場合は数値を減らして下さい。 Smallest scale 波の最小高 Wind patch effect 風当たり効果 自然界では、風を含むいくつかの要因による大きな水域の波の構造や全体的な水の滑らかさに変化があります。この設定で風の当たった水面をシミュレートします。風を受けた水面は平滑化され、周辺は波立ちます。 Wind patch size 風当たりの高さ 風の当たった水面の波の大きさを設定します。風の当たっていないところには反映されません。 Wind patch sharpness 風当たりの波状効果 これは、隣り合う風波との境界をどれだけシャープに、または馴染ませるかを設定します。これは水面全範囲に反映されます。 Seed シード この数値ごとにパラメータが振り分けられるので、同じ数値を入れる事で同じ形を作る事も出来ます。 Randome Seed ランダムシード シードの数をランダムに発生させます。 Reflectionタブ 水面の透明度、光の反射について設定します。 Master reflectivity 全体的な反射率 水面の反射率が高いほど、環境光の影響を受けて全体が明るくなります。 Index of refraction 屈折率 水の絶対屈折度1.333を以上を設定します(絶対数値以下の設定は不具合を生じます)。画像の赤ラインは屈折度1.333を基準にした差異を表します。 Horizon shift 水平線の変化 これは、より遠い反射面の大なり小なりの表面粗さの集合効果のために、反射における「変動」をシミュレートするために使用される特殊な機能です。本来、遠くの反射の角度を水平線に近づけたり遠ざけたりします。 Highlight intensity 水面に反射するハイライトの強さ Caustic intensity コースティクス強度 オブジェクトの内部で光が跳ね返る事を可能にする重要な部分がこのパラメータです。コースティクスは、透明と反射を扱う『Glass shader』と『Water shader』のサーフェスマテリアルに光が入った場合に、光が集積する効果です。パストレースによってレンダリングが可能となります。0は効果を無効にします。有効にする場合は、デフォルトの1のままにします。ただし、高密度のボリューム(大量のサブサーフェス・スキャッタリング)は、照明のほとんどがSSSによるものであり、個別に計算されるため、これは必要ありません。 Min highlight spread ハイライトの広がる最小範囲 Sub-surfaceタブ 水面下の要素を設定しま。 Transparency 透明度 水面下の透明度を設定します。数値が高いほど、透明度が高くなります。(Decay distanceは50で固定)透明度は、オブジェクト全体の透明度ではなく、サーフェスの透明度を制御します。サブサーフェススキャッタリングが何かを行う前に、光はサーフェスを通過する必要があるため、1の値が適しています。透明度を上げるとオブジェクトがより明るくなりますので、今度は"Highlight intensity"を下げる必要があります。 Decay distance 透明度の維持距離 数値が高いほど、より深くまで透明度を維持します。(Transparencyは0.75で固定) Decay tint 透明の色合い 0=黒を基調として、任意の色に白を加えた水深の色を表現します。このスライダーは任意で設定した色の明度を調整するもので、水中の色は直接カラーパレットなどを使って、エメラルドグリーンやコバルトブルーなどに設定します。 Volume density 密度 水面下の現象に任意の加工を行う事が出来ます。未設定から、水中を濁らせたり、functionで『Power fractal shader』等を使って水面を泡立てたりする事が出来ます。 Volume colour カラー Volume density function 密度関数 Volume colour function カラー関数 Evaluate colour function volumetrically (without UVs) カラー関数の容積を算出(UVsを除いて) チェック時、シェーダは各散布点で3Dワールド空間で算出されます。デフォルトはオフです。これは、サーフェスのテクスチャを算出し、UVマッピングされたテクスチャを使用出来るようにします。 Lighting method in Std 標準の照明方式 Pseudo-volumetric(疑似ボリューメトリック) Lighting method in PT パストレースの照明方式 Hard surface approximation(硬質表面の近似) Subsurface scatter towards nomal(法線に向かったSSS) Subsurface scatter in all directions(全方位にSSS)
https://w.atwiki.jp/terragen/pages/182.html
Node Type Colour Shader ノード説明と目的 『Contour Shader』は、高度に応じてサーフェスに輪郭を作成するために使用する事が出来ます。これはマップ上で見る等高線と同様です。 注目すべきは、『Contour Shader』が実際の等高線の線を作成するのではなく、高度に基づいて色の帯を生成する事です。これは、あまり傾斜していないサーフェスの部分では輪郭が広くなり、より急勾配な部分では狭くなる事を意味します。 シェーダは、本線の輪郭と中間の輪郭の両方を作成する事が出来ます。中間の輪郭は、本線の輪郭の間に等間隔に配置されます。本線の輪郭、例えば100m間隔の輪郭が異なる色に着色されたり、中間の輪郭よりも太くなったりする事はごく当たり前です。 『Contour Shader』は、1色で本線の輪郭を生成し、本線とは別色で中間の輪郭を生成するように設定されています。たった1種類の輪郭で外観を与えたい場合はいくつかの方法があります。最も簡単な方法は、"Number of intermediate contours"の値を0に設定する事です。もう1つの方法は、中間の輪郭設定で"Thickness"と"Colour"パラメータを設定して、本線の輪郭設定と同一にする事です。 『Contour Shader』は、地形上に地図のような輪郭を作成する事に限定されません。他の種類のサーフェスシェーダにも興味深い効果を与えるために使用する事が出来ます。 設定 Spacing 間隔 これは、本線の輪郭間の高度差(間隔)を設定します。 Thickness 線の太さ 本線の輪郭の線の太さを設定します。 Colour 線の色 本線の輪郭の線の色を設定します。 Number of intermediate contours 中間の輪郭の数 このパラメータで中間の輪郭の数を設定します。この設定を変更すると、下の"Spacing"設定が、本線の輪郭間隔と中間の輪郭の数に基づいて適切な値で更新されます。ここで設定する数は線の本数ではなく、線と線の間の数を表します。 Spacing 間隔 これは、中間の輪郭間の高度差(間隔)を設定します。この設定を変更すると、上の"Number of intermediate contours"の設定は、本線の輪郭間隔と中間の輪郭間隔に基づいて適切な値に更新され、互いのパラメータに依存します。 Thickness 線の太さ 中間の輪郭の線の太さを設定します。 Colour 線の色 中間の輪郭の線の色を設定します。 Smooth edges 線の滑らかさ チェック時、輪郭線の縁が滑らかになります。これは、主にアンチエイリアスやガタガタな線を防ぐのに役立ちますが、輪郭の縁にぼかし効果を与えるためにも使用する事が出来ます。 Smoothing distance 滑らか度合い これは輪郭線の縁に沿って平滑化される度合いを設定します。値が大きい程凹凸の無い線が描かれますが、度合いが過ぎると痩せぼそった線になります。 Base altitude 基底高度 サーフェスの高度範囲をコントロールします。このパラメータで輪郭効果の高度オフセット値を設定します。 Use Y for altitude 高度にY軸を使用 地形以外の、例えばオブジェクトのサーフェスに使用する場合は、このパラメータにチェックを入れる事でY軸を高度として輪郭線を描きます。
https://w.atwiki.jp/terragen/pages/206.html
Node Type Displacement Shaders ノード説明と目的 『Fake Stones Shader』は、個々の石や岩に似たサーフェス変位を作成します。サーフェスシェーダとして制限されない限り全域を適用するプロシージャルである事を除いて、効果は『Rock』のポピュレーションに類似しています。大きさと密度、形状、色をコントロールする事が出来ます。『Fake Stones Shader』は、内部の ボロノイ ベースのディスプレースメント関数を使って岩の形状を作成します。 設定 Seed シード 模造石の散布パターンをコントロールします。この数値ごとにパラメータが振り分けられるので、同じ数値を入れる事で同じ形を作る事も出来ます。 Surface shader サーフェスレイヤー 生成された模造石の表層に、例えば画像から取り込んだディスプレースメント効果を与える事が出来ます。赤枠のパターン画像を読込んで、模造石の表層にディスプレースメント効果を与えたサンプル画像 Scale/Densityタブ Stone scale 石の大きさ 生成する石の大きさをコントロールします。単位はメートル。 Stone density 石の密度 任意の範囲において、模造石の被覆率をコントロールします。数値の範囲は(0-1)で、1が100%で模造石が隙間なく敷き詰められます。 Vary density 密度の変更 チェックを入れる事で、石の密度の変化をコントロールします。"Stone density"では、密集度を割合でコントロールするだけでしたが、このパラメータは、変化の度合いを(0-1)で設定し、以下のパラメータで密度の詳細設定を行います。 Density seed 密度シード "Seed"で設定された模造石の散布パターン配置はそのままに、増減させる模造石のパターンをコントロールします。 Density variation scale 密度の変化量 変化させる密度の変化量をコントロールします。数値が大きい程、変化量も多くなります。 Mask by shader シェーダでマスク処理 チェック時、指定されたシェーダまたはFunctionノードを使用してこのシェーダをブレンド(マスク)します。指定されたシェーダまたはFunctionがこのシェーダのマスクになります。指定されたシェイダーによって生成された拡散色またはブレンド関数によって生成された値は、ブレンド量として解釈されます。1は100%のブレンド量であり、0はブレンドしません。これらの量は、このシェーダの色と変位が入力にどれだけ適用されるかを決定します。0以下または1以上の値が使用可能となります。旧パラメータ名は"Blend by shader"と呼ばれている通り、抽出した特定のエリアに対して覆い隠したり、強調させたり、あるいは他シェーダによって効果のブレンドを行います。便利なマスクとして、『Serface leyer』ノードは、"Breakup"や高度、傾斜制限を使って模造石の生成エリアをコントロールする事が可能です。 Fit mask to this マスクに適合 チェック時、指定されたシェーダに、このシェーダのテクスチャ空間に再マッピングするための異なるテクスチャ座標が与えられます。すべてのシェーダがテクスチャ座標を使用するわけではないので、効果の無い場合もあります。実際には、マスクシェーダの入力を、マスクシェーダと同じスケールまたはエリアに拡大縮小する事を意図しています。常用する設定ではないですが、例えば、マスクシェーダとして『Image map shader』(範囲内を覆うなど)を使用する場合には有用かもしれませんが、マスクシェーダとしての別の処理上のプロシージャル入力としての用途には不適切です。 Invert mask マスクの反転 指定したマスク処理を行う特定の範囲を反転します。 Mask as stone density 石の密度としたマスク チェックの有無で、マスクの境界付近の模造石の処理が異なります。チェックが入っている場合、マスクの境界部分に差し掛かる模造石は、削除またははみ出して残存しますが、チェックを外すとマスクの境界で断ち切られます。そのため、模造石はマスクの境界ラインに沿った断面を残します。 Shapeタブ Stone tallness 石の背丈 模造石の背丈をコントロールします。 Pancake effect 平べったい効果 模造石を上から踏み潰したような効果を与えます。数値が高い程模造石は押しつ潰され、上部が入らに広がります。 Only displace upwards 上方のみ変位 チェック時、模造石の上方に対してのみ、"Surface shader"で関連付けたディスプレースメント効果を与えます。未チェックの場合、模造石の全方位に変位を施します。 Colourタブ Apply colour 色の適用 模造石に色情報を適用します。模造石への着色は、【Terrain】グループでは無効です。【Shader】グループでこのノードを使用した時に有効となります。 Diffuse colour 拡散色 環境光が模造石に当たった時の拡散反射の色です。 Colour variation 色調補正 チェック時、RGBの色調補正を適用します。 Variation in red Redの変化量 RGBのRed、Green、Blueの量をコントロールします。値の範囲は(0-1)、これは基本的に0〜100%の変動です。 Variation in green Greenの変化量 Variation in blue Blueの変化量 Functionsタブ Scale function スケール関数 スケール関数/トールネス関数が定数の場合にのみ有効です。マスタースケールの乗数として機能する単一のノードでさまざまなレイヤーをコントロールする事が出来るため、ネットワーク内のすべての石のサイズを変更する場合に便利です。これは、異なるシーン間でノードクリップを共有する時に有用です。ここで設定されたノードの出力値は定数値を持つ必要があります。地形のさまざまな箇所で石の大きさを変える事が出来るようには設計されていません。スケール関数/トールネス関数はテクスチャ空間のサイズを変更する事で機能するため、サイズに違いがあると模造石を歪める場合があります。これは、同時に多数のシェーダのスケールを全体的に変更するための便利な機能ですが、慎重に使用する必要があります。それぞれの関数は別々のノードでコントロールが可能です。使用例としては『Constant Scalar』や『Constant Vector』など。未来のバージョンでは仕様変更になる可能性があります。 Tallness function トールネス関数
https://w.atwiki.jp/dominions3/pages/81.html
Summon Shades 腕力を奪い取る攻撃を行うShadeを4体召喚します Summon Shades ジェム 疲労 内部ID 426 5 使用 水中判定 効果 効果量 儀式 水中可 Summon 主属性 主Lv 効果発生数 射程距離 Death 2 4 副属性 副Lv 効果範囲 命中補正 - 0 0 領域 Lv 防御判定 抵抗判定 Conjuration 2 専用国家 ゲーム内説明文 The caster summons four Shades to serve him. Shades are dark spirits from the Shade Lands between the land of the living and the Underworld. They are ethereal and able to drain the strength of living beings. 和訳 術者は、4体のShadeに服従を求めます。Shadeは、現世と冥界の狭間にある影の世界に住む闇の魂です。彼らは霊的な存在で、生物の力を奪い取ることができます。 注記 Shade Landsの原住民、Shadeの召喚魔法。Late AgeのErmorなどで見られるShadowとは似て異なる存在で、こちらのほうが総じて強力(Shadowは冥界に行く途中、Shade Landsで迷ってしまった死者の霊)。 Shadeは防御無視で抵抗可能な攻撃を行い、追加で累積可能な腕力低下の効果を与える。魔法抵抗が高ければ怖くないとはいえ、一般的な兵にとっては相当な脅威になる。 またEtherealを持つので一般的な攻撃は高確率で回避し、HPが10で防御も0というわりにはしぶとく感じられる。Shade自身は魔法武器扱いの攻撃をするのでEtherealは怖くない。 下等とはいえ自我を持つ霊体だけあって魔法抵抗はそれなり。アンデッドらしく冷気と毒を無効化する能力もある。また霊体でも珍しい完璧な水陸両用であるため、水中戦でも能力が低下しない。 敵に回した際の対策は、序盤であればBanishmentが無難。冷気か毒以外の攻撃魔法もよく通る。HPが低いため、広範囲攻撃を乱射すれば簡単に駆逐できるだろう。 ごく少数であれば普通に殴り倒してもいいが、ある程度まとまった数が居る場合は危険が大きい。防御無視の攻撃は重歩兵でも容易に殺害してしまう。まだ回避率が高く数が出易い軽歩兵の大群のほうが相手をし易い。 なお、彼らの攻撃で受けた腕力へのダメージは戦闘後も回復せず、それどころか神やImmortal持ちが死んで復活してすら残る様子。魔法抵抗が高ければなかなか影響されないが、大群に向けて単騎で斬り込む際は心に留めておきたい。 そのままでも十分役に立つが、アンデッドでDarknessの影響は受けず、Dark Powerを持つためむしろ強くなるという特性もある。攻撃の命中率が大幅に上がるので、騎士のような厄介な相手にさえ甚大な被害を与えられるようになる。 世界呪附のUtterdarkが発動している間は常時Darknessの恩恵を受けられるため、彼らにとっては天国と化す。Utterdarkによる自動襲撃でもShadeがたびたび姿を見せるので、かなり面倒な相手になる。 ただしその補正値の高さはSolar Brillianceへの弱さにも繋がる。さほど高くもない魔法抵抗もあって、大群ですら1戦で壊滅することもあり得る。星魔法を得意とする国と戦う際は覚悟が必要だろう。 コメント 名前 コメント
https://w.atwiki.jp/terragen/pages/227.html
Node Type Other Shader ノード説明と目的 『Merge Shader』では、マスクとして機能する3番目のシェーダの入力に基づいて、2つの別々のシェーダ(またはシェーダネットワーク全体)をマージする事が出来ます。各入力シェーダの寄与量とマージに使用する方法をコントロールする事が出来ます。 設定 Shader A シェーダ A マージするシェーダ、またはその上流のすべてのシェーダを含みます。 Mix controlタブ Mix to A Aの混合比 "Shader A"の混合率をコントロールします。0の場合、シェーダ Aはマージされません。0.5の場合、インプットシェーダとシェーダ Aの割合が半分づつになります。1の場合、インプットシェーダはマージされません。 Mix controller 混合のコントロール 主にマージの範囲などに使うマスクを設定します。例えば『Simple shape shader』や『Painted shader』など。現行では、このフィールドに設定されたノードを無効("Enable"のチェックを外す)にしても誤動作を与えるため、コントロールしない場合はノードネットワークを切断("Mix controller"のフィールドを空白にする)して下さい。現在このコントロールに関する作動は調査中。 Choose by altitude 高度の選択 マージするインプットシェーダとシェーダ Aの基となる高度を下記から選択します -All 全高度を基にマージを行います。例えば100mの高度と200mの高度の山を、"Mix to A"が0.5でマージした場合、50mと100mの高度の山となります。-Highest (raise) 最高高度を基にマージを行います。例えば100mの高度と200mの高度の山を、"Mix to A"が0.5でマージした場合、100mの高度と200mの高度の山となります。-Lowest (cut away) 最低高度を基にマージを行います。海抜-50mと海抜0mの地形を、"Mix to A"が0.5でマージした場合、海抜-25mになります。 Texture space テクスチャ空間 このパラメータは2Dを扱うため、オーバーハングなど底辺の形状はそのままに、上部だけが突起したような形状などには対応出来ません。適用するテクスチャ空間を下記から選択します -Current texture space (most uses) 現在のテクスチャ空間に適用します。主な使用でこれを選択します。-Undisplaced space (for alignment) ディスプレースメントで形状が変わる前の非配置スペースに適用します。位置を合わせる場合に最適です。-Legacy 不明パラメータ Merge mode マージを適用する方法をコントロールします。ここではマージモードの効果を以下のサンプルで行います。「Difference」以降についてのディスプレースメントのマージモードは「Mix」で行っております。"Mix to A"は0.5。 Merge colour カラーをマージ チェック時、カラーのマージを有効にします。 Colour merge mode カラーのマージモード マージの方法を以下から選択します。-Mix (Normal) 混合(通常)はインプットシェーダとシェーダ Aを"Mix to A"で設定した寄与率でマージします。互いにディスプレースメント(標高)とカラー濃度が通常の半分になります。-Add インプットシェーダに対して寄与率0.5のシェーダAを加算するので、シェーダ Aのみディスプレースメントとカラーが通常の半分になります。-Subtract (Input - A) インプットシェーダをシェーダ Aで減算します。-Subtract (A - Input) シェーダ Aをインプットシェーダで減算します。-Difference インプットシェーダに対するシェーダ Aの差をコントロールします。-Multiply (Input * A's diffuse colour) インプットシェーダに対しててシェーダ Aの拡散色を乗算します。-Multiply (A * input's diffuse colour) シェーダ Aに対してインプットシェーダの拡散色を乗算します。-Screen by A's fiffuse colour シェーダ Aの拡散色を投影します。「Multiply」が色のCMYKに対し、「Screen」は光のRGBの効果を与えます。-Screen by Input's fiffuse colour インプットシェーダの拡散色を投影します。 Merge displacement ディスプレースメントをマージ チェック時、ディスプレースメントのマージを有効にします。 Displacement merge mode ディスプレースメントのマージモード マージの方法を選択します。("Colour merge mode"と同様)
https://w.atwiki.jp/terragen/pages/199.html
Node Type Colour Shader ノード説明と目的 『Shader array』は、シェーダの配列またはグリッド(格子)を作成します。ポピュレーションのようなランダム配置ではなく、規則的な間隔を空けて配置されたグリッド上で動作しますが、シェーダ用のポピュレーションと捉えても差し支えありません。 『Shader array』は、1つのシェーダを取り入れ、異なる位置に複数回シェーダを複製します。 『Shader array』は、3Dプレビューの中に非常に多くの情報を示します。配列における各シェーダのインスタンスの位置にオレンジ色の点を描画します。その点は配列のエリアをボックスで囲みます。"Limit effect are"にチェックを入れた場合、配列エリアに"Boundary padding"を加えた広さを示す破線を描画されます。デフォルトでは、『Shader array』は配列の各隅にシェーダインスタンスを表示します。すべてのシェーダインスタンスをプレビューする事が出来ますが、これは3Dプレビューが遅くなり操作し辛くなります。 下の画像は、"Row(行)"と"Columns(列)"の関係と、『Shader array』の全体的なレイアウトを示しています。この配列は3行4列です。シェーダはオレンジ色の点で表されます。 現在、『Shader array』は、垂直方向に真っすぐの"Plan Y"投影にのみ適用されます。 動作の諸注意 『Shader array』は、特に多数の行と列がある場合、速度が遅くなる可能性があります。10×10の配列には100個のシェーダがあります。100×100の配列になると、10,000個分ものシェーダ計算をする事になります。最も効率的なシェーダは、『Simple shape shader』や『Image map shader』のように効果がエリア内に制限されたシェーダです。動作を向上するために、"Limit effect area"や"Boundary padding"の設定を使って、『Shader array』の効果範囲を制限する事も出来ます。 サンプルファイル このプロジェクトファイルは、『Shader array』を使用して『Simple shape shader』のグリッドを作成するサンプルです。プロジェクトファイルは右クリック(Windows)"で名前を付けてリンク先を保存"、またはOptionキー(Mac)を押して直接ダウンロードして下さい。 Shader_array_example.tgd 設定 Position 位置 『Shader array』ノードの配列を設置する左下角の座標を設定します。 Rotation 回転 このパラメータは、左下角を基準に配列の回転角度を設定します。回転は、Y(垂直)軸を中心にのみ回転する事が出来ます。 Number of columns 列数 配列の列数を設定します。 Column spacing 列間 列間の距離を設定します。単位はメートル。 Number of rows 行数 配列の行数を設定します。 Row spacing 行間の距離を設定します。単位はメートル。 Limit effect area 効果エリアの制限 チェック時、シェーダの効果は配列で囲まれたエリア外には適用されません。"Boundary padding"設定を使用して、このエリアを拡張する事が出来ます。 Boundary padding 境界の拡張 この設定は、"Limit effect area"がチェック時、配列の境界付近のエリアを拡張します。これは、下の画像のように配列が任意のエリアからはみ出さないようにコントロールする場合に便利です。基本的には、境界の拡張部分一杯まで配列を埋め込みます。左画像に比べて右画像は、『Simple shape shader』の円の大きさ1000に比べて100の値のため、制限エリアから100メートルを超える円は切り取られてしまいます。(画像はレンダリング結果画像を3Dプレビュー画像の上に半透明で重ねた加工画像です。) Shader シェーダ 配列に使用するシェーダを設定します。 Use shader colour for displacement ディスプレースメントにシェーダのカラーを使用 チェック時、『Shader array』は関連付けたシェーダのディスプレースメント情報を使用するのではなく、カラー情報を使用してディスプレースメントを生成します。これは、関連付けたシェーダが実際にディスプレースメント処理しない場合に特に便利です。 Displacement direction ディスプレースメント方向 ディスプレースメント方向を選択します。右のポップアップは、ディスプレースメントが適用される方向を選択する事が出来ます。ポップアップリスト内の "(requires computed normal)"オプションは、ノードネットワーク上で接続された『Compute Terrain』または『Compute Normal』が適切に動作する事を必要とします -Along vertical ディスプレースメントは、変位を適用する元となるオブジェクト(すなわち、惑星またはモデル)の法線に沿って生じます(デフォルトの場合、『Planet』の平面上からの変位なので"垂直"に生じます)。-Along normal ディスプレースメントは現在のシェーダの法線に沿って生じます。-Vertical only (requires computed normal) ディスプレースメントは、元となるオブジェクト(すなわち、惑星またはモデル)の法線に沿ってのみ生じます。ディスプレースメントは、オブジェクト法線(プリミティブオブジェクト、デフォルトでは『Planet』オブジェクトの法線)とサーフェス法線(作成したサーフェスによって生成された法線)の差でスケーリングされます。ディスプレースメントは、法線間の角度が90度に近づくにつれて減少します。-Lateral only (requires computed normal) ディスプレースメントは、側面の平面内でのみ、すなわち下層のオブジェクトの法線に対して直角にのみ生じます。-Lateral normalized (requires computed normal) これは上記と同じですが、法線は統一化されています(長さが1になるようにスケーリングされます)。 Displacement amplitude ディスプレースメント振幅 この値でディスプレースメントの振幅を決定します。 Displacement offset ディスプレースメントのオフセット この値は、"Displacement multiplier"パラメータで乗算された後に、ディスプレースメントの入力値に加算されます。これにより、ディスプレースメント方向に沿った設定量だけディスプレースメントをオフセットする効果が生じます。正の値はディスプレースメントを押し出して、それが台座に座っているかのように見えます。負の値は、ディスプレイスメントが表層の中に沈みます。それはディスプレースメントを逆にするのではなく、むしろ表層に穴を作り、穴の底にディスプレースメントを適用する事に近いです。 Preview all instances (slow) すべてのインスタンスをプレビュー表示 『Shader array』のデフォルトの動作は、グリッドの四隅のみシェーダインスタンスをプレビュー表示します。つまり、最大で4つのインスタンスが表示されます。これがチェックされている場合、『Shader array』は3Dプレビューのグリッド内にすべてのシェーダインスタンスを表示します。これは、特に行数と列数が多い場合、処理が遅くなる可能性があります。この画像の場合、地形の配列はすべてのシェーダインスタンスのプレビューを表示し、テクスチャの配列はデフォルトの四隅にのみシェーダインスタンスのプレビューを表示しています。
https://w.atwiki.jp/riftinfo/pages/243.html
*コレクション名 Level アーティファクト名 座標 補足 Abyssal Summoning Implements 40 Grim Totem Grimoire Ritual Chest Ritual Charcoal Planar Displacer 6392,1228 木 Corrupted Source Brother Jebiah 40 Brand of the Vigil 5940,2202 テント内木箱の陰 Leather Straps Water Soaked Gag Gears for the Rack 6422,1252 銅像のかかと付近 Creative Writing Journal 6124,1400 Sister's Doll Buccaneer Articles 40 Eyepatch of Kane Wavestarr 7319,1771 木の側 地面 Sextant of Clever Ned Hook of Fairn the Ferocious Eyepatch of Cara Swelldancer Hat and Scimitar of Estrael Pegleg of Black Betty Fae Dust 40 Powder of Enchantment 6180,2025 石塀と木の間 Powder of Illusion 5912,21875824,2288 瓦礫の間積まれた岩の上 Powder of Distrust Powder of Conflagration Powder of Growth 6692,1534 岩の上 Fezziled's 100 Ways to Cook a Fae 40 Crispy Fae Wings Recipe Pickled Satyr Hooves Recipe 5840,1973 水たまり Bogling Ear Stew Recipe 5896,2255 Candied Fae Toes Recipe Shambler Flank Recipe 4679,1536 Crispy Fried Fae Gizzard Recipe Gorvaht 40 Broken Pan Pipes Skull Etchings 6433,1214 Runebound Prison of Estrode 6908,16355680,2309 岩の裏側地面 Hammerknell 40 Relief Art Runebound Clockwork Door Fragment Living Brasswork 6284,2008 Ravings of Doom Maps to Interior Harbor Intact Runebound Vessels 40 Rune of Moisture 5567,1992 木の根元 Rune of Light Rune of Heat Rune of Fragrance Rune of Motion 5940,2202 テント内木箱の陰 Rune of Endurance Last Days of Hammerknell 40 The Last Days of Hammerknell - Page 1 6359,1352 Warden Barkevの隣 The Last Days of Hammerknell - Page 2 The Last Days of Hammerknell - Page 3 The Last Days of Hammerknell - Page 4 5824,2288 積まれた岩の上 Moonshade Crofter Deeds 40 Jerns Family Deed Polski Family Deed Montani Family Deed 6268,13857354,1740 倒れた柱の陰池の中 Proper Parenting Techniques By Eustace Green 40 If They Can Stand, They Can Harvest 5684,1663 No Child Services on the Frontier 5584,2176 岩の間 A Changeling Can Pick Beans Too Kids Need to Stand Up to Faeries 5498,2246 Learn to Walk Home in the Dark Crying Babies Mark Truffle Locations 5755,17756579,1214 Rune King Molinar 40 Royal Griffon Crest Molinar Guide to Runebinding Runebound Crown Living Triptych of Molinar Glory Collection of Unsent Edicts 7207,1485 Tidebound Stone of Whispers Runebound Accessories 40 Self Combing Hairpin 6370,2074 キノコ Everhot Portable Forge Amazing Hammer of Convenient Use 5698,19736637,1515 Irresistible Trap Mug of Plenty Self Replicating Ring Story of Brother Damon 40 The Story of Brother Damon - Page 1 The Story of Brother Damon - Page 2 The Story of Brother Damon - Page 3 The Story of Brother Damon - Page 4 6588,1223 檻の中 The Story of Brother Damon - Page 5 The Story of Brother Damon - Page 6 The Dwarves of Moonshade 40 Sealed Spirit Runebound Fatestone Ring of Dreams 6578,1214 荷物置場 Hair of Gold Three Springs 40 Recruitment Poster Pilgrim Garb Councilmen Insignia Ship Schedule Grain Shipment Spyglass Tidelord Brenin 40 Azure Blade Contract Charm of Clear Thoughts Skin Sewn Mask 6428,1337 噴水の中 Meridian Cube of Unmaking Artifact of Ancient Madness
https://w.atwiki.jp/darui_program/pages/251.html
今回は、もっとも基本的な影生成を行います。 深度バッファを使った、影生成の中でも比較的簡単なものです。 深度値を比較して、影かどうか比較するだけなので、 影の境界がはっきりとしており、深度バッファの解像度によってはシャギーが出てしまいます。 また、深度バッファの解像度も、GPUの世代や性能によって確保できるサイズが限られますので注意が必要です。 今回は1024*1024のサイズでバッファを確保していますので、GeForce7シリーズ以降なら動作は軽いと思います。 以下実装 深度バッファの生成シェーダー //グローバル変数宣言 float4x4 world;// ワールド行列 float4x4 view;// ビュー行列 float4x4 projection;// 透視変換行列 //入力頂点構造体 struct VS_INPUT { float4 position POSITION; //頂点座標 float3 normal NORMAL;//法線ベクトル float4 color COLOR00;//色 }; //出力頂点構造体 struct VS_OUTPUT { float4 position POSITION; //頂点座標 float3 normal TEXCOORD1; //法線ベクトル float4 color COLOR0; //色 float4 depth TEXCOORD2; //深度 }; //頂点シェーダー VS_OUTPUT vs_main( VS_INPUT input, uniform float4x4 world, uniform float4x4 view, uniform float4x4 projection ) { VS_OUTPUT output; float4x4 WLV = mul( world, view ); output.normal = mul( input.normal, (float3x3)WLV ); float4x4 WLPV = mul( WLV, projection ); output.position = mul( input.position, WLPV ); output.depth = mul( input.position, WLPV ); return output; } //入力ピクセル構造体 struct PS_INPUT { float4 color COLOR0; //色 float3 normal TEXCOORD1; //法線 float4 depth TEXCOORD2; }; //ピクセルシェーダー float4 ps_main( PS_INPUT input ) COLOR0 { float color = input.depth.z / input.depth.w; return float4( color, color, color, 1 ); } //テクニックの指定 technique create { //パスの指定 pass Pass_0 { CullFaceEnable = true; CullFace = Back; VertexProgram = compile arbvp1 vs_main( world, view, projection ); FragmentProgram = compile arbfp1 ps_main(); } } 影生成シェーダー //グローバル変数宣言 float4x4 world; float4x4 view; float4x4 projection; float3 light; float4x4 lightview; float4x4 lightprojection; float4x4 texture; sampler2D depth; float4 Ambient = float4( 0.2f, 0.2f, 0.2f, 1.0f ); float4 Diffuse = float4( 1.0f, 1.0f, 1.0f, 1.0f ); float4 Specular = float4( 1.0f, 1.0f, 1.0f, 1.0f ); float4 Ka = float4( 1.0f, 1.0f, 1.0f, 1.0f ); float4 Kd = float4( 1.0f, 1.0f, 1.0f, 1.0f ); float4 Ks = float4( 1.0f, 1.0f, 1.0f, 1.0f ); float4 Ke = float4( 0.0f, 0.0f, 0.0f, 0.0f ); float Shininess = 30.0f; //入力頂点構造体 struct VS_INPUT { float4 position POSITION; //頂点座標 float3 normal NORMAL;//法線ベクトル float4 color COLOR00; }; //出力頂点構造体 struct VS_OUTPUT { float4 position POSITION; //頂点座標 float3 normal TEXCOORD1; //法線ベクトル float3 light TEXCOORD2; //ライト方向のベクトル float3 view TEXCOORD3; //視点方向のベクトル float3 halfAngle TEXCOORD4; //二等分ベクトル float4 color COLOR0; //色 float4 shadowUV TEXCOORD5; //シャドウ用UV float4 depth TEXCOORD6; //深度 }; //頂点シェーダー VS_OUTPUT vs_main( VS_INPUT input, uniform float4x4 world, uniform float4x4 view, uniform float4x4 projection, uniform float3 light, uniform float4x4 lightview, uniform float4x4 lightprojection, uniform float4x4 texture ) { VS_OUTPUT output; float4x4 WV = mul( world, view ); //視点座標系の頂点座標を求める float3 PosEye = (float3)mul(input.position,WV); float3 LPE = mul( light, (float3x3)view ); //ライト方向のベクトルを求める float3 L = normalize(LPE - PosEye); //視点方向のベクトルを求める float3 V = normalize(-PosEye); //二等分ベクトルを求める float3 H = normalize( L+V ); //法線ベクトルの座標変換 output.normal = mul(input.normal,(float3x3)WV); //ライト方向のベクトルを出力 output.light = L; //視点方向のベクトルを出力 output.view = V; //二等分ベクトルを出力 output.halfAngle = H; float4x4 WVP = mul( WV, projection ); //頂点座標の座標変換 output.position = mul(input.position,WVP); float4x4 WLP = mul( mul( world, lightview ), lightprojection ); output.depth = mul( input.position, WLP ); float4x4 WLPB = mul( WLP, texture ); output.shadowUV = mul( input.position, WLPB ); //色を設定 output.color = input.color; return output; } //入力ピクセル構造体 struct PS_INPUT { float2 texcoord TEXCOORD0; //テクスチャ座標 float3 normal TEXCOORD1; //法線ベクトル float3 light TEXCOORD2; //ライト方向のベクトル float3 view TEXCOORD3; //視点方向のベクトル float3 halfAngle TEXCOORD4; //二等分ベクトル float4 color COLOR0; float4 shadowUV TEXCOORD5; //シャドウ用UV float4 depth TEXCOORD6; //深度 }; struct PS_OUTPUT { float4 color0 COLOR0; float4 color1 COLOR1; }; //ピクセルシェーダー PS_OUTPUT ps_main( PS_INPUT input, uniform float4 Ambient, uniform float4 Diffuse, uniform float4 Specular, uniform float4 Ka, uniform float4 Kd, uniform float4 Ks, uniform float4 Ke, uniform float Shininess, uniform sampler2D depth ) { //各ベクトルを正規化する float3 N = normalize(input.normal); float3 L = normalize(input.light); float3 V = normalize(input.view); float3 H = normalize(input.halfAngle); //拡散反射光、鏡面反射光を計算する //float diffuse = max(dot(N,L),0.0f); float diffuseLight = max(dot(N,L),0.0f)*0.5f+0.5f; //ハーフランバートシェーダー float diffuse = diffuseLight * diffuseLight; float specluar = pow(max(dot(N,H),0.0f),Shininess); //環境光、拡散反射光、鏡面反射光を計算する float4 totalAmbient = Ka * Ambient * input.color; float4 totalDiffuse = Kd * Diffuse * diffuse * input.color; float4 totalSpecular = Ks * Specular * specluar; float shadow = tex2Dproj( depth, input.shadowUV ).x; //最終的なカラーを計算する PS_OUTPUT output; if( (shadow * input.depth.w) (input.depth.z-0.05f) ){ output.color0 = totalAmbient; output.color1 = totalAmbient; }else{ output.color0 = totalAmbient + totalDiffuse + totalSpecular; output.color1 = float4( 1, 1, 1, 1 ); } return output; } technique shadow { //パスの指定 pass Pass_0 { CullFaceEnable = true; CullFace = Back; DepthTestEnable = true; VertexProgram = compile arbvp1 vs_main( world,view,projection, light,lightview, lightprojection, texture ); FragmentProgram = compile arbfp1 ps_main( Ambient, Diffuse, Specular, Ka, Kd, Ks, Ke, Shininess, depth ); } } メインプログラム #include "Matrix4.h" #include "Color4.h" #include "Vector2.h" #include "Vector3.h" #include "MathUtility.h" #include "Shader.h" #include iostream #include GL/glew.h #include GL/glut.h #pragma comment( lib, "glew32.lib" ) static void display(); static void idle(); static void key( unsigned char state, int x, int y ); static void initializeGL(); static void initializeCg(); static void drawRect( float x, float y, float w, float h ); namespace { //深度バッファ生成シェーダー Shader* create = NULL; //シャドウシェーダー Shader* shadow = NULL; //ワールド行列 Matrix4 World; //透視変換行列 Matrix4 Projection; //ビュー行列 Matrix4 View; //ライト用透視変換行列 Matrix4 LightProjection; //ライトビュー行列 Matrix4 LightView; //ライト位置 Vector3 Light( 5, 10, 5 ); //テクスチャ行列 Matrix4 Texture; //回転角度 float angle; //FBOID unsigned int fbo; //TextureID unsigned int texture; //バッファサイズ const float BUFFER_SIZE = 1024.0f; } //メイン関数 void main( int argc, char* argv[] ) { glutInit( argc, argv ); glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH ); glutInitWindowPosition( 0, 0 ); glutInitWindowSize( 640, 480 ); glutCreateWindow( "Shader Test" ); int err = glewInit(); if( err != GLEW_OK ){ std cout glewGetErrorString( err ) std endl; exit(0); } //初期化 initializeGL(); initializeCg(); //関数の登録 glutDisplayFunc( display ); glutIdleFunc( idle ); glutKeyboardFunc( key ); glutMainLoop(); } void initializeGL() { glClearColor( 0.0f, 0.0f, 1.0f, 1.0f ); glViewport( 0, 0, 640, 480 ); //OpenGLでは何もさせない //透視変換行列の設定 glMatrixMode( GL_PROJECTION ); glLoadIdentity(); Projection.setIdentity(); Projection.setPerspective( 90.0f, 640.0f/480.0f, 0.1f, 100.0f ); LightProjection.setIdentity(); LightProjection.setPerspective( 90.0f, BUFFER_SIZE/BUFFER_SIZE, 5.0f, 40.0f ); //ビュー行列の設定 glMatrixMode( GL_MODELVIEW ); glLoadIdentity(); View.setIdentity(); View.setLookAt( Vector3( 0.0f, 5.0f, -5.0f ), Vector3( 0.0f, 0.0f, 0.0f ), Vector3( 0.0f, 1.0f, 0.0f ) ); LightView.setLookAt( Light, Vector3( 0.0f, 0.0f, 0.0f ), Vector3( 0.0f, 1.0f, 0.0f ) ); float offsetx = 0.5f + ( 0.5f / BUFFER_SIZE ); float offsety = 0.5f + ( 0.5f / BUFFER_SIZE ); //テクスチャ行列の設定 Texture = Matrix4( 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, offsetx, offsety, 0.0f, 1.0f ); //回転角度の初期化 angle = 0.0f; //ワールド行列の設定 Matrix4 translate, scale, rotate; translate.setIdentity(); translate.setTranslate( Vector3( 0.0f, 0.0f, 0.0f ) ); scale.setIdentity(); scale.setScale( Vector3( 1.0f, 1.0f, 1.0f ) ); rotate.setIdentity(); rotate.setRotateY( angle ); World = translate * scale * rotate; glDisable( GL_DEPTH_TEST ); glDisable( GL_LIGHTING ); glDisable( GL_CULL_FACE ); //テクスチャのバインド glGenTextures( 1, texture ); glBindTexture( GL_TEXTURE_2D, texture ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, BUFFER_SIZE, BUFFER_SIZE, 0, GL_RGBA, GL_FLOAT, 0 ); glBindTexture( GL_TEXTURE_2D, 0 ); glGenFramebuffersEXT( 1, fbo ); glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo ); glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture, 0 ); glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); } void initializeCg() { create = new Shader( "CreateDepth.cgfx" ); shadow = new Shader( "DepthShadow.cgfx" ); create- setTechnique( "create" ); shadow- setTechnique( "shadow" ); //パラメータの設定 create- setParameter( "world", World ); create- setParameter( "view", LightView ); create- setParameter( "projection", LightProjection ); shadow- setParameter( "lightview", LightView ); shadow- setParameter( "lightprojection", LightProjection ); shadow- setParameter( "texture", Texture ); shadow- setParameter( "world", World ); shadow- setParameter( "view", View ); shadow- setParameter( "projection", Projection ); shadow- setParameter( "light", Light ); shadow- setTexture( "depth", texture ); } //描画 void display() { Matrix4 ground; ground.setIdentity(); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo ); glPushAttrib( GL_VIEWPORT_BIT ); glViewport( 0, 0, BUFFER_SIZE, BUFFER_SIZE ); glClearColor( 1.0f, 1.0f, 1.0f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //パスの開始 create- begin(); create- setParameter( "view", LightView ); create- setParameter( "projection", LightProjection ); for( unsigned int pass = 0; pass create- getPassNum(); pass++ ){ create- setPass( pass ); //地面用 create- setParameter( "world", ground ); glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, 1.0f ); glVertex3f( 10.0f, 0.0f, 10.0f ); glVertex3f( 10.0f, 0.0f,-10.0f ); glVertex3f( -10.0f, 0.0f, -10.0f ); glVertex3f( -10.0f, 0.0f, 10.0f ); glEnd(); //トーラス用 create- setParameter( "world", World ); //トーラスの描画 glutSolidTorus( 0.5f, 1.0f, 64, 64 ); } //パスの終了 create- end(); glPopAttrib(); glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 ); glClearColor( 0.0f, 0.0f, 1.0f, 1.0f ); glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //パスの開始 shadow- begin(); shadow- setParameter( "lightview", LightView ); shadow- setParameter( "lightprojection", LightProjection ); shadow- setParameter( "texture", Texture ); shadow- setParameter( "world", World ); shadow- setParameter( "view", View ); shadow- setParameter( "projection", Projection ); shadow- setParameter( "light", Light ); shadow- setTexture( "depth", texture ); for( unsigned int pass = 0; pass shadow- getPassNum(); pass++ ){ shadow- setPass( pass ); //トーラス用 shadow- setParameter( "world", World ); //トーラスの描画 glutSolidTorus( 0.5f, 1.0f, 64, 64 ); //地面用 shadow- setParameter( "world", ground ); glColor4f( 1.0f, 0.0f, 0.0f, 1.0f ); glBegin(GL_QUADS); glNormal3f( 0.0f, 0.0f, 1.0f ); glVertex3f( 10.0f, 0.0f, 10.0f ); glVertex3f( 10.0f, 0.0f,-10.0f ); glVertex3f( -10.0f, 0.0f, -10.0f ); glVertex3f( -10.0f, 0.0f, 10.0f ); glEnd(); glColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); } //パスの終了 shadow- end(); glEnable( GL_TEXTURE_2D ); glBindTexture( GL_TEXTURE_2D, texture ); drawRect( 0, 200, 200, -200 ); glBindTexture( GL_TEXTURE_2D, 0 ); glDisable( GL_TEXTURE_2D ); //バッファの切り替え glutSwapBuffers(); } //更新 void idle() { //回転角度の更新 angle += 1.0f; //ワールド行列の更新 Matrix4 translate, scale, rotate; translate.setTranslate( Vector3( 0.0f, 2.0f, 0.0f ) ); scale.setScale( Vector3( 1.0f, 1.0f, 1.0f ) ); rotate.setRotateY( angle ); World = translate * scale * rotate; //パラメータの設定 //cgSetMatrixParameterfr( w, (const float*) World ); //cgSetMatrixParameterfr( v, (const float*) View ); //cgSetMatrixParameterfr( p, (const float*) Projection ); //再描画 glutPostRedisplay(); } //キー状態 void key( unsigned char state, int x, int y ) { switch( state ){ //エスケープが押されたら終了 case \033 delete create; delete shadow; exit( 0 ); break; } } void drawRect( float x, float y, float w, float h ) { //レンダリングモードの退避 glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT ); glDisable( GL_LIGHTING ); glDisable( GL_DEPTH_TEST ); glDisable( GL_CULL_FACE ); //透視変換行列の退避 glMatrixMode( GL_PROJECTION ); glPushMatrix(); //透視変換行列の設定 glLoadIdentity(); gluOrtho2D( 0, 640, 480, 0 ); //モデルビュー変換行列の退避 glMatrixMode( GL_MODELVIEW ); glPushMatrix(); //変換行列の初期化 glLoadIdentity(); //四角形の描画 glBegin( GL_QUADS ); glTexCoord2f( 0, 0 ); glVertex2f( x, y); glTexCoord2f( 0, 1); glVertex2f( x, y+h); glTexCoord2f( 1, 1); glVertex2f( x+w, y+h); glTexCoord2f( 1, 0); glVertex2f( x+w, y ); glEnd(); //モデルビュー変換行列の復帰 glPopMatrix(); //透視変換行列の復帰 glMatrixMode( GL_PROJECTION ); glPopMatrix(); //モデルビュー変換行列に設定 glMatrixMode( GL_MODELVIEW ); //レンダリングモードの復帰 glPopAttrib(); } 今回は、空のプロジェクトの更新があったのでメインプログラムもすべて載せました。 メインプログラムの部分をmain.cppに上書きしてください。 全角スペースが混じってるかもしれないのでコピペする際は注意してください。 実行結果は以下のようになると思います。 スクリーンショットでは分かりにくいでしょうが、影にぎざぎざが発生しているはずです。 //バッファサイズ const float BUFFER_SIZE = 1024.0f; この部分の数値を変更してみてください。 数値を小さくするとギザギザが目立つようになります。 逆に数値を大きくするとギザギザは目立たなくなりますが、 メモリ・速度的にも厳しくなるのでほどほどにしておいたほうが良いです。 こういった欠点を解決した影生成の方法もあるので実装できるようになったらアップしたいと思います。
https://w.atwiki.jp/tsukune/pages/92.html
Shading an Entire Object Shading Part of an Object Objects with Multiple Shading Domains Layer Shaders Using Layer Shader Tools Rectangle Tool Ellipse Tool Polygon Tool Working with Layers Layering How Layer Shaders Interact Editing Layer Shaders Mapping Shaders Texture Maps More on Master Shaders Modifying the Default Shader for a Scene