forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Имитация водной поверхности. (http://forum.boolean.name/showthread.php?t=15000)

dsd 27.06.2011 00:00

Имитация водной поверхности.
 
Подобрал уравнения деформирующие плоскость. Пока сильно подтормаживает, но это от апдэйта нормалей. :) Вроде красиво изгибает меш.

NitE 27.06.2011 00:03

Ответ: Имитация водной поверхности.
 
1. Почему нет кода ?
2. Это будет всегда подтормаживать, так-что не юзабельно, разве что если у тебя в игре будет только вода и одна лодочка.

Amatsu 27.06.2011 00:07

Ответ: Имитация водной поверхности.
 
Эффектно, завороженно смотрел на поверхность минут 5.
AMD X2 6000+, 4Gb ОЗУ, HD4770 - стабильно 70-75 фпс

dsd 27.06.2011 00:15

Ответ: Имитация водной поверхности.
 
Тю, по опыту сдесь код выходящий за рамки кода в справке не анализирут :D
Но вот:
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Dither 0
Dim plane#(0,0)
Dim noise#(0)
Global pivot,camera,mxs#,mys#,Light,timer3

Const gravitation#=9.8

pivot=CreatePivot()
PositionEntity pivot,0,3,-10
camera=CreateCamera(pivot)
CameraClsColor camera,0,75,151
light=CreateLight()
MeshLight=CreateSphere(6,light)
;ScaleMesh meshlight,0.3,0.3,0.3
EntityFX meshlight,1
AmbientLight 15,15,15

mesh=CreateWaterPlane(36,36,3,3)
PrepareWaterData(mesh)

While Not ((KeyDown(56) And KeyHit(62)) Or (KeyHit(56) And KeyDown(62)) Or KeyHit(1))
timer3=MilliSecs()
PointEntity light,mesh
PositionEntity light,25*Sin(MilliSecs()/30),25,25*Cos(MilliSecs()/30)
UpdateWaterPlane(0.5,0.2,0.7,mesh)
UpdateWorld
RenderWorld
control(0.5,1.4)
Text 200,200,noise#(Rand(0,200))
Flip 0
Wend
End


