サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大阪万博
qiita.com/aa_debdeb
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
レイマーチングで使える複雑めな距離関数を収集していきます。 球や直方体など単純な図形に関しては以下にまとまっているので、ここでは触れません。 Inigo Quilez :: fractals, computer graphics, mathematics, shaders, demoscene and more Recursive Tetrahedron http://glslsandbox.com/e#55834.0 四面体のIFSによる繰り返しです。最終的に四面体の頂点に対して距離を計算しています。 # define ITERATIONS 8 float deRecursiveTetrahedron(vec3 p, vec3 offset, float scale) { vec4 z = vec4(p, 1.0); for (int i = 0; i < ITERATIONS; i++
GLSLで物理ベースシェーディングを試すために、いろいろなBRDFを実装してみました。 サンプルを以下においておきました。マクロで使用するBRDFを変更することができます。 http://glslsandbox.com/e#54592.0 マウス位置のx方向でroughnessパラメータを、y方向でmetallicパラメータを変更することができます。 下準備 BRDFを定義する際に使用する変数です。 \begin{eqnarray} \rho_{d}&:& 拡散リフレクタンス\\ \rho_{s}&:& 鏡面リフレクタンス\\ \vec{n}&:& 法線(normal)ベクトル\\ \vec{v}&:& 視線(view)ベクトル\\ \vec{l}&:& 光源(light)ベクトル\\ \vec{r}&:& 反射(reflect)ベクトル\\ \vec{h}&:& ハーフ(half)ベクト
この記事はProcessing Advent Calendar 2018 20日目の記事です。 今回は2次元流体シミュレーションっぽいものを作ってみました。 作ったもの マウスでドラッグすると流れを作ることができ、キーボードを押すとリセットできます。 解説 初期化 まず、シミュレーションの空間を格子に区切り、各格子点にそれぞれ流体の速度と色を持たせます。 // variables for simulations let colors; let velocities; ... function initialize() { colors = new Array(GRID_NUM + 1); velocities = new Array(GRID_NUM + 1); const colorFunc = getInitialColorFunction(); for(let xi = 0; xi
Unityのサーフェスシェーダーのvertex modifier関数や頂点シェーダーで自由に頂点を移動させることができますが、法線は変わらないのでライティングが不自然になるという問題があります。解決する方法はないかと調べたところ、ジオメトリシェーダーで法線を再計算すればいいという記事を見かけたので試してみました。 なお、サーフェスシェーダーではジオメトリシェーダーを使えないので、以下の内容は頂点シェーダーでの方法について書いています。頂点シェーダーを用いる場合、ライティングも自分で書かないといけないので大変ですけどね。。。 次のコードは以下のように頂点の高さをsinで変形させる例です。 頂点シェーダーvertで頂点のy座標をsinで移動させるとともに、クリップ座標だけでなくワールド座標も求めます。 その後、ジオメトリシェーダーgeomで三角形プリミティブの頂点のワールド座標からcross積
ほとんど、Project -> Create -> Shader -> Standard Surface Shaderで作られるデフォルトのサーフェスシェーダーのまま。 違いは、パラメータの_DivisionとCull Offとsurf関数の最初の行だけ。 _Divisionパラメータで分割の大きさを決定する。 Shader "My/CheckerPattern" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 _Division ("Division", Int) = 5 } Su
Shader "MyEffect/Mosaic" { Properties { _MainTex ("Texture", 2D) = "white" {} _BlockNum ("Number Of Blocks", Float) = 10 } SubShader { Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; uint _BlockNum; fixed4 frag (v2f_img i) : COLOR { fixed2 f = floor(i.uv * _BlockNum); fixed size = 1.0 / _BlockNum; fixed2 lb = f / _BlockNum; // left bottom
このページを最初にブックマークしてみませんか?
『@aa_debdebのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く