diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml deleted file mode 100644 index 91d1833..0000000 --- a/.forgejo/workflows/build.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: Build Go (Linux + Windows) - -on: - push: - workflow_dispatch: - -jobs: - build: - runs-on: docker - container: - image: git.rufous-trench.ts.net/crizomb/forgejo-action-goraylib:deb13-node20-go1.24 - steps: - - uses: actions/checkout@v4 - - - name: Build binaries - run: | - cd src - mkdir -p builds_artifact - GOOS=linux GOARCH=amd64 go build -o builds_artifact/raymarchgo-linux-amd64 - GOOS=windows GOARCH=amd64 go build -o builds_artifact/raymarchgo-windows-amd64.exe - - - name: Upload artifacts - uses: actions/upload-artifact@v3 - with: - name: DebugBuilds - path: src/builds_artifact diff --git a/README.md b/README.md index 09bfbff..725c7a3 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,2 @@ Simple cpu ray-marching in go Focus on Lisiblity & Features - - - -also used to test CI/CD things currently -inc=2 diff --git a/src/app-linux-amd64 b/src/app-linux-amd64 deleted file mode 100755 index 7871720..0000000 Binary files a/src/app-linux-amd64 and /dev/null differ diff --git a/src/go.mod b/src/go.mod index 97073ed..468a4ae 100644 --- a/src/go.mod +++ b/src/go.mod @@ -1,4 +1,4 @@ -module raymarching_go +module test_raylib go 1.24.7 diff --git a/src/main.go b/src/main.go index a8e2015..1df88ac 100644 --- a/src/main.go +++ b/src/main.go @@ -15,7 +15,7 @@ import ( const WIDTH = 200 const HEIGHT = 200 -const TEXTURE_SCALE = 4 +const TEXTURE_SCALE = 2 const MAX_DIST = 500.0 const MAX_STEP = 100 @@ -23,6 +23,9 @@ const EPS = 0.1 const PI = math.Pi const SOFT_SHADOW_COEFF = 16 +const LIGHT_POWER_EXP = 2.0 + +var LIGHT_POWER_FAC float64 = 2.0 var lightPos Vector3 var scene SDF @@ -33,8 +36,8 @@ var screenPhysicalSize float64 var cameraPos Vector3 func init() { - lightPos = Vector3{100, -400, 400} - + lightPos = Vector3{0, -200, 100} + LIGHT_POWER_FAC = math.Pow(lightPos.Length(), LIGHT_POWER_EXP) * LIGHT_POWER_FAC cameraPos = Vector3{0, -10, 25} screenSpherical = Vector3{10, PI/2 + 0.2, PI / 2} screenPhysicalSize = 5 @@ -43,11 +46,9 @@ func init() { func update(t float64) { sphereMat := RED_MAT - sphereMat2 := GREEN_MAT sphereMat.specularFac = 0.5 - sphereMat2.specularFac = 0.5 sphere := TranslatedSDF{Sphere{10, sphereMat}, Vector3{-15, 100, 10}} - sphere2 := TranslatedSDF{Sphere{10, sphereMat2}, Vector3{15, 100, 10}} + sphere2 := TranslatedSDF{Sphere{10, sphereMat}, Vector3{15, 100, 10}} // boxMat := BLUE_MAT // box := TranslatedSDF{Box{Vector3{10, 2, 10}, boxMat}, Vector3{0, 100, 10}} diff --git a/src/ray_marching.go b/src/ray_marching.go index 0cf1b17..b9c59b3 100644 --- a/src/ray_marching.go +++ b/src/ray_marching.go @@ -9,26 +9,30 @@ import ( ) func phongShading(point Vector3, normal Vector3, mat Material) Vector3 { - lightVec := (lightPos.Sub(point)).Normalized() - reflectLight := Reflect(lightVec, normal) + lightVecNormalized := (lightPos.Sub(point)).Normalized() + + reflectLight := Reflect(lightVecNormalized, normal) eyeVec := (cameraPos.Sub(point)).Normalized() brutMat := mat.GetMaterialBrut() ambiant := brutMat.ambiantColor.GetColor(point) - diffusePower := brutMat.diffuseFac * max(0, normal.Dot(lightVec)) + diffusePower := brutMat.diffuseFac * max(0, normal.Dot(lightVecNormalized)) diffuse := brutMat.diffuseColor.GetColor(point).Scale(diffusePower) specularPower := brutMat.specularFac * math.Pow(max(0, reflectLight.Dot(eyeVec)), brutMat.specularExp) specular := brutMat.specularColor.GetColor(point).Scale(specularPower) - return ambiant.Add(diffuse).Add(specular) + return (ambiant.Add(diffuse).Add(specular)) } func shadow(point Vector3) float64 { - direction := (lightPos.Sub(point)).Normalized() + lightVec := (lightPos.Sub(point)) + lightVecLength := lightVec.Length() + direction := lightVec.Scale(1 / lightVecLength) p := point.Add(direction.Scale(5 * EPS)) res := 1.0 dist_total := 0.0 + lightPower := LIGHT_POWER_FAC / math.Pow(lightVecLength, LIGHT_POWER_EXP) for range MAX_STEP { dist := scene.Distance(p) if dist < EPS { @@ -41,7 +45,7 @@ func shadow(point Vector3) float64 { dist_total += dist p.Radd(direction.Scale(dist)) } - return res + return res * lightPower } func reflect(point Vector3, direction Vector3, normal Vector3, mat Material, reflectNumber int) Vector3 { @@ -67,7 +71,7 @@ func rayMarch(origin Vector3, direction Vector3, reflectNumber int) (bool, Vecto mat := scene.GetMaterial(p) normal := Gradient(scene, p, EPS).Normalized() phongShade := phongShading(p, normal, mat) - shadowCoeff := max(shadow(p), 0.3) + shadowCoeff := max(shadow(p), 0.1) reflectColor := reflect(p, direction, normal, mat, reflectNumber) return true, phongShade.Add(reflectColor).Scale(shadowCoeff) // return true, phongShading(p, normal, *mat) diff --git a/src/raymarching_go b/src/raymarching_go deleted file mode 100755 index 7871720..0000000 Binary files a/src/raymarching_go and /dev/null differ