Function UpdateWaterPlane(windx#,windy#,windz#,meshhandle)
mesh=meshhandle
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
For i=0 To qvert-1
x00#=plane#(i,0)
y00#=plane#(i,1)

z01#=8*Cos(MilliSecs()/10+x00*3)+6*Sin(MilliSecs()/35+y00*1.5)+0.5*Sin(noise#(i)+MilliSecs()/4)
x01#=x00-8*Cos(MilliSecs()/10+x00*3)+0.5*Cos(noise#(i)+MilliSecs()/8)
y01#=y00-6*Sin(MilliSecs()/25+y00*2)+0.5*Sin(noise#(i)+MilliSecs()/4)
VertexCoords meshsurf,i,x01,z01,y01
Next
UpdateNormals mesh
End Function

Function PrepareWaterData(meshid)
mesh=meshid
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
Dim plane#(qvert,3)
For i=0 To qvert-1
plane#(i,0)=VertexX(meshsurf,i)
plane#(i,1)=VertexZ(meshsurf,i)

Next
End Function

Function CreateWaterPlane(width,depth,gridx#,gridy#)
mesh=CreateMesh()
meshsurf=CreateSurface(mesh)
b=width
d=depth
For y=-d To d
For x=-b To b

v0=AddVertex(meshSurf,x*gridx,0,y*gridy)
VertexNormal (meshsurf,v0,0,1,0)
Next
Next

qvert=CountVertices(meshSurf)

For i=0 To qvert-1
v0=i
x0#=VertexX(meshSurf,V0)
y0#=VertexZ(meshSurf,V0)

bize=i+3*b
If bize>qvert-1 Then bize=qvert-1

For z=i To bize
If (VertexX#(meshSurf,z)-gridx=x0#) And (VertexZ#(meshSurf,z)=y0#) Then v1=z
If (VertexX#(meshSurf,z)=x0#) And (VertexZ#(meshSurf,z)-gridy=y0#) Then v2=z
If (VertexX#(meshSurf,z)-gridx=x0#) And (VertexZ#(meshSurf,z)-gridy=y0#) Then v3=z
Next

If v0<>v1 And v2<>v3 Then AddTriangle(meshsurf,v1,v0,v2) : AddTriangle(meshsurf,v3,v1,v2) :v1=v2=v3=0
Next

For i=0 To qvert-1
x00#=VertexX(meshsurf,i)
y00#=VertexZ(meshsurf,i)
u00#=x00/(width*gridx)
v00#=y00/(depth*gridy)
VertexTexCoords meshsurf,i,u00,v00

Next

Dim noise#(qvert)
For i=0 To qvert-1
noise#(i)=Rnd(0,359.99)
Next

testtex=CreateTexture(256,256,256)
SetBuffer TextureBuffer(testtex)
Color 127,127,127
Rect 0,0,128,128
Rect 128,128,128,128
Color 235,240,235
Rect 0,128,128,128
Rect 128,0,128,128
SetBuffer BackBuffer()
EntityTexture mesh,testtex,0,0
ScaleTexture testtex,.1,.1


Return mesh
End Function

Function control(speed#,mousesensitivity#)
If KeyDown(2) WireFrame True Else WireFrame False
mxs#=mxs#+(MouseXSpeed()/5.0)
mys#=mys#+(MouseYSpeed()/5.0)
RotateEntity camera,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
If KeyDown(17) Or KeyDown(200) MoveEntity camera,0,0,speed#
If KeyDown(31) Or KeyDown(208) MoveEntity camera,0,0,-speed#
If KeyDown(30) Or KeyDown(203) MoveEntity camera,-speed#,0,0
If KeyDown(32) Or KeyDown(205) MoveEntity camera,speed#,0,0
PositionEntity pivot,EntityX#(camera,1),EntityY#(camera,1),Entity Z#(camera,1)
PositionEntity camera,0,0,0


Text 100,10,"polygons in view "+TrisRendered()
If (MilliSecs()-timer3)<>0 Text 100,40,"Frames per second is: "+1000/(MilliSecs()-timer3)
End Function

Пока просто лениво считать нормали к точкам, без апдейта это в 5-6 раз резче, плюс можнозамутить перерисовку меша по типу террэйна. Только зачем мне это в пародии на МОО :D
Это эскиз вообще без оптимизации.
1-wireframe

Colossus 27.06.2011 00:20

Ответ: Имитация водной поверхности.
 
да ) неплохо ) вот еще сделать красивую водную поверхность, и постэффекты, и получится шикарно )

Mr_F_ 27.06.2011 00:28

Ответ: Имитация водной поверхности.
 
автор, переходи на dx9+ движки, вертексными шейдерами не будет тормозить)

ARA 27.06.2011 00:36

Ответ: Имитация водной поверхности.
 
Исчо вариант - убрать мелкую рябь, уменьшить полигонаж воды раз в 5. а рябь заменить ревлективным/рефрактивным бампом из FastExt или Ashadow)

maxturbo 27.06.2011 00:37

Ответ: Имитация водной поверхности.
 
У автора просто видать хобби... Как и все остальные он пытается из не возможного делать реальные вещи и при чем это получается довольно таки не плохо ;)

Program23 27.06.2011 00:47

Ответ: Имитация водной поверхности.
 
Класс!По-истине релаксирующая водичка,еще бы текстуру натянуть,песчаный берег,крабик,камешек,ракушка,дельфиничика,чаек,пен у от разбивающихся об брег волн...

Amatsu 27.06.2011 00:58

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от Program23 (Сообщение 193252)
Класс!По-истине релаксирующая водичка,еще бы текстуру натянуть,песчаный берег,крабик,камешек,ракушка,дельфиничика,чаек,пен у от разбивающихся об брег волн...

Думаю от таких волн на пляжике не останется ни крабиков, ни ракушек. Волны явно штормовые, причем вдали от берега

dsd 27.06.2011 01:02

Ответ: Имитация водной поверхности.
 
Хм. Где то читал, что уровень графики современных игр должен быть посильным для первых пней если код будет правильный :)))

С++ мне тяжело. Пуре бэйсик с отвратительной справкой по командам. Плюс за месячишко мне блитц не надоел:) . Я пока даже не дошел до коллизий :) В блитце мне не хватает только нормальной скорости в рисовании, ведь даже простого анализа изображения не замутить :(

А над этим надо думать(я про воду). В основном надо придумать хитрую функцию меша. Потому как этим уравнениям фиолетов уровень детализации, просто частую сетку оно изогнет разнообразней, оно как фрактал :) Надо только уравнения подобрать, что бы волны в бублик скручивало.
И потом при желании транслировать алгоритм в другой язык элементарно :) По моему я щас работаю практически с опенжлом :)

И да, скоро я буду вспоминать термех :D

Это просто волны, когда выведу коэффициенты можно будет имитировать от ряби до шторма :) И надо еще с логарифмами и тангенцами поэксперементировать :)

LLI.T.A.L.K.E.R. 27.06.2011 01:34

Ответ: Имитация водной поверхности.
 
dsd с АВТОМАТ-ом могли бы сделать "Минекрафт получше"

moka 27.06.2011 02:01

Ответ: Имитация водной поверхности.
 
