質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

3632閲覧

オブジェクトが重なった部分のみを切り取る。

tyint121

総合スコア11

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/11/28 15:56

unityでゲームを作っています。
壁として存在するオブジェクトに対し、他のあるオブジェクトが衝突した際、そのオブジェクトを壁に埋め込みたいのですが具体的にどのような処理をすべきかが分かりません。
ご存知の方教えていただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

edo_m18

2017/11/28 16:00

埋め込む、というのは具体的にどういう状態を指していますか?
tyint121

2017/11/28 16:21

伝わりづらくて申し訳ありません。具体的には透明なオブジェクトが壁に衝突した際、窓のように壁に挿入されるような表現をしたいと思っています。
guest

回答1

0

透明なオブジェクトを壁に埋め込むとなると、壁にオブジェクトの形の穴を開けてやらねばなりませんね。
ひとつやってみようか...とも思いましたが、すでにUnity でスクリーンスペースのブーリアン演算をやってみた - 凹みTipsplaying with Unity 5's deferred shading pipeline - primitive: blogにブーリアンレンダリングの実験について面白い記事がありました。詳しく解説されていて、ご参考になるかと思います。

投稿2017/11/28 21:23

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tyint121

2017/11/30 17:45

ありがとうございます! スクリーンスペースブーリアン概要を参考に同様のものを作ろうとしたのですが、シェーディングに関する知識が乏しく、思うように実行できるまでに至りません。 記載されているCommand Bufferのスクリプトやコンポジット、描画用シェーダはそれぞれ何にアタッチすればよいのでしょうか? 教えていただけましたら幸いです。
Bongo

2017/11/30 21:49

凹みTipsさんの公開されていたプロジェクトファイル(https://github.com/hecomi/UnityScreenSpaceBoolean )をご覧になるのが手っ取り早いかと思います。 それを参考に各オブジェクトの構成を考えると... あらかじめ3つのマテリアルを作っておく。 ・壁マテリアル...ShaderはCustom->Subtractee(Standard)を選択、適宜壁のテクスチャを設定する ・断面マテリアル...ShaderはCustom->Subtractor(Standard)を選択、適宜断面のテクスチャを設定する(壁と同じテクスチャでもいいかもしれません) ・透明マテリアル...Rendering ModeはTransparent、適宜Albedoのアルファを調節して半透明な見た目にする 埋め込む物体は複製して二重にする(さらにこの2つを空のゲームオブジェクトに入れてまとめ、適宜プレハブ化してしまうと扱いやすいと思います) ・片方は透明マテリアルを設定 ・もう片方は断面マテリアルを設定、さらにScripts->ScreenSpaceBoolean->Subtractorをアタッチして、Mask MaterialはMaskを選択する 壁は壁マテリアルを設定、さらに... ・Scripts->ScreenSpaceBoolean->Subtracteeをアタッチして、Depth MaterialはFrontBackを選択する ・Scripts->ScreenSpaceBoolean->SubtractionRendererをアタッチして、Composite MaterialはCompositeSubtractionを選択する ・SubtractionRendererのMask Draw Numは、サイトで言及されている「複数の Subtractee の干渉」の解消のためのもので、複数の物体でくりぬくときに、デフォルトの「1」でうまくくりぬけなければ「2」にする この状態で壁と埋め込む物体を重ねてみると、壁が物体の形にくりぬかれた上で透明な形状が描画され、壁に埋め込まれたように見えるかと思います。 実験的なプロジェクトということで手動設定が必要な部分が少々多いですが、うまくできていてアセットストアに出してもいいような面白い効果ですね。
tyint121

2017/12/04 08:55

ご丁寧にありがとうございます! 説明いただいた通りにやってみたのですが、壁マテリアルでSubtracteeを選択すると壁のオブジェクトが透明になりますよね?テクスチャを貼っても透明のままになってしまい、何が原因かもいまいちわからない状況です。 お心当たりありましたらご指摘いただけると幸いです。
Bongo

2017/12/04 21:52 編集

もしかして、カメラが遅延シェーディングモードになっていないんじゃないでしょうか? カメラのインスペクタの「Rendering Path」が「Deferred」になっているか確認してみてください。また、カメラの投影モードは「Perspective」になっているでしょうか?残念ながら「Orthographic」だと遅延シェーディングモードにできないようです... 「Deferred」はマニュアル(https://docs.unity3d.com/Manual/RenderingPaths.htmlhttps://docs.unity3d.com/Manual/RenderTech-DeferredShading.html)によると古いプラットフォームでは使えないそうです。最近の環境なら大抵は大丈夫だと思いますが、Deferredが使えない環境にも対応したいとなると別の手を考えないといけませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問