Blender 2.9: サブサーフェイスで青みがかる

序文

Blenderでサブサーフェイスを使うと何故か青みがかかる。
本記事ではサブサーフェイスの挙動を色々調べて、青みがかる原因を考察していく。
まあ結局サブサーフェイスの原理とか青みがかる原因とかわからなかったので、なんとかしたいという人は最後の部分だけ読んであとは読まなくていい。
バージョンは2.9で実験したが、2.8以下でも同様と考えられる。

とりま青みがからせてみる

Blenderを起動→モンキーを生成→ライトを真上に配置→マテリアルを生成

マテリアルは"サブサーフェイス"を"1.0"に設定。

ライトは100wに設定。(ライトが強すぎると青みがからない) 後は初期設定のまま。

ビューポートでEeveeレンダーしてみる。 f:id:celluloce:20200924215505p:plain モンキーと立方体の縁あたりが青みがかった。
やったぜ。(違うそうじゃない)

さらに細長い直方体を作って、立方体とモンキーに接近させてみる。

f:id:celluloce:20200924215428p:plain 直方体に接近(接触)させた部分が青みがかった。

さらにライトを非表示にさせてみる。 f:id:celluloce:20200924215652p:plain もはや青色しかない。

ついでに直方体のマテリアルを生成、"サブサーフェイス"を"0.1"に設定。 f:id:celluloce:20200924215833p:plain ちょっとわかりにくいが、青みがちょっと減った。
ちくせう。(だからそうじゃない)

直方体の"サブサーフェイス"を"0.0"に戻して、立方体とモンキーのサブサーフェイス範囲を"10.0, 0.2, 0.1"にしてみる。 f:id:celluloce:20200924221203p:plain すっげえ青くなった。
あと赤色の縞模様が見えるようになった。
立方体の縁では黄色い帯が見えるようになった。

そもそもなんで赤みがかかるんや

マテリアルを生成した際の初期設定として、"サブサーフェイス範囲"は"1.0, 0.2, 0.1"となっている。
これはまあ赤みがかかるような設定なんや。
(サブサーフェイス半径とか言ってよくわかんないから説明するのやだ)
で青みがかかるのは赤の補色であるシアンの色が出ているから。
なんでかはよくわからない。

Cyclesでレンダーしてみる

デノイズはやらない。

f:id:celluloce:20200924221510p:plain
サンプル数: 4

f:id:celluloce:20200924221626p:plain
サンプル数: 64

f:id:celluloce:20200924221743p:plain
サンプル数: 256

サンプル数4では明らかにシアンのドット(ノイズ)が見える。
サンプル数を増やすと青みが減っているような気がする。 (気の所為?)

縞模様を観察してみる

赤色の縞模様は"サブサーフェイス"と"サブサーフェイス範囲"をいじると間隔が変わる。
"サブサーフェイス範囲"の設定次第では緑色の縞模様や紫色の縞模様ができたりする。(作ってみよう!)

"サブサーフェイス範囲"を"6.0, 0.2, 0.1"に設定して、ライトと視点をいじってみる。 f:id:celluloce:20200924222819p:plain 赤色の縞模様の間にシアンが出ている。 実際GPickで色を拾ってみるとシアンだった。

f:id:celluloce:20200924223305p:plain
#798888が拾った色。

結局どうすればいい

Subsurface Scattering — Blender Manualによると、サブサーフェイス範囲の値を平均に近づける(同じ値にする)といいらしい。
また本記事の実験より、Cyclesでサンプル数を多めに設定してもそれなりに効果はあるようだ。
あとは"サブサーフェイスカラー"を"サブサーフェイス範囲"の色に近づけるとか。
(情況によって変わるので色々試してくれ)

調べると悩んでる人はいるがイマイチ解決できてる感じがしない。

描き終わった時に見つかった文献

こっちの方が色々しっかり書かれている。

Maya2018(Arnold5)でのSSSかんたん検証①