dsd, дык, под Blitz3D, есть Xors3D - а там есть и шейдеры. А они позволяют в функции вершинного шейдера, в реальном времени изменять позицию и любые другие параметры вершин со сложными формулами с очень отличной производительностью (на то и шейдеры).
И в современных играх, используют именно их.

dsd 27.06.2011 02:08

Ответ: Имитация водной поверхности.
 
;нужно сделать что бы в зоне видимости камеры была плоскость.
; А вне зоны ее не было. Отсечение ненужного легко решается задачей четырех плоскостей отгораживающих невидимое
; уравнение плоскости ax+by+cz=0 d не нужно так как плоскость проходит через начало координат
; Нужно в координатах камеры найти линии пересечения плоскости воды и клипплэйнов. Это первый этап. Видимость точки определяется легко потому как нормаль имеет длину 1 а уравнения плоскостей приведены к нормальному виду и расстояние от точки до поверхностей считается легко
;
;Этап второй нужным образом а именно линиями расположенными перпендикулярно нормальному вектору связывающему точку проецирующий на камеру в graphicswidth().2 и последовательно расположенную высоту имею рассчитываемые координаты точек, которые перевожу в координаты меша
; Чем дальше от камеры тем шире ряды.
;Рассчитываю полученные из ничто исходные координаты точек меша, считаю новые ставлю точки в полученные натягиваю сюрфэйс. Хитрым финтом для каждой точки из уравнения извлекаю нормаль
;ставлю нормаль. Придумываю как завязать текстурные координаты на глобальные, что бы текстура не дрожала. Профит.

Вот вроде просто :))) Но программирования тут раз в 20 меньше математики :)

Мока, мне триалов для медитаций не хватает :) и на вид ксорс не лучше блитца. Да и жадный я:))))

NitE 27.06.2011 04:26

Ответ: Имитация водной поверхности.
 
Цитата:

мне триалов для медитаций не хватает
Изучил-бы вопрос сначала. У Хорса триал - полная функциональность и ограничение по времени 30 минут. Я сомневаюсь что у тебя хватит силы воли медитировать на эти волны более 30 минут.

Цитата:

и на вид ксорс не лучше блитца.
Во-первых внешность обманчива. Во-вторых http://www.gamedev.ru/flame/forum/?id=142859 и ещё многое (офф. сайт в отключке), это хорс.

Блиц хуже Хорса по всем параметрам, он уже слишком стар чтобы с кем-то тягаться. Да и апдейты на него раз в год по обещанию.

Цитата:

Да и жадный я
Сделай игру - получи хорс бесплатно. Кажется ещё в силе.

HolyDel 27.06.2011 11:24

Ответ: Имитация водной поверхности.
 
Цитата:

Блиц хуже Хорса по всем параметрам
нет. для казуалки по прежнему лучше блиц - потомучто работает ну везде. даже на встроенном интеловском видеокартах.

Amatsu 27.06.2011 12:50

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от HolyDel (Сообщение 193275)
нет. для казуалки по прежнему лучше блиц - потомучто работает ну везде. даже на встроенном интеловском видеокартах.

Главное чтобы работал на Win8, а то мне придется клиент игры переписывать под что-то другое -_-

dsd 27.06.2011 14:29

Ответ: Имитация водной поверхности.
 
Почему хорс? А не EsenthelEngine? Или не огре? В есеншле мне примеры понравились :)

Кстати Hmax*sin^2(f(t)+k) очень удобно для прыжка. Если назначить на координату высоты то разницы почти не видно :) Я таки оптимизирую воду, в частном случае оно проще, если не давать камере наклоняться в стороны.

moka 27.06.2011 14:37

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от dsd (Сообщение 193290)
Почему хорс? А не EsenthelEngine? Или не огре? В есеншле мне примеры понравились :)

Xors3D, это наш, отечественный продукт. Я в своё время писал на него шейдеры (mSL), до сих пор можно найти в примерах (если в самых новых не убрали).
.Squid - посещает наш форум, так что есть прямая поддержка.
Плюс, если найдёшь реальный баг - поможешь проекту.
EsenthelEngine - это узко заточенный движок, для C++.
Огр - для тебя думаю будет там слишком много гемора и другой мороки, за место реальной реализации задуманных вещей. Огр тоже С++.
Если тебя привлекает "сразу к делу", то Blitz в этом случае очень удобен. А Xors3D, т.к. DX9, позволяет работать с шейдерами и другими плюшками.
Дело твоё, тут скорее идут дельные предложения, чем вербовка или т.п.

dsd 27.06.2011 17:21

Ответ: Имитация водной поверхности.
 
Примерно с час массировал мозг справочником Выгодского. Пришел к выводу, что пытаться честно генерировать меш с непериодической сеткой в прямом эфире быстро возможно, но для этих целей надо найти и похитить аутичного аспиранта с кафедры матана :D А лучше двух и с разных кафедр.

