Giter Club home page Giter Club logo

Comments (5)

nekomimimi avatar nekomimimi commented on June 18, 2024 1

手元で試せず検証してないので、自分の考えがあっているのか、速くなるのかわからないのですが、

// ベクトルnの長さの2乗(これで単位ベクトルを割る)
var lengthSquareFromOnePoleToCurrentPoint =
displacementFromOnePoleToCurrentPoint.sqrMagnitude;
// ベクトルnの単位ベクトル
var normalizedDisplacementFromOnePoleToCurrentPoint =
displacementFromOnePoleToCurrentPoint.normalized;
// ベクトルn
var forceFromOnePoleToCurrentPoint =
normalizedDisplacementFromOnePoleToCurrentPoint / (float)lengthSquareFromOnePoleToCurrentPoint;

ここがちょっと計算が重複していて速くなる可能性がある感じがします。
sqrMagnitudeとnormalizedの計算の中で両方、x^2 + y^2 + z^2を計算しているので。

sqrMagnitude = x^2 + y^2 + z^2ですが、
ここで、
v = (x, y ,z)
d2 = x^2 + y^2 + z^2
d = sqrt(d2)とすれば、

sqrMagnitude = d2
normalized = (x / d, y / d, z /d)
なので、

normalized / sqrMagnitude = (x / (d * d2) , y / (d * d2), z / (d * d2));

となるので、normaizedを使わずに自力で平方根を使って計算するとsqrMagnitudeの値が使いまわせると思います。
(プログラムの可読性は少々落ちますが)

後、この際に平方根をMathfのほうのsqrtを使うと、doubleからfloatへのキャストをなくせると思います。
https://docs.unity3d.com/ja/2017.4/ScriptReference/Mathf.Sqrt.html

from holomagnet3.

tatsuro-ueda avatar tatsuro-ueda commented on June 18, 2024

CalculatorからMonobehaviourを外し、限界まで軽量化したが、1回計算するのに2 micro秒かかってしまう。数学関数のせい?これ以上はGPUに処理を移さないと無理。

from holomagnet3.

tatsuro-ueda avatar tatsuro-ueda commented on June 18, 2024

ご丁寧に見ていただいて、ありがとうございます。当方現在出張中ですが、帰り次第早急に実機にて検証したいと思います。

from holomagnet3.

tatsuro-ueda avatar tatsuro-ueda commented on June 18, 2024

1回の計算に2マイクロ秒かかっていたのが1マイクロ秒になりました。すごいです。ありがとうございます!

// N極からの現在の頂点への変位ベクトル(ベクトルn)
var vec_d = positionCurrentPoint - positionBarMagnetNorthPole;
// ベクトルnの長さの2乗(これで単位ベクトルを割る)
var len_d =
Mathf.Sqrt(vec_d.x * vec_d.x + vec_d.y * vec_d.y + vec_d.z * vec_d.z);
// vec_f = (vec_d / |vec_d|) / (|vec_d|^2)
// = vec_d / |vec_d|^3
// = vec_d / len_d^3
var forceFromOnePoleToCurrentPoint =
vec_d / (len_d * len_d * len_d);

しかし…FPSはあいかわらず40。どうも違うところにボトルネックがあるようです。すいません!

from holomagnet3.

nekomimimi avatar nekomimimi commented on June 18, 2024

すでにだいぶ軽量化されているので絞れるところを見つけるのが結構、難しいですねぇ。
その上でどこがボトルネックなのか。

from holomagnet3.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.