まとめ

ようわからん。 首痛い。

BlenderでOpenCLが使えない問題

序文

Blenderレンダリングする際、設定でOpenCLを有効にしようとしたら"No compatible GPUs found for path tracing Cycles will render on the CPU"と出てきた。(日本語表記忘れた さーせん) これを解決させた。

環境

解決法

AMDGPUドライバ (2020-08-27)をダウンロードし、$ ./amdgpu-pro-install --opencl=pal,legacyを実行、rebootしたら解決した。

以上

余談

$ amdgpu-pro-installにはオプションが色々設定できるので、amdgpu-pro-install -h又は以下サイトを確認されたし。

Radeon Software for Linux Installation | AMD (2020-08-27)

pallegacyの違いは知らん。

RaspberryPiにArchLinuxを入れる

序文

ラズパイB+にArchLinuxを入れるときに手こずった部分を書き記す。 全手順を解説するとは言ってない。

全手順は以下リンクで

Raspberry Pi - ArchWiki

無線WiFi

有線に繋げば楽なのだろうが、ラズパイやらノートPCを移動させるのがめんどかったので頑張った。 # netctl start (設定したやつ)で繋がらなかった問題が生じたが、以下リンクで解決した。

IPアドレスの固定

pacman -Suyが上手く行かなかった

keyが無いとかでエラーが出た。 以下リンクで解決した。 Arm build error · Issue #81 · sdrausty/TermuxArch · GitHub

まとめ

日本語文献充実してるからなんかあったら自分で調べろ。

Blender 2.8-betaでObjectを非表示にする

序文

BlenderでObjectを一時的に非表示にするにはObject選択中にHKeyを押せばいい。 がしかしレンダリングをすると写ってしまう。

2.7xでは"render layer"をいじれば実現出来るが、2.8-betaでは"View Layers"をいじる。

手順

f:id:celluloce:20190204173442p:plain

先ずは2つのオブジェクトを生成させ、レンダリング。 今回は赤の立方体を非表示にする。

f:id:celluloce:20190204173640p:plain

次に赤の立方体を別のCollectionに移す。

f:id:celluloce:20190204173735p:plain

最後に非表示にしたいObjectが入ってるCollectionを右クリックし、View Layer > Set Excludeを選択する。 ショートカットキーはOutliner Window上(正しい呼び方かは知らん)でEKeyを押すと良い。

3D Viewportから非表示になり、さらにレンダリングをしても写らない。

f:id:celluloce:20190204174231p:plain

元に戻したいならView Layer > Clear Excludeを選択、又はOutliner Window上でショートカットキーAlt + EKeyを押せばいい。

参考文献

View Layers and Collections — Blender Developers Blog (2019/2/4)

ArchLinuxでHuion Kanvas Pro 13を動かす

序文

Windows10使いたくないでござる。

ペン機能が使えるようにする

ここ嫁わんわん。

Refactor UC-Logic driver and support new Huion tablets by spbnick · Pull Request #134 · DIGImend/digimend-kernel-drivers · GitHub

https://github.com/DIGImend/digimend-kernel-drivers/issues/215

https://bbs.archlinux.org/viewtopic.php?id=239082

ディスプレイが映るようにする

HDMI-USB変換ケーブル(FL2000DX)を使ってるため難航中。

スペクトル項の求め方

序文

遷移金属のスペクトル項の求め方がようやく(何となく)わかったので書き記す。
これが正しいやり方かどうかは知らんがまあ求められる。

d軌道に電子2つの( d ^ 2)の場合

先ず電子のスピン状態を  \alpha , tex: \betaとする。
d電子2つの場合以下の場合がある。
(例えば d _ \alpha ^ 2 , d _ \beta ^ 0は、d軌道にある"スピン状態が \alpha , \betaの電子"がそれぞれ2, 0個あるという意味)

 d _ \alpha ^ 2 , d _ \beta ^ 0  d _ \alpha ^ 1 , d _ \beta ^ 1  d _ \alpha ^ 0 , d _ \beta ^ 2