В общем решил я пользоваться специально сгенерированным мешем. Вуаля, первое приближение :) Пока без координат текстур :wild:

И ведь к этой поверхности легко привязать предметы.>>:(

Crayzi 27.06.2011 18:34

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от MoKa (Сообщение 193293)
Xors3D, это наш, отечественный продукт. Я в своё время писал на него шейдеры (mSL), до сих пор можно найти в примерах (если в самых новых не убрали).
.Squid - посещает наш форум, так что есть прямая поддержка.
Плюс, если найдёшь реальный баг - поможешь проекту.
EsenthelEngine - это узко заточенный движок, для C++.
Огр - для тебя думаю будет там слишком много гемора и другой мороки, за место реальной реализации задуманных вещей. Огр тоже С++.
Если тебя привлекает "сразу к делу", то Blitz в этом случае очень удобен. А Xors3D, т.к. DX9, позволяет работать с шейдерами и другими плюшками.
Дело твоё, тут скорее идут дельные предложения, чем вербовка или т.п.

Ты мну щас реально склонил к Хорсу)) Надо какнить в нем поразбиратся))

dsd 27.06.2011 19:45

Ответ: Имитация водной поверхности.
 
Приближение №2. Уже без швов. Теперь бамп мог бы пригодиться :rolleyes:

Кто там говорил про один кораблик?

L.D.M.T. 27.06.2011 19:45

Ответ: Имитация водной поверхности.
 
Вложений: 1
с преломлением из fastext смотрится довольно-таки неплохо!

dsd 27.06.2011 20:56

Ответ: Имитация водной поверхности.
 
Чутка поднял разрешение и набросал мусора на воде :)

Слегка облагородил сами уравнения.
Чего явно не хватает кроме брызг с гребней?

Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Dither 0
Dim plane#(0,0)
Dim noise#(0)
Dim CubeData#(0,0)
Global pivot,camera,mxs#,mys#,Light,timer3,debugcam,water mesh,watertex,dsd

pivot=CreatePivot()
PositionEntity pivot,0,3,-10
camera=CreateCamera(pivot)
CameraClsColor camera,0,75,151
light=CreateLight()
MeshLight=CreateSphere(6,light)
;ScaleMesh meshlight,0.3,0.3,0.3
EntityFX meshlight,1
watermesh=LoadMesh("mesh/water.b3d")
testtex=CreateTexture(256,256,256)
SetBuffer TextureBuffer(testtex)
Color 127,127,127
Rect 0,0,128,128
Rect 128,128,128,128
Color 235,240,235
Rect 0,128,128,128
Rect 128,0,128,128
SetBuffer BackBuffer()

dsd=CreatePivot()
cubecount=100
Dim cubedata#(cubecount,2)
For i=0 To cubecount
dh=CreateCube(dsd)
PositionEntity dh,Rand(-90,90),Rand(50,90),Rand(-90,90)
EntityColor dh,Rand(0,255),Rand(0,255),Rand(0,255)
ScaleEntity dh,Rnd(0.5,2),Rnd(0.5,2),Rnd(0.5,2)
cubedata#(i,0)=EntityX(dh,1)
cubedata#(i,1)=EntityZ(dh,1)
Next


watertex=LoadTexture("maps/water.jpg")
SetCubeMode watertex,1
EntityTexture watermesh,watertex,0,1

normaltex = LoadTexture("maps/waternormal.png")
TextureBlend normaltex,4
EntityTexture watermesh,watertex,0,0
preparations(watermesh)


While Not ((KeyDown(56) And KeyHit(62)) Or (KeyHit(56) And KeyDown(62)) Or KeyHit(1))
timer3=MilliSecs()

GrimMagicWater(watermesh)


UpdateWorld
RenderWorld
control(0.5,1.4)
Flip 0
Wend
End

Function GrimMagicWater(meshid)
PointEntity light,camera
PositionEntity light,225*Sin(MilliSecs()/30),15,225*Cos(MilliSecs()/30)
PositionEntity watermesh,EntityX(camera,1),0,EntityZ(camera,1)
RotateEntity watermesh,0,EntityYaw(camera,1)-45,0
If EntityY(camera,1)<1 Then PositionEntity camera,EntityX(camera,1),1,EntityZ(camera,1),1
ScaleTexture watertex,1+Sin(MilliSecs()/100)/10,1+Cos(MilliSecs()/50)/10



waveheight#=8
horizwave#=6
Noiseamplitude#=0.2
wavelength#=10 ; ìåíüøåå çíà÷åíèå îçíà÷àåò áîëüøóþ äëèíó
wavehorizlength#=35
speed#=1
time#=MilliSecs()*speed

