ぬの部屋(仮)
nu-no-he-ya
  •      12
    3456789
    10111213141516
    17181920212223
    24252627282930
           
      12345
    6789101112
    13141516171819
    20212223242526
    2728293031  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    2930     
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
         12
    3456789
    10111213141516
    17181920212223
    2425262728  
           
      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
           
       1234
    567891011
    12131415161718
    19202122232425
    26272829   
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       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     
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
      12345
    6789101112
    13141516171819
    20212223242526
    27282930   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    3031     
        123
    45678910
    11121314151617
    18192021222324
    252627282930 
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
     123456
    78910111213
    14151617181920
    21222324252627
    28      
           
         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     
       1234
    567891011
    12131415161718
    19202122232425
    262728293031 
           
     123456
    78910111213
    14151617181920
    21222324252627
    282930    
           
         12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31      
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  
           
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    
           
    1234567
    891011121314
    15161718192021
    22232425262728
           
           
        123
    45678910
    11121314151617
    18192021222324
    25262728293031
           
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
           
          1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30      
       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     
         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
           
  • Win32APIでメニュー生成する自作クラス

    ツリー構造を作っていた時にできた副産物です。改善の余地はありますが楽です。

    結果


    使い方

    case WM_CREATE:
      {
    
        menu_t::SetDefaultMII();
    
        MyMenu m;
    
        m.root().set( L"Menu",0);//メニューのルート。表示されない
        m.root().push(L"File",100);// push(タイトル, ID)の順に記述
        m.root().latest().push(L"Load"  ,110);//latestはこの階層で最後にpushされたアイテム
        m.root().latest().push(L"Save"  ,120);
        m.root().latest().push(L"Export",130);
        m.root().latest().push(L"Import",140);
        m.root().latest().push(L"Recent",150);
        m.root().latest().latest().push(L"file1",151);
        m.root().latest().latest().push(L"file2",152);
        m.root().latest().latest().push(L"file3",153);
        m.root().push(L"Edit",200);
        m.root().latest().push(L"Add"   ,210);
        m.root().latest().push(L"Delete",220);
        m.root().latest().push(L"Select",230);
        m.root().push(L"View",300);
        m.root().latest().push(L"Vertical" ,310);
        m.root().latest().push(L"Horizonal",320);
    
        m.winSetMenu(hwnd);
    
      }
      return 0;
    case WM_COMMAND://メニューがクリックされた時の処理
      switch (LOWORD(wp)) {
      case 110:
        MessageBox(hwnd,L"Load",0,0);
        break;
      case 120:
        MessageBox(hwnd,L"Save",0,0);
        break;
      }
      break;
    

    コード本体

    nuWinMenu.h

    #include <vector>
    #include<windows.h>
    
    struct menu_t{
    
      static MENUITEMINFO defaultMII;
    
      MENUITEMINFO mii;
      std::vector< menu_t > m_submenues;
      HMENU hmenu_this;
    
      menu_t(){}
      menu_t(wchar_t* title,UINT id,MENUITEMINFO _mii = defaultMII);
    
     //このメニュー項目を設定 void set( wchar_t* title,UINT id,MENUITEMINFO _mii = defaultMII);
    //このメニュー項目にサブメニューの項目を追加
    void push(wchar_t* title,UINT id,MENUITEMINFO _mii = defaultMII);
    //このメニュー項目のサブメニューの末尾を取得
    menu_t& latest(); static void SetDefaultMII(); }; //メニュー管理クラス class MyMenu{ menu_t m_root; HMENU hMenuTop;
    //メニュー登録のエントリポイント。内部でSetMenuesを呼び出す HMENU defineMenu();

    //登録作業の本体。InsertMenuItemを呼び出している void SetMenues(HMENU hmenu , menu_t& menu); public: menu_t& root(); MyMenu();

    //Win32apiのSetMenuを呼び出し、実際にメニューを登録する
    BOOL winSetMenu(HWND hwnd); };

    nuWinMenu.cpp

    #include "nuWinMenu.h"
    
    
    MENUITEMINFO menu_t::defaultMII;
    
    menu_t::menu_t(wchar_t* title,UINT id,MENUITEMINFO _mii){
      set(title,id,_mii);
    }
    
    void menu_t::set( wchar_t* title,UINT id,MENUITEMINFO _mii){
    //このメニュー項目のタイトルとIDを設定 mii = _mii; mii.fMask = MIIM_ID | MIIM_STRING; mii.wID = id; mii.dwTypeData = title; } void menu_t::push(wchar_t* title,UINT id,MENUITEMINFO _mii){
    //このメニュー項目のサブメニューにアイテムを追加
    m_submenues.emplace_back(title,id,_mii); } menu_t& menu_t::latest(){
    //このメニュー項目に最後に追加されたサブメニュー項目を取得
    return m_submenues.back(); } void menu_t::SetDefaultMII(){ memset(&defaultMII, 0, sizeof(MENUITEMINFO)); defaultMII.cbSize = sizeof(MENUITEMINFO); defaultMII.fMask = MIIM_ID | MIIM_STRING; } ///////////////////////////////////////////////////////// HMENU MyMenu::defineMenu(){ hMenuTop = CreateMenu();//メニュー作成 for(size_t i = 0; i < m_root.m_submenues.size();i++){
    //トップレベルのメニュー項目を登録する
    SetMenues(hMenuTop,m_root.m_submenues[i]); } m_root.hmenu_this = hMenuTop; return hMenuTop; } void MyMenu::SetMenues(HMENU hmenu , menu_t& menu){ if(menu.m_submenues.size()!=0){ HMENU submenu = CreatePopupMenu();//ポップアップメニュー作成 menu.mii.hSubMenu = submenu; menu.mii.fMask |= MIIM_SUBMENU;//この項目にサブメニューがあることを指示 InsertMenuItem(hmenu, menu.mii.wID, FALSE, &menu.mii);
    //サブメニューの各項目を登録 for(size_t i = 0; i < menu.m_submenues.size();i++){ SetMenues(submenu,menu.m_submenues[i]); } } else{ InsertMenuItem(hmenu, menu.mii.wID, FALSE, &menu.mii); } menu.hmenu_this = hmenu; } menu_t& MyMenu::root(){ return m_root; } MyMenu::MyMenu(){ hMenuTop = 0; } BOOL MyMenu::winSetMenu(HWND hwnd){ return SetMenu( hwnd,defineMenu() ); }


    OpenGLをDIB Sectionに描いてオフスクリーンレンダリング

    1. DIB の初期化関数

    dibsection.h

    #include <Windows.h>
    #include <tchar.h>
    
    struct rgb_t {
      unsigned char r;
      unsigned char g;
      unsigned char b;
      rgb_t(unsigned char R, unsigned char G, unsigned char B) :b(B), g(G), r(R) {}
      static const rgb_t White;
      static const rgb_t Black;
    };
    
    
    void createDIBsection24(
      HBITMAP* hBitmap,
      HDC* hMemDC,
      BITMAPINFO* bmpInfo,
      rgb_t** m_lpPixel,
      LONG width,
      LONG height);
    
    void deleteDIBsection24(HDC hMemDC, HBITMAP hBitmap);
    

    dibsection.cpp

    #include "dibsection.h"
    
    void createDIBsection24(
      HBITMAP* hBitmap,
      HDC* hMemDC,
      BITMAPINFO* bmpInfo,
      rgb_t** m_lpPixel,
      LONG width,
      LONG height)
    {
      //DIBの情報を設定する
      bmpInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
      bmpInfo->bmiHeader.biWidth = width;
      bmpInfo->bmiHeader.biHeight = -height; //-を指定しないと上下逆になる
      bmpInfo->bmiHeader.biPlanes = 1;
      bmpInfo->bmiHeader.biBitCount = 24;
      bmpInfo->bmiHeader.biCompression = BI_RGB;
    
      HDC hdc = CreateDC(_T("DISPLAY"), 0, 0, 0);
    
      *hBitmap = CreateDIBSection(hdc, bmpInfo, DIB_RGB_COLORS, (void**)m_lpPixel, NULL, 0);
      *hMemDC = CreateCompatibleDC(hdc);
    
      DeleteDC(hdc);
    
      SelectObject(*hMemDC, *hBitmap);
    
    }
    
    
    void deleteDIBsection24(HDC hMemDC, HBITMAP hBitmap) {
      DeleteDC(hMemDC);
      DeleteObject(hBitmap);
    }
    

    2.WGLの初期化関数

    wingl.h

    #include <Windows.h>
    
    void initGL(HGLRC *hRC,HDC hdc);
    bool DeInitGL(HGLRC hRC, HDC hdc);
    

    wingh.cpp

    ウィンドウに書き込む場合、PIXELFORMATDESCRIPTORのdwFlagsは:

    PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER

    のようになるが、DIBに書き込む場合はPFD_DRAW_TO_WINDOWの代わりにPFD_DRAW_TO_BITMAPを使い、かつ、PFD_SUPPORT_GDIを使う。

    #include "wingl.h"
    #include <Windows.h>
    
    
    void initGL(HGLRC *hRC, HDC hdc) {
      static PIXELFORMATDESCRIPTOR pfd =
      {
        sizeof(PIXELFORMATDESCRIPTOR),
        1,
        PFD_DRAW_TO_BITMAP | PFD_SUPPORT_GDI | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
        PFD_TYPE_RGBA,
        24,
        0, 0, 0, 0, 0, 0,
        0,
        0,
        0,
        0, 0, 0, 0,
        32, //Z-Buffer
        0, //Stencil Buffer
        0,
        PFD_MAIN_PLANE,
        0, //Reserved
        0, 0, 0
      };
    
      SetPixelFormat(hdc, ChoosePixelFormat(hdc, &pfd), &pfd);
      *hRC = wglCreateContext(hdc); //レンダリングコンテキストの作成
    
      wglMakeCurrent(hdc, *hRC); //hRCを有効にする
    
    }
    
    bool DeInitGL(HGLRC hRC, HDC hdc) {
      //解放コード
      wglMakeCurrent(hdc, hRC); //元に戻してやる
      wglDeleteContext(hRC); //いらなくなったレンダリングコンテキストの破棄
      return true;
    }
    

    3.初期化

    変数の定義(DIB Section用)

    HBITMAP dib_hBitmap;
    HDC dib_hMemDC;
    BITMAPINFO dib_bmpInf
    rgb_t* dib_lpPixel;
    

    変数の定義(WGL用)

    HGLRC wgl_hRC;
    

    初期化

      switch (msg) {
      case WM_CREATE:
      {
        //DIB Sectionを作成(24Bit)
        createDIBsection24(
          &dib_hBitmap,
          &dib_hMemDC,
          &dib_bmpInfo,
          &dib_lpPixel,
          width,
          height);
    
        //OpenGL初期化
        initGL(&wgl_hRC, dib_hMemDC);
    
        draw();
    
        break;
      }
    

    4.表示処理

      case WM_PAINT:
      {
        // 画像を表示
        PAINTSTRUCT ps;
        HDC hDC = BeginPaint(hwnd, &ps);
    
        BitBlt(hDC, 0, 0, width, height, dib_hMemDC, 0, 0, SRCCOPY);
    
    
        EndPaint(hwnd, &ps);
    
        break;
      }
    
      case WM_LBUTTONDOWN:
        //マウスをクリックしたら画像を更新して描画要求を出す
        draw();
        InvalidateRect(hwnd, nullptr, FALSE);
        break;
    

    5.描画処理

    void draw() {
      static int r = 0;
    
      wglMakeCurrent(dib_hMemDC, wgl_hRC);
    
      glClearColor(0, 0, 0, 1);
      glClear(GL_COLOR_BUFFER_BIT);
    
      glLoadIdentity();
      glRotated(r += 10, 0, 1, 0);
    
      glBegin(GL_QUADS);
      glColor3d(1, 0, 0);
      glVertex3d(-0.7, -0.7, 0);
      glColor3d(0, 1, 0);
      glVertex3d(-0.7, 0.7, 0);
      glColor3d(0, 0, 1);
      glVertex3d(0.7, 0.7, 0);
      glColor3d(1, 1, 1);
      glVertex3d(0.7, -0.7, 0);
      glEnd();
    
      glFlush();
    
      SwapBuffers(dib_hMemDC);
      wglMakeCurrent(dib_hMemDC, 0);
    
    }
    

    Blender CyclesでSmokeのチュートリアルを試す (4)

    Smoke Simulation Tutorial - Blender Cycles

    Step 4 - Rendering and Exporting [ 9:26~ ]

    • 専用GPUがあれば高速
    • [Smoke]-[Domain]-[Resolutions]-Divisonsを64に設定
    • [Smoke High Resolution]-[Resolution]-Divisionsを5に設定
    • [Smoke Cache]-[Bake]をクリックしベイクを開始する
    • Bakeボタンが無効の場合は一度ファイル保存を行う
    • ベイク後に表示が重くて耐えられないようなら、[Smoke High Resolution]-[Show High Resolution]をOffにする
    • もしGPUレンダリングでクラッシュするようならGPUメモリが足りないので、各Divisionsを減らすなどの対策をとる

    SmokeのFlowになっているオブジェクトを選択し、[Object]-[Cycles Settings]-[Ray Visibility]-Cameraのチェックを外す。これをしないとレンダリング結果に表示される。

    加えて、ドメインの[Border Collisions]をCollide Allに設定する。これを設定しないとSmokeがDomainの外に出てしまってアニメーションとして面白みがなくなる。

    Step 5 - Post Production in After Effects [12:17~ ]

    以降はBlenderではなくAfter Effectsに入るので省略する。

    Blender CyclesでSmokeのチュートリアルを試す (1)

    Blender CyclesでSmokeのチュートリアルを試す (2)

    Blender CyclesでSmokeのチュートリアルを試す (3)

    Blender CyclesでSmokeのチュートリアルを試す (4)

    Blender CyclesでSmokeのチュートリアルを試す (3)

    Smoke Simulation Tutorial – Blender Cycles

    Step 3 Camera and Lighting[04:20~ ]


    Viewport ShadingをRenderedにする。ただし、表示が遅くなるため画面を1/4にする。

    • ライトを選択し、[M]で他のレイヤーへ移動する
    • [Add]-[Mesh]-[Plane]で平面を作成する。
    • [Alt+G]でPlaneの位置をリセットし、そのままPlaneをSmokeのDomainの上へ移動する
    • PlaneのマテリアルにEmissionを指定
    • EmissionのStrengthを12に設定
    • 背景を黒くするため、[World]-[Surface]-[Color]を黒に設定

    光源がレンダリングされないように、

    [Object]-[Cycles Settings]-[Ray Visibility]-Cameraのチェックを外す

    • [Num 3]を押してYZ方向から表示
    • [Num 5]を押して平行投影にする
    • Planeを選択し、[Object]-[Duplicate Object]で光源を複製
    • そのまま複製したPlaneをDomainの横に配置
    • [R]で90度回転して、domainを横からも照らすようにする
    • このとき、[Ctrl]キーを押しながら回転すると角度をSnapできる
    • 右クリックしてカメラを選択し、
    • [Alt+G]で位置を初期化(中央に移動)
    • [Alt+S]で回転を初期化(Z方向に下を向く)
    • [R]でY軸に90度回転
    • カメラを移動してドメインをY軸状からレンダリング出来るようにする
    • カメラのFocal Length、位置、傾きを自由に調整
    • 光源の位置・回転を自由に調整
    • 光源の色を調整

    Blender CyclesでSmokeのチュートリアルを試す (1)

    Blender CyclesでSmokeのチュートリアルを試す (2)

    Blender CyclesでSmokeのチュートリアルを試す (3)

    Blender CyclesでSmokeのチュートリアルを試す (4)

    Blender CyclesでSmokeのチュートリアルを試す (2)

    Smoke Simulation Tutorial - Blender Cycles

    Step2 Animating the Emitter [2:06~ ]

    煙の形状をよりリアルにする

    Cubeを選択し、Editモードへ行く。[W]→Subdivide Smoothを実行し、より自然な形状にする。

    Temperature difference

    Temp. Diffを-1.0に設定する。環境との温度差が逆となり、煙が下に流れるようになる。

    アニメーション

    • CubeをDomainの外に出す
    • [i]を押してLocationのキーフレームにする
    • 100フレーム移動する
    • CubeをDomainの上の方に移動する
    • [i]を押してLocationのキーフレームにする
    • Initial Velocityをonにするとさらに自然なSmokeになる。
    Initial Velocity off
    Initial Velocity on

    色とキーフレーム

    キーフレームにColorを指定することで、複雑な色のSmokeを作成出来る。

    Blender CyclesでSmokeのチュートリアルを試す (1)

    Blender CyclesでSmokeのチュートリアルを試す (2)

    Blender CyclesでSmokeのチュートリアルを試す (3)

    Blender CyclesでSmokeのチュートリアルを試す (4)


    Blender CyclesでSmokeのチュートリアルを試す (1)

    Smoke Simulation Tutorial - Blender Cycles

    Quick Smoke [0:08~ ]

    キューブを選択し、[Object]-[Quick Effects]-Quick Smokeを選択する。

    Divisions

    Smokeの精度を上げるため、[Physics]→[Smoke]→[Domain]→[Resolution]→Divisionsを90など大きい値にする。

    Divisions =32
    Divisions =90

    Smoke Adaptive Domain

    Divisionsを上げると表示が遅くなる。Smoke Adaptive Domainをチェックすると、計算範囲を限定しシミュレーションの速度が上がる。

    Smoke High Resolution[1:40~ ]

    Smokeのsubdivision modifierを Smoke High Resolutionという。

    Smoke High Resolution : off
    Smoke High Resolution : on

    また、WaveletというノイズのStrengthのパラメータを0にしておく。

    Blender CyclesでSmokeのチュートリアルを試す (1)

    Blender CyclesでSmokeのチュートリアルを試す (2)

    Blender CyclesでSmokeのチュートリアルを試す (3)

    Blender CyclesでSmokeのチュートリアルを試す (4)

    BlenderでDNAを作るチュートリアルを試す

    https://www.youtube.com/watch?v=fGLSnsv4dg0

    Blender Modelling Tutorial-DNA Helix

    6:43のシンプルなチュートリアルですがDNAは需要多いのではないかと思います。

    梯子状のオブジェクトを作る

    両脇の柱を作る[0:35~ ]

    • [Num 7]を押してXYビューに切り替える。その後[Tab]キーでキューブのEditモードに入り、[S]+[Y]でY方向にキューブを拡大する。
    • 続いて、[W]→Subdivideを二回行う。
    • カメラを右に寄せ、キューブを全選択したまま[Shift+D]を押し、[G]+[X]でキューブを複製する。

    H字の形状にする[1:20~ ]

    • 柱の一本を選択し、[Shift+D]で複製する
    • 複製後、[R]+[Z]でZ方向に90度回転する
    • 回転した柱をできる限り両脇の二本の中央に移動する
    • さらに中央の棒をZ方向に縮める

    複製と梯子の完成

    Addモディファイアを追加し、

    • Countを29など大きい数字に設定
    • Relative Offsetを(0,1,0)に設定
    • Applyして実体化

    Editモードへ行き、[A]で全選択。Remove Doubles で重複点を削除する

    さらにObjectモードでX軸で90度回転する。最後に、適当な大きさに縮小しておく。

    Editモードへ行き、一番下の段の、中央の点を選択し、[Shift+S]→Cursor to Selected で3Dカーソルを移動する。

    ねじる

    先ほど指定した3Dカーソルの位置で、[Shift+A]→[Empty]→Plain Axisを追加

    SimpleDeformモディファイアを追加し、Twistを選択、Axis,Originに追加したEmptyを設定、Angleに360を設定する。(動画ではFactorを10に設定している)

    最後に、Editモードへ行き、[S]+[X]でX方向に伸ばす。

    Emptyを動かすことでアニメーションが可能

    Arrayで伸ばす


    Rock Pile (石の破片の山)を作るチュートリアルを試す(2)

    https://www.youtube.com/watch?v=EGH0-Z5tK08
    How to make a Rock Pile in Blender 2.73! ( Easy )

    砕ける範囲を変更[6:45~ ]

    [Rigid Body]→[Rigid Body Collisions]→Collision Margin→Margin の値を変更して、爆発の範囲を調整出来る。

    margin off

    margin = 0.1

    爆発を大きくすると、大部分の破片が落下し、表示範囲の外に出てしまうが、レンダリング時にはそれらも計算されてしまい無駄になる。

    • 破片が選択されているならそのまま、選択されていないなら[Ctrl + I]等で選択
    • [Num 5] で平行投影に切り替え → [Num 1]で正面からのビューを表示
    • [B]キーで矩形選択を開始し、マウスの中央ボタンドラッグで矩形範囲内の選択を解除
    • [X]キーで選択中の破片を削除

    により、余計な破片を一括で削除出来る。

    Rock Pile (石の破片の山)を作るチュートリアルを試す(1)

    Rock Pile (石の破片の山)を作るチュートリアルを試す(2)


    Rock Pile (石の破片の山)を作るチュートリアルを試す(1)

    https://www.youtube.com/watch?v=EGH0-Z5tK08
    How to make a Rock Pile in Blender 2.73! ( Easy )

    1.オブジェクトの配置 [0:50~ ]

    [Shift+A]で Plane 及びIco shpereを配置。Planeは拡大する。
    Ico shpereは大きさを維持し、位置を(0,0,1)に移動する。

    Cell Fractureの追加・実行

    Cell Fractureアドオンの有効化

    [Ctrl+Alt+U]でUser Preferenceを表示し、"Cell Fracture"を検索、有効化する。

    Cell Fractureの適用

    Ico Sphereのオブジェクトを選択した状態で、ToolsのCell Fractureボタンを押す。

    Cell fracture selected mesh objectsを次のように設定

    処理が終わると、隣のレイヤーに結果のオブジェクトが生成されている。

    物理シミュレーションを追加[04:00~ ]

    砕かれた破片が全て選択状態のままで、
    [Physics]→Add Active をクリックする。

    [Physics]→[Rigid Body]でRigidを追加。続いて

    • [Rigid Body Collisions] → Friction: 0.6
    • [Rigid Body Collisions] → Bounciness:0.1

    この設定を、Copy from Activeですべての破片へ適用する。

    最初のレイヤーへ行き、Planeを選択。Rigid Body→Type:Passiveに設定。その後[M]でPlaneを隣のレイヤーへ移す。

    [Ctrl+I]で選択状態を PlaneからIco Sphereの破片へ変更する。

    Ico Sphereの破片がすべて選択されていることを確認し、[Pivot Point]の種類を"Indivisual Origins"に変更し、[S]でサイズを僅かに縮小する。

    ここまでの結果

    Rock Pile (石の破片の山)を作るチュートリアルを試す(1)

    Rock Pile (石の破片の山)を作るチュートリアルを試す(2)


    Blenderで鎖のチュートリアルを試す(3)

    シミュレーションの速度調整[08:40~ ]

    シミュレーションの速度が遅すぎるのはスケールの問題との事。しかしモデルの方を縮小するとBlenderがフリーズする可能性が高くなる。この動画では、スピードの変更でより自然な速度に近づけるという手段をとっている。

    speedの数字を上げることで、アニメーションが高速になる。

    シミュレーションのベイク

    他のソフトウェアへエクスポートする手段として、ベイクしてキーフレームに変換する。

    物理シミュレーションしている全てのオブジェクトを選択し、Bake To Keyframesをクリックする。

    ベイクするフレームの範囲を指定するダイアログが出てくるので、OKをクリックする。

    おまけ

    全て選択せずにベイクするとこうなる