ぬの部屋(仮)
nu-no-he-ya
  •      12
    3456789
    10111213141516
    17181920212223
    242526272829 
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
        123
    45678910
    11121314151617
    18192021222324
    25262728   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    15161718192021
    293031    
           
         12
    3456789
    10111213141516
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728     
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
          1
    2345678
    9101112131415
    16171819202122
    232425262728 
           
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
  • Blender Tutorial: Photorealistic Material のチュートリアルを試す(2)

    使用テクスチャ

    ノードの設定

    barkテクスチャの設定

    [Shift+A]→[Image Texture]→TexturesCom_BarkDecidious0107_seamless_S.jpg

    [Shift+A]→[Image Texture]→TexturesCom_Moss0177_1_seamless_S.jpg

    [Shift+A]→[Color]→[MixRGB]でテクスチャをMixする

    光源の設定

    光源のタイプをSunに設定し、Strengthを5にする

    テンキーの[7][5]でXY平面の平行投影に切り替える

    ・ライトの位置をデフォルトから(-6.93 , -9.809)だけ移動する。
    ・[R]で131.092°回転する。
    ・テンキーの[3]でYZ平面に移行し、ライトを現在の角度から-13.874°回転する

    テクスチャのミックス

    ・[Shift+A]→[Texture]→[Noise Texture]
    ・[Shift+A]→[Converter]→[ColorRamp]

    を追加

    Glossyを追加

    ・[Shift+A]→[Color]→[Mix]
    ・[Shift+A]→[Shader]→[Glossy BSDF]
    ・[Shift+A]→[Shader]→[Mix Shader]
    を追加

    Bumpを追加

    ・[Shift+A]→[Vector]→[Bump]
    を追加

    Displacementの設定

    ・[Shift+A]→[Color]→[Mix]
    を追加しMultiplyに設定

    テクスチャ座標の変換

    ・[Shift+A]→[Vector]→[Mapping]
    ・[Shift+A]→[Input]→[Texture Coordinate]
    を追加

    結果

    Blender Tutorial: Photorealistic Material のチュートリアルを試す(1)

    Blender Tutorial: Photorealistic Material のチュートリアルを試す(2)

    Blender Tutorial: Photorealistic Material のチュートリアルを試す(1)

    マテリアル中心のチュートリアル。約23分

    [0:25] レンダラがCyclesになっていることを確認する

    木のモデリング

    1.[X]で最初のCubeを削除する

    2.[Shift+A]→[Mesh]→Circle で円を作成

    3.[R]→[Y]→[9][0] で90°回転

    4.テンキー[1]→[5]でY方向の平行投影にする

    5.Editモードへ移行し、[E]→[Esc]→で押し出し→[G][X]でX方向に限定し[Ctrl]を押しながらマウスを動かし押し出しを行う。これを二回行う。

    6.[Z]を押してワイヤフレーム表示に切り替え、[B]で右辺を選択する。

    7.5と同じ事を繰り返して、右側にも伸ばす

    8.Loop Cutで一区画を8分割する

    9.XY平面の端のあたりから右に5、上に5いったところの四角形を選択し、押し出して枝にする

    10.枝の先端を[S]で0.710倍に縮小する

    11.反対側から左に5、XY平面の直下の四角形4枚を押し出し枝にする。

    12.[E]押し出しとS[拡大縮小]を使って木の両端を閉じる

    ※ 動画では単位系がcmになっている

    13.Smoothシェーディングに切り替える

    14.Subdivision Surfaceモディファイア追加

    15.Displaceモディファイアを設定する。

    16.UV展開する

    17.マテリアルを作成し、マテリアル名を「Tree Bark」とする

    以後、マテリアル設定

    Blender Tutorial: Photorealistic Material のチュートリアルを試す(1)

    Blender Tutorial: Photorealistic Material のチュートリアルを試す(2)

    BlenderでPLYファイルの頂点色を扱う

    Blenderは頂点Colorを持つPLYには対応している。一方でFace ColorのPLYには対応していないらしい。ざっと調べた限りでは。

    PLYファイルを読み込み

    VCG Libraryで色のついたポリゴンの読み込み・表示

    あたりから頂点色を持つPLYファイルを用意する。

    Blenderで普通に[File]→[Import]→Stanford (.ply) で読み込む

    頂点色の確認

    Vertex Paintモードに移行すると、PLYから読み込んだ頂点色を確認できる。

    頂点色をレンダリングに使用(Cycles)

    [Shift+A]→[Input]→Attribute

    のノードを追加し、Vertex Colorsの名前を設定する

    頂点色をレンダリングに使用(Eevee)

    Blender 2.8 の Eevee でも全く同じようにできる。

    VCG Library メッシュからfaceのみを削除する

    メッシュの定義

    #pragma once
    
    //基本的なデータタイプ
    #include <vcg/complex/complex.h>
    
    class MyFace;
    class MyVertex;
    class MyEdge;
    
    struct MyUsedTypes : public vcg::UsedTypes<
      vcg::Use<MyVertex>::AsVertexType,
      vcg::Use<MyFace>::AsFaceType,
      vcg::Use<MyEdge>::AsEdgeType> {};
    
    //頂点型
    class MyVertex : public vcg::Vertex<
      MyUsedTypes,
      vcg::vertex::Coord3f,
      vcg::vertex::Color4b,
      vcg::vertex::Normal3f,
      vcg::vertex::VFAdj,
      vcg::vertex::VEAdj,
      vcg::vertex::Qualityf,
      vcg::vertex::BitFlags,
      vcg::vertex::Mark> {
      //ここにメンバ変数を追加できる
    };
    //面型
    class MyFace : public vcg::Face  <
      MyUsedTypes,
      vcg::face::VertexRef,
      vcg::face::Normal3f,
      vcg::face::FFAdj,
      vcg::face::EFAdj,
      vcg::face::Mark,
      vcg::face::VFAdj,
      vcg::face::BitFlags > {
    };
    //エッジ型
    class MyEdge : public vcg::Edge<
      MyUsedTypes,
      vcg::edge::VertexRef,
      vcg::edge::BitFlags,
      vcg::edge::EVAdj,
      vcg::edge::EFAdj> {
    };
    //3Dモデル型
    class MyMesh : public vcg::tri::TriMesh<
      std::vector<MyVertex>,
      std::vector<MyFace>,
      std::vector<MyEdge> > {
    };
    

    faceのみ削除

      //メッシュ定義
      MyMesh mesh;
    
      //PLYファイル読み込み
      vcg::tri::io::ImporterPLY<MyMesh>::Open(mesh, plypathname);
    
      //全てのfaceにDELETEDフラグを立てる
      for (int i = 0; i < mesh.face.size(); i++) {
        vcg::tri::Allocator<MyMesh>::DeleteFace(mesh, mesh.face[i]);
      }
    
      // DELETED フラグのついたMyFaceオブジェクトを削除する
      vcg::tri::Allocator<MyMesh>::CompactFaceVector(mesh);
    

    解説

    VCGの三角形の削除は、MyFaceオブジェクトにDELETEDフラグを立てる事で行う。

    DeleteFace staticメンバ関数でDELETEDフラグを立てるのだが、この時、対象の三角形(上ではmesh.face[i])に既にDELETEDフラグが立っているとassertで落ちる。まあ既に削除された事になっているモノを操作しようとしているのだから合理的ではあるのだが。

    そして、本当の削除はその後CompactFaceVectorで行う。

    この時注意は、CompactFaceVectorを使う前も、「内部的には三角形数==0 」 という扱いになっている。だから、

      int fc = mesh.FN();
    

    とした場合、fc == 0になる。

    ところが

      int fc = mesh.face.size()
    

    とすると、削除する前の三角形の数を取得することになる。この

    mesh.FN() != mesh.face.size()

    という状況がVCGできにはまずいので、一連の処理が終わったらCompactFaceVectorを必ず呼び出す必要がある。

    結果

    VCG Library メッシュからfaceのみを削除する

    VCG LibraryのBall Pivotingでメッシュ生成

    VCG LibraryでkdTree

    VCG Library でスムージング

    VCG Library ターゲットの周辺のオブジェクトを取得

    VCG LibraryでMeshに三角形を登録する方法

    VCG Library でポリゴンファイル保存

    VCG Libraryで色のついたポリゴンの読み込み・表示

    VCG LibのFace-FaceやEdge-Faceなどの関連付け

    VCG Library

    C++CLI のフォームでオーバーライドするイベントハンドラを見つける方法

    OnFormClosingをオーバーライドしたい。

    問題1:コードから作っているのでデザイナやプロパティは使えない

    問題2:検索してもC#の情報しか出ない(そして大抵は名前空間がわからない)

    探し方

    ベースは以下

    C++CLI でコードで作成したフォームにコードでコントロールを配置

    まずこの状態のフォームがある。

    ref class MyForm :public System::Windows::Forms::Form {
    
      /* 省略 */
    public:
      MyForm() {
        /* 省略 */
      }
      virtual ~MyForm() {
      }
      /* 省略 */
    }
    

    ソースコードの自動補完で戻り値と引数を確認する。

    void OnFormClosing(System::Windows::Forms::FormClosingEventArgs^ e)override {
      if( m_f_c == false)
        if (e->CloseReason == CloseReason::UserClosing)
          e->Cancel = true;
    }
    

    コード(一部)

    ref class MyForm :public System::Windows::Forms::Form {
    
    
      System::Windows::Forms::Button^ m_button;
    
      bool m_f_c = false;
    public:
      MyForm() {
    
        m_button = gcnew System::Windows::Forms::Button;
    
        m_button->Text = "close";
        m_button->Click += gcnew EventHandler(this, &MyForm::ClickEvent);//イベントハンドラ追加
    
        this->Controls->Add(m_button);//フォームに配置
      }
      virtual ~MyForm() {
        
      }
    
      void ClickEvent(Object^ source, EventArgs^ e) {
        System::Windows::Forms::MessageBox::Show("Close");
    
        m_f_c = true;
    
        this->Close();
    
      }
    
    
    void OnFormClosing(System::Windows::Forms::FormClosingEventArgs^ e)override { if( m_f_c == false) if (e->CloseReason == CloseReason::UserClosing) e->Cancel = true; }
     
    };

    Blender – 80’s Style Animation Loop in Eevee チュートリアルを試す(2)

    続き

    マテリアル追加[4:13]

    1.Planeに黒のマテリアルを追加し、以下のように設定

    2.Planeに青のマテリアルを追加し、以下のように設定

    3.Wireframeモディファイアの設定で、Material Offsetを2に設定

    4.動画にはないが、Context.RenderでBloomをOnにする

    レンダリングの結果を確認するには、[Z]キーを押し、[Render]を選択する。

    Worldの設定から背景を黒にする。

    HDRIの設定 [04:45]

    HDRI ダウンロード

    HDRI Haven https://hdrihaven.com/ へ行く

     HDRIs > Skies > Kiara 1 Dawn の 4k 24MBのファイルをダウンロードする

    (1)
    (2)
    (4)
    (3)

    HDRの適用

    5.World→ ColorをEnvironment Textureに設定し、ダウンロードしたHDRファイルを選択する。

    6.この際、明るすぎるのでStrengthを0.3に変更する(下図では0.1にしているが0.3が正解。動画では一度0.1にした後でやっぱり0.3にしている・・・・・・)

    ノードの設定

    Shadingタブに切り替えノードを表示する

    対象をWorldに切り替え、
    ・[Shift+A]→[Vector]→Mappingを追加
    ・[Shift+A]→[Input]→Texture Coordinateを追加

    [Shift+A]→[Hue/Saturation]を追加しBackgroundの前に置き、Hue=0.6などして紫に近づける

    地形の最終調整[07:00~ ]

    Layoutへ行き、6頂点ほどを選択し、Proportional EditingのRandomであることを確認しZ方向に僅かに動かし地形にノイズを加える。

    Planeの黒いマテリアルの方を選択し、Shadingへ移動する。

    [Shift+A]→[Vector]→Bump を追加
    [Shift+A]→[Texture]→Noise Texture を追加

    以下のように設定

    太陽の追加[08:00~ ]

    [Shift+A]→[Mesh]→UV Sphere で球を追加

    UV Sphereを右クリック→Object Context Menu→Shade Smooth

    UV Sphereをカメラ方向にPlaneの端まで移動する

    [S]で球を拡大する

    なお球がカメラから見えなくなったらカメラの設定のEndを伸ばす

    EditモードでSphereを右クリックし[Subdivide]

    オプションで
    ・Number of Cuts = 2
    ・Smoothness=1.0

    太陽のマテリアル設定

    動画ではStrength=1.5だがなぜか光量が足りないので15程度にしている。

    太陽とカメラの距離を保つ

    ・Sphereを選択→Cameraを選択→[Ctrl+P] でカメラを親、太陽を子にする

    レンダリング

    Blender – 80’s Style Animation Loop in Eevee チュートリアルを試す(1)

    メッシュ追加[0:10]

    1.[Shift+A]→[Mesh]→Plane で面を追加

    2.Planeを[S]→[8]で8倍にする

    3.Subdivideで30分割する。

    Blender 2.8のSubdivideは、キーバインドをBlender 2.79以下にしているなら[W]→Subdivideだが、そうでないなら

    Editモードで右クリック
    [スペースキー]ないし[F3]で出てくる検索機能

    EditモードのEdgeメニュー

    で見つけることができる。

    https://blender.stackexchange.com/questions/130717/subdivide-button-in-blender-2-8

    山を追加 [0:30]

    Proportional EditingでConnectedを選択し、 Proportional Editing FalloffをRandomに設定する。

    ※Blender 2.8rc1では、 Proportional Editing がただのスイッチになり、代わりに Proportional Editing Falloff のほうで「Connected Only」と「Projected from view」を選択するようになっている。

    Editモードで約8頂点選択し、[G][Z]でZ方向に引き上げて山を作る。なおBlender 2.8の頂点複数選択はShift+マウス左ボタン。

    このままだと一番高い山頂が全て同じ高さになってしまうので、微調整し、山らしくする。

    Mirrorモディファイアの追加[01:20~ ]

    4.MirrorモディファイアのためのEmptyを追加する。[Shift+A]→[Empty]→Plain Axes

    5.Ctrlキーを押しながらオブジェクトをMoveすることでグリッドにスナップして移動できる。これを利用してX方向にPlaneの端まで移動する。

    6.Mirrorモディファイアを追加し、以下のように設定

    カメラの追加 [01:50]

    [Shift+A]→Camera でカメラを追加する。元々カメラがある場合はそれを使えばいい。

    7.カメラの設定を以下のようにし、その上でZ方向に僅かに移動する。

    8.Context.Outputへ行き、Frame Rateを24fpsへ変更

    キーフレームの設定

    9.Animationのタブへ行き、End:120に設定

    10.[Edit]→[Preference]→Animation→Default InterpolationをLinearに設定

    11.カメラをクリックし選択し、Animate Propertyをクリックしキーフレームに設定する(※Frame 1に移動しておく)

    12.カメラをPlaneの反対側まで移動し、キーフレームを打つ

    Arrayモディファイア [03:20~ ]

    PlaneにArrayモディファイアを追加し、以下のように設定。

    ※なお、シームレスにつながらない場合は、Planeの頂点のY座標が-8~8の空間からはみ出ているので修正する

    カメラ再調整

    カメラの焦点距離と角度を以下のように設定する

    Wireframeモディファイア[4:00~ ]

    PlaneにWireframeモディファイアを追加し、以下のように設定

    C++CLI でコードで作成したフォームにコードでコントロールを配置

    ソースコード

    using namespace System;
    using namespace System::Windows::Forms;
    
    
    ref class MyForm :public System::Windows::Forms::Form { System::Windows::Forms::Button^ m_button; public: MyForm() { m_button = gcnew System::Windows::Forms::Button; m_button->Text = "hello"; m_button->Location = System::Drawing::Point(10, 10);//位置変更 m_button->Size = System::Drawing::Size(70, 30);//サイズ変更 m_button->Click += gcnew EventHandler(this,&MyForm::ClickEvent);//イベントハンドラ追加 this->Controls->Add(m_button);//フォームに配置 } virtual ~MyForm() { } void ClickEvent(Object^ source, EventArgs^ e) { System::Windows::Forms::MessageBox::Show("hello pushed"); } };
     
    [STAThread] int main(array<String^>^ args) { MyForm m; Application::Run(% m); }

    C++CLIのコード作成

    1.空のCLRプロジェクトを作成

    2.プロジェクト→
    プロパティページ→リンカー→
    詳細設定→エントリーポイント = main

    3.プロジェクト→
    プロパティページ→リンカー→
    システム→サブシステム =
    Windows (/SUBSYSTEM:WINDOWS)

    4.プロジェクト→
    ソースファイル→右クリック→
    追加→新しい項目 (cppファイル追加)

    5.プロジェクトを右クリック→
    追加→参照→アセンブリ→
    ✔System
    ✔System.Windows.Forms
    ✔System.Drawing
    の三つをチェック

    6.コード記述

    How to Morph Particles into Shapes in Blender のチュートリアルを試す(2)

    続き。

    key particleを使ってfluid等のparticleも移動させる。

    準備[5:50~]

    1.次のレイヤーに移動し、3Dカーソルが原点にあることを確認し、新たに[Shift+A]→[Mesh]→Cubeを追加する

    2.[Num 5]で平行投影、[Num 1]でXZのビューにし、[S]で少しだけ拡大し、[S][X]でさらに少しだけX方向にキューブを拡大。その後底面がXY平面につくくらいの位置までキューブをZ方向に移動する。

    3.[Shift+A]→[Mesh]→Planeで面を追加し、90° Y軸回転後、Cubeの内側、左に配置する。

    ※動画では-90°になっているが後で間違えて修正しているので90°が正解

    4.CubeにCollisionを追加し、Factor=0.8を設定する。

    5.PlaneにParticleを追加し、名前をFluidに設定する。
    Number=5000
    Lifetime=250 (最後のフレームまでParticleが存在するように)
    End=100 (100フレーム目でParticleの流出が止まるように)
    PhysicsをFluidに設定し、Interaction Radius=1.6
    に設定。

    6.[Num 1]を押し、XZ面表示にし、[Shift+A]→[Mesh]→UV Sphereを追加。
    Z方向に移動し、Cubeの上に配置する

    7.UV SphereにParticleを追加し、
    Number = 5000 (Cube側と同じ)
    Lifetime=250
    End=1

    8.[Shift+A]→[Mesh]→CubeでCubeをもう一つ追加し(Cube.003)、Particle Systemを追加し、以下のように設定をする。

    How to Morph Particles into Shapes in Blender のチュートリアルを試す(1)

    プリミティブ準備

    最初のCubeも使って、三つのプリミティブを準備する。

    Particle Systemの追加[0:50]

    CubeにParticle Systemを追加し、以下のように設定。

    [Shift]を押しながら右ボタンクリックで各モデルを選択する。

    Particle Systemを追加したCubeを一番最後に選択し、[Ctrl+L]→[Modifiers]でParticleを他のモデルにコピーする

    またこの後でParticleのLifetimeを250にしておく(消えないようにするため)

    keyの追加[02:30~ ]

    Cubeをもう一つ追加し、後ろの方に配置する。

    このCubeにもParticle Systemを追加し、EmissionのNumberを5000(他と同じ値)に設定、Endも1.0に設定する

    Physicsへ行き、Keyedに設定し、keyを追加する

    ここまでの設定で、アニメーションをするとParticleがCube→Sphere→Cylinderの順に移動する。

    アニメーション速度

    後から追加したCube.001のParticleのLifetimeを変更するとParticleの移動速度を変更できる。

    より細かい速度設定のためには、Use Timingをチェックする。

    そしてTimeとDurationを設定する。

    Time … Particleがその図形に完全に移動する、タイムライン上の時間
    Duration … Particleがその図形で何フレーム待機するか

    例えば、「Frame 0 でCubeからスタートし、Sphereに到着するのがFrame 40,そこで15 Frame待機し、Frame 200 でCylinderに到着」

    という設定の場合、

    なおParticleが表示されているのはLifetimeの時間内だけなので途中で消える場合はLifetimeが短い可能性がある。