mesh=meshid
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
;òåïåðü ìàãèÿ
For i=0 To qvert-1
x000#=plane#(i,0)
y000#=plane#(i,2)
z000#=0
TFormPoint x000,z000,y000,mesh,0
x00#=TFormedX()
y00#=TFormedZ()

z01#=waveheight*Cos(time/wavelength+x00*wavelength/3)+horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)+Noiseamplitude*Sin(noise#(i)+time/4)
x01#=x00-waveheight*Cos(time/wavelength+x00*wavelength/3)+Noiseamplitude*Cos(noise#(i)+time/4)
y01#=y00-horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)+Noiseamplitude*Sin(noise#(i)+time/4)
TFormPoint x01,z01,y01,0,mesh
VertexCoords meshsurf,i,TFormedX(),TFormedY(),TFormedZ()
VertexTexCoords meshsurf,i,x00/25,y00/25

Next
UpdateNormals mesh

For i=1 To CountChildren(dsd)
child=GetChild(dsd,i)

x00=cubedata#(i-1,0)
y00=cubedata#(i-1,1)
z01#=waveheight*Cos(time/wavelength+x00*wavelength/3)+horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)+Noiseamplitude*Sin(noise#(i)+time/4)
x01#=x00-waveheight*Cos(time/wavelength+x00*wavelength/3)+Noiseamplitude*Cos(noise#(i)+time/4)
y01#=y00-horizwave*Sin(time/wavehorizlength#+y00*wavelength/5)+Noiseamplitude*Sin(noise#(i)+time/4)
PositionEntity child,x01,z01,y01,1
Next
End Function

Function preparations(meshid)
mesh=meshid
meshsurf=GetSurface(mesh,1)
qvert=CountVertices(meshsurf)
Dim plane#(qvert,3)
Dim noise#(qvert)
For i=0 To qvert-1
plane#(i,0)=VertexX(meshsurf,i) ;x
plane#(i,1)=VertexY(meshsurf,i) ;x
plane#(i,2)=VertexZ(meshsurf,i) ;x
noise#(i)=Rnd(0,359.99)
Next
End Function

Function control(speed#,mousesensitivity#)
If KeyDown(2) WireFrame True Else WireFrame False
mxs#=mxs#+(MouseXSpeed()/5.0)
mys#=mys#+(MouseYSpeed()/5.0)
RotateEntity camera,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
If KeyDown(17) Or KeyDown(200) MoveEntity camera,0,0,speed#
If KeyDown(31) Or KeyDown(208) MoveEntity camera,0,0,-speed#
If KeyDown(30) Or KeyDown(203) MoveEntity camera,-speed#,0,0
If KeyDown(32) Or KeyDown(205) MoveEntity camera,speed#,0,0
PositionEntity pivot,EntityX#(camera,1),EntityY#(camera,1),Entity Z#(camera,1)
PositionEntity camera,0,0,0


Text 100,10,"polygons in view "+TrisRendered()
If (MilliSecs()-timer3)<>0 Text 100,40,"Frames per second is: "+1000/(MilliSecs()-timer3)
End Function

tormoz 27.06.2011 21:15

Ответ: Имитация водной поверхности.
 
если не видел - посотри это

http://tv-kom.com/water_AMT_full.rar

dsd 27.06.2011 21:23

Ответ: Имитация водной поверхности.
 
На встроенном в 945 чипсет не работает. Запускает, но не рисует. А большой брат недобука мертв :)

dsd 27.06.2011 22:43

Ответ: Имитация водной поверхности.
 
Вывел коэффициенты в название функций, теперь их тоже можно регулировать функциями. Долой однообразные волны :D

В принципе осталось только приделать частицы, чтобы точки с 95% от максимальной высоты плевались брызгами, найти хорошие текстуры и в принципе вода как в первых корсарах готова, можно еще и отражение наложить, это не тяжелый процесс. Но в общем вроде финиш, на воду пусть и не похоже, но на большую лужу жидкости в ветер определенно.

NitE 27.06.2011 22:56

Ответ: Имитация водной поверхности.
 
http://www.frecle.net/misc/Water.zip

dsd 27.06.2011 23:27

Ответ: Имитация водной поверхности.
 
Nite, ссылка не работает.

По моему я между делом, почти написал свой террэйн :).

moka 27.06.2011 23:30

Ответ: Имитация водной поверхности.
 
Работает.
dsd - изобретает давно изобретённые велосипеды..

dsd 27.06.2011 23:42

Ответ: Имитация водной поверхности.
 
Не работает у меня и все.

И шо? Может я люблю велосипеды :D Особенно старинные :D

moka 27.06.2011 23:50

