イラスト、モデリング、Unity、VR関連

unityとかblenderとかvr関連の作業メモ

C#で気になった機能

++静的クラス

インスタンス化が出来ない

・コンストラクタがもてない

・継承出来ないし、継承されることも出来ない(シールされている)

静的クラスと静的クラス メンバー (C# プログラミング ガイド) | Microsoft Docs

 

++静的メソッド

Rubyでいうクラスメソッドとほぼ同様の模様。

staticなメンバ変数以外にはアクセス出来ず、Class.StaticMethod()のようにクラスオブジェクトからコール出来る。=>インスタンス化せずともコール出来る。

static メソッドとinstanceメソッド

 

++タプル

複数の数値をまとめる。

複数の値を返すためのものと最初は思ったが、それは使い方の一例。

 

++匿名型

これ読む限り、メソッドを削ぎ落として動的型付けにしたハッシュというイメージ。

匿名型 (C# プログラミング ガイド) | Microsoft Docs

 

++dynamic

C#は静的型付けだがなんと動的型付けが可能とのこと。

基底クラスであるobject型との違いはobject型の変数にインスタンスを入れるとobjectクラスに定義されてるメソッドしか使えないのに対して、dynamicは入れたインスタンスのメソッドを使うことが出来る。

dynamic - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++@-逐次的識別子

thisなどの予約文字に対して@をつけることで、その名前の変数を使えるようにするものとのこと。混乱の原因になるだけでは?

 

++var-型推論

varを付けて変数を宣言することで型推論をしてくれる。

初期値が必要

 

++delegate

C言語で言うところの関数ポインタに近く、指定した型の返り値と引数を持つメソッドを代入出来る。複数の処理を代入することも出来る。インスタンスメソッドの代入も可能。

 依存性の注入をメソッドのみで行うものという印象。

 インターフェースを使うと継承が必要だったり、メソッド名を固定されるのに対してdelegateなら処理内容のみを渡すのでこの縛りはない。

 イベントハンドラで最も使用するらしく、配列のように複数の処理を代入出来るので、特定の処理を溜めるのに使用出来る。dynamicを使えば、引数、返り値の制約も消せる。

デリゲート - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

イベント - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++拡張メソッド

究極的には"staticなクラスのメソッドをインスタンスメソッドっぽく呼べるようにしたもの"

Rubyのmoduleのようにmix-inするわけではないので、privateメソッドやprotectedメソッドを拡張メソッド内で呼ぶことは出来ない。

c# - C#にRubyにおけるmoduleに相当する機能はありますか? - スタック・オーバーフロー

拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++参照引数

参照渡しを行うときは、明示的にrefと書く必要がある。

参照渡し - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

 

++入力参照引数 (in 引数)

inを付けることでで読み取り専用の参照引数となる。

値渡しとの違いは書き換え時にエラーが起きるのと、メモリを節約出来ることか。

 

++internal

アクセス修飾子。アクセスをアセンブリに限定する。

アセンブリとは実行ファイル、DLLのこと。

>アセンブリをグローバル アセンブリ キャッシュに配置すると、複数のアプリケーションで共有できます。

らしいので、他のアプリに参照されないための機能と思っておけばいいっぽい。

アセンブリとグローバル アセンブリ キャッシュ (C# および Visual Basic)

 

 

c#の継承とインターフェース,メソッドの共有

C#の場合

インターフェース:多重継承が可能、publicに固定

抽象クラス:多重継承が不可能、アクセス修飾子は選択

どちらも継承先での実装がないとエラーが起きる

とのこと。

arumogina-tech.hatenadiary.jp

の経験からして、

どちらも依存性の注入に使用され

抽象クラスは同一カテゴリに属する複数の具象クラスをまとめて抽象化、

インターフェースは抽象化出来ない複数の異なるカテゴリのクラスで共通の名前をもつメソッドをもたせるときに使用するもの、

と解釈した。

 

C#の動的型付けdynamicは動的型付け言語などと連携するためのもの、という説明があったが、InterfaceだとInteface名に変更が合った場合に引数の受け取り箇所の変更が必要になるので、このようなところではdynamicを使っていきたい。

C#の主要インターフェース解説:インターフェースとは - がりらぼ

 

依存性の注入時にInterfaceを使えば

・Interfaceに実装されたメソッドのみの使用に限定できるので不用意にメソッドを使用することによる密結合になることを防ぎやすくする。

という利点はあるか。

 

 Interfaceそのものは使用するが、依存性の注入時にはdynamicを使う方針でいく。テンプレートメソッドパターンを使わずとも実装を忘れていたとき自動的にエラーを出してくれるのは便利

 

++関連の低いクラス間でメソッドを共有するにはそれらのメソッドをstaticなクラスに定義しておき、そのクラスをメソッドを使用するクラスのインスタンス変数に入れておくのがよさそう。インスタンス変数に入れておくのはstaticなクラスのクラス名の変更に対応しやすくするため。

イラスト習作2.1

2の横ver

高さを揃えるための横線はmedibangでは直線をx軸固定で引くなどは出来なかったので、ツール=>図形ブラシ=>短形(四角)で平行な線を引いた。

 正面絵は左右の目のバランスが悪かったので左目を右目に合わせる形で修正。

 体のラフにはDesignDollを参考にした。

f:id:arumogina:20180910031143p:plain

イラストー習作2

++メモ

モデリングに使用するのでシンプルなデザインにした

足の描き方がイマイチわからなかった。

影の付け方もよくわかってないが、キャラデザだけならあまり気にしなくていいかもしれない。

腕や足は自分で写真を取って参考にした。靴や服は想像で描いた。服はともかく靴はジャストの資料が見つからず何かおかしいが何がおかしい分からない。

ミニチュアのフィギュアを買って参考にするのがいいだろうか。

服装など気にしたことがなかったので、この服がダサいのか、オシャレなのか分からない、思いつくままに描いたが・・・。

服に隠れる体の部分も描いたが、服のシワなどと体の形は完全に分離している。初級者がやるには厳しいと感じたため。

 

++カラー

f:id:arumogina:20180904094155p:plain

 

++線画

f:id:arumogina:20180904094247p:plain

 

++体ーラフ

f:id:arumogina:20180904094327p:plain

イラスト習作1

++課題

厚塗り+正面顔の練習

 

++反省点

厚塗りをしたつもりだが、色の差異が少なくアニメ塗りのようになってしまった。ハイライトや影の付け方もイマイチわからない。あと、髪ももっと細かく描いたほうがよかったか。

厚塗りの場合、線画もなぞっていくのが普通っぽいが、モデリングの3面図に使用するには線はハッキリしてる方がいいので線画の線をそのまま使用している。

厚塗りでの髪は色の差異を用いて輪郭を作り出すっぽいが、3面図に使用するには扱いずらいので、髪の輪郭は線画を利用する方がよさそう。

 

++ツール

ソフト:medibang  お手製グリッド画像生成ツール

ペンタブ:HUION 420 (3200円で購入したが、今みたら倍の値段になってる)

グリッド画像は目の幅とかを左右で同じにするために使用。

 

++書いた手順

ラフ=>レイヤー作成:線画=>下地レイヤー作成:色を塗る場所を灰色に塗る=>線画レイヤーの下に色塗りレイヤー作成、下地レイヤーにクリッピング、色は全てこれに塗った。

線画はペン。

色塗りはほとんど水彩、目の白い所とか色を滲ませたくないところはアクリルを使用。

f:id:arumogina:20180829222346p:plain

 

++参考

【オススメ】超初心者向け!厚塗り講座#1 - YouTube

【メイキング】デジタルの厚塗り講座【アイビスペイント】 | イラスト・マンガ描き方ナビ

イラスト練習

++イラスト練習の目的

・3Dモデリングのためのキャラデザ及び3面図の作成を可能なようにする。

 

++キャラクターを描くとき

・比率を意識したら良くなった。pixiv senseiを参考にした。

・髪が上手く描けなかったので、つむじの位置や生え際、髪のギザギザをランダムにするなど色々やったが、既に書かれてるイラストや写真をレイヤーに読み込んでその線をなぞる、という方法が一番感覚を掴めた。