Open ginga81 opened 10 months ago
its looks like billboard effect. https://www.opengl-tutorial.org/intermediate-tutorials/billboards-particles/billboards/
that's very useful to make a foliage, although I'm curious where and how should we implement it for openbve, can this effect implemented using current available function formula or what?.
unfortunately i cant help you implement it, i cant write code at all.
Added two new functions: BillboardX and BillboardY These return the rotation angle required to billboard the object in the X and Y axis respectively.
[Object]
States = Tree.b3d
RotateXFunction = BillboardX
RotateYFunction = BillboardY
I don't really see any need to provide a Z-axis billboard unless someone has a specific need.
Thanks, it works!
Top left using billboardY. Bottom using billboardX. Right side just the object.
https://github.com/leezer3/OpenBVE/assets/76892624/c2d25d3c-58b0-42f4-b016-ad173af6de79
although i don't know why the billboardX behave like that π€.
Thank you for implementing it! I prepared the following csv and animated object, and display ed them with ObjectViewer. I hopeed that it is rotating such as a green color's arrow's, but it doesn't appear at all. What's wrong.
rotate-tree.csv
CreateMeshBuilder
AddVertex,-2,0,0
AddVertex,-2,5,0
AddVertex,2,5,0
AddVertex,2,0,0
AddFace2, 0, 1, 2, 3
SetColor, 255, 255, 255, 255
LoadTexture, tree2023type10.png
SetTextureCoordinates, 0, 0, 1
SetTextureCoordinates, 1, 0, 0
SetTextureCoordinates, 2, 0.7760687470436096, 0
SetTextureCoordinates, 3, 0.7760687470436096, 1
rotate-tree.animated
[Object]
States = rotate-tree.csv
RotateYFunction = BillboardY
Additionally, if I use BillboardX, it will be displayed. However, the behavior didn't seem to be what I thought it would be, and it didn't work like in the previous video.
rotate-tree.animated
[Object]
States = rotate-tree.csv
RotateXFunction = BillboardX
https://github.com/leezer3/OpenBVE/assets/22734699/d3d21489-c840-47bc-8ea0-33cb6d57ca31
I think i have noticed your problem @ginga81 There are a somewhat wrong axis calculation in the billboard effect.
If you use billboardY function the correct axis that should be looking at the camera is -Z not +X, -Z is the front facing of the object and +X is the right side of the object.
this is what happened to your tree object, the right side is always facing the camera not the front and because your object is flat the object will look like disappear but it isn't, the object is too thin to be displayed.
https://github.com/leezer3/OpenBVE/assets/76892624/1ec624c8-2e7b-4fdb-863a-3c6204f8a0ae
I think it's the same problem with the billboardY function too.
Ah! I see, that's because I was always facing the things in front and in the back! Thank you for the easy to understand video! The object is incredibly thin, so, we couldn't look. I rotate the object to Y axis, I can see it and works fine! However, we may need to explain how it works.
rotate-tree.csv
CreateMeshBuilder
AddVertex,0,0,-2
AddVertex,0,5,-2
AddVertex,0,5,2
AddVertex,0,0,2
AddFace2, 0, 1, 2, 3
SetColor, 255, 255, 255, 255
LoadTexture, tree2023type10.png
SetTextureCoordinates, 0, 0, 1
SetTextureCoordinates, 1, 0, 0
SetTextureCoordinates, 2, 0.7760687470436096, 0
SetTextureCoordinates, 3, 0.7760687470436096, 1
https://github.com/leezer3/OpenBVE/assets/22734699/429cfafc-d510-4ea8-bf4e-64d8f732db97 I can now create the tree expression I have wanted for a long time!
Will take a closer look when I get home. I was testing with a cube, which explains the difference probably....
OK, try the build from today. That seems wrong, but appears to produce the right results :/
tried nightly builds OpenBVE-2024-01-23.
seems still wrong.
left is billboardX, right is billboardY.
https://github.com/leezer3/OpenBVE/assets/76892624/64d0b1fc-917f-4dd0-82d7-abba678f36ef
Here is the object is use test billboard.zip
I think BillboardX also working fine at the newest daily build. The axis around which BillboardX rotates is the red X. And this time, the "Back" face always rotates along the X axis and faces directly. To reproduce this, when we set the camera's X to always 0 and while maintaining the same distance from the center rotated camera like an orange, the "Back" face is already always facing directly.
However, when I enabled BillboardX and Y at the same time, I thought that the "Right" face that was displayed first would follow me no matter how I turned it, but I felt that the tracking was insufficient. I thought that maybe the Z axis was also needed.
I don't think this will be a problem if the specification is that only one of BillboardX or Y can be used.
I'll have to check and see exactly what's happening when X and Y are combined- Might be a rotation order issue, not sure without sitting down and thinking about it (this sort of math gets complex very quickly when there's rotation from the object, track position and camera into the mix.....)
The Z-axis can't be needed. Let me try to explain: You're moving a camera, which exists in 2D space within a 3D world.
If we take the 4 motion directions, these equate to the following: Up - positive Y Down - negative Y Left - negative X Right - positive X
(Let's assume you're rotating using a mouse- To create Z rotation, you'd need to physically lift the mouse from the desk)
We can do it with just the X and Y axes, is it! excuse me.
the right side of the object that facing to the camera when using billboardY feels wrong to me, I think the correct one should be the object front side.
https://github.com/leezer3/OpenBVE/assets/76892624/aa40350c-99f4-40bb-b69c-a67ccdffb076
same problem also occurs when using billboardX, the back side that following camera not front side.
https://github.com/leezer3/OpenBVE/assets/76892624/82baecbf-3e06-4122-ab99-860159710ae9
the static one just a reference for what the original object orientation is (I just load the .obj file straight to object viewer).
object test : test3.zip
Honestly i don't know what the use case is for billboardX and billboardZ, for billboardY i know it very useful for a tree object or any object that need to always face the camera and rotate along Y axis.
https://github.com/leezer3/OpenBVE/releases/tag/1.9.2.6 I'm thinking of trying Billboard, but do I have to build it from source? I can't find built zip.
Try now, hadn't quite got that far this morning....
Thank you! I was able to download it! Have you not yet fix the behavior when using BillboardXY at the same time? I thought that the behavior was still different from what I expected.
Rotating Y by -90 deg should be closer to your result (Though will be inverted after the camera passes):
[object]
states = test2.obj
RotateXFunction = BillboardX
RotateYFunction = -(pi / 2) + BillboardY
https://github.com/leezer3/OpenBVE/assets/28094366/9e97bc73-2996-4177-83c8-2344c150840f
Also loading the cube obj file took 5 seconds here, and the duck freezing more than a minute to load, is that normal?
Sorry, meant to post again after thinking about it......
A billboard in both directions would probably need another function entirely to work without complications. (Maybe a [Billboard] section which supports no functions, and is a true billboard as you want?)
The basic trouble is that you're effectively applying a transform on the Z-camera axis twice with both billboards in action at once.
Whilst it would be possible to reverse this using the function (see KennyHui's above for an approximation, but I think it probably needs the result of the BillboardX to work 100%)
With regards to the obj files, that definitely doesn't sound normal. They're a bit slower, but a minute for the duck is way OTT. I'll take a look on Debian at some point.
I want you to watch this video. In ETS2 and TrainSimulator202x, by placing trees and grass so that they always face the camera in this way, it is possible to prepare many flat textures and express them realistically. I proposed this before, but it was not adopted, so I will propose it again. At Bve5, has been adopted by AtsEX. https://x.com/atF9045/status/1748724925899383233?s=20