Ответ: Имитация водной поверхности.
 
Вложений: 1
Цитата:

Сообщение от dsd (Сообщение 193352)
Не работает у меня и все.

Я залил сюда, смотри в аттаче.

Цитата:

Сообщение от dsd (Сообщение 193352)
И шо? Может я люблю велосипеды :D Особенно старинные :D

Ничего плохого. В этом есть много положительного - ты изучишь базовую работу с интересными идеями на основе FFP. Когда пожелаешь большего и будет мало пространства и производительности (например realtime тени, или там крутая рефракция, или может рефлекция, потом ещё чё покруче, например SSAO, или Screen Space Reflection, Bloom, Exposure, HDR, и другие вкусненькие плюшки), то добро пожаловать в шейдеры.

L.D.M.T. 27.06.2011 23:54

Ответ: Имитация водной поверхности.
 
теперь осталось дело за малым - написать к этой воде альфа-сортировку ;-)

dsd 28.06.2011 00:15

Ответ: Имитация водной поверхности.
 
По моему моя вода интерактивней, что ли. Видимо все решили что я хотел сделать воду похожей на воду чисто визуально, отнюдь :D. Но с водой я на ближайшее время закончил :) Терь хочу сделать то ли лес полигонов на 10к то ли облака в несколько слоев на 3к полигонов :)

dsd 28.06.2011 13:51

Ответ: Имитация водной поверхности.
 
Что такое шэйдеры(я так понимаю нечто похожее на то, что я делал с водной поверхностью, только универсальней и удобней)? Правильно ли я понимаю, что хорс от блитца отличается ими, а по манипуляциям с геометрией и логикой нет?

St_AnGer 28.06.2011 14:03

Ответ: Имитация водной поверхности.
 
Что такое шейдер

главное различие между Xors3d и Blitz3d: первый - dx9, второй - dx7. Как то так. Ксорс шустрее работает, но (из личного опыта) на слабых машинах Блицевый директ7 работает быстрее чем Ксорсовый директ9 (например на нэтбуке, столкнулся с дикими тормозами при переписывании своих танчиков на ксорс. А на чистом блице всё отлично летает).

зыЖ Водичка красивая :super:

dsd 28.06.2011 14:11

Ответ: Имитация водной поверхности.
 
Я понимаю, что шэйдер это 9 директикс, но меня больше интересует смысловая нагрузка вкладываемая в этот термин. (причем в словах понятных даже обезьяне) А насчет производительности на нетбуках, мне как то фиолетово, я пока трезво оцениваю свой уровень, и его на большее чем шарик прыгающий по платформам не хватает на данный момент, а такого гэ сейчас больше, чем порнографии :D

moka 28.06.2011 14:11

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от dsd (Сообщение 193448)
Что такое шэйдеры(я так понимаю нечто похожее на то, что я делал с водной поверхностью, только универсальней и удобней)? Правильно ли я понимаю, что хорс от блитца отличается ими, а по манипуляциям с геометрией и логикой нет?

Синтаксис и логика, почти одна и та же, есть небольшие отличия. Но перейти с Bltiz3D на Xors3D, обычно не составляет никаких проблем.
Не только шейдеры, также там есть много других фичей, как встроенные тени, своя физика, и многое другое..

dsd 28.06.2011 14:16

Ответ: Имитация водной поверхности.
 
Вот физика и тени, мне как инженеру пгс прям таким непреодолимым препятствием не кажутся. Я по сути ими на начерталке и (сопрамате, термехе, строймехе и др гэ) занимался фактически профессионально. Что такое шэйдер?

Gector 28.06.2011 14:21

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от dsd (Сообщение 193456)
Вот физика и тени, мне как инженеру пгс прям таким непреодолимым препятствием не кажутся. Я по сути ими на начерталке и (сопрамате, термехе, строймехе и др гэ) занимался фактически профессионально. Что такое шэйдер?

Это тоже что делаешь ты только оно обрабатывается видеокартой). Если коротко.
+ Есть разновидности. Вершинные(Как у тебя) и Пиксельные.
Жду лес и террейн)

dsd 28.06.2011 14:25

Ответ: Имитация водной поверхности.
 
Т.е. С учетом производительности нормальной видеокарты я могу на кадр делать несколько милионов таких операций O_o?

dsd 28.06.2011 14:33

Ответ: Имитация водной поверхности.
 
Террэйн теже уравнения зависимые от x и у, либо от data(не в смысле времени). Лес сложней, ибо я хочу деревца как тестдрайве замутить. Причем сплайнами я это дело почти сделал, а с моими самописными квадами, можно на дерево 1000 листиков приклеить, основная проблема это выбирать деревья для детализации и расположения листиков, ничего умнее чем создать в 3дмаксе массив точек служащих координатой для каждого листа пока вообразить не смог :)

