ぬの部屋(仮)
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
           
  • 可変長テンプレートとテンプレートテンプレートパラメータ

    まず、私はこれがモダンなC++の標準機能なのかは知らない。ただ、VC++2017で以下のようにやって動いた、という話。

    テンプレートテンプレートパラメータをパラメータパック

    例えば以下はエラー。

    template<
      class Container,
      class Type
    >
    struct MyVector {
      Container<Type> o;
    };
    int main() {
      MyVector<std::vector, int> mv;
    
      mv.o.push_back(1);
    
    }
    

    あるクラスに、コンテナとその内容の型を別々に渡したいときは、以下のようにする。

    template<
      class Type ,
      template<class, class ___ALLCATOR = std::allocator<Type> > class Container
    >
    struct MyVector {
      Container<Type> o;
    };
    int main() {
      MyVector<int, std::vector> mv;
    
      mv.o.push_back(1);
    
    }
    

    ここで、template<class,class>は相手がvectorならよいが、unordered_mapなどを入れると互換性がないといわれる。

    template<
      class Type,
      template<class, class ___ALLCATOR = std::allocator<Type> > class Container
    >
    struct MyVector {
      Container<Type> o;
    };
    int main() {
      MyVector<int, std::unordered_map> mv;
    
      mv.o.push_back(1);
    
    }
    

    クラス テンプレート 'std::unordered_map' 用テンプレート パラメーター リストがテンプレート パラメーター 'Container' 用テンプレート パラメーター リストと一致しません。

    そこで、テンプレートテンプレートパラメータのほうのパラメータリストをパックする

    template< 
      template<class ...Args> class Container,
      class Type>
    struct MyVector {
      Container<Type> o;
    };
    int main() {
      MyVector<std::vector,int> mv;
    
      mv.o.push_back(1);
    
    }
    

    結論

    テンプレートテンプレートパラメータをパックできるので、コンテナに与える型もパックしてやると、色々なコンテナに対応したテンプレートクラスを作成できる。

    template<
      template<class ...Args> class Container,
      class ...Type>
    struct MyVector {
      Container<Type...> o;
    };
    int main() {
    
      MyVector< std::unordered_map, int, float> cm;
      MyVector< std::vector, float> cv;
    
      cm.o[100] = 50.3f;
      cv.o.push_back(30.0f);
    
      std::cout << "map " << cm.o[100] << std::endl;
      std::cout << "vec " << cv.o[0] << std::endl;
    
      int i;
      std::cin >> i;
    
    }
    

    Daz Character Converter G3F to G8F (2) – 変換精度

    Mika 7

    以下はG3F のMika 7を変換した結果。なお全て平行投影。

    ※あと、G7Fとあるけど実際にはG3Fです。Genesis 3 Femaleです。間違えました

    好みの差が出てくるくらいの違いは確認できる。

    以下、正面から見た場合のシルエット。初期の姿勢が変わっているのは仕方が無い。

    7
    8

    横から見た図

    7
    8

    Star 2.0

    むしろこういう特殊なキャラクタこそちゃんと変換して欲しい気がするのだが、とにかく時間がかかった割に黒い線が入ったりしている。

    Daz Character Converter G3F to G8F (1) – 使い方

    Character Converter G3F to G8Fの使い方について。日本語の情報があまりなかったので。

    Character Converter G3F to G8F

    https://www.daz3d.com/character-converter-from-genesis-3-female-to-genesis-8-female

    1.DAZ Install ManagerからインストールするとCharacter Converterの中に入っている。

    2.Output Directoryに変換後のデータを入れるディレクトリを指定。上書を避けるためにMy Daz 3D Library以外が推奨されている。

    3.Genesis 3 Femaleのキャラクタの入っているディレクトリを指定する。

    各キャラクタのディレクトリが入っているディレクトリを指定。

    変換したいキャラがチェックされている状態で、Execute from Selectedをクリック。

    ものによってものすごく時間がかかることがある。Star 2.0とか、50分かかった。そのうえ失敗する。

    変換精度の話

    次回へ続く。

    Blender PythonからVRayのノードを追加する

    ノードを追加

    import bpy
    
    node = bpy.data.node_groups["Material.001"]
    
    node.nodes.new(type='VRayNodeMetaStandardMaterial')
    

    Material

    Material Output VRayNodeOutputMaterial
    Standard Material VRayNodeMetaStandardMaterial
    Two Sided VRayNodeMtl2Sided
    Angle Blend VRayNodeMtlAngleBlend
    Diffuse VRayNodeMtlDiffuse
    Double Sided VRayNodeMtlDoubleSided
    GLSL VRayNodeMtlGLSL
    Material ID VRayNodeMtlMaterialID
    Object Bounding VRayNodeMtlObjBBox
    Override VRayNodeMtlOverride
    Render Stats VRayNodeMtlRenderStats
    Rounded Corners VRayNodeMtlRoundEdges
    Single VRayNodeMtlSingleBRDF
    Streak Fade VRayNodeMtlStreakFade
    Toon VRayNodeMtlToon
    VRmat VRayNodeMtlVRmat
    Wrapper VRayNodeMtlWrapper
    Multi ID VRayNodeMtlMulti
    OSL Material VRayNodeMtlOSL

    BRDF

    AlHair VRayNodeBRDFAlHair
    Material Output VRayNodeOutputMaterial
    AlSurface VRayNodeBRDFAlSurface
    Blinn VRayNodeBRDFBlinn
    Bump VRayNodeBRDFBump
    CSV VRayNodeBRDFCSV
    Car Paint VRayNodeBRDFCarPaint
    Cook Torrance VRayNodeBRDFCookTorrance
    Diffuse VRayNodeBRDFDiffuse
    Diffuse For SSS VRayNodeBRDFDiffuse_forSSS
    Flakes VRayNodeBRDFFlakes
    GGX VRayNodeBRDFGGX
    Glass VRayNodeBRDFGlass
    Glass Glossy VRayNodeBRDFGlassGlossy
    HOPS VRayNodeBRDFHOPS
    Hair VRayNodeBRDFHair
    Hair 2 VRayNodeBRDFHair2
    Hair 3 VRayNodeBRDFHair3
    Hair 4 VRayNodeBRDFHair4
    Light VRayNodeBRDFLight
    Mirror VRayNodeBRDFMirror
    Multi Bump VRayNodeBRDFMultiBump
    Phong VRayNodeBRDFPhong
    Reflection VRayNodeBRDFReflection
    Refraction VRayNodeBRDFRefraction
    SSS VRayNodeBRDFSSS
    SSS 2 VRayNodeBRDFSSS2
    SSS 2 Complex VRayNodeBRDFSSS2Complex
    Sampled VRayNodeBRDFSampled
    Skin VRayNodeBRDFSkinComplex
    Stochastic Flakes VRayNodeBRDFStochasticFlakes
    VRayMtl VRayNodeBRDFVRayMtl
    Ward VRayNodeBRDFWard
    Point Particle VRayNodeBSDFPointParticle
    Layered VRayNodeBRDFLayered

    Textures

    Image File VRayNodeMetaImageTexture
    Color VRayNodeTexAColor
    Bercon Distortion VRayNodeTexBerconDistortion
    Bercon Grad VRayNodeTexBerconGrad
    Bercon Noise VRayNodeTexBerconNoise
    Bercon Tile VRayNodeTexBerconTile
    Bercon Wood VRayNodeTexBerconWood
    Bifrost VV Mix VRayNodeTexBifrostVVMix
    Bulge VRayNodeTexBulge
    Cellular VRayNodeTexCellular
    Checker VRayNodeTexChecker
    Cloth VRayNodeTexCloth
    Curvature VRayNodeTexCurvature
    Dirt VRayNodeTexDirt
    Distance VRayNodeTexDistance
    Distance Between VRayNodeTexDistanceBetween
    Edges VRayNodeTexEdges
    Falloff VRayNodeTexFalloff
    Float VRayNodeTexFloat
    Fresnel VRayNodeTexFresnel
    Gradient Ramp VRayNodeTexGradRamp
    Gradient VRayNodeTexGradient
    Granite VRayNodeTexGranite
    Grid VRayNodeTexGrid
    HSV To RGB VRayNodeTexHSVToRGB
    Hair Sampler VRayNodeTexHairSampler
    ICC VRayNodeTexICC
    Int VRayNodeTexInt
    Leather VRayNodeTexLeather
    Luminance VRayNodeTexLuminance
    Lut VRayNodeTexLut
    Marble VRayNodeTexMarble
    Mesh Map Channel VRayNodeTexMeshVertexColorChannel
    Motion Occlusion VRayNodeTexMotionOcclusion
    Multi Float VRayNodeTexMultiFloat
    Noise VRayNodeTexNoise
    Noise (3ds Max) VRayNodeTexNoiseMax
    Noise (Maya) VRayNodeTexNoiseMaya
    OCIO VRayNodeTexOCIO
    OpenVDB VRayNodeTexOpenVDB
    Ptex VRayNodeTexPtex
    Ray Switch VRayNodeTexRaySwitch
    Rock VRayNodeTexRock
    Sampler VRayNodeTexSampler
    Noise (Simplex) VRayNodeTexSimplexNoise
    Sky VRayNodeTexSky
    Smoke VRayNodeTexSmoke
    Snow VRayNodeTexSnow
    Soft Box VRayNodeTexSoftbox
    Speckle VRayNodeTexSpeckle
    Splat VRayNodeTexSplat
    Stencil VRayNodeTexStencil
    Stucco VRayNodeTexStucco
    Surface Luminance VRayNodeTexSurfaceLuminance
    Swirl VRayNodeTexSwirl
    Temperature VRayNodeTexTemperature
    Thickness VRayNodeTexThickness
    Tiles VRayNodeTexTiles
    TriPlanar VRayNodeTexTriPlanar
    UVW VRayNodeTexUVW
    User Color VRayNodeTexUserColor
    User Scalar VRayNodeTexUserScalar
    Voxel Data VRayNodeTexVoxelData
    Water VRayNodeTexWater
    Wood VRayNodeTexWood
    Layered VRayNodeTexLayered
    Multi ID VRayNodeTexMulti
    OSL Texture VRayNodeTexOSL

    確認方法

    ノードを手動で追加し、以下のスクリプトで表示させている。

    import bpy
    
    node = bpy.data.node_groups["Material.001"]
    
    for n in node.nodes:
        print(n)
    

    libzipを試す(圧縮,パスワード付)

    注意

    Windowsの圧縮フォルダはZipcryptoという暗号化方式を利用しているらしいが、LIBZIPで指定できるのはRES-128等で、Windows標準に対応できない(圧縮フォルダを解凍できない)(らしい)。

    従って動作を確認するには他のフリーソフトなどを使う必要がある。Lhaplusではとりあえず読み込めた。

    ※本当は展開もやるつもりだった(本当だ)のだけれどこの事実に気づくのに半日かかって気力が尽きたのでとりあえず圧縮だけやる。

    ソースコード

    #include <zip.h>
    #include <iostream>
    
    #pragma comment(lib,"zip.lib")
    
    
    //ファイルを圧縮
    int main(int argc, char* argv[])
    {
    
      int errorp;
      zip_t* zipper = zip_open(R"(C:\test\out.zip)", ZIP_CREATE | ZIP_EXCL, &errorp);
    
      // パスワードの定義
      const char* thePassWord = "j6KY4cwC";
    
      zip_source_t* source;
      zip_int64_t iIndex;
    
      source = zip_source_file(zipper, R"(C:\test\data\snail1.png)", 0, 0);
      iIndex = zip_file_add(zipper, R"(snail1.png)", source, ZIP_FL_ENC_RAW);
      zip_file_set_encryption(zipper, iIndex, ZIP_EM_AES_128, thePassWord);//パスワードを指定
    
      source = zip_source_file(zipper, R"(C:\test\data\snail2.png)", 0, 0);
      iIndex = zip_file_add(zipper, R"(snail2.png)", source, ZIP_FL_ENC_RAW);
      zip_file_set_encryption(zipper, iIndex, ZIP_EM_AES_128, thePassWord);//パスワードを指定
    
      source = zip_source_file(zipper, R"(C:\test\data\snail5.png)", 0, 0);
      iIndex = zip_file_add(zipper, R"(snail5.png)", source, ZIP_FL_ENC_RAW);
      zip_file_set_encryption(zipper, iIndex, ZIP_EM_AES_128, thePassWord);//パスワードを指定
    
      zip_close(zipper);
    
      int i;
      std::cin >> i;
    
      return 0;
    }
    

    libzipを試す(展開)

    以下は、zipファイル内の三番目(index==2)のファイルを展開するプログラム。

    コード

    #include <zip.h>
    
    #include <iostream>
    
    #pragma comment(lib,"zip.lib")
    
    int main(int argc, char* argv[])
    {
      // ZIPファイルを読み取り専用で開く
      int errorp;
    
      zip_t* zipper = zip_open(R"(C:\test\zipdata.zip)", ZIP_RDONLY , &errorp);
    
      // ZIP内のファイルの個数を取得
      zip_int64_t num_entries = zip_get_num_entries(zipper, 0);
    
      // ZIP内のファイルの各ファイル名を取得
      std::cout << "count: " << num_entries << std::endl;
      for (zip_int64_t index = 0; index < num_entries; index++) {
        std::cout << "[" << index << "]" << zip_get_name(zipper, index, ZIP_FL_ENC_RAW) << std::endl;
      }
    
      // ZIP内の2番目のファイルに関する情報を取得する
      struct zip_stat sb;
      zip_int64_t index = 2;
      zip_stat_index(zipper, index, 0, &sb);
    
      // 2番目のファイルのファイルサイズと同じメモリを確保する
      char* contents = new char[sb.size];
    
      // 2番目のファイルの内容をメモリに読み込む
      zip_file* zf = zip_fopen(zipper, sb.name, 0);
      zip_fread(zf, contents, sb.size);
      zip_fclose(zf);
    
      zip_close(zipper);
      //////////////////
      // ファイル名を出力できる形に変更
      // ファイル一覧は階層構造をしておらず、ディレクトリ区切りは'/'で直接出力できないので
      // ファイル名中の'/'を'-'に置き換える。
      // 本来なら再帰的にディレクトリを作るなどすべき。
      std::string target = sb.name;
      for (size_t i = 0; i < target.size(); i++) {
        if (target[i] == '/') {
          target[i] = '-';
        }
      }
      //
      //////////////////
      // 解凍したファイルを作成
      std::string outname = R"(C:\test\)" + target;
      FILE* of = fopen(outname.c_str(), "wb");
      fwrite(contents, 1, sb.size, of);
      fclose(of);
      int i;
      std::cin >> i;
    }
    

    ファイルの構造

    実行結果

    表示

    ファイル

    libzipを試す (圧縮)

    #include <zip.h>
    
    #pragma comment(lib,"zip.lib")
    
    
    int main(int argc, char* argv[])
    {
    
      int errorp;
      zip_t* zipper = zip_open(R"(C:\dev\out.zip)", ZIP_CREATE | ZIP_EXCL, &errorp);
    
      zip_source_t* source;
    
      try {
        /////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////
        // ファイル追加
    
        source = zip_source_file(zipper, R"(C:\test\data\img1.jpg)", 0, 0);
        if (zip_file_add(zipper, R"(img1.jpg)", source, ZIP_FL_ENC_UTF_8) < 0) {
          //エラー処理
          zip_source_free(source);
          throw 1;
        }
        source = zip_source_file(zipper, R"(C:\test\data\img2.jpg)", 0, 0);
        if (zip_file_add(zipper, R"(img2.jpg)", source, ZIP_FL_ENC_UTF_8) < 0) {
          //エラー処理
          zip_source_free(source);
          throw 1;
        }
        source = zip_source_file(zipper, R"(C:\test\data\img3.jpg)", 0, 0);
        if (zip_file_add(zipper, R"(img3.jpg)", source, ZIP_FL_ENC_UTF_8) < 0) {
          //エラー処理
          zip_source_free(source);
          throw 1;
        }
    
        /////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////
        // ディレクトリ追加
        if (zip_dir_add(zipper, "folder", ZIP_FL_ENC_UTF_8) < 0) {
          //エラー処理
          zip_source_free(source);
          throw 1;
        }
    
        /////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////
        // ファイル追加
    
        source = zip_source_file(zipper, R"(C:\test\data\dir\img4.jpg)", 0, 0);
        if (zip_file_add(zipper, R"(folder\img4.jpg)", source, ZIP_FL_ENC_UTF_8) < 0) {
          //エラー処理
          zip_source_free(source);
          throw 1;
        }
        source = zip_source_file(zipper, R"(C:\test\data\dir\img5.jpg)", 0, 0);
        if (zip_file_add(zipper, R"(folder\img5.jpg)", source, ZIP_FL_ENC_UTF_8) < 0) {
          //エラー処理
          zip_source_free(source);
          throw 1;
        }
        source = zip_source_file(zipper, R"(C:\test\data\dir\img6.jpg)", 0, 0);
        if (zip_file_add(zipper, R"(folder\img6.jpg)", source, ZIP_FL_ENC_UTF_8) < 0) {
          //エラー処理
          zip_source_free(source);
          throw 1;
        }
    
        zip_close(zipper);
    
      }
      catch (...) {
        zip_close(zipper);
      }
    
      return 0;
    }
    

    元データ

    圧縮後

    libzipを試す(CMakeビルド)

    zlibについて

    libzipのビルドにはzlibが必要。

    libpngをやったときのzlibを使いまわすのでこの点は省略する。

    libzipのCMake

    まずConfigureすると、以下のようにエラーが出る。

    とりあえずzlibのパスとインストール先を指定する。

    この状態でConfigureすると、以下のようにBZIP2とLIBLZMAでWarningが出るが、support disabledと言われているだけなので無視してGenerateしてOpen Projectする。

    Open ProjectしたらReleaseにしてALL BUILDしてINSTALLする。

    所感

    そもそもなんでlibzipをやろうと思ったかというと、今まで勝手にzlibがzipファイル作成ライブラリだと思い込んでいて、libpng関連でzlibについて調べて初めて真相を知ったから。

    あと、次回はサンプルコードを書く。

    Daz Importer version 1.4 を試す

    DAZ のシーンを Blenderに読み込むアドオン。

    今回使用した環境

    Blender 2.82   ,   DAZ 4.12

    公式

    Diffeomorphic

    http://diffeomorphic.blogspot.com/p/daz-importer-version-14.html

    お断り

    私はモデリングやレンダリングに関してはライト層なのでcatとsheepがとりあえず出てくればいいや程度の判断しかしておらず、他のアドオンより優れていると判断して扱っているわけではないのでその点を踏まえてください。

    インストール~読み込み

    インストールマニュアルがもの凄く親切に画像を載せて書かれているので殆どここを読めばできる。

    http://diffeomorphic.blogspot.com/p/daz-importer-version-14.html

    0.zipをダウンロード・展開
    1.Blender 側のアドオンをインストール・設定
    2.DAZ Studio 側のアドオンをインストール
    3.DAZ library pathの設定(いらない)

    4.DAZで普通に.dufファイルを保存,アドオンで同名の.jsonファイルを出力
    5.Blender側で読込

    インストール手順

    0.ダウンロード

    ダウンロードリンクをクリックした先はDropboxなのでその辺にあるダウンロードボタンを押してダウンロードする。

    1.Blender 側のアドオンをインストール・設定

    インストールはマニュアルそのままでいい。
    http://diffeomorphic.blogspot.com/p/installing-blender-add-on.html

    要約:「Edit->Preferenceからadd-onsのInstallでダウンロードしたzipをそのまま指定してチェックもいれちゃってください」

    設定もおそらくは基本そのままでいいはずだがエラーが出たら下参照。

    Blender側の設定で最も重要なことは「DAZのフィギュアデータが入っているディレクトリを指定する事」で、使ってみてファイルが見つかりませんのようなエラーが出た場合まずここを疑うべき。

    2.DAZ Studio 側のアドオンをインストール・設定

    これも公式そのままでいい。

    http://diffeomorphic.blogspot.com/p/installing-daz-studio-plugin.html

    3.Setting up DAZ library paths

    基本やらなくていい。

    使用方法

    4.DAZからファイルを出力 (duf形式),jsonファイルを出力

    duf出力

    DAZで普通にフィギュアを設定し、

    [File]→[Save]

    で.dufファイルを保存

    json出力

    今回新しく入れたアドオンで、dufファイルと同じ場所に.jsonファイルを出力する。ファイル名部分はdufファイルと同じである必要がある。

    [File]→[Export Basic Data]

    5.Blender側で読み込み

    [File]→[Import]→[DAZ Native]

    または、以下Import DAZ Fileからdufファイルを読み込む

    インポート結果

    トラブル

    ファイルが見つからないとエラーが出る場合がある。以下エラーログ:

    MISSING ASSETS:
    /data/daz%203d/genesis%202/female/genesis2female.dsf
    /data/daz%203d/genesis%202/female/genesis2female.dsf
    /data/daz%203d/genesis%202/female/genesis2female.dsf
    /data/daz%203d/genesis%202/female/genesis2female.dsf
    /data/daz%203d/genesis%202/female/genesis2female.dsf
    ...

    私の場合、フィギュアのフォルダ構成が

    \DAZ 3D\Studio\My Daz Connect Library\data\cloud\1_16280\data\daz 3d\genesis 2\female\genesis2female.dsf

    のような状態になっていたからで、特に赤字部分はDAZコネクトによりインストールすることで勝手に決められてしまう。Daz Importer 1.4ではディレクトリが9個しか(?)登録できないこともあり、これを全部登録するのは無理がある。

    \data\  以下の青時部分は共通しているので、\cloud\(数字)\ より下の内容を全部他の場所に固めてコピーし、そのディレクトリを指定すれば動くようにはなる。

    今後のことも考えればDAZコネクト使用時のディレクトリをわかりやすいものにする方法を探すべき。

    だが見つからなかったので、DAZ Install Managerからインストールしなおした。

    DAZ Install Manager からダウンロードした場合、格納先はBasic Settings...から確認できる。そして多分デフォルトでインストールしたならこのパスはBlenderのaddon側に既に入っていると思うので変える必要はない(かもしれないが確認したほうがいい)

    参考:(DAZ コネクトについて)
    http://kotozone.blog55.fc2.com/blog-entry-392.html

    猫と羊

    graphvizを使ってみる

    download

    公式の一番目立つダウンロードを押しても少なくともWindows版はよくわからないところに飛ばされるので以下からダウンロードする

    https://graphviz.gitlab.io/_pages/Download/Download_windows.html

    dotファイルを作成(sample.dot)

    
    graph g{
        node[
            fontname="MS Gothic"
        ]
    
        "いろは" -- "にほへと" -- "ちりぬるを";
    }
        

    日本語を表示する場合、fontnameに日本語フォントを指定する必要がある。

    コマンド

    \release\bin\dot.exe をコマンドプロンプトから実行する

    >dot -Tpng C:\test\gra\sample.dot -o a.png

    ここで赤字は出力形式。当然だが出力はカレントディレクトリなのでパスを通さず上記を実行するとdot.exeと同じ場所にa.pngが生成される。

    出力形式一覧

    https://graphviz.org/doc/info/output.html

    単純な線でつなげた例

    graph g{
        node[
            fontname="MS Gothic"
        ]
    
        "いろは" -- "にほへと" -- "ちりぬるを";
    }
    

    矢印

    矢印には digraphを使う

    
    digraph g{
        node[
            fontname="MS Gothic"
        ]
    
        "いろは" -> "にほへと" -> "ちりぬるを";
        "いろは" -> "日本語";
        "日本語" -> "いろは";
    }
        

    ノードの塗りつぶし色

    digraph g{
        node[
            fontname="MS Gothic"
        ]
    
    //ノード定義
        "いろは"      [fillcolor=plum ,style=filled]
        "にほへと"    [fillcolor=cyan ,style=filled]
        "ちりぬるを"  [fillcolor=white,style=filled]
    
    
        "いろは" -> "にほへと";
        "いろは" -> "ちりぬるを";
    }
        

    色一覧
    http://www.graphviz.org/doc/info/colors.html

    エッジにラベル

    
    digraph g{
        node[ fontname="MS Gothic" ]
        edge[ fontname="MS Gothic" ]
    
    
        "いろは" -> "にほへと"   [label="連続"];
        "いろは" -> "ちりぬるを" [label="非連続"];
    }
        

    ノードの形状

    
    digraph g{
        node[ fontname="MS Gothic" ]
    
    //ノードの定義 "いろは" [shape=circle]; "にほへと" [shape=triangle]; "ちりぬるを" [shape=diamond] "いろは" -> "にほへと"; "いろは" -> "ちりぬるを"; }

    ノードの形状一覧:
    https://graphviz.gitlab.io/_pages/doc/info/shapes.html