ここでそれぞれの場合におけるスペクトル項を求める。

 d _ \alpha ^ 2 ,  d _ \beta ^ 0の場合

この場合はパウリの排他原理により、同じ軌道角運動量を持つ電子は存在できない。
(両方ともスピン量子数が同じで、2つの電子がd軌道に入っていて、かつ同じ"磁気量子数に対応する軌道"に入ることはできないということ)
また全スピン量子数 Sは1になる。

電子の軌道角運動量 lが+1 .. -1の範囲内において、2つの電子の軌道角運動量の組み合わせは以下の3パターンが挙げられる。

+1, 0
+1, -1
 0, -1

これはスペクトル項 Pに相当する。
パターンの数は、要は順番を区別しない"組み合わせ"なので _3C_2で求められる。

次に電子の軌道角運動量が+2 .. -2の範囲内において、2つの電子の軌道角運動量の組み合わせは以下の10パターンが挙げられる。

+2, +1
+2, 0
+2, -1
+2, -2
+1, 0
+1, -1
+1, -2
 0, -1
 0, -2
-1, -2

これもパターンの数は _5C_2で求められる。
このうち、[+1, 0-], [+1, -1], [0, -1]の組み合わせはスペクトル項 Pと同じなので取り除く。
残りの7パターンがスペクトル項 Fに相当する。

 d _ \alpha ^ 0 ,  d _ \beta ^ 2の場合

これは d _ \alpha ^ 2 ,  d _ \beta ^ 0の場合と求め方が同じなので割愛する。

 d _ \alpha ^ 1 ,  d _ \beta ^ 1の場合

2つの電子スピン量子数が異なるため、それぞれ同じ軌道角運動量を持つことができる。
全スピン量子数 Sは0になる。

2つの電子の軌道角運動量の組み合わせは5*5=25で結構いっぱいあるのでパターン一覧は書かない。
全軌道角運動量は4 .. 0 まであり、スペクトル項は大きい順に G, F, P, D, Sとなる。

全ての項をまとめる

 d _ \alpha ^ 2 ,  d _ \beta ^ 0の場合、及び d _ \alpha ^ 0 ,  d _ \beta ^ 2の場合より、d ^ 2には ^3 F + ^3 Pという項が含まれていることがわかる。
(左上付きの数字はスピン多重度 2S + 1の値(全スピン量子数の取りうる値の数)で、3の場合は三重項と呼ぶ)

また3つ目の##  d _ \alpha ^ 1 ,  d _ \beta ^ 1の場合より、 d ^ 2には ^1 S + ^1 P + ^1 D + ^1 F + ^1 Gという項が含まれていることがわかる。
この内、 ^1 F, ^1 Pは三重項と重なるため、取り除く。

以上より、 d ^ 2の場合のスペクトル項は ^1 S + ^3 P + ^1 D + ^3 F + ^1 Gとなる。

まとめ

LuaでAtCoder解いてみた

序文

AtCoderはプログラミング初心者にとって良い練習サイト

問題

Biginner001-Aを解く。
要は2つの整数を標準入力して減算して標準出力しれば良き。

コードと結果

h1 = io.read("*number")
h2 = io.read("*number")
print(h1 - h2)

https://www.lua.org/pil/1.htmlを見ながら書いた。
で結果がこちら。

結果: Accept
得点: 100
コード長: 66 Byte   
実行時間: __7__ ms
メモリ: 628 KB 

え?おっそ。

書き直した結果

他の人の提出したコードを参考に書き直した。

h1 = io.read("n")
h2 = io.read("n")
print(h1 - h2)

で結果がこちら。

結果: Accept
得点: 100
コード長: 54 Byte   
実行時間: 1 ms
メモリ: 256 KB

速度爆上がりである。
どう違うんだ...