moka 28.06.2011 15:04

Ответ: Имитация водной поверхности.
 
Шейдерный процессор, специально создан инженерами, чтобы обрабатывать огромный поток данных, однообразными математическими операциями. Например вода - тебе нада двигать пиксели, так вот в шейдере, ты можешь реализовать вычисления для каждого пикселя, при этом это будет на уровне GPU, и очень шустро, тысячи вершин за мелкие наносекунды.
То что делаешь сейчас ты, осуществляется процессором - а это гонения инфы из ОЗУ, через бус в процессор, затем обратно, и затем с ОЗУ на ГПУ. В Шейдерах, вс делается сразу на ГПУ, и вычисляется шейдерным процессором, что очень шустро.
В пиксельном шейдере, ты можешь делать что угодно с каждым пикселем на экране, также с огромной скоростью. Так например можно сделать крутое отражение и рефракцию, с красивым эффектом и переходом используя FallOff. Что добавит объёма и физики отражения волнам.
Также, многие эффекты волн, можно симулировать используя нормал карты, большие волны - геометрия, а мелкие и рябь - нормал карты. В общем, дерзай ;)

Mr_F_ 28.06.2011 16:48

Ответ: Имитация водной поверхности.
 
Цитата:

Вот физика и тени, мне как инженеру пгс прям таким непреодолимым препятствием не кажутся. Я по сути ими на начерталке и (сопрамате, термехе, строймехе и др гэ) занимался фактически профессионально. Что такое шэйдер?
одни инженерные и математические познания не позволят тебе писать эффективные программы. следует понимать как работает оборудование хотя бы в общих чертах и стараться использовать его для выжима наибольшей производительности. построение тени по законам начерталки тебе никак не поможет в реалтайме.
в общем, МоКа всё правильно написал.

SBJoker 28.06.2011 17:57

Ответ: Имитация водной поверхности.
 
Простыми словами шейдер это программа для видеокарты. Можно в некотором роде считать что ты программируешь видеокарту, как ей рисовать твою сцену.

dsd 28.06.2011 18:50

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от Mr_F_ (Сообщение 193497)
одни инженерные и математические познания не позволят тебе писать эффективные программы. следует понимать как работает оборудование хотя бы в общих чертах и стараться использовать его для выжима наибольшей производительности.

О, эти слова ранили меня в самое сердце.

Цитата:

Сообщение от Mr_F_ (Сообщение 193497)
построение тени по законам начерталки тебе никак не поможет в реалтайме.
в общем, МоКа всё правильно написал.

Мои препод по начерталке выцарапал бы ответ циркулем на внутренней поверхности вашего черепа, милорд. У начерталки нет законов, есть приемы :) Это не наука. Это как каллиграфия, что ли.
Mr_F_, поверьте причины сподвигшие меня на эксперименты с блитз не совсем тривиальны :) И да, программист тоже инженер:)

moka 28.06.2011 18:59

Ответ: Имитация водной поверхности.
 
dsd
Начерталка - это одно дело, но инженерия в плане программного обеспечения - другое. Наличие хорошего мозга - это не заслуга начерталки.
Я тоже занимался архитектурингом, полтора года отработал ассистентом, под конец всё сам делал. И считал тоже (инженерия) конструкции. Круто конечно, развивает некоторые аспекты логики и способности, что влияют на общую степень образованости и прогрессивности в мышлении, но не имеет ничего общего с програмным обеспечением.
Тут с тенями например, тоже смекалка. И тени в next-gen - это не геометрия вовсе, там всё совсем иначе, например Shadow Maps - вообще никакой связи с геометрией, там чисто смекалка..

h1dd3n 28.06.2011 19:03

Ответ: Имитация водной поверхности.
 
Никто не спорит что ты взяв циркуль (или че там надо (не обучен начерталке)) построишь тень. Однако в 3д графике используются несколько другие методы (есть даже пара вариантов на блице), ибо нужна высокая производительность.

moka 28.06.2011 19:39

Ответ: Имитация водной поверхности.
 
Да это глупо сравнивать такие вещи, это как художник скажет химику что он может создать любого типа краситель, ведь он работает с цветом!

dsd 28.06.2011 20:01

Ответ: Имитация водной поверхности.
 
Нашел приличную текстуру воды и прилепил велосипед. Теперь похоже на воду:tongue:

moka 28.06.2011 20:39

Ответ: Имитация водной поверхности.
 
Давно писал на шейдерах, когда только начинал это дельце изучать.
Более реалистично и с красивенькими рефлекциями и рефракциями.
Основной "прикол" в том что тут не юзается никакая деформация геометрии. Волны да, для озёрной воды, или мелких источников, не для океана или моря. Но и это дело можно сделать, нада тупо посидеть..




Более ранние потуги:


dsd 28.06.2011 21:22

Ответ: Имитация водной поверхности.
 
Если ввести переменную связанную с глубиной, т.е. Фактически высота воды — высота террэйна в данной точке, и найти ближайшую точку пересечения плоскости воды с террэйном(для изменения направления распространения волны), то можно организовать практически правильный прибой(изменение волн по мере приближения к берегу). Надо найти таки математическую модель воды :) походу довольно легко можно организовать интересную в игровом плане воду.

moka 28.06.2011 22:13

Ответ: Имитация водной поверхности.
 
Цитата:

Сообщение от dsd (Сообщение 193531)
Если ввести переменную связанную с глубиной, т.е. Фактически высота воды — высота террэйна в данной точке, и найти ближайшую точку пересечения плоскости воды с террэйном(для изменения направления распространения волны), то можно организовать практически правильный прибой(изменение волн по мере приближения к берегу). Надо найти таки математическую модель воды :) походу довольно легко можно организовать интересную в игровом плане воду.

Прибои и т.п. реализуются очень просто исходя из шейдеров. Представь у тебя есть сетка воды, и есть уровень. Один раз в начале анализируешь уровень (с ландшафтом просто, сложнее с другой медией), находишь вершины где должны быть прибои и т.п. это может быть динамичный параметр, и записываешь его в вершину. С нормальными движками, в таком случае заюзать нужно кастомный класс вершин, но в том же Xors3D можно заюзать один из каналов цвета вершины.
Это делается один раз лишь, можно даже сделать предрасчётом в редакторе, и сохранить в файл, и грузить из файла инфу, чтобы не делать большие расчёты при загрузке игры.
Далее, всё очень просто, в вершинном шейдере делаем все расчёты волн, плюс учитывая один из каналов цвета у вершины который мы сохранили, мы знаем где прибой, и таким образом можно сделать при повышении волны в том месте, повышать на 50% выше. Плюс - это как маска для пены.
Всё просто на деле, но нужно найти смекалку, сделать маленькое исследование и затем тупо реализовать. Многим это проблематично, т.к. они не могут найти решения до реализации, и начинают много эксперементировать..

Также, используя depth карту, можно реализовать плавный переход воды:

dsd 28.06.2011 23:33

Ответ: Имитация водной поверхности.
 
А как в хорсе кол-во точек в сюрфэйсе посчитать? О_о Вроде команда есть, но в справке её вроде нет.

Mr_F_ 28.06.2011 23:41

Ответ: Имитация водной поверхности.
 
так же, как и в блице.
наскоко я помню ещё в блице сюрфейсы по непонятной причине начинались с 1, а в ксорсе, как положено, с 0.

dsd 28.06.2011 23:48

Ответ: Имитация водной поверхности.
 
Хм, короче надо экспериментировать с начала, пока выяснил, что в хорсе поверхности начинаются с 0, а не 1 как в блитце. Вот не люблю я этого, чилды с единички, а вертексы с нуля :)

Это не единственное отличие судя по мавам моей воды, не получилось на прямую портануть воду добавкой x :-D

Mr_F_ 28.06.2011 23:53

Ответ: Имитация водной поверхности.
 
Цитата:

чилды с единички
такого нет ни в блице, ни в ксорсе

dsd 29.06.2011 00:00

Ответ: Имитация водной поверхности.
 
Ну значит пригючилось мне, но по моему чилды имеют номера с 1, а не с 0.

tormoz 29.06.2011 00:02

Ответ: Имитация водной поверхности.
 
Вложений: 1
Вложение 14243

http://tv-kom.com/tehdemo.rar

dsd 29.06.2011 00:11

Ответ: Имитация водной поверхности.
 
Как вертикальную синхронизацию убить в хорсе? Хочу полную скорость, а то так не понятно лучше хуже мои 3д извращения. Или проще таймеры ставить и мерять по функциям?

Mr_F_ 29.06.2011 00:17

Ответ: Имитация водной поверхности.
 
xGraphics3D(width, height, depth = 16, mode = 0, vsync = 0)

последний параметр это она

dsd 29.06.2011 00:44

Ответ: Имитация водной поверхности.
 
Глупый вопрос, а где скан коды клавиш? Они вроде отличаются от блитцевских.

Mr_F_ 29.06.2011 00:49

Ответ: Имитация водной поверхности.
 
нене, не отличаются.

dsd 29.06.2011 00:54

Ответ: Имитация водной поверхности.
 
А вот это написание xKeyHit(KEY_ESCAPE) Где взять можно, нравица оно мне


Часовой пояс GMT +4, время: 08:08.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot